服务器禁止特定 IP 访问的几种常用方法:防火墙、Nginx、iptables、Fail2ban 实战配置

一、为什么服务器需要禁止特定 IP 访问?
很多人以为“禁止某个 IP 访问服务器”只是一个很简单的操作:看到一个异常 IP,直接拉黑就行。
但在真实运维环境里,我更建议把它看成一个分层安全策略。
因为不同业务遇到的 IP 异常并不一样:
- 有些是扫描后台路径,比如
/wp-admin、/phpmyadmin、/admin/login - 有些是 SSH 暴力破解,几分钟内尝试几百次登录
- 有些是恶意爬虫,频繁抓取网站页面,拖慢数据库
- 有些是刷接口,比如登录接口、短信接口、支付回调接口
- 有些是 CC 攻击前的探测流量
- 有些是竞争对手或采集站固定 IP 抓内容
如果只在网站程序里判断 IP,恶意请求仍然会进入 Nginx、PHP、数据库之前的链路,服务器 CPU 和带宽仍然会被消耗。
如果只在系统防火墙里一刀切,又可能误封真实用户、搜索引擎蜘蛛、CDN 节点或公司出口 IP。
所以,服务器禁止特定 IP 访问,核心不是“会不会封”,而是:
在哪一层封?封多久?封哪些端口?是否可恢复?是否能自动识别恶意行为?
二、先看结论:不同封 IP 方法适合什么场景?
| 方法 | 封禁位置 | 适合场景 | 优点 | 注意点 |
|---|---|---|---|---|
| 云平台安全组 / 机房 ACL | 服务器外层 | 明确的恶意 IP、攻击 IP | 请求还没到服务器就被拦截 | 需要服务商支持 |
| Linux 防火墙 firewalld | 系统层 | CentOS 7 常见环境 | 管理直观,适合长期规则 | reload 前后要检查规则 |
| iptables | 系统层 | 老系统、精细控制 | 规则灵活,性能较好 | 规则顺序很重要 |
| nftables | 系统层 | Ubuntu 22 / 新版 Debian | 新系统推荐,支持集合 | 新手上手略难 |
| Nginx deny | Web 层 | 只禁止访问网站 | 配置简单,按站点封禁 | 请求仍会到达 Nginx |
| Apache Require not ip | Web 层 | Apache 网站环境 | 适合虚拟主机目录级限制 | 配置文件语法要注意 |
| Fail2ban | 自动封禁 | SSH 爆破、后台爆破 | 自动识别日志并封禁 | 规则要防止误封 |
| WAF / CDN 黑名单 | 应用前置层 | Web 攻击、CC、恶意爬虫 | 可视化管理,适合网站业务 | 要正确获取真实 IP |
| 程序层 IP 黑名单 | 业务层 | 登录、接口、后台控制 | 可结合用户行为判断 | 不适合抵挡大流量攻击 |
如果只封一个恶意 IP,Nginx 或防火墙都可以。
如果经常遭遇扫描、爆破、采集,我建议用:
安全组 / 防火墙 + Nginx 限制 + Fail2ban 自动封禁 + 日志审计
这才是比较稳的做法。
三、方法一:在服务器防火墙层禁止 IP,最直接也最有效
防火墙层封 IP 的优势很明显:
恶意请求在进入 Web 服务之前就被丢弃,不再消耗 Nginx、PHP、MySQL 的资源。
这类方法适合:
- SSH 被暴力破解
- 某个 IP 持续扫描端口
- 某个 IP 访问频率异常高
- 某个网段明显是垃圾流量来源
- 业务不希望某些地区或机房 IP 访问
1. Ubuntu 22 使用 UFW 禁止 IP
很多 Ubuntu 服务器会启用 UFW,适合中小型网站和普通运维人员使用。
禁止单个 IP 访问服务器
ufw deny from 203.0.113.66
这条规则会禁止 203.0.113.66 访问服务器所有端口。
只禁止访问 80 和 443 端口
如果你只想禁止它访问网站,但不影响其他服务,可以这样写:
ufw deny from 203.0.113.66 to any port 80 proto tcp
ufw deny from 203.0.113.66 to any port 443 proto tcp
禁止某个 IP 访问 SSH
ufw deny from 203.0.113.66 to any port 22 proto tcp
查看规则
ufw status numbered
删除规则
ufw delete deny from 203.0.113.66
如果是生产服务器,我不建议直接大量封全端口,最好先判断它访问的是 Web、SSH 还是数据库端口,再决定封禁范围。
2. CentOS 7 使用 firewalld 禁止 IP
CentOS 7.x 仍然是很多 IDC 服务器环境里比较常见的系统,尤其是老项目、传统 PHP 网站、宝塔面板环境。
禁止单个 IP
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.66" reject'
firewall-cmd --reload
禁止某个网段
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.0/24" reject'
firewall-cmd --reload
查看规则
firewall-cmd --list-rich-rules
解除封禁
firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="203.0.113.66" reject'
firewall-cmd --reload
这里我更喜欢用 reject 而不是 drop,因为 reject 会明确拒绝连接,排查时比较容易判断。
但如果是恶意扫描、攻击探测,也可以使用 drop,让对方直接无响应。
3. 使用 iptables 禁止 IP
iptables 更适合需要精细控制的服务器,比如游戏服、接口服务器、数据库服务器、老 CentOS 环境。
禁止某个 IP 访问全部服务
iptables -I INPUT -s 203.0.113.66 -j DROP
禁止某个 IP 访问网站端口
iptables -I INPUT -p tcp -s 203.0.113.66 --dport 80 -j DROP
iptables -I INPUT -p tcp -s 203.0.113.66 --dport 443 -j DROP
禁止某个 IP 访问 SSH
iptables -I INPUT -p tcp -s 203.0.113.66 --dport 22 -j DROP
删除规则
iptables -D INPUT -s 203.0.113.66 -j DROP
查看规则
iptables -L INPUT -n --line-numbers
iptables 最大的问题不是不会写命令,而是规则顺序。
如果前面已经有允许规则,后面的封禁规则可能不起作用。所以我一般会用 -I INPUT 插入到前面,而不是用 -A INPUT 追加到最后。
四、方法二:用 Nginx 禁止特定 IP 访问网站
如果你的目标只是禁止某个 IP 访问网站,而不是禁止它访问服务器所有端口,Nginx 是非常常用的方法。
适合场景:
- 禁止某个 IP 访问网站首页
- 禁止某个 IP 访问后台
- 禁止某个 IP 访问接口
- 禁止某个采集 IP 抓取文章页面
- 禁止某些网段访问下载链接
1. 在整个站点禁止 IP
在 Nginx 站点配置中加入:
server {
listen 80;
server_name www.example.com;
deny 203.0.113.66;
deny 198.51.100.0/24;
allow all;
location / {
root /www/wwwroot/example.com;
index index.php index.html;
}
}
然后测试配置:
nginx -t
重载 Nginx:
systemctl reload nginx
这样 203.0.113.66 和 198.51.100.0/24 就不能访问这个网站。
2. 只禁止访问后台目录
比如你只想禁止某个 IP 访问 /admin,但允许它访问普通页面,可以这样写:
location /admin/ {
deny 203.0.113.66;
allow all;
try_files $uri $uri/ /index.php?$query_string;
}
这种方式适合后台保护,比如:
- WordPress 后台
- ZBlog 后台
- Discuz 管理中心
- Laravel 管理后台
- 企业内部管理系统
3. 只禁止访问接口
比如某个 IP 一直刷登录接口:
location = /api/login {
deny 203.0.113.66;
allow all;
proxy_pass http://backend_api;
}
如果是刷短信接口、验证码接口、支付接口,也可以按路径封禁。
但我更建议接口场景不要只靠 deny IP,还要配合:
- 请求频率限制
- token 校验
- User-Agent 判断
- Referer 判断
- 验证码或行为验证
- 日志监控和自动封禁
因为刷接口的人很可能会换 IP。
五、方法三:Apache 环境禁止 IP 访问
如果你的服务器使用 Apache,可以在虚拟主机配置或 .htaccess 中限制 IP。
Apache 2.4 常见写法如下:
<RequireAll>
Require all granted
Require not ip 203.0.113.66
Require not ip 198.51.100.0/24
</RequireAll>
如果只限制某个目录:
<Directory "/www/wwwroot/example.com/admin">
<RequireAll>
Require all granted
Require not ip 203.0.113.66
</RequireAll>
</Directory>
Apache 的问题是性能一般不如 Nginx,尤其是高并发场景下,如果大量恶意请求已经进入 Apache 层,再封禁虽然有效,但不如防火墙层更省资源。
所以如果是高频攻击 IP,我建议优先在系统防火墙或安全组层处理。
六、方法四:使用 Fail2ban 自动封禁恶意 IP
如果你每天都手动封 IP,说明防护策略还不够自动化。
Fail2ban 的作用是:
读取服务器日志,发现某个 IP 在一定时间内多次失败访问,就自动把它加入防火墙黑名单。
它特别适合处理:
- SSH 暴力破解
- WordPress 登录爆破
- 宝塔面板登录爆破
- Nginx 频繁 404 扫描
- API 接口异常请求
- phpMyAdmin 探测
1. SSH 自动封禁示例
安装:
apt install fail2ban -y
创建配置:
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
编辑 /etc/fail2ban/jail.local:
[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
findtime = 600
bantime = 3600
意思是:
- 10 分钟内失败 5 次
- 自动封禁 1 小时
- 主要监控 SSH 登录日志
启动服务:
systemctl enable fail2ban
systemctl restart fail2ban
查看状态:
fail2ban-client status sshd
2. Nginx 扫描自动封禁思路
如果日志里出现大量类似请求:
/wp-admin
/phpmyadmin
/.env
/config.php
/admin/login
可以写 Fail2ban 规则自动封禁。
不过这里要注意,不建议看到一次 404 就封 IP。
因为正常用户、搜索引擎、浏览器插件也可能触发 404。
更合理的策略是:
60 秒内访问敏感路径超过 10 次,再封禁 1 小时或 24 小时。
这样既能防扫描,又能降低误封率。
七、方法五:用 ipset 批量封禁大量 IP,适合高频黑名单
如果你要封禁的不是一个 IP,而是几百个、几千个 IP,单纯写大量 iptables 规则会让管理变得很乱。
这时可以用 ipset。
创建黑名单集合
ipset create blacklist hash:ip timeout 86400
这里的 timeout 86400 表示封禁 24 小时。
添加 IP
ipset add blacklist 203.0.113.66
让 iptables 引用 ipset
iptables -I INPUT -m set --match-set blacklist src -j DROP
这样以后新增黑名单 IP,不需要反复改 iptables 规则,只需要往 ipset 里添加 IP。
适合:
- 爬虫 IP 黑名单
- 暴力破解 IP 黑名单
- 临时攻击源 IP 黑名单
- 批量代理 IP 黑名单
但如果攻击流量很大,还是要上游清洗或高防,不要指望单机 iptables 扛住大流量攻击。
八、方法六:在安全组、机房 ACL 或高防策略里封 IP
如果你使用的是独立服务器、香港服务器、美国服务器或高防服务器,很多时候可以让服务商在上游层面处理恶意 IP。
这种方式的好处是:
- 流量还没进入你的服务器
- 不消耗服务器 CPU
- 不占用本机带宽
- 对 CC、扫描、恶意连接更有效
- 适合多个服务器统一封禁
例如有些业务是这样部署的:
| 业务类型 | 推荐封禁位置 |
|---|---|
| 普通企业官网 | Nginx + 防火墙 |
| WordPress / ZBlog 博客 | Nginx + Fail2ban |
| 外贸独立站 | WAF + Nginx 限速 |
| 游戏接口服 | iptables / nftables + 上游 ACL |
| 下载站 | 防火墙 + 带宽监控 |
| 高防业务 | 高防清洗策略 + 源站白名单 |
| API 服务 | WAF + 应用层风控 + 防火墙 |
如果你的服务器已经被大量攻击流量打满,比如 100M 带宽被打满、CPU 飙升、连接数爆满,本机封 IP 就不够了。
因为攻击流量已经到了服务器入口,本机再封也无法解决带宽被占满的问题。
这种情况需要:
- 高防服务器
- 高防 IP
- 流量清洗
- CDN / WAF
- 上游 ACL
- 源站隐藏
九、方法七:在网站程序层面封 IP,适合业务精细控制
程序层封 IP 不是没用,而是不能单独依赖。
它适合做更细的判断,例如:
- 某个 IP 登录失败次数过多
- 某个 IP 频繁提交评论
- 某个 IP 高频请求搜索接口
- 某个 IP 访问某类资源过多
- 某个 IP 行为异常但暂时不想全站封禁
比如 PHP 简单示例:
$blocked_ips = [
'203.0.113.66',
'198.51.100.88'
];
$user_ip = $_SERVER['REMOTE_ADDR'];
if (in_array($user_ip, $blocked_ips)) {
header('HTTP/1.1 403 Forbidden');
exit('Access Denied');
}
但这个方法有两个明显问题:
第一,请求已经进入 PHP,仍然消耗服务器资源。
第二,如果服务器前面有 CDN、反向代理或负载均衡,REMOTE_ADDR 可能不是用户真实 IP,而是 CDN 节点 IP。
所以程序层封 IP 更适合做业务风控,不适合做基础安全防护。
十、特别注意:用了 CDN 或反向代理后,不要封错 IP
这是很多网站最容易踩坑的地方。
如果你的网站前面用了 CDN、WAF、反向代理、负载均衡,那么服务器日志里看到的 IP 可能不是用户 IP,而是 CDN 节点 IP。
这时如果你直接封禁日志里的 IP,可能会把 CDN 节点封掉,导致大量正常用户无法访问。
Nginx 获取真实 IP 示例
假设 CDN 会传递 X-Forwarded-For,可以配置:
set_real_ip_from 10.0.0.0/8;
set_real_ip_from 172.16.0.0/12;
set_real_ip_from 192.168.0.0/16;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
如果是 Cloudflare、阿里云 CDN、腾讯云 CDN、百度云加速等,需要把对应 CDN IP 段加入 set_real_ip_from。
否则你看到的访问日志很可能不是真实用户 IP。
我在处理网站被采集、被刷接口时,一般会先确认三件事:
- 日志里的 IP 是真实用户 IP,还是 CDN 节点 IP?
- 这个 IP 的异常行为是持续性的,还是偶发性的?
- 封禁后会不会影响搜索引擎、支付回调、第三方接口或公司办公出口?
这一步非常关键。
十一、不同服务器配置下,封 IP 策略怎么选?
封 IP 方法和服务器配置也有关系。
小配置服务器更怕恶意请求耗资源,高配置服务器更适合做规则组合和日志分析。
1. 普通企业站 / 小型博客服务器
推荐配置:
| 项目 | 建议配置 |
|---|---|
| CPU | Intel Xeon E3-1271 V3 或同级别 |
| 内存 | 16GB |
| 硬盘 | 480GB SSD / 960GB SSD |
| 带宽 | 100M BGP + 15M / 25M CN2 直连 |
| 系统 | Ubuntu 22 / CentOS 7.x |
| 适合业务 | 企业官网、博客、展示站、小型外贸站 |
推荐方案:
- Nginx deny 封明显恶意 IP
- UFW / firewalld 禁止 SSH 爆破 IP
- Fail2ban 自动封登录失败 IP
- 后台路径加访问限制
- SSH 改端口 + 禁止 root 密码登录
这类服务器最怕的不是大流量攻击,而是持续扫描、爆破、采集拖慢网站。
2. 外贸独立站 / WordPress / WooCommerce 服务器
推荐配置:
| 项目 | 建议配置 |
|---|---|
| CPU | AMD EPYC 4584PX,16核32线程 |
| 内存 | 64GB / 128GB |
| 硬盘 | 960GB NVMe SSD |
| 带宽 | 100M BGP + 25M CN2 直连 |
| 系统 | Ubuntu 22 + Nginx + PHP-FPM + MySQL |
| 适合业务 | WordPress、WooCommerce、外贸独立站、多语言站点 |
推荐方案:
- Nginx 限制
/wp-login.php - Fail2ban 监控 WordPress 登录失败
- WAF 过滤恶意参数
- 防火墙只开放 80、443、SSH 管理端口
- 后台路径限制办公 IP 访问
- 对采集 IP 设置访问频率限制
示例:限制 WordPress 登录接口访问频率:
limit_req_zone $binary_remote_addr zone=login_limit:10m rate=5r/m;
location = /wp-login.php {
limit_req zone=login_limit burst=5 nodelay;
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}
这比单纯封 IP 更稳,因为恶意 IP 会变,但异常行为不会变。
3. 游戏后端 / API 接口服务器
推荐配置:
| 项目 | 建议配置 |
|---|---|
| CPU | AMD EPYC 4585PX / EPYC 9554 |
| 内存 | 128GB / 256GB |
| 硬盘 | 960GB NVMe / 多盘 NVMe |
| 带宽 | 1G 三网直连回国 / 3G 国际带宽 |
| 系统 | Ubuntu 22 / Debian 12 |
| 适合业务 | 游戏网关、接口服、登录服、数据同步服务 |
推荐方案:
- nftables / iptables 放在最前面
- API 层增加 token、签名、时间戳校验
- 高频 IP 自动加入 ipset
- 对登录、注册、验证码接口做限速
- 对异常地区或代理 IP 做策略限制
- 业务日志和防火墙日志分开记录
接口服务器不要只靠“封 IP”。
更重要的是把攻击行为拆成规则:
- 同一 IP 每分钟请求登录接口超过多少次?
- 同一账号被多少 IP 尝试登录?
- 同一 IP 是否大量请求不存在路径?
- 请求是否缺少合法签名?
- 是否绕过正常客户端流程?
这种场景,封 IP 是结果,行为识别才是核心。
4. 高防服务器 / 被攻击业务
推荐配置:
| 项目 | 建议配置 |
|---|---|
| CPU | Intel Xeon Gold / AMD EPYC 多核心 |
| 内存 | 64GB 起步 |
| 硬盘 | NVMe SSD |
| 带宽 | 大带宽 + 高防清洗 |
| 防护 | 100G / 300G / T级防护,根据业务选择 |
| 适合业务 | 游戏、金融接口、下载站、直播、容易被攻击的网站 |
推荐方案:
- 高防 IP 或高防服务器承接入口流量
- 源站只允许高防节点访问
- 本机防火墙禁止非高防来源访问
- WAF 过滤 Web 攻击
- CC 防护按 URL、UA、Cookie、请求频率组合判断
- 攻击 IP 在清洗层封禁,而不是只在服务器本机封禁
高防业务里有一个很重要的原则:
不要让攻击者直接知道源站 IP。
否则你在网站层封得再好,对方绕过高防直接打源站,服务器还是会出问题。
十二、推荐的完整封禁流程:不要上来就一刀切
很多新手看到一个 IP 访问频繁,就马上封。
但真实环境里,我更建议按下面流程来:
第一步:确认异常 IP
查看 Nginx 访问日志:
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head
查看某个 IP 访问了什么路径:
grep "203.0.113.66" /var/log/nginx/access.log | awk '{print $7}' | sort | uniq -c | sort -nr | head
查看 SSH 登录失败:
grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | head
CentOS 常见路径:
grep "Failed password" /var/log/secure
第二步:判断封禁层级
| 异常行为 | 推荐处理 |
|---|---|
| SSH 爆破 | firewalld / iptables / Fail2ban |
| 访问后台爆破 | Nginx + Fail2ban |
| 采集文章页面 | Nginx 限速 + WAF |
| 扫描敏感文件 | Nginx 拦截 + Fail2ban |
| 刷接口 | 应用层风控 + Nginx 限速 |
| 攻击流量打满带宽 | 高防 / 上游清洗 |
| 单个 IP 长期恶意访问 | 防火墙直接封 |
| 某个网段全是垃圾流量 | ipset / 安全组封网段 |
第三步:先临时封,再观察
我不建议所有封禁都永久化。
比较稳的做法是:
- 第一次异常:限速
- 持续异常:临时封禁 1 小时
- 多次异常:封禁 24 小时
- 明确恶意:长期拉黑
- 攻击网段:按网段封禁,但要谨慎
特别是外贸站、跨境电商站,用户来源复杂,误封可能影响订单。
第四步:保留解封方式
生产服务器一定要留后路。
例如:
- 不要把自己的办公 IP 封掉
- 不要只开一个 SSH 入口
- 不要随手封掉 CDN 节点
- 修改防火墙前先开一个备用终端
- 改 Nginx 前先执行
nginx -t - 规则上线后观察访问日志和错误日志
很多服务器“封 IP 出事故”,不是因为封禁技术难,而是因为没有回滚方案。
十三、常见错误:这些封 IP 方式很容易出问题
1. 把 CDN 节点当成攻击 IP 封掉
这是最常见的问题。
结果就是:封了一个 IP,看似攻击没了,但大量正常用户也访问不了。
2. 直接封整个大网段
比如看到 203.0.113.66 异常,就封 203.0.0.0/16。
这种做法很危险,可能误伤大量正常访问。
3. 只在 PHP 程序里封 IP
如果攻击量很小,可以。
如果攻击量大,请求已经进入 PHP,服务器资源还是会被消耗。
4. 只封 IP,不做限速
恶意访问者换 IP 后,问题还会继续。
所以登录接口、搜索接口、评论接口、短信接口一定要做限速。
5. 封禁规则没有持久化
iptables 手动添加规则后,如果没有保存,服务器重启后规则可能丢失。
6. 没有区分 IPv4 和 IPv6
现在一些攻击和扫描也会走 IPv6。
如果服务器启用了 IPv6,也要检查 IPv6 防火墙规则。
十四、我更推荐的实战组合方案
如果是一台普通网站服务器,我建议这样做:
基础安全层
- 只开放必要端口:80、443、SSH 管理端口
- SSH 禁止 root 密码登录
- 防火墙默认拒绝非必要端口
- 数据库不对公网开放
Web 防护层
- Nginx 对后台、登录、接口限速
- 对恶意路径直接返回 403
- 对高频访问 IP 做临时封禁
- 对采集严重的路径增加缓存或验证
自动封禁层
- Fail2ban 监控 SSH 登录失败
- Fail2ban 监控后台爆破
- 高频异常 IP 自动加入 ipset
- 黑名单设置有效期,避免永久误封
上游防护层
- 小攻击:本机防火墙处理
- 中等 CC:WAF / CDN 处理
- 大流量攻击:高防服务器或高防 IP 处理
- 源站只允许 CDN / 高防节点访问
这套方案比“看到 IP 就封”更稳,也更适合长期运营的网站。
十五、A5IDC 服务器场景推荐
如果你的业务是普通官网、博客、企业站,建议选择:
香港基础型服务器
- CPU:Intel Xeon E3 系列
- 内存:16GB
- 硬盘:SSD
- 带宽:100M BGP + 15M / 25M CN2 直连
- 适合:企业官网、博客、轻量外贸站、展示型网站
如果你的业务是 WordPress、WooCommerce、外贸独立站、多站点运行,建议选择:
香港 AMD 高性能服务器
- CPU:AMD EPYC 4584PX,16核32线程
- 内存:64GB / 128GB
- 硬盘:960GB NVMe SSD
- 带宽:100M BGP + 25M CN2 直连
- 适合:外贸独立站、跨境电商、内容站、接口型网站
如果你的业务经常遭遇攻击、采集、扫描、恶意请求,建议重点关注:
高防服务器 / 大带宽服务器
- CPU:多核心 Intel Xeon / AMD EPYC
- 内存:64GB 起步
- 硬盘:NVMe SSD
- 带宽:大带宽或高防清洗线路
- 适合:游戏、下载、直播、接口服务、容易被攻击的网站
服务器配置越高,不代表可以忽略安全规则。
配置高只是让服务器有更强承载能力,真正减少异常流量消耗的,还是防火墙、Nginx、WAF、Fail2ban 和上游防护的组合。
十六、禁止 IP 访问不是目的,稳定业务才是目的
服务器禁止特定 IP 访问,有很多方法:
- 临时封一个 IP,可以用 UFW、firewalld、iptables
- 只禁止访问网站,可以用 Nginx 或 Apache
- 自动处理爆破,可以用 Fail2ban
- 批量封禁大量 IP,可以用 ipset
- 面对攻击流量,要用高防、WAF 或上游清洗
- 涉及业务接口,还要配合程序层风控
我更建议把封 IP 当成一套安全体系,而不是单个命令。
真正稳定的方案应该是:
先识别异常行为,再选择封禁层级;先临时封禁,再长期策略化;先保护业务入口,再减少服务器资源消耗。
对于香港服务器、美国服务器、跨境电商站、游戏接口服和下载站来说,IP 封禁只是第一步。
后面还要结合带宽、线路、防火墙、WAF、日志分析、自动封禁和高防清洗,才能让服务器在长期运行中保持稳定。