![Iptables 允许通过 ssh 隧道访问内部网络](https://linux22.com/image/565522/Iptables%20%E5%85%81%E8%AE%B8%E9%80%9A%E8%BF%87%20ssh%20%E9%9A%A7%E9%81%93%E8%AE%BF%E9%97%AE%E5%86%85%E9%83%A8%E7%BD%91%E7%BB%9C.png)
我试图通过此方法将服务器上的访问限制为仅 ssh。此方法效果很好
iptables -A INPUT -i eth0 -p tcp --dport $SSH_port -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport $SSH_port -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -j DROP
iptables -A OUTPUT -j DROP
但是我将使用 ssh 端口转发来访问 127.0.0.1:port 中的内部服务以及不同虚拟接口上的另一个 internal_ip:port 中的内部服务,我该如何实现呢?
我用于 ssh 端口转发的命令:
ssh -2NqCgD 55555 -p $SSH_port user@server
我尝试了很多组合,但都没有成功。
摘录自/var/log/auth.log
sshd[xxxx]: error: connect_to 127.0.0.1 port xxxxx: failed.
sshd[xxxx]: error: connect_to internal_ip port yyyyy: failed.
答案1
这条规则对我有用。顺序对 iptables 来说很重要,因此将 DROP 放在最后就可以了。
iptables -A INPUT -i eth0 -p tcp --dport $ssh_port -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport $ssh_port -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -i $internal_interface -j ACCEPT
iptables -A OUTPUT -o $internal_interface -j ACCEPT
iptables -A INPUT -j DROP
iptables -A OUTPUT -j DROP
答案2
# Allow all on loopback
$IPTABLES -A INPUT -i lo -s 127.0.0.1 -j ACCEPT
$IPTABLES -A OUTPUT -o lo -d 127.0.0.1 -j ACCEPT