惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

AWS News Blog
AWS News Blog
F
Fortinet All Blogs
T
The Blog of Author Tim Ferriss
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
A
About on SuperTechFans
WordPress大学
WordPress大学
MongoDB | Blog
MongoDB | Blog
T
Tailwind CSS Blog
美团技术团队
P
Proofpoint News Feed
MyScale Blog
MyScale Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Microsoft Security Blog
Microsoft Security Blog
GbyAI
GbyAI
U
Unit 42
有赞技术团队
有赞技术团队
G
GRAHAM CLULEY
Scott Helme
Scott Helme
小众软件
小众软件
T
Threatpost
S
Securelist
SecWiki News
SecWiki News
Recent Announcements
Recent Announcements
L
LINUX DO - 最新话题
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
罗磊的独立博客
Y
Y Combinator Blog
aimingoo的专栏
aimingoo的专栏
Security Latest
Security Latest
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
AI
AI
Schneier on Security
Schneier on Security
博客园 - 叶小钗
The GitHub Blog
The GitHub Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
Google DeepMind News
Google DeepMind News
M
MIT News - Artificial intelligence
B
Blog RSS Feed
酷 壳 – CoolShell
酷 壳 – CoolShell
爱范儿
爱范儿
S
Secure Thoughts
博客园 - 聂微东
The Hacker News
The Hacker News
Stack Overflow Blog
Stack Overflow Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Cloudbric
Cloudbric
V
V2EX
Attack and Defense Labs
Attack and Defense Labs
宝玉的分享
宝玉的分享
Vercel News
Vercel News

膨胀自留地

