![由于fail2ban,服务器冻结](https://linux22.com/image/54709/%E7%94%B1%E4%BA%8Efail2ban%EF%BC%8C%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%86%BB%E7%BB%93.png)
最近,我遇到了一些服务器冻结或网络问题的问题(目前我无法确定是哪一个)。我在端口 443 上运行 OpenSSH,看来fail2ban 的反 SSH DDoS 过滤器是罪魁祸首。因为我在通常为 HTTPS 保留的端口上运行,所以有时会收到无效请求:
# /var/log/auth.log
Aug 25 11:46:38 void sshd[13782]: pam_unix(sshd:session): session closed for user tim
Aug 25 11:46:38 void sshd[13782]: syslogin_perform_logout: logout() returned an error
Aug 25 11:46:41 void sshd[15911]: Bad protocol version identification 'CONNECT 194.109.153.5:11111 HTTP/1.0' from 194.109.21.230
Aug 25 11:46:45 void sshd[15915]: Bad protocol version identification 'CONNECT 194.109.153.5:11111 HTTP/1.0' from 194.109.21.230
Aug 25 11:46:53 void sshd[15912]: Did not receive identification string from 194.109.21.230
Aug 25 11:46:53 void sshd[15910]: Did not receive identification string from 194.109.21.230
Aug 25 11:46:57 void sshd[15916]: Did not receive identification string from 194.109.21.230
Aug 25 11:46:57 void sshd[15914]: Did not receive identification string from 194.109.21.230
这又会触发fail2ban:
# /var/log/fail2ban.log
2014-08-25 11:46:58,609 fail2ban.actions: WARNING [ssh-ddos] Ban 194.109.21.230
2014-08-25 11:56:58,852 fail2ban.actions: WARNING [ssh-ddos] Unban 194.109.21.230
这不是我之前担心的事情,只是我的日志中有一点噪音,但没有影响我的服务器。然而最近几天我得到了代理扫描多次由194.109.21.230 (proxyscan.xs4all.net
.结果是断开连接,可能是服务器冻结,我很快注意到这一点,因为我也使用该服务器作为 IRC 客户端。看看我的 Munin 图表,它似乎在fail2ban 禁止了一个看似不重要的 IP 的同一时期冻结了:
我不确定这有什么关系,但我最近也在同一台服务器上经历了 RCU 停顿²。在此日期之前,即使触发了fail2ban,我也从未遇到过服务器冻结的情况。从那时起我就修复了/etc/ntp.conf
,但只是在经历了冻结之后。
# /var/log/syslog
... (multiple 'host name not found' for ntpd)
Aug 20 20:24:22 void ntpd_intres[8124]: host name not found: 1.tid.uio.no
Aug 20 20:40:25 void ntpd_intres[8124]: host name not found: 0.ntp.uio.no
Aug 20 20:40:25 void ntpd_intres[8124]: host name not found: 1.tid.uio.no
Aug 20 20:57:44 void kernel: [18225085.384024] INFO: rcu_sched detected stall on CPU 0 (t=18892 jiffies)
Aug 20 20:57:44 void kernel: [18225085.384024] sending NMI to all CPUs:
Aug 20 20:57:44 void kernel: [18225085.384024] NMI backtrace for cpu 0
Aug 20 20:57:44 void kernel: [18225085.384024] Modules linked in: tun iptable_nat nf_nat iptable_mangle xt_tcpudp nf_conntrack_ipv4 nf_defrag_ipv4 xt_state nf_conntrack xt_mark bridge stp xt_multiport iptable_filter ip_tables x_tables vmwgfx snd_page_alloc parport_pc parport processor thermal_sys snd_timer snd soundcore evdev pcspkr serio_raw ttm drm button i2c_piix4 i2c_core ext4 crc16 jbd2 mbcache sg sr_mod cdrom ata_generic virtio_blk virtio_net floppy ata_piix libata virtio_pci virtio_ring virtio scsi_mod [last unloaded: scsi_wait_scan]
Aug 20 20:57:44 void kernel: [18225085.384024]
Aug 20 20:57:44 void kernel: [18225085.384024] Pid: 8124, comm: ntpd Not tainted 3.2.0-4-686-pae #1 Debian 3.2.41-2+deb7u2 Bochs Bochs
... (call stack)
现在我刚刚添加了一条阻止 proxyscanning 服务器的 iptables 规则:
iptables -A INPUT -p tcp --dport 443 -s 128.39.74.65 -j DROP
我想通过阻止自己来强制解决这个问题,看看是否每次都会发生同样的事情,以及重新启动后是否得到解决。无法提出实际触发 ssh-ddos 的命令,无法进行身份验证或wget
似乎还不够。有小费吗?
RCU 会停止运行吗(*)与fail2ban/freezes相关,如果是这样,为什么?重新启动可能会有所帮助,但我很好奇这是如何发生的以及我的服务器冻结的原因。
编辑:RCU 失速后不久冻结:
# /usr/var/log/auth.log.1
Aug 20 21:09:28 void sshd[9115]: Bad protocol version identification 'CONNECT 194.109.153.5:11111 HTTP/1.0' from 194.109.21.230
Aug 20 21:09:40 void sshd[9114]: Did not receive identification string from 194.109.21.230
Aug 20 21:09:40 void sshd[9116]: Did not receive identification string from 194.109.21.230
# /usr/var/log/fail2ban.log.1
2014-08-20 21:10:28,747 fail2ban.actions: WARNING [ssh-ddos] Ban 194.109.21.230
2014-08-20 21:20:29,515 fail2ban.actions: WARNING [ssh-ddos] Unban 194.109.21.230
1 我在 443 上运行它,因为并非我经常使用的所有网络都允许使用 22。它还有一个额外的好处,即传入的 SSH 攻击较少。
² RCU 停顿(CPU),而不是内核恐慌。看评论。