封尘网

让学习成为一种习惯!

Centos7安装Fail2Ban并利用163邮箱发送邮件提醒功能

Fail2Ban是一款实用软件,可以监视你的系统日志,然后匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作。
本次操作是因为博客主机经常有扫描尝试登陆SSH服务,所以想利用Fail2Ban联动防火墙来阻止恶意扫描和密码猜测等恶意攻击行为。

配置发送邮件功能

不需要安装第三方的邮件工具,直接使用系统自带的mail即可。

这里使用163的邮件来做为服务器上的发邮件服务,通过它把警告发送到指定的企业邮箱。

1、修改配置文件/etc/mail.rc 添加以下内容:
因为腾讯云无法访问到smtp.163.com 的25端口,所以只能使用465的ssl协议来发送邮件了。

未使用ssl协议时的配置:

set from=邮件地址@163.com
set smtp=smtp.163.com
set smtp-auth-user=邮件地址@163.com
set smtp-auth-password=e8456ds78c23
set smtp-auth=login

使用ssl协议来发邮件的配置:

set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb
set from=邮件地址@163.com
set smtp=smtps://smtp.163.com:465
set smtp-auth-user=邮件地址@163.com
set smtp-auth-password=e8456ds78c23
set smtp-auth=login

说明:

  • smtp-auth-password 并不是邮箱的密码而是一个客户端授权,当然利用授权码就等同密码差不多可以实现发邮件认证了。
  • SSl验证跟普通的难证就差别在证书和smtps协议,还有就是端口变成了465

发邮件测试:

echo "邮件内容".|mail -v -s "邮件标题" service@58jb.com

完成上面的邮件发送配置后,这样在接下来的邮件提醒功能才能完成,当然如果你不想要提示,可以直接跳过上面的邮件配置。

Fail2Ban安装

先安装EPLP源:

yum -y install epel-release

为了方便直接使用fail2ban-all安装

yum -y install fail2ban-all
============================================================================================================================================================
 Package                                     Arch                            Version                                    Repository                     Size
============================================================================================================================================================
Installing:
 fail2ban-all                                noarch                          0.9.7-1.el7                                epel                           11 k
Installing for dependencies:
 fail2ban-hostsdeny                          noarch                          0.9.7-1.el7                                epel                           12 k
 fail2ban-mail                               noarch                          0.9.7-1.el7                                epel                           15 k
 fail2ban-shorewall                          noarch                          0.9.7-1.el7                                epel                           12 k
 gamin                                       x86_64                          0.1.10-16.el7                              os                            128 k
 gamin-python                                x86_64                          0.1.10-16.el7                              os                             34 k
 perl-Digest                                 noarch                          1.17-245.el7                               os                             23 k
 perl-Digest-SHA                             x86_64                          1:5.85-4.el7                               os                             58 k
 python-inotify                              noarch                          0.9.4-4.el7                                os                             49 k
 shorewall                                   noarch                          5.1.10.2-1.el7                             epel                          636 k
 shorewall-core                              noarch                          5.1.10.2-1.el7                             epel                           82 k
 whois                                       x86_64                          5.1.1-2.el7                                os                             72 k

Transaction Summary
============================================================================================================================================================
Install  1 Package (+11 Dependent packages)

Total download size: 1.1 M
Installed size: 4.1 M
Is this ok [y/d/N]:

说明:

因为使用fail2ban安装时会只会安装fail2ban包;而使用fail2ban-all安装时就会把邮件提醒的工具也安装上。就是mail-whois.conf相关的一些配置文件。

配置Fail2Ban

进入/etc/fail2ban目录:

在目录/etc/fail2ban/jail.d/下添加一个配置文件sshd.local,这里不对文件修改/etc/fail2ban/jail.conf所以自己添加一新的配置文件。

[root@VM_0_5_centos jail.d]# cat /etc/fail2ban/jail.d/sshd.local
[DEFAULT]
ignoreip = 127.0.0.1/8
bantime  = 300
findtime  = 60
maxretry = 5
backend = systemd
destemail = 接收报警的邮件地址
sender = 发送者邮件地址
mta = mail
protocol = tcp
action = %(action_mw)s  //这里是有变动的

[sshd]
enabled = true
port    = ssh端口,根据情况修改
logpath = %(sshd_log)s
backend = %(sshd_backend)s

配置fail2ban发邮件提醒

以下是我配置的邮件格式:

[root@VM_0_5_centos jail.d]# egrep -v "^#|^$" /etc/fail2ban/action.d/mail-whois.conf
[INCLUDES]
before = mail-whois-common.conf
[Definition]
actioncheck =
actionban = printf %%b "警告!!!\n
            攻击者IP:<ip>\n
            被攻击机器名:`uname -n` \n
            被攻击机器IP:`/bin/curl ifconfig.co` \n
            攻击服务:<name> \n
            攻击次数:<failures> 次 \n
            攻击方法:暴力破解,尝试弱口令.\n
            该IP:<ip>已经被Fail2Ban加入防火墙黑名单,屏蔽时间5分钟.\n\n
            以下是攻击者 <ip>信息 :\n
            `/bin/curl http://ip.taobao.com/service/getIpInfo.php?ip=<ip>`\n\n
            Fail2Ban邮件提醒\n\n "|/bin/mailx -s "服务器:<name>服务疑似遭到<ip>暴力攻击." <dest>
actionunban =
[Init]
name = default
dest = root

说明

  • 通过curl ifconfig.co获取服务器的外网IP地址,方便知道哪台机报出来的告警。
  • 通过curl http://ip.taobao.com/service/getIpInfo.php?ip=<ip>淘宝的IP查询获取攻击者的一些IP信息。

修改完后启动服务:

systemctl enable fail2ban.service
systemctl start fail2ban.service

如果启动的时候有异常可以,修改配置文件/etc/fail2ban/fail2ban.conf开启DEBUG日志方便排查。第24行左右loglevel = DEBUG ;一般正常情况下使用INFO格式日志即可以了。

尝试使用一台机器对本机的SSH尝试登陆,失败5次后就会把它加入到防火墙规则里,其实在第四次密码错误后,到第五次输密码时就已经发邮件了。

查看防火墙规则:[默认生成一个f2b-sshd表]

[root@VM_0_5_centos action.d]# iptables -vnL f2b-sshd
Chain f2b-sshd (1 references)
 pkts bytes target     prot opt in     out     source               destination         
  13  1488 REJECT     all  --  *      *       101.201.38.40        0.0.0.0/0            reject-with icmp-port-unreachable
  185 17268 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0

最后上个图,手机上收到的邮件提示: