iptables хостунда VPN гана: tun түзмөгүн атаңыз, tun+ эмес
tun+ машинадагы ар бир туннелге дал келет. Бир түзмөк атын бекемдеп, endpoint өзгөчөлүгүн биринчи кой жана саясатты сынап жатканда калыбына келтирүү жолун сакта.
-o tun+ деп жазуу так нускамадай көрүнөт, чындыгында бул ядронун бардык туннелдерине туура келүүчү алмаштыргыч белги. Экинчи VPN кардары, контейнер көпүрөсү же кулаган сессиядан калган интерфейс — баары аны канааттандырат, анан хост саясаттын алдын алууга арналган трафигине жол берет. Төмөнкү тартип бир түзмөк атын бекемдейт, туннель чындап түзүлүшү үчүн өзгөчөлүктөрдү иреттейт жана эрежелер жаман түшсө, кайра кайтуу жолун калтырат. Ар бир кадам өзүнчө кайтарыла тургандай кыска.
1-кадам: азыркы эрежелерди жазып ал
Демейки саясатты өзгөртүүдөн мурун учурдагы абалды сакта, ошондо кайтаруу эстелик эмес, буйрук болот. iptables-save > /root/iptables.pre ар бир таблицаны калыбына келтирсе боло турган файлга жазат, ал эми root сессиясы ачык экинчи терминал — орнотууга даярданып жаткан саясат аны ташыган байланышты үзгөндө, бул ашыкча сактык эмес. Эгер алыстан иштесең, flush дагы өзгөчө өчүргүч катары пландаштыр.
Анан интерфейстерди тизмеле, анткени божомолдогон атың — окууга тийиш болгон ат: ip -br link азыр эмне бар экенин көрсөтөт, ал эми туннель көтөрүлмөйүнчө көрүнбөйт. Окуган сайын түзмөктөрдүн аттарын жазып отур.
2-кадам: туннелге өз атын бер
OpenVPN кардар конфигурациясында dev tun_work кабыл алат, анан Linux tun0 бөлүштүрүүнүн ордуна дал ошол ат менен интерфейс түзөт. Башка эч нерсе ага талап кылбаса, ат кайра туташуулардын арасында туруктуу бойдон калат, жана түзмөктү атаган эрежени маанилүү кылган да ушул.
Атты көзөмөлдөө мүмкүн болбогон жерде туннелдин дарегине же пакет белгисине дал келтир. Экөө тең иштейт, экөөнү тең окуу кыйын, жана туннель кайра номурленгенде экөө тең үнсүзүрөөк ишке ашпайт. Кандай болбосун, бир нерсеге дал келтир жана кайсы экенин анык айт.
3-кадам: саясатты endpoint өзгөчөлүгү менен биринчи жаз
VPN гана менен иштеген хост — кыска өзгөчөлүктөр тизмеси бар демейки тыюу хосту, ал эми эң маанилүү өзгөчөлүк туннелдин жашоосуна жол берген эреже. Аны ушул тартипте куруп чык, endpoint эрежеси туннель түзмөгүнүн эрежесинен мурун болсун, ошондо кол алышууга бара турган жер болот:
# allow the tunnel to be built, then everything the tunnel carries
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -d 198.51.100.7 -p udp --dport 1194 -j ACCEPT
iptables -A OUTPUT -o tun_work -j ACCEPT
iptables -A INPUT -i tun_work -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPTEndpointтин сөзмө-сөз дареги жана порту бул баракка эмес, сенин провайдериңе таандык. Эгер endpoint хосттун аты болсо, аны бир жолу чечип, жыйынтыгын бекемде, анткени эреже атты издебестен, ал эми айланма жооп кийинки DNS өзгөрүүсүнөн кийин саясатты үнсүз бузат. Портту да текшер, анткени сени TCP 443кө которгон провайдерлер болбосо эч ким жазбаган эрежени талап кылат. Бир гана протоколдо иштеген туннель адатта ушул кемчилик, ал эми өрт дубалынын бузулушу эмес.
Маршрутизатордо ушул эле форма анын артындагы кардарлар үчүн FORWARD тизмегине түшөт, ал эми маршрутизатордун өз трафигине өз эрежелери керек. Тек өткөрүлгөн пакеттерди камтыган эрежелер жыйындысы SSH менен DNSти эски жолдо калтырат, жана туннель көтөрүлгөн учурда маршрутизатордун жеткиликсиз болушу ушундан.
4-кадам: бардыгын эмес, иретин текшер
Эрежелер ирети менен бааланат, ошондуктан эртерээк келген ACCEPT кийинчерээк кошкон REJECTти жөн гана жашырат. established жана related дал келүүсү — өз чыгуучу сурамдарыңа жооптордун жалпы кирүү жолун ачпастан кайтышына жол берүүчү нерсе, ал эми аны туннелди кабыл алуудан кийин коюу кулаган туннель өз интерфейсинде кайтарым трафикти дагы өткөрөөрүн билдирет.
Эрежелердин санын бир экранда окула тургандай аз карма. Аудит кыла албаган эрежелер жыйындысы — үстүнө өзгөчөлүктөрдү кошуп жамай турган жыйынды, жана демейки тыюу саясаттары ушинтип акырындап демейки уруксаттын четине ээ болот. Өзгөртүүгө чейин жана кийин ACCEPTтерди сана.
5-кадам: аны жүктөөдөн жана даректер үй-бүлөсүнөн өткөр
Кол менен киргизилген эрежелер кайра жүктөөдө жоголот, ошондуктан аларды дистрибутивдин өрт дубалы кызматынан же туннель интерфейси пайда болгондон кийин иштеген unitтен жүктө. OpenVPN башталганга чейин иштеген скриптте tun_work атын эске салуу жасоо — кулаган трафиктин жүктөө циклинин кеңири тараган жолу.
Анан IPv6ны өзүнчө текшер, анткени IPv4 үчүн жакшы демейки тыюу саясаты экинчи үй-бүлө жөнүндө эч нерсе айтпайт. ip -6 route хостто тек IPv4тү тейлеген туннелди айланып өтө турган маршрут бар-жогун айтат, ал эми ip6tables же nftables өз эквиваленттик эрежелерин талап кылат. Эрежелер жыйындысынын симметриясына ишенүүнүн ордуна IPv6-only бутасы менен сына.
6-кадам: текшер жана калыбына келтирүүгө даяр бол
Туннелди көтөр, көздөгөн кызмат иштеп жатканын ыраста, анан саясат баш тартышы керек болгон нерсени сынап көр. Жооп сени таң калтырса, iptables-restore < /root/iptables.pre менен калыбына келтир, жана ошондон кийин гана эрежелерди оңдой башта. Туруктуулук жана сыналган калыбына келтирүү жолу — муну эки жолу жасаса боло турган өзгөртүүгө айландырган нерсе.