У меня около 4 IP-адресов, которые случайно попадают в порт в моей сети, который я хотел бы заблокировать. Поэтому я добавил такие правила в свой роутер OpenWRT:
iptables -I INPUT -s FIRST_PUBLIC_IP -p tcp --dport 32400 -j DROP
iptables -I INPUT -s SECOND_PUBLIC_IP -p tcp --dport 32400 -j DROP
iptables -I INPUT -s THIRD_PUBLIC_IP -p tcp --dport 32400 -j DROP
iptables -I INPUT -s FOURTH_PUBLIC_IP -p tcp --dport 32400 -j DROP
Затем у меня также есть это правило, которое записывает в журнал всякий раз, когда есть соединение на этом порту.
iptables -I FORWARD -p tcp --dport 32400 -m limit --limit 1/min -j LOG --log-prefix "PLEX Connection "
Итак, я думал, что произойдет следующее: если 1 из 4 перечисленных IP-адресов попытается подключиться к этому порту, они просто отключатся и никогда не попадут в прямую цепочку. Все остальное вызовет это правило ведения журнала.
Однако эти IP-адреса по-прежнему регистрируются с помощью правила FORWARD. Они сейчас живы и сделали их постоянными при перезагрузке. Что я упустил из виду?
Пакеты, перемещающиеся по таблице FORWARD, не попадают в таблицу INPUT. Итак, если ваши пакеты действительно попадают в таблицу FORWARD, они, вероятно, обрабатываются или что-то подобное - что нормально, но это означает, что вы не можете использовать правила INPUT, чтобы повлиять на них.
В записи Netfilter в Википедии есть отличная справочная диаграмма, которую сложно читать, но она отлично подходит для справки: https://en.wikipedia.org/wiki/Netfilter#/media/File:Netfilter-packet-flow.svg .
Но я подозреваю, что вы немного искажаете пакеты, и поэтому это не сразу очевидно. Подумайте о том, чтобы добавить свои правила - какими бы беспорядочными они ни были - в PreRouting в nat или вместо этого в таблицу FORWARD, и вы увидите изменение поведения.
Удачи, и, если нужно, расширите свой вопрос.