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

RHEL 6 Проблемы с перенаправлением порта 80 на порт 8080

Я пытаюсь настроить сервер приложений JBoss на сборке RHEL. Jboss привязан к 127.0.0.1:8080, и я пытаюсь настроить iptables для перенаправления всего трафика с порта 80 на порт 8080. Это мой файл конфигурации:

:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]

-A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 127.0.0.1:8080
-A PREROUTING -i eth0 -p tcp -m tcp --dport 443 -j DNAT --to-destination 127.0.0.1:8443
-A OUTPUT  -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:8080
COMMIT

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
-A FORWARD -i eth0 -m state --state NEW -m tcp -p tcp -d 127.0.0.1 --dport 8080 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

Но несмотря ни на что, вывод iptables -L -v -n показывает, что весь трафик отклоняется. Если я выключу iptables, он заработает, но я бы хотел его использовать. Спасибо.

Это результат:

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
  165 10948 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
    0     0 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
   12   576 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:80
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:443
 3237  405K 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 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            127.0.0.1           state NEW tcp dpt:8080
    0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT 146 packets, 19249 bytes)
 pkts bytes target     prot opt in     out     source               destination

Я бы сказал, что это неправильный подход. В любом случае, я бы не хотел, чтобы JBoss (или tomcat) управлял прямыми подключениями, кроме как для тестовых целей. Он не предназначен для управления напрямую внешними подключениями.

Опция 1 Установите прокси веб-сервера apache на 127.0.0.1:8080

Вам нужно это где-то в настройках apache

LoadModule proxy_module  {path-to-modules}/mod_proxy.so
AddModule  mod_proxy.c

Или с apache2

$ sudo a2enmod proxy
$ sudo apache2ctl restart

А в виртуальных хостах у вас может быть несколько приложений

ProxyPass         /myapp  http://localhost:8080/myapp
ProxyPassReverse  /myapp  http://localhost:8080/myapp

или иметь уникальный

ProxyPass         /  http://localhost:8080/
ProxyPassReverse  /  http://localhost:8080/

после изменения настройки виртуальных хостов нет необходимости перезапускать apache

$ sudo apache2ctl graceful

обновит настройки без разрыва текущих подключений.

Вариант 2 с использованием mod_ajp

$ sudo a2enmod proxy_ajp
$ sudo apache2ctl restart

добавив это на свой виртуальный хост

ProxyPass /app ajp://backend.example.com:8009/app

Предполагая, что экземпляр tomcat настроен на наличие коннектора ajp на порту 8009. Проверьте настройки tomcat.

http://httpd.apache.org/docs/2.2/mod/mod_proxy_ajp.html

Вариант 3 с использованием mod_jk http://tomcat.apache.org/connectors-doc/

У вас по-прежнему будет другая проблема - настроить JBoss для создания ссылок на: 80, это будет проблема с настройкой JBoss ... не могу вспомнить, где он установлен, все, что я могу вспомнить, это то, что мне потребовалось время выяснить. Пока я предпочел использовать коннектор ajp.

Извините, у меня сейчас нет доступа к настройке JBoss, возможно, кто-нибудь может указать нам, где находится этот параметр.

Если вы не хотите или не можете использовать обратный прокси для доступа к JBoss через порт 80, возможная конфигурация для использования перенаправления портов с JBoss:

/sbin/iptables -t nat -A OUTPUT     --destination localhost   -p tcp --dport 80 -j REDIRECT --to-ports 8080
/sbin/iptables -t nat -A OUTPUT     --destination <network IP address> -p tcp --dport 80 -j REDIRECT --to-ports 8080
/sbin/iptables -t nat -A PREROUTING --destination <network IP address> -p tcp --dport 80 -j REDIRECT --to-ports 8080

/sbin/iptables -t nat -A OUTPUT     --destination localhost   -p tcp --dport 443 -j REDIRECT --to-ports 8443
/sbin/iptables -t nat -A OUTPUT     --destination <network IP address> -p tcp --dport 443 -j REDIRECT --to-ports 8443
/sbin/iptables -t nat -A PREROUTING --destination <network IP address> -p tcp --dport 443 -j REDIRECT --to-ports 8443

/sbin/iptables --flush PREROUTING -t nat
/sbin/iptables --flush OUTPUT -t nat

Также вы можете прослушивать JBoss напрямую через порт 80.

Видеть: Запуск JBoss на порту 80 или 443 или Установите для порта прослушивания значение 80 в jboss AS 7.1.