蛮力攻击简介
我们都知道这句流行语:“预防胜过治疗。”如果你是个Linux系统管理员,可能知道“蛮力攻击应用程序”如何在你的本地或远程服务器引发问题。设想一下:如果你的服务器遭到了身份未知的攻击者的攻击,服务器上的数据就会落到坏人手里。这肯定会让你和贵公司陷入从未想过的大麻烦。蛮力攻击是应用程序采用的反复尝试方法,以破解你的加密数据。加密数据可能是任何密码或密钥。简单来说,蛮力攻击应用程序会尝试所有可能的密码或密钥组合,反复尝试,直到找到正确的密码或密钥为止。这就需要一段时间,具体取决于密码的复杂性。如果要花过长的时间才能找到密码,那么可以说你的密码很安全、很强壮。
现在可以使用一些巧妙的工具来阻止或预防蛮力攻击。今天,我们就来探讨下列工具。
1. SSHGuard ; 2. Fail2Ban.
提醒一下:不要将这两个工具都安装在同一个系统上。你可能无法获得正确的结果。
首先,让我们看一下SSHGuard,以及如何安装和配置它,以预防蛮力攻击。
1. SSHGuard
SSHGuard(http://www.sshguard.net)是一种快速、轻便的监控工具,用C语言编写而成。它可以使用日志活动,监控服务器,保护服务器远离蛮力攻击。要是有人不断地试图通过SSH访问你的服务器,多次(可能四次)尝试访问失败,SSHGuard就会将对方的IP地址放入到iptables,在一段时间内阻止他/她访问。之后,它会在一段时间后自动解锁。它几乎能保护所有的服务,比如sendmail、exim、dovecot、vsftpd、proftpd及许多服务,而不光光保护SSH。
安装SSHGuard
在Ubuntu/Debian上,SSHGuard就在默认的软件库中。
于是,我们可以用下列命令来轻松安装它:
sudo apt-get install sshguard
在CentOS/RHEL 6.x上:
先下载并添加FlexBox软件库,如下所示。
wget http://sourceforge.net/projects/flexbox/files/flexbox-release-1-1.noarch.rpm
使用下列命令更新软件库列表:
yum repolist
最后,使用下列命令安装sshguard:
yum install sshguard
至于其他发行版,从官方网站(http://www.sshguard.net/download/)下载各自的二进制文件,并自行安装。
或者,你也可以从这里(http://pkgs.org/download/sshguard)来下载。
用Iptables/Netfilter配置SSHGuard
SSHGuard没有配置文件。你要做的就是在iptables中为SSHGuard创建新的链,以插入阻止访问的规则。
为了支持IPv4,在拥有根权限的情况下运行下列命令:
iptables -N sshguard
为了支持IPv6:
ip6tables -N sshguard
现在更新INPUT链,将流量传输到sshguard。指定--dport选项,使用sshguard保护服务的所有端口。如果你想防止攻击者将任何流量传输到主机,就完全删除这个选项。
阻止来自攻击者的所有流量
为了支持IPv4:
iptables -A INPUT -j sshguard
为了支持IPv6:
iptables -A INPUT -j sshguard
阻止来自攻击者的特定服务,比如SSH、FTP、POP或IMAP
为了支持IPv4:
iptables -A INPUT -m multiport -p tcp --destination-ports 21,22,110,143 -j sshguard
为了支持IPv6:
ip6tables -A INPUT -m multiport -p tcp --destination-ports 21,22,110,143-j sshguard
最后,保存iptables规则。
service iptables save
核实你在链中的较高层没有传输所有ssh流量的default allow(默认允许)规则。核实你在防火墙中没有阻止所有ssh流量的default deny(默认拒绝)规则。不论哪种情况,假设你已经拥有调整防火墙设置的技能。
下面是一个合理的示例规则集:
iptables -N sshguard
阻止sshguard表明是不良流量的任何流量:
iptables -A INPUT -j sshguard
启用ssh、dns、http和https:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p udp --dport 53 -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT
阻止之外的所有服务:
iptables -P INPUT DROP
不用Iptables/Netfilter,配置SSHGuard
如果你不用iptables,下列命令可以创建并保存iptables配置;除了让sshguard可以正常运行外,该配置绝对什么都不做:
iptables -F iptables -X iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT iptables -N sshguard iptables -A INPUT -j sshguard
最后,保存iptables配置:
service iptables save
就是这样。现在你已安装并配置了SSHGuard,可以保护你的ssh、ftp及其他服务远离蛮力攻击者。#p#
2. Fail2Ban
Fail2ban(http://www.fail2ban.org/wiki/index.php/Main_Page)是一种开源入侵预防系统,可以用来预防蛮力攻击及其他可疑的恶意攻击。它可以扫描日志文件(比如/var/log/apache/error_log),禁止表明存在可疑迹象(比如密码输错次数过多和寻找安全漏洞等)的IP地址。
一般来说,Fail2Ban之后被用来更新防火墙规则,阻止IP地址在指定的一段时间内访问,不过还可以配置任何随意性的其他操作(比如发送电子邮件或弹出CD-ROM托架)。Fail2Ban在默认情况下随带预先配置的过滤器,可用于众多服务(Apache、curier和SSH等)。
安装Fail2Ban
以根用户身份登录,输入下列命令,安装Fail2Ban:
在Ubuntu/Debian上:
apt-get install fail2ban
在CentOS/RHEL上:
先添加EPEL软件库。
yum install epel-release yum repolist
然后,使用下列命令安装fail2ban:
yum install fail2ban
启用并启动fail2ban服务。
service fail2ban start chkconfig fail2ban on
或者
systemctl enable fail2ban systemctl start fail2ban
这样就完事了。
备份Fail2Ban主配置文件:
所有配置文件都位于/etc/fail2ban目录下。主配置文件是/etc/fail2ban/jail.conf。备份主配置文件是个好主意,以免升级过程中合并。创建/etc/fail2ban/jail.conf文件的本地副本,如下所示:
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
配置Fail2Ban
使用任何编辑工具,打开/etc/fasil2ban/jail.local文件:
vi /etc/fail2ban/jail.local
找到名为[Default]的部分。该部分含有Fail2Ban将遵循的一套基本的规则。根据你的需求来设置值。
下面是我的设置:
[DEFAULT]
# "ignoreip"可能是IP地址、CIDR掩码或DNS主机
ignoreip = 127.0.0.1/8 192.168.1.200/24 [...] bantime = 600 [...] maxretry = 3 # "backend"指定了用来获得文件修改之处的后端。可用选项有"gamin"、"polling"和"auto"。 # yoh:由于某种原因,随Debian交付的python-gamin没有像预期的那样运行。 # 这个问题有待完成,于是轮询是现在的默认后端 [...] backend = auto # # 完全用于插入到jail.{conf,local}配置文件中的目的地电子邮件地址。 destemail = root@localhost [...] #
在这里,
•ignoreip – 将你信任的IP地址列入白名单,防止Fail2Ban阻止。你可以添加空格字符隔开来的多个地址。这里,我将IP地址192.168.1.200列入白名单。所以,该IP地址不会被禁止,即便它发送了数量不受限制的失败登录尝试。
•bantime – 如果某主机被Fail2Ban发现违规,它被禁止的秒数。默认时间是600秒(10分钟)。如果你喜欢,可以延长这个时间值。
•maxretry – 不正确的登录尝试次数,之后主机被Fail2Ban阻止。
服务配置
默认情况下,Fail2Ban含有一套支持各种服务的预定义过滤器。所以你不需要将任何手动项输入到配置文件中。你要做的就是将已启用的值改成true或false,Fail2Ban就会自动监视相应的服务。
下面是jail.local文件中SSH部分的示例输出:
[ssh] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 6
这里不妨看看每一项的简要细节。
•enabled-这意味着,ssh服务保护功能已开启。如果你想关闭,只要设成false。
•port-SSH服务端口。
•filter-它指含有规则的配置文件,Fail2Ban使用这些规则来找到匹配。默认情况下,它被设成sshd,指代/etc/fail2ban/filter.d/sshd.conf文件。
•logpath―记录失败登录尝试的日志文件。
•maxretry-Fail2Ban阻止主机之前不正确的登录尝试次数。
一旦你更改了配置,就要重启Fail2Ban服务,以便保存变更。
systemctl restart fail2ban 或者 service fail2ban restart
你可以使用下列命令,核实Fail2Ban在iptables中添加的规则:
iptables -L
示例输出:
Chain INPUT (policy ACCEPT) target prot opt source destination f2b-sshd tcp -- anywhere anywhere multiport dports ssh ACCEPT all -- anywhere anywhere ctstate RELATED,ESTA BLISHED ACCEPT all -- anywhere anywhere INPUT_direct all -- anywhere anywhere INPUT_ZONES_SOURCE all -- anywhere anywhere INPUT_ZONES all -- anywhere anywhere ACCEPT icmp -- anywhere anywhere REJECT all -- anywhere anywhere reject-with icmp-hos t-prohibited [...]
测试Fail2Ban
我想试几次随机性的失败尝试,从本地客户机连接到Fail2Ban服务器。
然后,我核实/var/log/fail2ban.log文件中的失败登录尝试:
cat /var/log/fail2ban.log
示例输出:
2015-07-13 15:38:15,480 fail2ban.filter [11792]: INFO [sshd] Found 192.168.1.100 2015-07-13 15:38:15,482 fail2ban.filter [11792]: INFO [sshd] Found 192.168.1.100 2015-07-13 15:38:15,483 fail2ban.filter [11792]: INFO [sshd] Found 192.168.1.100 2015-07-13 15:38:15,485 fail2ban.filter [11792]: INFO [sshd] Found 192.168.1.100 2015-07-13 15:38:15,485 fail2ban.filter [11792]: INFO [sshd] Found 192.168.1.100 2015-07-13 15:38:15,487 fail2ban.filter [11792]: INFO [sshd] Found 192.168.1.100 2015-07-13 15:38:15,488 fail2ban.filter [11792]: INFO [sshd] Found 192.168.1.100 2015-07-13 15:38:15,490 fail2ban.filter [11792]: INFO [sshd] Found 192.168.1.100 2015-07-13 15:38:15,491 fail2ban.filter [11792]: INFO [sshd] Found 192.168.1.100 2015-07-13 15:38:15,492 fail2ban.filter [11792]: INFO [sshd] Found 192.168.1.100 2015-07-13 15:38:15,493 fail2ban.filter [11792]: INFO [sshd] Found 192.168.1.100 2015-07-13 15:38:15,495 fail2ban.filter [11792]: INFO [sshd] Found 192.168.1.100 2015-07-13 15:38:15,496 fail2ban.filter [11792]: INFO [sshd] Found 192.168.1.100 2015-07-13 15:38:16,234 fail2ban.actions [11792]: NOTICE [sshd] Ban 192.168.1.100 或者 iptables -L
正如你从上述两段输出中可以看出,我的本地IP地址192.168.1.100已被Fail2Ban禁止。
注意:在默认情况下,被禁止的IP地址在600秒后会被解禁。
就是这样。但愿这两款工具对你会有所帮助。
祝你好运!