Итак, я понимаю, что вам нужно сначала разрешить соединение (верно?)
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 8443 -j ACCEPT
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
Тогда вам нужно настроить редирект (верно?)
iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8443
Затем также разрешите исходящий ответ от 8443 перейти на 443 (верно?)
iptables -t nat -I OUTPUT -p tcp --dport 443 -j REDIRECT --to-ports 8443
Мой сценарий: у меня есть локальный сервер приложений, использующий 8443, но я хочу, чтобы весь трафик подключался с использованием стандартных портов. У меня проблемы со службами, использующими мой защищенный порт http
ie. https://mywebsite.com **NOT** https://mywebsite.com/8443
Проблема: я не уверен, что мои правила для iptalbes верны
Мы делаем нечто подобное для приложения, работающего в Tomcat. Не уверен насчет оператора OUTPUT. Мы не используем это ... Кроме того ... В вашем операторе nat PREROUTING есть опечатка?
-bash-4.1$ sudo iptables-save
# Generated by iptables-save v1.4.7 on Thu Sep 19 12:31:52 2013
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [623016:133354762]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8044 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Thu Sep 19 12:31:52 2013
# Generated by iptables-save v1.4.7 on Thu Sep 19 12:31:52 2013
*nat
:PREROUTING ACCEPT [116:5915]
:INPUT ACCEPT [2533:132017]
:OUTPUT ACCEPT [87137:6439722]
:POSTROUTING ACCEPT [87137:6439722]
-A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
COMMIT
# Completed on Thu Sep 19 12:31:52 2013
mangle - пометить все входящие пакеты с помощью dport 443 (вторая цепочка iptables)
-A PREROUTING -i eth0 -p tcp -m tcp --dport 443 -j MARK --set-xmark 0x64/0xffffffff
nat - изменить порт назначения для рыночных пакетов (третья цепочка iptables)
-A PREROUTING -i eth0 -p tcp -m tcp --dport 443 -m mark --mark 0x64 -j DNAT --to-destination :8443
filter - принять помеченный пакет с новым dport (пятая цепочка iptables)
-A INPUT -i eth0 -p tcp -m conntrack --ctstate NEW -m tcp --dport 8443 -m mark --mark 0x64 -j ACCEPT
в старых системах используйте -m state --state
вместо того -m conntrack --ctstate
:
-A INPUT -i eth0 -p tcp -m state --state NEW -m tcp --dport 8443 -m mark --mark 0x64 -j ACCEPT
Это наиболее эффективный способ, именно так утилиты RH делают это по умолчанию для локальных перенаправлений.