如何在 ssh 中阻止 IP

如何在 ssh 中阻止 IP

一个非常坚持的人在过去几天里不断试图(未经授权)访问我的系统...有无数的条目,例如/var/log/auth.log

Jun 21 03:55:15 cloudy sshd[32487]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=116.31.116.20  user=root
Jun 21 03:55:16 cloudy sshd[32487]: Failed password for root from 116.31.116.20 port 30629 ssh2
Jun 21 03:55:19 cloudy sshd[32487]: Failed password for root from 116.31.116.20 port 30629 ssh2
Jun 21 03:55:21 cloudy sshd[32487]: Failed password for root from 116.31.116.20 port 30629 ssh2
Jun 21 03:55:21 cloudy sshd[32487]: Received disconnect from 116.31.116.20: 11:  [preauth]
Jun 21 03:55:21 cloudy sshd[32487]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=116.31.116.20  user=root

我想请教一下如何阻止此人消耗计算机资源,是否有可能“硬阻止”该 IP 甚至打开 ssh 连接?请注意,我使用 Debian 8 作为操作系统。

答案1

答案2

您还可以使用iptables

创建一个包含要阻止的 IP 地址的文件blocked.ips.txt

现在创建并运行包含以下内容的脚本:

blocked=$(egrep -v -E "^#|^$" ./blocked.ips.txt)
for ip in $blocked
do
    iptables -I INPUT -s $ip -p tcp --dport ssh -j DROP
done

运行iptables -L应该会输出丢弃的数据包

答案3

iptables 方法是最直接的方法。Erik Handriks 建议将其作为脚本使用。

两个但是: - 每次重启后都必须启动该脚本(如果表没有使用 iptables 内部备份)。 - 按原样调用脚本,两次或两次以上将重复条目。

尝试用以下方法简单地抓住坏人:

iptables -I INPUT -s BAD_IP -p tcp --dport ssh -j DROP

在大多数发行版中,iptables 都有自己的规则保存恢复机制。查看是否存在“/var/lib/iptables/rules-save”。对于您的发行版,它可能位于其他地方(此处为 gentoo)。

添加每个 BAD IP 后,尝试:

iptables-保存 > /var/lib/iptables/rules-保存

重启后,使用“iptables -L”检查那里有什么......

答案4

在我的服务器 (Ubuntu 16.04) 上,我使用 UFW (UncomplicatedFireWall),这是 iptables 上的简化层,它似乎是 Ubuntu 服务器上的标准配置(但应该适用于其他发行版)。对于这些情况,我使用:

ufw insert 1 deny from nnn.nnn.nnn.nnn

UFW 还允许您限制连接数

ufw limit ssh/tcp

请注意,这也适用于成功的连接,因此如果您使用使用多个 ssh 命令的脚本,则必须通过发出以下命令禁用您的 IP 的此限制:

ufw insert 1 allow in from nnn.nnn.nnn.nnn

相关内容