本站承诺永不接任何虚假欺骗、联盟广告、弹窗广告、病毒广告、诱导充值等影响用户体验的广告,广告屏蔽插件会影响本站部分功能,还请不要屏蔽本站广告,感谢支持!

当前位置:首页 / 正文

2022-12-09 | 编程技术 | 1646 次阅读 | 等你评论 | 0 次点赞 | 繁体

Fail2Ban安装使用教程
因为作为一个 linux 入门级别的小白, 很多人都会把一些 web 面板(比如宝塔面板)作为自己管理 vps 的首选, 而当我一段时间登录宝塔面板之后, 有时就会看到提示发现自己的 SSH 登录竟然失败了上万次! 可这都不是我干的呀(我不是我没有!) 如果自己的 SSH 密码真的被暴力破解了怎么办呢? 那么…试试 fail2ban?

安装

1、对于CentOS6以下, 以及Fedora

sudo yum install fail2ban

2、对于ubuntu, Debian或Linux Mint

sudo apt-get install 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 文件位置等

cd /etc/fail2ban                 # 进入配置文件所在的目录
cp jail.conf jail.local          # 备份配置文件

配置 fail2ban

通过运行上面的命令, 我们已经完成了 fail2ban 的安装, 接下来就是 fail2ban 的配置

首先使用 vi 或者 vim 打开 fail2ban 的规则配置文件

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
vi /etc/fail2ban/jail.local

你将会看到这样的配置文件(从红色划线记号 [Default] 开始向下翻阅需要更改的配置)

图片alt

在 [Default] 中, 主要修改 bantime, findtime, 以及 maxretry 这三个选项

图片alt

图片中三个选项的意思就是在 10 分钟内失败超过 3 次的用户将会被封禁 24 小时

接下来可以按需开启需要的规则, 前文我们说到的 ssh 暴力破解,可以通过设置 fail2ban 中的 [sshd] 规则来防止。

从 [Default] 继续向下翻阅很长的一段之后,我们就来到单个规则的配置啦, 以单个开启 [sshd] 规则为例

图片alt

我们需要设置 enabled=true 来激活它; 如果你有更改过 ssh 的端口的话(比如改成 1123), 就在 port 需要添加 1123 这个端口(如图)

图片alt

修改封禁方式为 firewall

banaction = firewallcmd-multiport

修改完配置之后,需要重载让配置生效:

fail2ban-client reload

变更 iptables 封禁策略

Fail2ban 的默认 iptables 封禁策略为 REJECT --reject-with icmp-port-unreachable,需要变更 iptables 封禁策略为 DROP。

cp /etc/fail2ban/action.d/iptables-multiport.conf /etc/fail2ban/action.d/iptables-multiport.local
vi /etc/fail2ban/action.d/iptables-multiport.local

修改内容如下:

[Init]

blocktype = DROP

最后,别忘记重启fail2ban使其生效

sudo systemctl restart fail2ban

激活 fail2ban

在配置完成后, 当然是选择激活它啦

1、对于 CentOS7/8,Fedora

sudo systemctl restart fail2ban

2、对于 Debian, Ubuntu 或 CentOS6:

sudo service fail2ban restart

如果是第一次启动的话建议把命令中的 restart 换成 start

CentOS 设置 fail2ban 自启

systemctl enable fail2ban.service

检验 fail2ban

如果要检验 fail2ban 有没有正确启动, 可以使用这个命令

sudo fail2ban-client ping

如果正确启动的话 fail2ban 会以 pong 作为回应 (Server replied: pong), 其他情况就需要看看配置文件的格式正确以及是不是用 start 命令启动 fail2ban 什么的…

如果要查看 fail2ban 目前启用的规则的话

fail2ban-client status

查看某个规则下被封禁的次数以及 ip(以 [sshd] 规则为例)

fail2ban-client status sshd

查看当前被禁止登陆的ip:

[root@121]# fail2ban-client status ssh-iptables

