Добрый день, у меня был Tomcat, работающий на порте 80 на сервере CentOS с IP 10.33.46.68. Когда я пытался открыть "http://10.33.46.68"на моем ноутбуке я увидел приветственную страницу Tomcat. Затем я изменил порт Tomcat на 8080 и перенаправил HTTP-трафик с порта 80 на порт 8080 с помощью iptables:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-ports 8080
Теперь, когда я пытаюсь открыть "http://10.33.46.68"у меня на ноутбуке таймаут. Но когда я пытаюсь открыть"http://10.33.46.68" или "http://10.33.46.68:8080"прямо на сервере оба URL-адреса работают нормально. Что мне не хватает, пожалуйста?
Между ноутбуком и сервером установлен межсетевой экран Cisco, который разрешает связь только через порт 80. Это мой файл конфигурации iptables:
# Generated by iptables-save v1.4.7 on Wed Oct 17 14:51:20 2012
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [1027:228609]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m state --state INVALID -j DROP
-A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -j ACCEPT
-A INPUT -j DROP
COMMIT
# Completed on Wed Oct 17 14:51:20 2012
# Generated by iptables-save v1.4.7 on Wed Oct 17 14:51:20 2012
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [4:274]
:OUTPUT ACCEPT [2:154]
-A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
-A OUTPUT -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
COMMIT
# Completed on Wed Oct 17 14:51:20 2012
Спасибо заранее. Войтех
В INPUT
цепь в filter
table не должно быть DROP. (ну, по крайней мере, не только без приема портов!)
По крайней мере, примите порт tcp / 8080, чтобы он заработал.
Пакет сначала проходит через mangle-, затем через предварительную маршрутизацию, а затем через таблицу фильтров. Ваша таблица mangle пуста, вы перенаправляете при предварительной маршрутизации, но когда пакет входит в INPUT / filter, он отбрасывается.
Простой iptables -t filter -A INPUT -p tcp --dport 8080 -j ACCEPT
должно быть достаточно.
Изменить: принятие localhost в INPUT-цепочке фильтра тоже должно быть там, просто чтобы не усложнять ситуацию. Хотя вам следует подумать о реализации правил, которые являются немного более сложными, например:
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT # don't you want ssh?
iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
iptables -A INPUT -j REJECT --reject-with icmp-port-unreachable
Что-то в этом роде.