Я управляю DigitalOcean Centos 6 VPS. Вот сценарий, который я использовал для настройки iptables
на Centos 6.4 64-бит:
#!/bin/sh
service iptables stop
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8181
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P INPUT DROP
iptables-save > /etc/sysconfig/iptables
service iptables restart
Я открываю только порты 22, 80 и 443, перенаправляя 80 и 443 внутренне на 8080 и 8181 соответственно.
Из-за ошибки / причуды в GlassFish мне пришлось добавить имя хоста машины в /etc/hosts
:
127.0.0.1 localhost
127.0.0.1 example.com
Без правил NAT в iptables
конфигурации, я могу подключиться к серверу GlassFish через свой домашний браузер при попытке подключения через порт 8080 или 8181. С добавленными правилами NAT я вообще не могу связаться с сервером ни через 80 и 443, ни через 8080 и 8181 .
Нужно ли мне вносить изменения в какой-либо из iptables
правила, чтобы учесть эту дополнительную строку в /etc/hosts
?
Обновить:
Если я удалю последнее правило, iptables -P INPUT DROP
, Теперь я могу получить доступ к серверу через браузер, используя порты 80/443 и 8080/8181. Это означает, что пересылка работает.
Короткий ответ - НЕТ, нет.
Более длинный ответ заключается в том, что / etc / hosts предназначен для помощи преобразователю сетевого стека. Преобразователь - это часть IP-стека (TCP / IP v4 и v6), которая отвечает за преобразование понятных имен, таких как mybigserver, в IP-адрес, например 172.16.0.1.
В своем сообщении вы показываете нам сценарий, который выполняет команды IPTable.
Сценарий использует цепочку PREROUTING для выполнения NAT, но в своем вопросе вы указываете, что не можете подключиться к серверу GlassFish через браузер ...
Если ответ на вопрос №1 - это другой хост, подключенный к тому же коммутатору, что и ваш Linux ETH0, проблема в том, что вам нужно изменить правила NAT, чтобы использовать цепочку POSTROUTING. Причина в том, что вы хотите использовать NAT для исходящего соединения. У вас есть настройка PAT (преобразование адресов порта).
Если это ваша настройка [Ваш браузер] ------ [сетевой коммутатор] ----- [ETH0 Linux ETH1] ----- {общедоступный Интернет]
Затем замените эти строки
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8181
с участием:
iptables -A POSTROUTING -t nat -o eth1
Если это решит вашу проблему, вы можете точно настроить это правило POSTROUTING, чтобы использовать диапазон портов и / или определенный IP-адрес ETH1, если он многосетевой.
Вы не ПРИНИМАЕТЕ пакеты ни на 8080, ни на 8181 в своих правилах!
Без правил NAT в конфигурации iptables я могу подключиться к серверу GlassFish через свой домашний браузер, когда пытаюсь подключиться через порт 8080 или 8181. С добавленными правилами NAT я вообще не могу связаться с сервером, ни через 80 и 443 ни через 8080 и 8181.
Это потому, что ваши правила работают и, таким образом, перенаправляют 80 и 443 на 8080 и 8181! Но вы также забыли ПРИНЯТЬ связи с ними! Вот почему все они отвергаются!
Если я удалю последнее правило, iptables -P INPUT DROP, теперь я могу получить доступ к серверу через браузер, используя порты 80/443 и 8080/8181. Это означает, что пересылка работает.
Теперь должно иметь смысл:
Без последней строки у вас по умолчанию ACCEPT вместо DROP, так что, конечно, это работает.
Добавьте следующие два правила ...
iptables -A INPUT -p tcp -m tcp --dport 8080 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 8181 -j ACCEPT
... и он должен работать со строкой INPUT DROP по умолчанию (Порт 80 >> Порт 8080 >> ПРИНЯТЬ (правило)).