看我如何巧妙配置两款安全工具防范蛮力攻击

译文
安全 黑客攻防 数据安全
蛮力攻击是应用程序采用的反复尝试方法,以破解你的加密数据。加密数据可能是任何密码或密钥。简单来说,蛮力攻击应用程序会尝试所有可能的密码或密钥组合,反复尝试,直到找到正确的密码或密钥为止。这就需要一段时间,具体取决于密码的复杂性。

蛮力攻击简介

我们都知道这句流行语:“预防胜过治疗。”如果你是个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秒后会被解禁。

就是这样。但愿这两款工具对你会有所帮助。

祝你好运!

责任编辑:蓝雨泪 来源: 51CTO.com
相关推荐

2019-07-31 11:30:25

MySQL数据库工具

2015-11-25 14:43:44

2011-10-09 11:00:17

2021-03-13 16:14:58

iOS磁力下载App

2009-08-13 17:40:55

2012-10-24 14:35:15

2010-07-12 15:43:35

UML建模工具

2011-08-05 15:19:53

注册表注册表编辑器RegCleane

2010-05-26 09:10:44

Windows清理工具

2010-06-28 09:53:43

UML建模工具Rose

2016-11-09 08:49:39

Linux桌面录制

2014-08-19 10:14:47

App应用原型设计工具

2009-10-21 14:44:11

2022-04-25 08:18:18

Linux 服务器SSH 暴力攻击

2016-11-08 09:43:02

Linux桌面录制工具

2020-11-09 16:20:59

Kubernetes工具Linux

2019-12-20 09:11:11

智恒科技

2020-12-16 15:56:05

Kubernetes日志工具

2015-05-08 12:17:53

2018-07-16 08:36:13

点赞
收藏

51CTO技术栈公众号