我通过 iptables 和 ufw 配置了端口转发。但有一点我不明白,我就是无法让 iptables 将端口 443 转发到 8443不允许端口 8443在 UFW 上。
我希望端口 443 转发到端口 8443,但我还希望禁止端口 8443 从我的网络外部访问。
总之,如果我在 UFW 上完全允许端口 443 和 8443,我只能将端口 443 转发到 8443。
这是我在 before.rules 中唯一的规则:
-A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8443
这是我的 iptables 路由配置(非常简单):
pkts bytes target prot opt in out source destination
0 0 REDIRECT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 redir ports 8443
这是我的 UFW 状态这样可行:
To Action From
-- ------ ----
22 ALLOW Anywhere
443 ALLOW Anywhere
8443 ALLOW Anywhere // THIS IS WHAT BOTHERS ME
22 ALLOW Anywhere (v6)
443 ALLOW Anywhere (v6)
8443 ALLOW Anywhere (v6) // THIS IS WHAT BOTHERS ME
这就是我想要防火墙保护但是不起作用:
To Action From
-- ------ ----
22 ALLOW Anywhere
443 ALLOW Anywhere
22 ALLOW Anywhere (v6)
443 ALLOW Anywhere (v6)
有什么想法吗?提前致谢。
答案1
这里给出的解决方案对我来说应该是转发端口的默认方式,我真的不明白为什么大多数人使用 iptables。
(1):如果你已经使用 iptables/ufw 或任何其他工具配置了端口转发,请删除规则。在我的情况下,从 /etc/ufw/before.rules 中删除
(2):禁止转发时必须暴露的端口。我的情况是 8443。
(3):我必须在 Ubuntu 12.04 中安装 xinetd
#apt-get install xinetd
(4):创建将转发端口的新服务:
vi /etc/xinetd.d/tomcat-https 内容如下:
service tomcat-https
{
disable = no
flags = REUSE
wait = no
user = root
socket_type = stream
protocol = tcp
port = 443
redirect = localhost 8443
log_on_success -= PID HOST DURATION EXIT
#per_source = UNLIMITED
#instances = UNLIMITED
}
(5):将服务添加到/etc/services
vi /etc/services
这一行:
https 443/tcp # http protocol over TLS/SSL
看起来应该是这样的:
https 443/tcp tomcat-https # http protocol over TLS/SSL
最后我不得不完全重启。您可以尝试重启 ufw、网络和 xinetd。
答案2
您可以使用 ,而不是使用 PREROUTING 来重定向数据包rinetd
。此程序侦听给定端口,当有人连接到该端口时,rinetd 会连接到给定目标端口,并实质上代理两者之间的流量。使用 rinetd 侦听端口 443 并将连接转发到端口 8443,您可以允许来自本地主机的 8443 上的连接并阻止所有其他连接。