Status for the jail: ssh-iptables
|- filter
|  |- File list:    /var/log/secure     #日志文件路径
|  |- Currently failed:    0        #当前失败次数
|  `- Total failed:    3            #总失败次数
`- action
   |- Currently banned:    1        #当前禁止的ip数量
   |  `- IP list:    192.168.1.112        #当前禁止的ip
   `- Total banned:    1        #禁止的ip总数

fail2ban-client

命令说明
start启动fail2ban server和监狱
reload重新加载配置文件
stop暂停fail2ban和监狱
status查看运行的监控服务数量和列表
set loglevel设置日志等级,有 CRITICAL, ERROR, WARNING,NOTICE, INFO, DEBUG
get loglevel获取当前日志的等级
set <JAIL> idle onoff设置某个监控(监狱)的状态。
set <JAIL> addignoreip <IP>设置某个监控(监狱)可以忽略的ip
set <JAIL> delignoreip <IP>删除某个监控(监狱)可以忽略的ip
set <JAIL> banip <IP>将ip加入 监控(监狱)
set <JAIL> unbanip <IP>将ip从监控(监狱)移除

查看 fail2ban 的日志

fail2ban 的日志默认在 /var/log/fail2ban.log

日志中记录着 Ban IP 的记录和 UnBan IP 的记录

也有修改配置文件重载后的记录

cat /var/log/fail2ban

图片alt

常用配置防护

1、配置 ssh 连接错误次数限制

追加配置

vi /etc/fail2ban/jail.d/jail.local

