Linux防止SSH爆破

技术背景

由于Linux系统的天然优势,我们很多项目的服务都使用了Linux,但同时也会经常遇到一些安全隐患。比如SSH爆破行为,即被人利用SSH远程链接,恶意尝试我们系统的账号密码,进而进行服务入侵行为。为此本文提供一种防止SSH爆破行为的方案及技术- fail2ban

fail2ban是一款实用软件,可以监视你的系统日志,然后匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作。网上大部分教程都是关于fail2ban+iptables组合,考虑到CentOS 7已经自带Firewalld,所以这里我们也可以利用fail2ban+Firewalld来防SSH爆破。

环境要求

1、检查Firewalld是否启用

由于使用fairewalld防火墙进行配置,所以如果您已经安装iptables建议先关闭,以免各种BUG

关闭命令: service iptables stop

# 查看Firewalld状态
firewall-cmd --state
# 启动firewalld
systemctl start firewalld
# 设置开机启动
systemctl enable firewalld.service

 

启动成功后,默认防火墙会限制所有接口的访问,所以需要单独解开限制

添加放行端口示例:

# 放行80端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
# 重载配置
firewall-cmd --reload
# 查看已放行端口
firewall-cmd --zone=public --list-ports

 2、安装fail2ban

# CentOS内置源并未包含fail2ban,需要先安装epel源
yum -y install epel-release
#安装fial2ban
yum -y install fail2ban

 

安装成功后fail2ban配置文件位于/etc/fail2ban,其中jail.conf为主配置文件,相关的匹配规则位于filter.d目录,其它目录/文件一般很少用到。

配置

根据官方推荐,新建jail.local来覆盖fail2ban的一些默认规则,文件放在与jail.conf的同一目录就行。

# 新建文件
cd /etc/fail2ban
touch jail.local
# 编辑配置内容
vim jail.local

# 默认配置
[DEFAULT]
# IP白名单,白名单中的IP不会屏蔽,可填写多个以(,)分隔
ignoreip=127.0.0.1/8
# 屏蔽时间,单位为秒(s)
bantime=3600
# 时间范围
findtime=600
# 最大次数
maxretry=3
# 屏蔽IP所使用的方法,下边面使用firewalld屏蔽端口
banaction=firewallcmd-ipset
# 默认就好
action=%(aciton_mw)s

# 新建规则名称
[sshd]
# 是否启动该规则
enabled=true
# 规则名称,必须填写位于filter.d目录里面的规则,sshd是fail2ban内置规则
filter=sshd
# 对应的端口
port=22
# 需要监视的日志路径
logpath=/var/log/secure

 

 

 

上述配置内容表示:如果同一个IP,在10分钟内,如果连续超过3次错误,则使用Firewalld将他IP ban了。

启动

#启动
systemctl start fail2ban

若此前fail2ban已是启动状态,则需要重启来使配置生效

# 重新启动
systemctl restart fail2ban

到此,fail2ban的配置已经完成,下面就可以在其他机子上利用ssh登陆此服务进行检测了。

常用命令总结

#启动

systemctl start fail2ban

#停止

systemctl stop fail2ban

#开机启动

systemctl enable fail2ban

#查看被ban IP,其中sshd为名称,比如上面的[wordpress]

fail2ban-client status sshd

#删除被ban IP

fail2ban-client set sshd delignoreip 192.168.111.111

fail2ban-client set ssh-iptables unbanip 192.168.111.111

#查看日志

tail /var/log/fail2ban.log

 

 

你可能感兴趣的:(Linux)