Назад | Перейти на главную страницу

Не удается открыть / переадресовать порт с Fedora 15

У меня есть сервер под управлением 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?