我有以下 iptables 配置
iptables -P INPUT DROP
iptables -A INPUT -i eth0 -p TCP --dport 443 -j ACCEPT
iptables -A INPUT -i eth0 -p TCP --dport 10001 -j ACCEPT
iptables -A PREROUTING -t nat -p tcp -m tcp --dport 443 -j REDIRECT --to-port 10001
但是我不想打开端口 10001,这就是我进行重定向的原因(并且我不想以 root 身份运行我的服务器),对吗?
但如果我删除第三行,转发就会停止工作。
那么,有什么想法可以重定向端口而不向全世界开放吗?
答案1
从您的问题中,我了解到 eth0 是您的公共接口,并且您不希望您的 SSL Web 服务器对公众可见。
我认为您应该限制谁可以连接到端口而不是试图隐藏它。
不使用路由的一个解决方案是将您的 Web 服务器(apache2?)设置为仅绑定到您的环回设备(lo,127.0.0.1)以进行 SSL。这假设您仅从运行 Web 服务器的计算机连接到 Web 服务器。
另一种方法是向您的 iptables 中添加接受 lo 上的任何内容的功能,并拒绝 eth0 上的端口 443(通过默认策略)
iptables -P INPUT DROP
iptables -A INPUT -i lo -p TCP -j ACCEPT
如果您需要远程连接到 Web 服务器,并且您有静态 IP 地址,则您始终只能接受来自该 IP 的 443 传入连接。
我能想到的另一种从外部隐藏端口 443 的方法是使用端口敲击。
确实存在其他方法(在 apache2 中)来阻止/接受来自特定 IP 的服务器连接。