Мой вопрос: как добавить настраиваемое правило iptables для приема соединения на определенном порту?
Я пытаюсь открыть порт 3500 на своем сервере, но мне это не удалось. Я начал с этой команды: (От 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:* СЛУШАТЬ
tcp 0 0 0.0.0.0:973 0.0.0.0:* СЛУШАТЬ
tcp 0 0 0.0.0.0:111 0.0.0.0:* СЛУШАТЬ
tcp 0 0 127.0.0.1:631 0.0.0.0:* СЛУШАТЬ
tcp 0 0 127.0.0.1:25 0.0.0.0:* СЛУШАТЬ
tcp 0 0 ::: 22 ::: * СЛУШАТЬ
Редактировать 3: Я последовал совету lain, также привязал мою службу к 0.0.0.0:3500 вместо 127.0.0.1:3500, и это работает.
Ваши правила перечислены, rtmp-port
порт 3500 согласно IANA порт / сервис имена. Чтобы получить список номеров портов, а не их имен служб, используйте -n
переключатель
iptables -L -n
Вы также можете использовать переключатель -A, чтобы добавить свое правило в цепочку INPUT. Это было добавлено после того, как пакеты были отправлены в цепочку RH-Firewall-1-INPUT, последним правилом которой является общий REJECT, поэтому пакеты, предназначенные для порта 3500, будут REJECTED, прежде чем они будут проверены в цепочке 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 перед добавлением новых правил.