# 针对各服务的检查配置,如设置bantime、findtime、maxretry和全局冲突,服务优先级大于全局设置
[ssh-iptables]
# 忽略的IP列表,不受设置限制(白名单)
ignoreip = 127.0.0.1
# 日志修改检测机制(gamin、polling和auto这三种)
backend=auto
# 是否激活此项(true/false)
enabled=true
# 过滤规则filter的名字,对应filter.d目录下的sshd.conf
filter= sshd
# ssh端口
port=22
# 动作的相关参数
blocktype = DROP
action= %(banaction)s[blocktype=%(blocktype)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
# 触发报警的收件人
# sendmail-whois[name=SSH, dest=root, sender=邮箱地址, sendername="Fail2Ban"]
# 检测的系统的登陆日志文件
logpath=/var/log/secure
# 禁止30分钟
bantime=1800
# 这个时间段内超过规定次数会被ban掉
findtime=300
# 最大尝试次数
maxretry=3

重载配置:fail2ban-client reload

查看状态:fail2ban-client status ssh-iptables

2、封禁访问 nginx 404 状态码的 ip 地址的配置规则

vi /etc/fail2ban/filter.d/nginx-404.conf

[Definition]
failregex = <HOST> -.*- .*HTTP/*.* (404|444|403|400) .* .*$
ignoreregex =

保存后测试配置文件相对于日志是否正确

fail2ban-regex /www/wwwlogs/access.log /etc/fail2ban/filter.d/nginx-404.conf

图片alt

可以看出一共五条记录,规则过滤出了两条,三条正常的记录

然后将封禁规则加入配置文件

vi /etc/fail2ban/jail.d/jail.local    # 文件尾部写入

[nginx-404]
enabled = true
port = http,https
filter = nginx-404
action = %(banaction)s[blocktype=%(blocktype)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
blocktype = DROP
logpath = /home/wwwlogs/access.log
bantime = 14400
findtime = 3
maxretry = 3
  • filter:规则文件的名字
  • blocktype:封禁IP模式
  • logpath:日志路径
  • bantime:封禁的时间
  • findtime:在几秒内
  • maxretry:有几次

如果是多个日志文件注意一定要对齐,等号后面的一定要对齐

logpath = /www/wwwlogs/access.log

       /www/wwwlogs/wangtwothree.log
       /www/wwwlogs/blog.wangtwothree.com.log

重载配置:fail2ban-client reload

查看状态:fail2ban-client status nginx-404

3、简单防 CC 攻击

以 Nginx 为例,使用 fail2ban 来监视 nginx 日志,匹配短时间内频繁请求的 IP,并使用 firewalld 将其 IP 屏蔽,达到 CC 防护的作用。

增加规则

vi /etc/fail2ban/filter.d/nginx-cc.conf

[Definition]
failregex = <HOST> -.*- .*HTTP/*.* .* .*$
ignoreregex =

检测规则:

fail2ban-regex /www/wwwlogs/access.log "<HOST> -.*- .*HTTP/*.* .* .*$"

fail2ban-regex /www/wwwlogs/access.log /etc/fail2ban/filter.d/nginx-cc.conf

追加配置

vi /etc/fail2ban/jail.d/jail.local

[nginx-cc]
filter      = nginx-cc
enabled     = true
port        = http,https
bantime     = 2h
findtime    = 30s
maxretry    = 40
action      = %(banaction)s[blocktype=%(blocktype)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
blocktype = DROP
logpath     = /www/wwwlogs/access.log

意思是如果在 30 秒内,同一 IP 达到 40 次请求,则将其封禁 2 小时,具体根据实际情况修改。

重载配置:fail2ban-client reload

查看状态:fail2ban-client status nginx-cc

黑名单验证

要验证 FirewallD 黑名单是否成功,请检查 drop 区和 blacklist ipset

sudo firewall-cmd --direct --get-all-rules
sudo firewall-cmd --list-all
sudo firewall-cmd --list-rich-rules
sudo firewall-cmd --info-zone=drop
sudo firewall-cmd --info-ipset=blacklist | less

第二条命令将输出所有的子网,这些子网是基于被封杀的国家而添加的,可能会相当长。

标签: linuxnginx服务器安全

猜你喜欢
局域内网的服务器利用个人电脑做跳板机访问互联网
公司内网的服务器均不连公网(互联网),问题来了:现在服务器上需要安装一些软件怎么办?目前一般都是编译安装!先将软件在外网机器上下载好,然后再复制到服务器内,编译安装!这种方式缺点就是比较麻烦,编...
据传宝塔面板后台会上传服务器上运行的网站信息
近期有网友根据 Github 上公开的源代码,发现宝塔面板会收集如下信息(信息真假自辩):(1)收集你所在服务器上的域名,并检查域名是否可用;(2)收集面板操作日志包括时间、用户ip、请求方式、...
如何定位Mysql中CPU占用高的查询语句
今天 mysql 服务器突然 CPU 告警,记录一下问题查找的过程第一步查看具体是哪个线程占用CPU最高1、在 Linux 中使用 top 命令找到 mysql 进程 PID2、指定进程 PID...
新安装Debian系统常用设置
解决 debian 系统没有 sudo 命令的问题刚装机的 debian 系统是没有 sudo 命令的,其实执行下面指令就可以安装:apt-get install sudo然后还需要把当前用户加...
MAC系统制作ubuntu启动U盘教程
最近新买了一台便宜的低功耗小主机惠普 T620,CPU 是 AMD 的 GX-415GA,4G 内存,准备给他刷个 ubuntu 系统,用来做简易的 NAS,并且安装 homeassistant...
树莓派开启Samba共享(smb)
什么是 Samba用简洁易懂的话说就是可以通过局域网,使用 Samba 给树莓派交换文件,具体专业的怎么说并不重要,可以去别的网上搜索,在这里只需要记住 Samba 可以传文件。安装 Samba...
javascript | 原生JS多语言切换简单实现
由于项目需要实现一个前端的多语言切换,不想因为一个简单的功能就引入 jQuery,所以经过 google 编程大法摸索出一个原生 JS 就可以实现的多语言前端切换的小例子,仅供参考。 ![图片a
Typecho纯代码生成sitemap站点地图
想要实现 Typecho 纯代码生成 sitemap 站点地图只需要 2 步就够了。 1、在博客主题目录新建 sitemap.php 页面,放入以下代码: ```
(首次提交评论需审核通过才会显示,请勿重复提交)