如何防止未经授权的 ssh 登录尝试

如何防止未经授权的 ssh 登录尝试

我在 /var/log/auth.log 中发现了很多未经授权的登录尝试

...
Sep 26 22:15:34 hostname sshd[3072475]: Failed password for invalid user user from x.y.z.w port 51056 ssh2
Sep 26 22:15:39 hostname sshd[3072519]: Failed password for invalid user user from x.y.z.w  port 62354 ssh2
Sep 26 22:16:51 hostname sshd[3072643]: Failed password for invalid user user from x.y.z.w port 10596 ssh2
...

我很困惑为什么会发生这种情况,因为我已经在我的互联网路由器(zyxel VMG3925-B10B)上配置了端口转发,因此例如端口 54321 被映射到我的 ubuntu-box 内部 IP 地址上的端口 22。

如果我尝试从家外进行 ssh 登录 - 因此使用外部 IP 访问除端口 54321 之外的任何内容都会被拒绝。那么为什么有人能够通过我的路由器防火墙访问我的 ubuntu 盒子的内部 IP?

我意识到这个问题可能更应该由我的路由器制造商来回答。但是我的 IT 安全知识有限,我想听听其他人的策略

答案1

通过四处搜索,坏人发现您的外部端口 54321 是您的 ssh 访问端口。日志中列出的端口是它们的源端口,而不是目标端口。您应该发现,端口 54321 上的 ssh 登录尝试发生的频率比端口 22 上的要低得多。

您可以通过 iptables 规则、fail2ban(无论拼写如何)或其他方式缓解此问题。我使用 itpables 中的最新模块:

# Dynamic Badguy List. Detect and DROP Bad IPs that do password attacks on SSH.
# Once they are on the BADGUY list then DROP all packets from them.
#$IPTABLES -A INPUT -i $EXTIF -m recent --update --hitcount 3 --seconds 5400 --name BADGUY_SSH -j LOG --log-prefix "SSH BAD:" --log-level info
#$IPTABLES -A INPUT -i $EXTIF -m recent --update --hitcount 3 --seconds 5400 --name BADGUY_SSH -j DROP
# Sometimes make the lock time very long. Typically to try to get rid of coordinated attacks from China.
$IPTABLES -A INPUT -i $EXTIF -m recent --mask $BIT_MASK --update --hitcount 3 --seconds 90000 --name BADGUY_SSH -j LOG --log-prefix "SSH BAD:" --log-level info
$IPTABLES -A INPUT -i $EXTIF -m recent --mask $BIT_MASK --update --hitcount 3 --seconds 90000 --name BADGUY_SSH -j DROP
$IPTABLES -A INPUT -i $EXTIF -p tcp -m tcp --dport 22 -m recent --mask $BIT_MASK --set --name BADGUY_SSH -j ACCEPT

我现在使用 BIT_MASK(当前为“255.255.252.0”),因为攻击者变得聪明,通常只是切换到同一子网上的另一个 IP 地址。$EXTIF 是我的面向 WAN 的 NIC。

相关内容