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

Luk*_*uke 4 security iptables

我一直在研究使用端口敲门作为隐藏/保护 SSHD 的方法。我知道knockd 和其他实现,但我想要一些便携和简单的东西。所以我决定使用最近的模块的 iptables 就足够了。

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

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

我想要的是敲一个不知名的端口来打开端口 22。同时,如果访问它周围的端口,我想暂时禁用端口敲门。因此,如果我的敲击端口是 123,那么敲击该端口将仅为敲门者打开端口 22 5 秒钟。但是,如果端口 122 或 124 被敲击,它将禁用敲门者的端口敲击 15 分钟(因此,即使他们敲击 123,在那个时间范围内也不会发生任何事情)。

什么 iptables 规则可以实现这一点?

编辑:我应该补充一点,我使用的是 CentOS 5.5。可以使用 iptable 模块。

Mar*_*ner 11

所有这些规则都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
Run Code Online (Sandbox Code Playgroud)

一个警告是我不知道 ipt_recent 是否可以跟踪 15 分钟。

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