iptables: a VPN-kliensek csak egy gazdagépet érjenek el
A keresett szabály a FORWARD-ban van, nem az INPUT-ban. Engedélyezzen egy célpontot a VPN-készletnek, utasítsa el a többit, majd bizonyítsa számlálókkal és visszaállító paranccsal.
Két, egymástól függetlennek tűnő támogatási jegy végül egyetlen okra vezethető vissza. Az elsőben a rendszergazda azt szeretné, hogy a kiszolgáló csak az alagútból fogadjon kapcsolatokat; a másodikban a VPN-felhasználóknak egyetlen belső gazdagépet kellene elérniük, semmi mást. Mindkét szabály a FORWARD-ba tartozik, és mindkettőt rendszerint az INPUT-ban próbálják meg. Az eredmény tűzfalként néz ki, és helyőrzőként viselkedik.
Melyik lánc válaszol a kérdésére
A csomagokat, amelyeket a VPN-kliens egy LAN-gazdagépnek vagy tovább az internet felé küld, a kernel továbbítja, és a FORWARD-ban értékelődnek ki. Az INPUT és az OUTPUT csak azt a forgalmat látja, amely a kiszolgálón végződik vagy onnan indul. Ezért a tun0-n nem érkező dolgok elutasítása a kiszolgáló saját hallgatóit védi, és az SSH-munkamenetét is lezárja, hacsak előbb nem engedélyezi a létrejött folyamokat. Ez semmit nem változtat azon, hová mehetnek a kliensek.
Először nevezze meg a kérdést: ki érheti el a kiszolgálót, vagy hová mehetnek a kliensek. A legtöbb hálózatnak mindkét válaszra szüksége van, különböző láncokban.
Először az állapot, aztán az engedély, aztán az elutasítás
Egy engedélyezési lista csak akkor működik, ha a konkrét engedély az általános elutasítás fölött van, és ha a visszatérő forgalom mindkettő fölött engedélyezett. Helyezze a szabályokat kifejezett pozíciókra, majd listázza ki a láncot a iptables -S FORWARD paranccsal, hogy a sorrend látható legyen, ne pedig feltételezett.
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 REJECTKét részlet dönti el, hogy ez kiállja-e a valódi forgalommal való találkozást. Az állapotszabály nélkül az épp engedélyezett kapcsolatokra érkező válaszok maguk is az elutasítás ellen értékelődnek, és eldobódnak. A korlátlan LOG-szabály az első vizsgálatkor megtölthet egy kis partíciót, ezért adjon hozzá -m limit --limit 10/min-t, mielőtt folytatja a naplózást. A REJECT azonnal hibát ad vissza, ami barátságosabb a lista hangolása közben; a DROP csendben eldob, ezért minden hiba időtúllépésként jelenik meg. Válasszon egyet szándékosan, és írja le a döntést a változásjegyzőkönyvbe.
A továbbításnak és a NAT-nak már működnie kell
A szűrés nem tudja bizonyítani, hogy létezik útvonal. Először erősítse meg, hogy a kernel egyáltalán továbbít, és tegye ezt a beállítást állandóvá, ne egyszeri shell-paranccsá. A szűrő az utolsó réteg, nem az első.
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -s "$POOL" -o eth0 -j MASQUERADEAz, hogy hová kerül a maszkolás, attól függ, hol lépnek ki a kliensek. Ha az alagúton át egy távoli hálózat felé mennek, a NAT-szabály arra az interfészre kerül, nem a WAN-interfészre. Utána figyelje a számlálókat: ha a POSTROUTING-számláló soha nem mozdul, miközben a FORWARD-engedélyek száma nő, a visszaút törött, a szűrő pedig rendben van. Ez az olvasat egy délutányt spórol meg olyan szabályok újraírásán, amelyek soha nem voltak a probléma.
A levélblokk egy lánccal arrébb tartozik
A 25-es port blokkolása az INPUT-ban csak a VPN-kiszolgálónak címzett levelet állítja meg. Az alagúton levelet küldő, kompromittált kliens továbbítódik, ezért a blokknak a FORWARD-ban kell ülnie a 465 és a 587 mellett. Ha egy alkalmazás jogszerűen továbbít levelet, helyezze a célját és a portját e szabály fölé.
iptables -I FORWARD 2 -s "$POOL" -p tcp -m multiport --dports 25,465,587 -j REJECTHagyja egy hétig futni az elutasítási számlálót, mielőtt bármi mást szigorítana. Az a szám, amely megáll a növekedésben, az az éppen elrontott jogszerű folyam.
Olvassa vissza, majd bizonyítsa egy kliensről
A szabálykészletet úgy olvassa, ahogy a kernel jelenti, nem úgy, ahogy a szkriptje megírta. Kezdjen a iptables -S FORWARD paranccsal, aztán a NAT-tábla a iptables -t nat -L POSTROUTING -n -v paranccsal, aztán a vizsgált folyam conntrack-bejegyzése. Tartson készen egy visszaállító parancsot vagy ütemezett ürítést, ameddig a munka tart. Minden hívásnak kell -w, különben két rendszergazda ütközik az xtables zárján. Ebből semmi nem választható egy változási ablakban.
Fejezze be úgy, hogy a készleten belüli és azon kívüli kliensről is tesztel. Az a szabály, amely csak arról a gépről működik, amelyen beírta, nem szabályzat.