Я пытаюсь настроить сервер приложений 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.