红联Linux门户
Linux帮助

Linux下用fail2ban防止攻击

发布时间:2014-08-08 15:57:40来源:linux网站作者:perfectpdl

fail2ban可以监视你的系统日志,然后匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作(一般情况下是调用防火墙屏蔽),如:当有人在试探你的SSH、SMTP、FTP密码,只要达到你预设的次数,fail2ban就会调用防火墙屏蔽这个IP,而且可以发送e-mail通知系统管理员

通过iptables, tcp-wrapper, shorewall等方式阻止此IP的访问。

需要Pytion支持


python安装方法:

cd /tmp
wget http://python.org/ftp/python/2.7.3/Python-2.7.3.tgz
tar xzf Python-2.7.3.tgz
cd Python-2.7.3
./configure
make && make install
rm -rf /usr/bin/python
ln -s /tmp/Python-2.7.3/python /usr/bin/


fail2ban安装

cd /tmp
wget https://github.com/downloads/fail2ban/fail2ban/fail2ban_0.8.6.orig.tar.gz
tar xzf fail2ban_0.8.6.orig.tar.gz
cd fail2ban-fail2ban-a20d1f8/
./setup.py install
cp files/RedHat-initd  /etc/init.d/fail2ban
chmod 755 /etc/init.d/fail2ban


配置fail2ban日志轮循:

vi /etc/logrotate.d/fail2ban

写入:

/var/log/fail2ban.log {
    weekly
    rotate 7
    missingok
    compress
    postrotate
      /etc/init.d/fail2ban restart 1>/dev/null || true
    endscript
}


fail2ban使用方法
配置文件:

/etc/fail2ban/
├── action.d
│  ├── dummy.conf
│  ├── hostsdeny.conf
│  ├── iptables.conf
│  ├── mail-whois.conf
│  ├── mail.conf
│  └── shorewall.conf
├── fail2ban.conf
├── fail2ban.local
├── filter.d
│  ├── apache-auth.conf
│  ├── apache-noscript.conf
│  ├── couriersmtp.conf
│  ├── postfix.conf
│  ├── proftpd.conf
│  ├── qmail.conf
│  ├── sasl.conf
│  ├── sshd.conf
│  └── vsftpd.conf
├── jail.conf
└── jail.local


目录action.d下的文件指定满足条件时执行的一些动作,比如使用iptables禁止ip访问。
目录filter.d下的文件定义匹配日志的正则表达式。
fail2ban.conf文件是配置fail2ban-server程序启动的一些参数
jail.conf文件包含filter及action的指定。
每个conf文件可被local文件覆盖,conf文件第一个被读取,接着是读取local文件,所以local文件中定义的参数会覆盖conf中的参数。所以我们不需要添加所有的内容到local文件,只需要添加conf文件中你想覆盖的部分参数就好。


防ssh及vsftpd暴力破解实例

建立/etc/fail2ban/jail.local文件,在文件中加入:

[vsftpd-iptables]
enabled = true
filter = vsftpd
action = iptables[name=VSFTPD, port=ftp, protocol=tcp]
sendmail-whois[name=VSFTPD, dest=you@mail.com]
logpath = /var/log/secure
maxretry = 3
[ssh-iptables]
enabled  = true
filter  = sshd
action  = iptables[name=SSH, port=ssh, protocol=tcp]
          sendmail-whois[name=SSH, dest=you@example.com, sender=fail2ban@example.com]
logpath  = /var/log/secure.log
maxretry = 5

enabled:可选值false,true

filter:指定/etc/fail2ban/filter.d/目录下的正则文件,如filter = sshd则是指定/etc/fail2ban/filter.d/sshd.conf。

action:指定执行的动作,具体动作文件在/etc/fail2ban/action.d目录下。

logpath:指定监控日志的路径。

maxretry:执行action匹配的次数。

接着执行:

service iptables start

service fail2ban start

可以用fail2ban 分析freeswitch log文件,当发现注册攻击时启用防火墙规则拒绝此ip的请求。