使用CloudFlare标记管理功能优雅的使用谷歌分析 四天轻松版北京旅游攻略 Adsense税务居住地证明申请教程:如何申请中国税收居民身份证明以及Google Adsense更新新加坡税务信息教程 常见的 VPS 优化措施 HTML实现table表格移动端自动转为卡片样式 个人网站接入 Google 登录 如何从 GitHub 永久删除泄露的 .env 文件 Cloudflare设置www的域名跳转到不带www的域名 顶级iOS神器!全面解开App Store限制,AssPP Pro保姆级教程 BroadcastChannel将你的 Telegram Channel 转为微博客 Medama开源轻量级网站统计(分析)系统 白嫖一个网站监控面板:uptime-kuma 部署TraffMonetizer利用闲置VPS挂机赚钱 Counterscale-使用CloudflareWorkers部署的免费网站数据统计工具,界面类似umami 封装一个最简单的Axios,避免过度封装! 如何使用Cloudflare Email Routing创建域名邮箱免费发送邮件 使用Cron定时更新Hosts解决Gihub无法访问问题 容器化MariaDB/Mysql实现定时备份 JetBrains全家桶许可证服务器怎么找,JetBrains激活教程 图片加速接口:缓存图片,加速访问,解决防盗链 MySQL模糊查询再也不用like+%了,全文索引介绍及使用简介 为什么这么多人推荐你办理流量卡?流量卡怎么赚钱?怎么避坑? 借助Cloudflare Worker实现Google Analytics反代加速,规避广告屏蔽插件的拦截 etcd入门之在Centos上安装部署 Grafana在linux下安装和基本使用入门 Prometheus介绍、安装和基本功能快速入门 无需加速器,油猴插件解锁xbox云游戏 阿里云盘自动每日签到,无需部署,无需服务器 自定义VSCode终端主题样式 一行 CSS 代码实现响应式布局 – 使用 Grid 实现的响应式布局 加不加「/」?Nginx location 路径与 proxy_pass 的规律 Mac上Git多账户SSH配置 python 脚本命令行调用 cloudflare Wokers AI 对话示例 使用acme.sh自动申请Let's Encrypt泛域名证书 centos离线(内网环境无外网)安装docker 什么是ChatGPT API公益水龙头? Mysql8主从复制实现过程记录 纯绿色无需安装软件,10行代码即可长期关闭Windows系统更新 使用 Vercel 部署 Umami,从零开始搭建一个免费的个人博客数据统计 JS | JS实现Web应用或网站发送浏览器Notification通知 Go | 使用rsrc给golang打包的exe文件添加程序图标 Go | 基于最新的 ChatGPT API 实现命令行版 ChatGPT JS | 原生js仿ElementUI消息提示组件,含生命周期钩子 Go | 包依赖管理工具go mod使用详解 Go | 解决低版本Goland调试问题:Version of Delve is too old for this version 薅京东羊毛必备抓取Cookies教程 使用Nginx反向代理解决 Google Analytics 访问问题 Typecho纯代码生成sitemap站点地图 Lazysizes.js图片懒加载的使用 typecho使用文件缓存加快打开速度 白嫖移动,联通,电信手机短信通知 MacOS上使用可视化界面给ESP8266烧录MicroPython教程 通用的检测到广告屏蔽插件进行弹窗提示实现方法 如何在 ESP 单片机上选用合适的引脚 如何找回微信已过期文件教程 一键脚本安装的 HASSIO 如何卸载呢 SqliteAdmin 宝塔面板sqlite数据库可视化管理(简单版) PostToBingIndexNow插件实现typecho发布文章自动推送到Bing站长平台 javascript | 原生JS多语言切换简单实现 Mysql8安全清理mysql.slow慢查询日志和general_log文件 NUC8黑苹果更新OpenCore引导教程,黑苹果EFI分区空间占满处理方法 局域内网的服务器利用个人电脑做跳板机访问互联网 ssh-chat- SSH命令行下聊天摸鱼服务 Python小技巧之不用GUI,照样实现图形界面 Linux下防御/减轻DDOS攻击工具DDoS deflate安装配置教程 据传宝塔面板后台会上传服务器上运行的网站信息 如何定位Mysql中CPU占用高的查询语句 python使用多线程threading模块长期循环运行内存泄漏问题解决 Linux系统VI方向键、删除键按出来是字母解决方法 python | 协程与多进程的完美结合 新安装Debian系统常用设置 MAC系统制作ubuntu启动U盘教程 利用树莓派打造时间机器 TimeMachine MAC游戏 | 公路救赎 Road Redemption May 2020 Mac摩托车竞速暴力游戏中文破解版 MAC游戏 | 笨拙英雄 Clunky Hero 0.92 Mac手绘风格的类银河战士恶魔城动作冒险游戏破解版 MAC游戏 | 拉力赛艺术Art of Rally 1.0.4b Mac卡通风格的赛车竞速游戏破解版 MAC游戏 | Len's Island 1.0 Mac 破解版 开放世界农场模拟探索游戏 MAC游戏 | 洛基Röki3.2_Mac点击型冒险游戏中文破解版 typecho聚合全文输出feed设置仅输出摘要自动截取正文前200个字符 树莓派开启Samba共享(smb) 为什么网站知道我的爬虫使用了代理? 给Edge大声朗读同源的微软tts增加下载音频按钮(tampermonkey脚本) 为了了解女朋友的小心思,我用 python 爬了榜姐微博下 70000 个女生小秘密! MAC外接屏幕亮度调节工具——BrightnessE mysql8利用CTE特性实现递归查询 漫威宇宙时间线观看顺序(持续更新) Typecho 评论弹幕插件下载及食用教程 反爬虫的极致手段,几行代码直接炸了爬虫服务器 教你轻松拥有无限个邮箱 核弹级教程:手把手教你白嫖上百个订阅节点 部署 Monit 来监控服务 「工具」Windows 卸载软件,这一个就够了 闲置服务器薅京东的羊毛—青龙面板部署与京东签到 捡垃圾8.5元智能wifi插座拆解,刷ESPHome接入HomeAssistant-超低价ESP8266开关 RS1.ES 免费Linux云服务器,单次使用3小时,不限次数! Typecho 启用 Service Workers 浏览器缓存加速首屏访问 Waiting for table metadata lock问题处理 关于a标签target_blank使用rel=noopener 宝塔默认站点泄漏源站IP,使用CDN后censys.io出现源站IP泄漏解决方法 百度云加速提示:502网关错误,解决办法以及如何添加百度云加速节点IP白名单教程
Fail2Ban安装使用及常用配置教程
2022-12-09 · via 膨胀自留地

#编程技术 2022-12-09 19:28:00 | 全文 2142 字,阅读约需 5 分钟 | 加载中... 次浏览

👋 相关阅读


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 idle on\off 设置某个监控(监狱)的状态。
set addignoreip 设置某个监控(监狱)可以忽略的ip
set delignoreip 删除某个监控(监狱)可以忽略的ip
set banip 将ip加入 监控(监狱)
set unbanip 将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

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


×