iptables: ļaut VPN klientiem sasniegt tikai vienu resursdatoru
Noteikums, kas jums vajadzīgs, ir FORWARD, nevis INPUT. Atļaujiet vienu galamērķi VPN kopai, noraidiet pārējos, pēc tam pierādiet to ar skaitītājiem un atritināšanas komandu.
Divi atbalsta pieteikumi, kas izskatās nesaistīti, galu galā dala vienu iemeslu. Pirmajā administrators vēlas, lai serveris pieņemtu savienojumus tikai no tuneļa; otrajā VPN lietotājiem jāsasniedz viens iekšējais resursdators un nekas vairāk. Abas politikas pieder FORWARD, un abas parasti mēģina INPUT. Rezultāts izskatās kā ugunsmūris un uzvedas kā vietturis.
Kura ķēde atbild uz jūsu jautājumu
Paketes, ko VPN klients sūta uz LAN resursdatoru vai tālāk uz internetu, kodols pārsūta un tās tiek novērtētas FORWARD. INPUT un OUTPUT redz tikai to plūsmu, kas beidzas pašā serverī vai rodas no tā. Tāpēc visa, kas neierodas pa tun0, noraidīšana aizsargā paša servera klausītājus, un tā arī pārtrauks jūsu SSH sesiju, ja vien vispirms netiks atļautas izveidotās plūsmas. Tas neko nemaina attiecībā uz to, kur klientiem atļauts doties.
Vispirms nosauciet jautājumu: kurš drīkst sasniegt serveri, vai kur drīkst doties klienti. Lielākajai daļai tīklu vajadzīgas abas atbildes, dažādās ķēdēs.
Vispirms stāvoklis, tad atļauja, tad noraidījums
Atļauto saraksts darbojas tikai tad, ja konkrētā atļauja atrodas virs vispārējā noraidījuma un ja atgaitas plūsma ir atļauta virs abiem. Ievietojiet noteikumus skaidrās pozīcijās, pēc tam izdrukājiet ķēdi ar iptables -S FORWARD, lai secība būtu redzama, nevis pieņemta.
POOL=10.99.0.0/24
iptables -I FORWARD 1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -I FORWARD 2 -s "$POOL" -d 172.31.20.15 -p tcp -m multiport --dports 443,3389 -j ACCEPT
iptables -I FORWARD 3 -s "$POOL" -j REJECTDivi sīkumi izšķir, vai tas izturēs saskari ar reālu plūsmu. Bez stāvokļa noteikuma atbildes uz tikko atļautajiem savienojumiem pašas tiek novērtētas pret noraidījumu un izmestas. Neierobežots LOG noteikums var aizpildīt mazu nodalījumu jau pirmajā skenēšanas reizē, tāpēc pirms žurnālošanas turpināšanas pievienojiet -m limit --limit 10/min. REJECT nekavējoties atgriež kļūdu, kas ir draudzīgāk, kamēr pielāgojat sarakstu; DROP izmet klusi, tāpēc katra kļūda parādās kā taimauts. Izvēlieties vienu apzināti un ierakstiet izvēli izmaiņu žurnālā.
Pārsūtīšanai un NAT jau jādarbojas
Filtrēšana nevar pierādīt, ka ceļš pastāv. Vispirms pārliecinieties, ka kodols vispār pārsūta, un padariet šo iestatījumu pastāvīgu, nevis vienreizēju čaulas komandu. Filtrs ir pēdējais slānis, nevis pirmais.
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -s "$POOL" -o eth0 -j MASQUERADEKur pieder maskēšana, atkarīgs no tā, kur klienti iziet. Ja viņi iziet caur tuneli uz attālu tīklu, NAT noteikums tiek likts uz šīs saskarnes, nevis uz WAN saskarnes. Pēc tam vērojiet skaitītājus: ja POSTROUTING skaitītājs nekad nekustas, kamēr FORWARD atļauju skaits aug, atgaitas ceļš ir salauzts un filtrs ir kārtībā. Šis nolasījums ietaupa pēcpusdienu, kad nav jāpārraksta noteikumi, kas nekad nav bijuši problēma.
Pasta bloks pieder vienu ķēdi tālāk
Porta 25 bloķēšana INPUT aptur tikai pastu, kas adresēts VPN serverim. Uzlauzts klients, kas sūta pastu caur tuneli, tiek pārsūtīts, tāpēc blokam jāatrodas FORWARD blakus 465 un 587. Ja viena lietojumprogramma likumīgi pārsūta pastu, novietojiet tās galamērķi un portu virs šī noteikuma.
iptables -I FORWARD 2 -s "$POOL" -p tcp -m multiport --dports 25,465,587 -j REJECTĻaujiet noraidījumu skaitītājam darboties nedēļu, pirms kaut ko citu pastiprināt. Skaitlis, kas pārstāj kāpt, ir likumīgā plūsma, ko tikko salauzāt.
Nolasiet to atpakaļ, pēc tam pierādiet no klienta
Lasiet noteikumu kopu tā, kā to ziņo kodols, nevis tā, kā to rakstīja jūsu skripts. Sāciet ar iptables -S FORWARD, tad NAT tabula ar iptables -t nat -L POSTROUTING -n -v, tad pārbaudāmās plūsmas conntrack ieraksts. Kamēr darbs turpinās, turiet pie rokas atritināšanas komandu vai plānotu notīrīšanu. Katram izsaukumam vajag -w, citādi divi administratori sadursies uz xtables slēdzenes. Izmaiņu logā nekas no tā nav izvēles iespēja.
Pabeidziet, testējot no klienta kopas iekšienē un no cita ārpus tās. Noteikums, kas darbojas tikai no mašīnas, kurā to ierakstījāt, nav politika.