树莓派保卫战--防止SSH暴力破解
自己用树莓派搭建了个小server,用了很长时间了,最近查看log发现有很多SSH登陆失败,瞬间心就碎了,一直没关心小派的安全问题,怪我咯!
马上行动,首先研究下log:/var/log/auth.log记录了SSH登陆等权限安全信息,如何知道自己被攻击了呢?
# grep sshd.\*Failed /var/log/auth.log | less
Nov 16 11:26:44 raspberrypi2 sshd[4876]: Failed password for root from 61.160.222.53 port 1323 ssh2
...
Nov 17 01:14:49 raspberrypi2 sshd[8791]: Failed password for root from 222.186.15.160 port 2670 ssh2
...
Nov 16 14:31:23 raspberrypi2 sshd[9343]: Failed password for invalid user admin from 61.160.222.53 port 1782 ssh2
...
这里显示的是尝试通过SSH登陆失败的记录,描述里有IP和端口描述。一般如果遇到暴力破解的话,会尝试用root,admin等常用用户名,而且会出现很多失败记录。
另外一种失败记录一般是端口扫描。如下:
# grep sshd.*Did /var/log/auth.log | less
Nov 15 12:09:49 raspberrypi2 sshd[14252]: Did not receive identification string from 198.20.69.98
Nov 16 12:28:37 raspberrypi2 sshd[6351]: Did not receive identification string from 61.160.222.53
统计了下,最近一个月有两万多条,我错了,小派:(
如何防止这类闲的蛋疼的人呢?一般来说:
- 配置sshd_config,禁用root登陆
- 使用非常规SSH服务端口
- 使用非常规登陆名
- 尽量使用key登陆
以上四条条我都注意了,但防止不了暴力破解,接下来只能通过一些工具实现了。
Googling,发现两个工具DenyHosts和Fail2Ban,两个工具的作用是监视log,发现异常,屏蔽IP(iptables),也可同时执行发邮件等操作,都是Python写的。DenyHosts是针对SSH服务的,Fail2Ban可以适用多种服务如HTTP,FTP等,我选了Fail2Ban虽然我只用到SSH。
安装很简单:
# sudo apt-get install fail2ban
修改配置(可以不修改,默认是启动SSH保护的):
# ls /etc/fail2ban/ action.d/ fail2ban.conf filter.d/ jail.conf jail.local
# jail.local是jail.conf的override配置文件
# vim /etc/fail2ban/jail.local
[ssh]
enabled = true
# 设置了非标准端口,需要修改为对应端口
port = ssh
filter = sshd
action = wechat[name=SSH]
logpath = /var/log/auth.log
bantime = 1200
maxretry = 3
发现异常后,屏蔽IP时fail2ban默认使用sendmail发邮件提醒,这个action是可以自定义的,在/etc/fail2ban/action.d/目录下可以添加配置文件实现。我自己弄了个微信提醒服务,当发现异常是通过微信推送给我,就能第一时间让我知道谁欺负我小派了,哼~