Другие ответы используют iptables -I
в своих примерах, что часто не то, что вы должны использовать.
iptables выполнит первое соответствующее правило, поэтому порядок правил очень важен. -I
является командой «insert» и должна использоваться с параметром index, чтобы указать, где в списке принадлежит данное правило. -A
это команда "добавить", которая добавит правило в конец списка.
В некоторых дистрибутивах (возможно, во всех) использование -I
без параметра индекса добавит правило в индекс один, сделав его первым проверенным правилом. В этом сценарии, если последняя команда, которую вы запускаете, - это, iptables -I INPUT -s tcp 0.0.0.0/0 -j DROP
то iptables отбросит весь трафик, независимо от того, есть ли у вас какие-либо ACCEPT
правила позже в цепочке.
Вот пример настройки правила, которое разрешает SSH только с одного IP:
Начиная без правил:
#> 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
Добавьте новое правило «разрешить SSH из 1.2.3.4»:
#>iptables -A INPUT -p tcp -s 1.2.3.4 --dport 22 -j ACCEPT
Заблокируйте SSH со всех других IP-адресов:
#>iptables -A INPUT -p tcp -s 0.0.0.0/0 --dport 22 -j DROP
Теперь ваша цепочка INPUT будет выглядеть так:
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
Позже, если вам нужно добавить в белый список второй IP-адрес, вы можете использовать этот -I
параметр, чтобы поместить его перед правилом черного списка.
#>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
Обратите внимание, что при использовании -I INPUT 2
добавлено новое правило в качестве правила № 2 и увеличено правило DROP до номера 3.
iptables
поддерживает инверсию с оператором bang на тот случай, если вы хотите выполнить таргетингDROP
. Пример:iptables -I INPUT -p tcp ! -s <permittedIP> -j DROP