Новые правила iptables влияют только на вновь созданный процесс

Новые правила iptables влияют только на вновь созданный процесс

Есть ли способ обновить правила iptables, чтобы заблокировать соединение без необходимости его перезапуска?

Вот пример поведения, которого я хочу избежать:

On shell#1: I start a ping command 8.8.8.8
On shell#2: I block ping command with iptables rules.
On shell#1: The ping command is still working and I get replies from 8.8.8.8, 
            but if I end the ping command and I restart it, now it will not work.

Я хотел бы узнать, есть ли способ заблокировать команду ping без необходимости ее перезапуска.

решение1

1) То, что вы просите, является самым простым способом для iptablesработы - блокировать весь трафик к месту назначения независимо от статуса соединения, так что существующие соединения будут тайм-аут. Так что в вашем примере

iptables -I OUTPUT -d 8.8.8.8 -j DROP

немедленно заблокирует пакеты UDP (DNS), ICMP (ping) и TCP, достигающие 8.8.8.8. Так что, похоже, это ваш ответ. Если вы получаете описанное вами поведение, опубликуйте командную строку iptables, которую вы используете.

2) Если вы хотите другого поведения, чтобы поддерживать существующие соединения до перезапуска процесса, вы можете:

iptables -I OUTPUT -d 8.8.8.8 -m state --state NEW -j DROP

или

iptables -I OUTPUT -d 8.8.8.8 -p tcp --syn -j REJECT

3) В продвинутом случае, когда вы хотите фактически закрыть установленное TCP-соединение как можно скорее, а не блокировать его и ждать тайм-аута, вы могли бы, возможно, основываться на чем-то -j REJECT --reject-with tcp-resetво входных и выходных цепях или работать tcpkillв течение нескольких секунд. Это сложно, и почти во всех случаях вы хотите разорвать соединение с помощью решения 1).

Связанный контент