Я пытаюсь реализовать набор правил с использованием iptables, который по умолчанию блокирует входящий трафик с заданным dport
, но разрешает входящий трафик, если исходный IP или MAC-адрес находится в определенном белом списке.
Пока мне известно только о возможности применить глобальную политику DROP
к цепочке ( INPUT
/ OUTPUT
и т. Д.), но я не уверен, как применять такую политику к входящим соединениям только на определенном порту.
Судя по вашему описанию, это довольно простая проблема в iptables. Я бы подошел к этому в три этапа.
Добавьте новую цепочку для своей политики:
iptables -N MYCHAIN
Определите список портов в цепочке INPUT для порта назначения, который вы хотите обработать:
iptables -A INPUT -p <protocol, either tcp or udp> -m <again, protocol, match the '-p' switch value> --dport <portnum> -j MYCHAIN
Это определяет конкретные порты, а затем «переходит» к правила для именованной цепочки (в данном случае MYCHAIN).
Теперь настройте правила в MYCHAIN, чтобы разрешить / запретить трафик на описанные порты.
iptables -A MYCHAIN -s <source_IP> -j ACCEPT
iptables -A MYCHAIN -s <other_source_IP> -j ACCEPT
iptables -A MYCHAIN -J DROP
В последнем правиле вы, конечно, можете использовать REJECT вместо DROP. Руководство пользователя ( man iptables
) должно показать вам дополнительные параметры, которые вы можете использовать для регистрации или ограничения трафика, который вы видите. Есть также несколько онлайн-руководств по более сложным правилам.
Установите политику по умолчанию. Пакеты, соответствующие ни одному из приведенных ниже правил, по умолчанию отбрасываются:
iptables -P INPUT DROP
Создать настраиваемую цепочку. Мы собираемся передать пакеты, удовлетворяющие заданным условиям (например, с адресом источника 10.0.0.1), в эту цепочку:
iptables -N CUSTOM
Принять соединения, которые уже установлены, и принять соединения на интерфейсе обратной связи:
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
Передать новые соединения TCP из 10.0. 0.1 (поступает на интерфейс eth0) в цепочку CUSTOM:
iptables -s 10.0.0.1 -i eth0 -p tcp -m conntrack --ctstate NEW -j CUSTOM
Добавить правила в пользовательскую цепочку, которые принимают определенные порты:
iptables -A CUSTOM -p tcp -m multiport --dports 22,80 -j ACCEPT