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 REJECT

Ké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 MASQUERADE

Az, 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 REJECT

Hagyja 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.

Kapcsolódó cikkek