добавление правила в iptables означает, что оно вступает в силу немедленно?

Я запустил sudo iptables -A INPUT -p tcp -m tcp --dport 2222 -j ACCEPT в bash, а затем попытался подключиться к этой машине через другую машину в той же локальной сети / подсети через порт 2222 с помощью PuTTY, и это не сработало.

Возможно, мне нужно перезапустить iptables после добавления правила, чтобы оно начало действовать? Если да, то как мне это сделать?

Вот вывод iptables -S:

-P INPUT ACCEPT
-P FORWARD DROP
-P OUTPUT ACCEPT
-N DOCKER
-N DOCKER-ISOLATION-STAGE-1
-N DOCKER-ISOLATION-STAGE-2
-N DOCKER-USER
-A INPUT -p tcp -m tcp --dport 2222 -j ACCEPT
-A FORWARD -j DOCKER-USER
-A FORWARD -j DOCKER-ISOLATION-STAGE-1
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A FORWARD -o br-4f5770ea8905 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -o br-4f5770ea8905 -j DOCKER
-A FORWARD -i br-4f5770ea8905 ! -o br-4f5770ea8905 -j ACCEPT
-A FORWARD -i br-4f5770ea8905 -o br-4f5770ea8905 -j ACCEPT
-A DOCKER -d 172.18.0.2/32 ! -i br-4f5770ea8905 -o br-4f5770ea8905 -p tcp -m tcp --dport 3306 -j ACCEPT
-A DOCKER -d 172.18.0.3/32 ! -i br-4f5770ea8905 -o br-4f5770ea8905 -p tcp -m tcp --dport 8080 -j ACCEPT
-A DOCKER -d 172.18.0.3/32 ! -i br-4f5770ea8905 -o br-4f5770ea8905 -p tcp -m tcp --dport 443 -j ACCEPT
-A DOCKER -d 172.18.0.7/32 ! -i br-4f5770ea8905 -o br-4f5770ea8905 -p tcp -m tcp --dport 6379 -j ACCEPT
-A DOCKER -d 172.18.0.8/32 ! -i br-4f5770ea8905 -o br-4f5770ea8905 -p tcp -m tcp --dport 3306 -j ACCEPT
-A DOCKER -d 172.18.0.10/32 ! -i br-4f5770ea8905 -o br-4f5770ea8905 -p tcp -m tcp --dport 3306 -j ACCEPT
-A DOCKER -d 172.18.0.3/32 ! -i br-4f5770ea8905 -o br-4f5770ea8905 -p tcp -m tcp --dport 80 -j ACCEPT
-A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -i br-4f5770ea8905 ! -o br-4f5770ea8905 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -j RETURN
-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -o br-4f5770ea8905 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -j RETURN
-A DOCKER-USER -j RETURN

Вот вывод sudo iptables --line-numbers -L INPUT:

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:2222
2
задан 22 August 2021 в 21:32

1 ответ

Да, добавление правил с помощью команды iptables вступает в силу немедленно.

Предположительно вы хотите добавить правило ACCEPT для порта, потому что вы хотите переопределить правило, которое блокирует все или большинство портов.

Однако вы добавили правило с -A , которое добавит правило в таблицу. Поскольку у вас уже есть правило блокировки (используя что-то вроде DROP или REJECT), новое правило будет добавлено после этого, что сделает его неэффективным.

Если вы хотите, чтобы это работало, вам нужно либо вставить правило (-I #) перед правилом блокировки, либо добавить правило в правильную позицию в файле конфигурации и перезагрузить все правила. (Или используйте что-то вроде ufw или firewalld, чтобы сделать это за вас). Вы можете получить нумерованный список правил с помощью iptables --line-numbers -L INPUT и вставить новое правило в позицию или до позиции правила блокировки.

Если предположение, что у вас есть правило блокировки, неверно, вам нужно вернуться и проверить, открыт ли хоть что-нибудь порт. Вы можете использовать netstat -nl | grep 2222 или ss -nlt | grep 2222 , и если его нет в списке, значит, порт не прослушивает ничего.

Исходя из вывода, который вы добавили в свой вопрос, таблица INPUT в основном пуста (за исключением вашего правила принятия), а -P INPUT ACCEPT говорит о принятии всего, что не соответствует правилам во входной таблице.

6
ответ дан 4 September 2021 в 09:28

Другие вопросы по тегам:

Похожие вопросы: