在单个端口上使用 iptables 设置端口敲击?

在单个端口上使用 iptables 设置端口敲击?

我一直在研究使用端口敲击来隐藏/保护 SSHD。我知道 knockd 和其他实现,但我想要一些可移植且简单的东西。所以我决定使用最新模块的 iptables 就足够了。

我已经禁用了基于密码的登录,并要求输入公钥/私钥。我只是希望即使对于端口扫描器来说,SSHD 看起来也不在服务器上。

我见过许多 iptables 规则示例,但我不太清楚它们应该如何工作。

我想要的是敲击一个单一的隐蔽端口以打开端口 22。同时,如果访问了该端口周围的端口,我想暂时禁用端口敲击。因此,如果我的敲击端口是 123,则敲击此端口将为敲击者打开端口 22 5 秒钟。但如果敲击端口 122 或 124,则会禁用敲击者的端口敲击 15 分钟(因此,即使他们敲击 123,在这段时间内也不会发生任何事情)。

哪些 iptables 规则可以实现这一点?

编辑:我应该补充一下,我正在使用 CentOS 5.5。可以使用 iptable 模块。

答案1

所有这些规则都摆iptables -A INPUT在他们面前。

# if port 122 or 124 is touched add to block list
-m state --state NEW -m tcp -p tcp -–dport 122 -m recent --set --name blocked
-m state --state NEW -m tcp -p tcp -–dport 124 -m recent --set --name blocked

# if you are on the block list you cannot touch 123 for 15min
-m state --state NEW -m tcp -p tcp --dport 123 -m recent --rcheck --name blocked --seconds 900 -j DROP

# if port 123 is touched add to the knocked list
-m state --state NEW -m tcp -p tcp --dport 123 -m recent --set --name knocked

# if you are on the knock list you can initiate an ssh session for 5 seconds
-m state --state NEW -m tcp -p tcp --dport 22 -m recent --rcheck --name knocked --seconds 5 -j ACCEPT

需要注意的一点是,我不知道 ipt_recent 是否可以跟踪 15 分钟。

编辑:尝试使评论更好并添加缺失的“最近”。

答案2

我看不出除了netfilter 的 conntrack 助手专门为此目的而编写 - 您无法“编写”动态 iptables 规则集,而必须使用 conntrack 机制。这显然不适用于 vanilla iptables,而需要自定义编译的模块。

相关内容