Fail2ban阻止暴力破解
简介:
Fail2ban能够监控系统日志,匹配日志中的错误信息(使用正则表达式),执行相应的屏蔽动作(支持多种,一般为调用 iptables ),是一款很实用、强大的软件。
如:攻击者不断尝试穷举SSH、SMTP 、FTP 密码等,只要达到预设值,fail2ban 就会调用防火墙屏蔽此 IP ,并且可以发送邮件通知系统管理员。
功能、特性:
1、支持大量服务:sshd 、apache 、qmail 等2、支持多作动作:iptables 、tcp-wrapper 、shorewall 、mail notifications 等3、logpath 选项中支持通配符4、需要 Gamin 支持(Gamin 用于监控文件和目录是否更改)5、如果需要邮件通知,则系统事先要确保能够正常发送邮件
1、fail2ban 安装
2、fail2ban 结构
/etc/fail2ban ## fail2ban服务配置目录/etc/fail2ban/action.d ## iptables、mail 等动作文件目录/etc/fail2ban/filter.d ##条件匹配文件目录,过滤日志关键内容/etc/fail2ban/jail.conf ## fail2ban防护配置文件/etc/fail2ban/fail2ban.conf ## fail2ban配置文件,定义日志级别、日志、sock 文件位置等
3、fail2ban.conf 配置
shell > grep -v ^# /etc/fail2ban/fail2ban.conf
[Definition]
loglevel = 3 ##定义日志级别,默认
logtarget = /var/log/fail2ban.log ##定义 fail2ban 日志文件
socket = /var/run/fail2ban/fail2ban.sock ## sock文件存放位置,默认
pidfile = /var/run/fail2ban/fail2ban.pid ## pid文件存放位置,默认
4、jail.conf 防护配置
shell > grep -v ^# /etc/fail2ban/jail.conf
[DEFAULT] ##全局设置,优先级最小
ignoreip = 127.0.0.1/8 ##不受限制的 IP ,多组用空格分割
bantime = 600 ##非法 IP 被屏蔽时间(秒),-1 代表永远封锁
findtime = 600 ##设置多长时间(秒)内超过 maxretry 限制次数即被封锁
maxretry = 3 ##最大尝试次数
backend = auto ##日志修改检测机制(gamin 、polling 、auto 三种)
usedns = warn
[ssh-iptables] ##分类设置(基于 SSHD 服务的防护)
enabled = true ##是否开启防护,false 为关闭
filter = sshd ##过滤规则 filter 名称,对应 filter.d 目录下的 sshd.conf
action = iptables[name=SSH, port=ssh, protocol=tcp] ##动作参数
sendmail-whois[name=SSH, [email protected], [email protected], sendername="Fail2Ban"] ##邮件通知参数
##收件人地址 ## 发件人地址
logpath = /var/log/secure ##检测系统登陆日志文件
maxretry = 5 ##最大尝试次数
##默认此配置文件中还有大量的服务防护配置,只不过默认都是关闭(false)状态,不用理会。
5、fail2ban 启动、测试 SSHD 防护
shell > service fail2ban start ##如果重启 iptables ,必须重启 fail2ban
shell > fail2ban-client status ##可以看到有一个实例已经开始监控
Status
|- Number of jail: 1
`- Jail list: ssh-iptables
shell > iptables -nL ## iptables也加入了一条规则
fail2ban-SSH tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
##这时客户端尝试登陆本机,故意输入五次密码,就会看到如下日志:
shell > tail -1 /var/log/fail2ban.log
2015-06-05 17:39:19,647 fail2ban.actions[1313]: WARNING [ssh-iptables] Ban 192.168.214.1
##可以看到:192.168.214.1 被 Ban 掉了。
shell > cat /var/log/secure ##系统登陆日志
Jun 5 17:39:01 localhost sshd[1341]: Failed password for root from 192.168.214.1 port 2444 ssh2
Jun 5 17:39:06 localhost sshd[1341]: Failed password for root from 192.168.214.1 port 2444 ssh2
Jun 5 17:39:11 localhost sshd[1341]: Failed password for root from 192.168.214.1 port 2444 ssh2
Jun 5 17:39:14 localhost sshd[1341]: Failed password for root from 192.168.214.1 port 2444 ssh2
Jun 5 17:39:18 localhost sshd[1341]: Failed password for root from 192.168.214.1 port 2444 ssh2
Jun 5 17:41:39 localhost login: pam_unix(login:session): session opened for user root by LOGIN(uid=0)
6、加入 Nginx 防护( httpd 代替 )
##目的是把规定时间内达到限定访问次数的 IP 封锁(例如,一分钟内有几百次请求)
shell > vim /etc/fail2ban/jail.conf
[nginx] ## nginx防护
enabled = true
filter = nginx ##访问规则定义文件,位置在 /etc/fail2ban/filter.d/nginx.conf
action = iptables[name=nginx, port=http, protocol=tcp]
sendmail-whois[name=nginx, dest=1355*******@139.com, [email protected], sendername="Fail2Ban"]
logpath = /var/log/httpd/access_log ## nginx访问日志
bantime = 86400 ##符合规则的屏蔽一天,如果参数值与全局有冲突,优先级大于全局配置
findtime = 600 ## 10分钟内访问超过 maxretry 次数的封锁 IP
maxretry = 1000 ##最大尝试次数
shell > vim /etc/fail2ban/filter.d/nginx.conf
[Definition]
failregex =.*-.*-.*$ ## 表示访问 IP ,其余的其实是最简单匹配了。因为这里没有要匹配精确的 URL ,只是限制访问次数
ignoreregex =
shell > fail2ban-regex /var/log/httpd/access_log /etc/fail2ban/filter.d/nginx.conf ##可以测试条件规则是否可用
shell > service fail2ban restart ##重启服务
shell > fail2ban-client status ##可以看到有两个实例在监控中
Status
|- Number of jail: 2
`- Jail list: nginx, ssh-iptables
##开始测试,通过脚本或者不管刷新页面测试 Nginx 防护( 便于测试,可以将 maxretry 的值调为 10 )
shell > fail2ban-client status nginx ##可以看到被 Ban 掉的 IP
Status for the jail: nginx
|- filter
| |- File list: /var/log/httpd/access_log
| |- Currently failed: 1
| `- Total failed: 39
`- action
|- Currently banned: 1
| `- IP list: 192.168.214.1
`- Total banned: 1
Linux下使用extundelete实现文件/文件夹数据恢复
注意事项
恢复文件的时候一定要卸载磁盘分区
1.首先关闭防火墙和SELINUX
2.在虚拟机上创建一个2G的磁盘
# fdisk /dev/sdb
n+p+1+回车+回车+w
4.使分区无需重启就能生效
# partx -a /dev/sdb
5.格式化为ext4分区并挂载
# mkfs.ext4 /dev/sdb1
# mkdir /data
# mount /dev/sdb1 /data
注: 在实际线上恢复过程中,切勿将extundelete安装到你误删的文件所在硬盘,这样会有一定几率将需要恢复的数据彻底覆盖。
建议加装一块硬盘将extundelete安装到此硬盘,再做以下操作。
二.extundelete安装
1.安装依赖包
2.下载并安装extundelete
# wget http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
# tar -jxvf extundelete-0.2.4.tar.bz2
# cd extundelete-0.2.4
# ./configure --prefix=/usr/local/extundelete
# make && make install
3.验证是否安装成功
# cd /usr/local/extundelete/bin
# ./extundelete -v
4.设置环境变量
# echo "PATH=/usr/local/extundelete/bin:$PATH" >> /etc/profile
# echo "export PATH" >> /etc/profile
# source /etc/profile
5.上传一些图片,安装包等文件到/data目录
# cd /data
# yum install lrzsz -y
# rz
-------------
本地文件.....
-------------
# ls
------------------
lost+found mysql-5.6.10.tar.gz nginx.conf pic.jpg
------------------
6.全部删除
# rm -rf *
7.查看被删除文件
1).查看前需卸载该磁盘分区
# cd ~
# umount /dev/sdb1
2).查看文件
注:一般一个分区挂载到一个目录下时,这个”根”目录的inode值为2
我们为了查看根目录所有文件,所以查看分区inode为2的这个部分
# extundelete /dev/sdb1 --inode 2
--------------------------------
.....
File name | Inode number | Deleted status
. 2
.. 2
lost+found 11 Deleted
mysql-5.6.10.tar.gz 12 Deleted
nginx.conf 13 Deleted
pic.jpg 14 Deleted
--------------------------------
注:标记为”Deleted”的文件则是被删除的文件
8.恢复指定的文件
注: 默认被删文件会恢复到当前目录下的RECOVERED_FILES目录中去
# extundelete --restore-file pic.jpg /dev/sdb1
# cd RECOVERED_FILES/
# ll
----------------
-rw-r--r-- 1 root root 52592 8月 13 07:18 pic.jpg
----------------
9.完全恢复设备上文件
# extundelete --restore-all /dev/sdb1
# ll
-----------------------------------
总用量34464
-rw-r--r-- 1 root root 35174149 8月 13 07:24 mysql-5.6.10.tar.gz
-rw-r--r-- 1 root root 4551 8月 13 07:24 nginx.conf
-rw-r--r-- 1 root root 52592 8月 13 07:18 pic.jpg
-rw-r--r-- 1 root root 52592 8月 13 07:24 pic.jpg.v1
-----------------------------------
注:这里完全恢复并不会把之前恢复的pic.jpg文件覆盖掉,而是重命名为pic.jpg.v1
10.恢复指定的时间点后被删文件
1).指定一个时间点
# date -d "Sep 4 03:09:13 2013" +%s
------------------
1378235353
------------------
2).恢复这个时间点后的文件
# extundelete --restore-all --after “1378235353” /dev/sdb1
--------------------
..........
--------------------
注:如果要恢之前的就用before参数。extundelete命令与after结合使用,在进行恢复时非常有用,可以过滤掉那太旧的文件,减小恢复压力。
11.检验是否恢复成功
# md5sum RECOVERED_FILES/mysql-5.6.10.tar.gz
------------------------------------
9dcee911fb4bc7e977a6b63f4d3ffa63 RECOVERED_FILES/mysql-5.6.10.tar.gz
------------------------------------
上传刚才误删的mysql安装包
# rz
...
# md5sum mysql-5.6.10.tar.gz
---------------------------------
9dcee911fb4bc7e977a6b63f4d3ffa63 mysql-5.6.10.tar.gz
---------------------------------
MD5值相同,恢复成功。。。
-----------大功告成-------------
5.写出你认为的运维是什么
保证代码上线后,你的服务正常能够被用户访问。