过去几周,我每小时收到 1000 次登录失败,我确信其中 99% 是来自机器人。我安装了 fail2ban 并阻止了一些子网,但我还决定更改用于 SSH 的端口。只有我一个人在使用服务器,所以这是一个简单的更改,可以摆脱大量机器人请求。
我已经进行了更改,一切运行正常。我现在想阻止端口 22。我检查了防火墙,发现它从来没有针对端口 22 的规则,这让我很想知道它是如何工作的。一定有某种措施来确保端口 22 请求不会被阻止。我该如何禁用此功能并完全锁定端口 22?
答案1
从你之前的问题中,我了解到你使用的是 CentOS 6。该/etc/sysconfig/iptables
文件将包含首次加载时 IPv4 防火墙的状态。这可能与防火墙的运行状态不同,特别是如果你一直在添加任意规则。你可以使用以下命令保存防火墙的当前状态
service iptables save
它将会覆盖/etc/sysconfig/iptables
(最好先进行备份)。
在正常情况下你会发现这样的一行
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
允许连接到端口 22。只需删除该行,然后保存文件。当您返回命令行时,运行命令
service iptables reload
这将确保保存的防火墙状态和正在运行的防火墙状态相同。这是因为 CentOS 6 上的默认防火墙在 INPUT 链的末尾有一个全面的 REJECT 规则。
如果你不想依赖一揽子 REJECT,那么将行更改为
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j DROP
按照上述方法保存并重新启动。
但请注意,@ipor 所说的是正确的。如果您将 sshd 移至其他端口,则它实际上已关闭,因为没有任何东西在监听。
答案2
以 root 身份登录后,使用以下 IPtable 规则在防火墙级别阻止端口 22。
阻止从外部通过 eth0(网卡)访问 ssh 到系统。
iptables -F
服务 iptables 保存
iptables -A INPUT -i eth0 -p tcp --dport 22 -j DROP
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -j DROP
服务 iptables 保存
因此它将永远保持 iptable 状态。(请记住,有很多方法可以阻止不需要的请求,您可以根据需要选择在您的环境中使用哪一个,因为任何人都可以进行“谷歌搜索”。)