Przydzielenie zarówno serwerowi, jak i klientowi restrykcyjnego INPUT
i otwartego OUTPUT
, tj .:
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
Oraz z rozszerzeń iptables (8) na przykładzie FTP w trybie aktywnym:
1. NOWOŚĆ
NOWOŚĆ Pakiet nawiązał nowe połączenie lub w inny sposób jest powiązany z połączeniem, które nie widziało pakietów w obu kierunkach.
Klient na porcie 50000
(dowolny losowy nieuprzywilejowany port) łączy się z serwerem FTP na porcie 21
, serwer potrzebowałby przynajmniej tego, aby zaakceptować to połączenie przychodzące:
iptables -A INPUT --dport 21 -m state --state NEW -j ACCEPT
2. USTANOWIONE
USTANOWIONY Pakiet jest powiązany z połączeniem, które widziało pakiety w obu kierunkach.
Teraz po stronie klienta, otworzył połączenie wychodzące do serwera na porcie 21
przy użyciu portu lokalnego 50000
i potrzebuje następujące iptables, aby umożliwić reakcję przybyć od server (21)
do client (50000)
:
sudo iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
3. POWIĄZANE
POWIĄZANE Pakiet rozpoczyna nowe połączenie, ale jest powiązany z istniejącym połączeniem, takim jak transfer danych FTP lub błąd ICMP.
Teraz po ustanowieniu połączenia FTP i zbliżeniu się połączenia danych, klient otworzy gniazdo serwera (tak, przy aktywnym kliencie FTP staje się serwerem połączenia danych) na porcie 60000
(według mojego zrozumienia klient oznaczy ten port 60000
co RELATED
do drugiego połączenia z 50000->21
) i wyśle ten numer portu do serwera za pomocą PORT
polecenia FTP . Następnie serwer FTP otworzy nowe połączenie ze swojego portu 20
do portu 60000
na kliencie, i cóż, klient wymaga teraz następujących elementów, aby zezwolić na to nowe połączenie:
sudo iptables -A INPUT -m state --state RELATED -j ACCEPT
Na koniec, aby to zadziałało, musisz włączyć ip_conntrack_ftp
moduł jądra, aby system mógł oznaczać połączenia / pakiety jako RELATED
(to rozumiem, nie kopałem zbyt wiele na tym):
modprobe ip_conntrack_ftp