У меня есть сервер под управлением Fedora 15. Моя конечная цель - иметь возможность перенаправлять любой протокол по случайным номерам портов (заданным с помощью правил iptables). Скажем, на данный момент я хочу перенаправить порт 12345 на веб-сервер внутри сеть. Мы скажем, что это 192.168.0.10:80.
После добавления в iptables правила открывать порт вот так:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 12345 -j ACCEPT
Я перезапускаю iptables и запускаю:
nmap -p 12000-13000 локальный хост
Nmap не показывает, что порт открыт / закрыт. Затем я определяю порт с помощью semanage следующим образом:
порт semanage -a -t http_port_t -p tcp 12345
Nmap по-прежнему не видит порт.
Если я затем полностью отключу selinux, nmap покажет порт как «закрытый».
Кажется, я не могу найти способ открыть порт. Я рыскал по сети несколько дней и не смог решить проблему. Я могу предоставить любые другие данные конфигурации, которые вы хотите. Какие-либо предложения?
РЕДАКТИРОВАТЬ: добавлен вывод iptables -L -n -v
:
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
641 3038K ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
12 720 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
5 261 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:12345
1 52 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT 663 packets, 3044K bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:12345
Если вы хотите ПЕРЕДАТЬ трафик, вы используете FORWARD
цепь, а не INPUT
цепь.
В INPUT
цепь будет применяться только к пакетам, фактически предназначенным для брандмауэра (например, имеющим адрес назначения одного из адресов брандмауэра).
Во-вторых, помните, что ПЕРЕДАЧА трафика означает, что с самим пакетом не будут выполняться никакие манипуляции. Итак, целевой сервер должен открыть порт 12345.
(Если вы хотите управлять адресом источника / назначения и / или портом, используйте SNAT / DNAT)
Я не знаю этого наверняка, но подозреваю, что проблема в том, что вы -A INPUT ...
добавляет ваше разрешение после какое-то ранее существовавшее одеяло DROP
правило. Нам нужно увидеть результат iptables -L -n -v
после того, как вы добавили свое правило, чтобы быть уверенным; если вы хотите вставить это в свой вопрос выше, это будет полезно.
Обработка правил iptables - выигрывает первое совпадение; то есть он проходит через правило по порядку, и последний, который соответствует вашему пакету и избавляется от него, будет иметь последнее слово за этот пакет.
Итак, в кратком метакоде нет смысла иметь такой набор правил, как
permit any any port 80
deny any any
permit any any port 12345
Строка 2 будет соответствовать пакету, предназначенному для порта 12345, поскольку он соответствует любому пакету, не предназначенному для порта 80, и отклоняет его. Плохой пакет никогда не дойдет до разрешения линии 3.
Приношу свои извинения, если вы уже все это знаете, и проблема не в этом. Было бы полезно увидеть iptables
вывод, для дальнейшего изучения.
редактировать: Хорошо, похоже, проблема не в упорядочивании правил. Что заставляет вас думать, что это не работает? Что происходит на этом сервере, когда вы делаете telnet localhost 12345
?