我在 Linux 上仅使用 iptables 规则和遵循本教程的“最近”模块,为 SSH 建立了一个有效的端口敲门设置:https://wiki.archlinux.org/index.php/Port_knocking#Port_knoking_with_iptables_only。
现在我的问题是,像我的工作网络这样的几个网络会阻止流向非标准端口(如 22、80、443)的流量,因此我无法发送敲门数据包。另一方面,我的移动互联网允许他们。
作为一种解决方法,我想在发送正确的敲击序列时打开 SSH 端口任何主机,而不仅仅是同一台主机。
有没有办法用 iptables 来实现这一点?例如,我可以想象一个“状态开关”或全局变量,可以由一个规则打开并由另一规则检查。超时后它会回到“关闭”状态。
答案1
我建议走敲门路线。这样就比较简单了。仅代替使用此默认配置
[openSSH]
sequence = 7000,8000,9000
seq_timeout = 10
tcpflags = syn
command = /usr/sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
[closeSSH]
sequence = 9000,8000,7000
seq_timeout = 10
tcpflags = syn
command = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
您将使用这个(注意 -s %IP% 已删除)
[openSSH]
sequence = 7000,8000,9000
seq_timeout = 10
tcpflags = syn
command = /usr/sbin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT
[closeSSH]
sequence = 9000,8000,7000
seq_timeout = 10
tcpflags = syn
command = /usr/sbin/iptables -D INPUT -p tcp --dport 22 -j ACCEPT