家用住宅主机Linux fail2ban自定义规则拦截跨境扫

家用住宅Linux主机暴露在公网后,每天都会收到大量跨境扫描,既占带宽又增加被攻击的可能。
本文面向零基础用户,一步步教你用fail2ban的自定义规则自动识别并封锁来自境外的扫描行为,保护你的小服务器。

核心思路

fail2ban本身不区分IP地域,但通过搭配geoip模块或第三方IP库,我们可以编写一个自定义filter,匹配日志中来自特定国家/地区的请求,然后触发action(比如iptables规则)封禁IP。
下面用最常见的配置方案——利用xt_recent配合CIDR黑名单,但更推荐使用ipset或geoiplookup。
本文采用简单且适合家用的方案:先记录频繁扫描的IP,再通过IP归属地判断是否跨境,然后封禁。

环境准备

  • 操作系统:Ubuntu 20.04+ / Debian 11+(其他发行版类似)
  • 已安装fail2ban(若未安装:sudo apt install fail2ban -y)
  • 确认fail2ban服务运行:sudo systemctl status fail2ban
  • 准备一个用于收集扫描日志的jail(例如针对SSH),确保日志路径正确

自定义filter:识别高频访问尝试

fail2ban默认的sshd规则主要防暴力破解,但无法直接判断“来自境外”。
我们可以创建一个filter,匹配短时间内多次尝试连接的IP(比如1分钟内5次),然后交给action处理。
这一步是通用拦截的基础。

  1. 新建filter文件:

sudo vi /etc/fail2ban/filter.d/crossfire.conf

  1. 填入以下内容(以ssh为例,可复用):
[Definition]
failregex = ^.*Failed password for .* from  port \d+ ssh2$
            ^.*Connection closed by authenticating user .*  port \d+\]
ignoreregex =

这个正则匹配SSH登录失败和连接关闭的记录。
如果你想针对Nginx、Apache等其他服务,需要调整failregex。

创建jail并关联action

fail2ban的action负责执行封禁。
这里我们使用iptables封禁,并配合持久化(可选)。
注意不要直接使用iptables-reject,因为家用环境可能希望更温和地丢弃。

  1. 在/etc/fail2ban/jail.local中新增jail定义(如果没有则创建):
[crossfire]
enabled  = true
filter   = crossfire
logpath  = /var/log/auth.log
maxretry = 5
findtime = 60   # 一分钟内
duration = 86400 # 封一天
action   = iptables[name=crossfire, port=all, protocol=all]

注意:action使用了默认的iptables封禁所有端口。
家用场景下无需区分端口,直接封IP即可。

利用GeoIP判断是否跨境(进阶)

上述配置已能拦截高频扫描,但不区分地域。
如果你希望只拦截境外IP,可借助geoiplookup在action中做二次判断。
下面给出一个简易方案(需安装geoip-bin):

  1. 安装geoip-bin:sudo apt install geoip-bin -y
  2. 编写一个自定义action脚本,在封禁前检查IP归属地,如果是国内则放行(或跳过)。
  3. 但考虑到零基础用户,建议先使用通用高频拦截,再手动检查日志中的IP地域,逐步优化。

避坑指南

  • 不要直接修改jail.conf,应使用jail.local或jail.d/下的配置文件,否则升级会被覆盖。
  • filter正则需匹配实际日志格式。不同系统的SSH日志略有不同(Ubuntu vs CentOS),建议先用fail2ban-regex测试:

sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/crossfire.conf

  • iptables策略冲突:如果同时配置了UFW或firewalld,需要确认fail2ban的iptables规则生效。
  • 小心误封自己:调试时建议将maxretry设大(如10),并先添加自己的IP到白名单:

sudo fail2ban-client set crossfire addignoreip 你的IP

效果验证

  1. 重启fail2ban:sudo systemctl restart fail2ban
  2. 查看当前被禁IP列表:sudo fail2ban-client status crossfire
  3. 观察日志:sudo tail -f /var/log/fail2ban.log
  4. 模拟测试:从另一台机器尝试多次错误SSH登录,看是否被拦截。
  5. 检查iptables:sudo iptables -L -n | grep fail2ban 应出现对应链及规则。

高频问题解答

Q:为什么我的fail2ban不生效?
A:先确认fail2ban服务运行,再检查日志路径是否正确,filter正则是否匹配。使用fail2ban-client status 查看状态。

Q:如何查看被拦IP来自哪个国家?
A:使用geoiplookup 223.xxx.xxx.xxx 查询。

Q:能自动封禁所有境外IP吗?
A:可以,但需要配置黑名单API或使用geoiplookup脚本,可能误封正常访问。建议先采用高频拦截策略,再逐步精确。

Q:封禁后如何解封?
A:sudo fail2ban-client set crossfire unbanip 被封IP

如果你正在处理家用住宅主机Linux fail2ban自定义规则拦截跨境扫描,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。

分享到:
上一篇
外贸站宝塔面板网站防关联容器隔离多站点部署实操指南
下一篇
外贸站宝塔面板网站服务器TLS协议升级兼容浏览器
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意