iptables 端口转发默认策略为 DROP

iptables 端口转发默认策略为 DROP

我有一个以普通用户身份运行的 Web 服务器,因此我不能使用 1024 以下的端口。Web 服务器仍应在端口 443 上访问。我希望 iptables 将端口 443 转发到 1443,我的 Web 服务器将在此监听传入的请求。到目前为止,这些是我的规则:

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

iptables -A OUTPUT -p tcp -o eth0 --sport 443 -j ACCEPT
iptables -A INPUT -p tcp -i eth0 --dport 443 -j ACCEPT

iptables -A PREROUTING -t nat -p tcp --dport 443 -j REDIRECT --to-port 1443 
iptables -A OUTPUT -t nat -p tcp --dport 443 -j REDIRECT --to-port 1443

但是 iptables 仍然会丢弃数据包,除非我添加以下规则:

iptables -A OUTPUT -p tcp -o eth0 --sport 1443 -j ACCEPT
iptables -A INPUT -p tcp -i eth0 --dport 1443 -j ACCEPT

现在我可以通过端口 443 访问我的网络服务器,但也无法通过我不想要的端口 1443 访问。

我缺少哪些规则,导致我的网络服务器只能通过端口 443 访问?

答案1

我认为实现这一目标最简单的方法是:

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

iptables -A PREROUTING -t nat -p tcp --dport 443 -j REDIRECT --to-port 1443 

iptables -A INPUT --ctstate ESTABLISHED,DNAT -j ACCEPT
iptables -A OUTPUT --ctstate ESTABLISHED -j ACCEPT

答案2

修复此问题的最简单的方法是,将您的 Web 服务器配置为仅监听本地主机(127.0.0.1),并配置 iptables 规则以进行输入:

iptables -A INPUT -p tcp -d 127.0.0.1/32 -i eth0 --dport 1443 -j ACCEPT

并将所有请求转发到 127.0.0.1:1443。

相关内容