Inne odpowiedzi wykorzystują iptables -I
w swoich przykładach, co często nie jest tym, czego powinieneś użyć.
iptables wykona pierwszą pasującą regułę, więc kolejność reguł jest bardzo ważna. -I
to polecenie „wstaw” i powinno być używane z parametrem indeksu, aby określić, gdzie na liście należy dana reguła. -A
to polecenie „append”, które doda regułę na końcu listy.
W niektórych rozproszeniach (być może wszystkich) użycie -I
bez parametru indeksu doda regułę do indeksu 1, sprawiając, że zostanie sprawdzona pierwsza reguła. W tym scenariuszu, jeśli ostatnim uruchomionym poleceniem jest iptables -I INPUT -s tcp 0.0.0.0/0 -j DROP
iptables, porzuci cały ruch, niezależnie od tego, czy masz jakieś ACCEPT
reguły w dalszej części łańcucha.
Oto przykład konfiguracji reguły, która zezwala na SSH tylko z jednego adresu IP:
Zaczynając bez reguł:
#> iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Dodaj nową zasadę „zezwalaj na SSH od 1.2.3.4”:
#>iptables -A INPUT -p tcp -s 1.2.3.4 --dport 22 -j ACCEPT
Blokuj SSH od wszystkich innych adresów IP:
#>iptables -A INPUT -p tcp -s 0.0.0.0/0 --dport 22 -j DROP
Teraz Twój łańcuch INPUT będzie wyglądał następująco:
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 1.2.3.4 0.0.0.0/0 tcp dpt:22
DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
Później, jeśli chcesz dodać do białej listy drugi adres IP, możesz użyć -I
parametru, aby umieścić go przed regułą czarnej listy.
#>iptables -I INPUT 2 -p tcp -s 4.3.2.1 --dport 22 -j ACCEPT
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 1.2.3.4 0.0.0.0/0 tcp dpt:22
ACCEPT tcp -- 4.3.2.1 0.0.0.0/0 tcp dpt:22
DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
Zauważ, że użycie -I INPUT 2
dodało nową regułę jako regułę numer 2 i podbiło regułę DROP do liczby 3.
iptables
obsługuje inwersję z operatorem Bang w przypadku, gdy chcesz zrobić celDROP
. Przykład:iptables -I INPUT -p tcp ! -s <permittedIP> -j DROP