Інші відповіді використовують iptables -I
у своїх прикладах, що часто не є тим, що вам слід використовувати.
iptables виконає перше правило, яке відповідає, тому порядок правил дуже важливий. -I
є командою "вставити", і її слід використовувати з параметром індексу, щоб вказати, де в списку належить дане правило. -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
підтримує інверсію з оператором нахилу, якщо ви хочете зробити цілеспрямованийDROP
. Приклад:iptables -I INPUT -p tcp ! -s <permittedIP> -j DROP