Вопрос: Невозможно изменить iptables на CentOS


Мой вопрос: как добавить собственное правило iptables для подключения к определенному порту?

Я пытаюсь открыть порт 3500 на моем сервере, но не смог. Я начал с использования этой команды: (From http://wiki.centos.org/HowTos/Network/IPTables)

iptables -A INPUT -p tcp --dport 3500 -j ACCEPT

Но потом я бегу iptables -L Я все еще не вижу новых правил, которые перечислены: (Мое предположение должно включать 3500 в выход)

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
RH-Firewall-1-INPUT  all  --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:rtmp-port 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
RH-Firewall-1-INPUT  all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain RH-Firewall-1-INPUT (2 references)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     icmp --  anywhere             anywhere            icmp any 
ACCEPT     esp  --  anywhere             anywhere            
ACCEPT     ah   --  anywhere             anywhere            
ACCEPT     udp  --  anywhere             224.0.0.251         udp dpt:mdns 
ACCEPT     udp  --  anywhere             anywhere            udp dpt:ipp 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ipp 
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
ACCEPT     udp  --  anywhere             anywhere            state NEW udp dpt:snmp 
ACCEPT     udp  --  anywhere             anywhere            state NEW udp dpt:snmptrap 
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh 
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:http 
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ftp 
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited 

редактировать Поэтому я пытаюсь вставить правило ACCEPT в цепочку INPUT, и теперь мои iptables выглядят следующим образом:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:3500 
RH-Firewall-1-INPUT  all  --  0.0.0.0/0            0.0.0.0/0

Но это не позволяет мне подключаться к 3500 снаружи. (Я все еще могу telnet изнутри). Когда я пытаюсь подключиться к telnet my_host 3500, я получаю следующее: telnet: Unable to connect to remote host: Connection refused

Изменить 2: Мой netstat -an | grep "LISTEN " вывод:

tcp 0 0 127.0.0.1:3500 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:973 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 ::: 22 ::: * LISTEN

Редактировать 3: Я следил за советом, а также привязывал мой сервис к 0.0.0.0:3500 вместо 127.0.0.1:3500, и он работает.


5
2017-09-26 17:16


Источник


ты запустил /sbin/service iptables save или iptables save ? На самом деле, подождите, невзирая - вы сделали. поэтому все эти правила находятся в цепочке INPUT. Просто сделай то, что сказал. - tfitzgerald


Ответы:


Ваши правила перечислены, rtmp-port порт 3500 в соответствии с IANA порт / услуги имена. Чтобы получить список номеров портов, а не их имена служб, используйте -n переключатель

iptables -L -n 

Вы также используете ключ -A, чтобы добавить свое правило в цепочку INPUT. Это добавилось после того, как пакеты были отправлены в цепочку RH-Firewall-1-INPUT, последним правилом которой является защитное покрытие REJECT, поэтому пакеты, предназначенные для порта 3500, будут ОТКЛЮЧЕНЫ, прежде чем они будут протестированы в цепочке INPUT.

У вас есть несколько возможных решений - используйте -I переключите, чтобы вставить свое правило в INPUT цепи или RH-Firewall-1-INPUT цепь

iptables -I INPUT -p tcp --dport 3500 -j ACCEPT

или

iptables -I RH-Firewall-1-INPUT -p tcp --dport 3500 -j ACCEPT

Вы также должны убрать свои правила, вы можете использовать

iptables -D INPUT -p tcp --dport 3500 -j ACCEPT

(несколько раз), чтобы удалить существующие правила для порта 3500 перед добавлением новых правил.


10



Я следовал за советом, но до сих пор не могу подключиться. Я изменил свой вопрос, чтобы включить некоторые детали. - Phuong Nguyen
Можете ли вы подтвердить, что служба запущена? Попробуйте запустить «telnet localhost 3500» на сервере? - Rilindo
telnet localhost 3500 Попытка 127.0.0.1 ... Подключена к localhost.localdomain (127.0.0.1). Символом Escape является «^]». - Phuong Nguyen
telnet push.mycustomdomain.com 3500 Попытка xxx.xx.xxx.xx ... telnet: невозможно подключиться к удаленному хосту: соединение отклонено - Phuong Nguyen
Похоже, на вашем push.mycustomdomain.com:3500 ничего не слышно. С открытым портом и ничего не слушаю, я получаю Connection Refusedс закрытым портом, который я получаю No route to host - Iain