服务器访问控制黑白名单设置零基础教程

为什么要设置黑白名单?

服务器每天会收到大量访问请求,其中混杂着扫描器、爬虫、暴力破解工具等恶意流量。黑白名单就是最直接的访问控制手段:白名单只允许指定IP通过,黑名单则禁止特定IP进入。
掌握这个技能,能让你的服务器安全系数提升一大截。

本文会从零开始,给你三条清晰的路径:

  • 用 Nginx 配置(适合 Web 站点)
  • 用 iptables 配置(系统级防火墙)
  • 用宝塔面板操作(图形化,新手友好)

你可以根据自己环境任选一条执行。

开始前需要准备的几样东西

  1. 一台服务器(Windows 或 Linux 均可,本文以 CentOS 7 / Ubuntu 20.04 为例)
  2. SSH 客户端(如果你用宝塔面板,则不需要)
  3. 知道自己服务器的公网 IP(可以用 curl ifconfig.me 快速查看)
  4. 决定好要封禁或放行的 IP 地址(例如要封锁的 IP:192.168.1.100,要放行的 IP:203.0.113.5
注意:操作前建议先通过快照或备份保留当前状态,防止误操作导致自己被封在外。

方法一:用 Nginx 配置黑白名单(适合站点级控制)

如果你运行的是 Web 服务,Nginx 自带 allowdeny 指令,修改配置文件即可生效。

1. 找到站点配置文件

通常路径:

  • 宝塔面板:/www/server/panel/vhost/nginx/你的域名.conf
  • 手动安装:/etc/nginx/conf.d/你的域名.conf/etc/nginx/nginx.conf

2. 在 server 块内加入规则

例如只允许公司 IP 访问后台目录 /admin,其他 IP 全部拒绝:

server {
    listen 80;
    server_name example.com;

    location /admin {
        allow 203.0.113.5;  # 白名单IP
        deny all;           # 拒绝其余所有
        # 其他配置...
    }
}

如果你想要全局黑名单,可以在 server 块或 location / 里面写:

server {
    deny 192.168.1.100;   # 禁止某个IP
    allow all;             # 放行其他(这一行通常可以省略,因为默认就是放行)
}

关键点allowdeny 按顺序匹配,先匹配到的规则生效。
一般推荐先写白名单,最后写 deny all

3. 测试配置并重载

nginx -t                # 检查语法
systemctl reload nginx  # 热重载,不中断服务

验证:用禁止的 IP 访问,应该返回 403 Forbidden。

方法二:用 iptables 配置系统级黑白名单

iptables 是 Linux 自带的防火墙工具,能控制所有进入服务器的流量(不限 Web)。
如果你熟悉命令行,这是最强大的方案。

1. 查看现有规则

iptables -L -n --line-numbers

2. 添加黑名单规则(拒绝某个 IP 所有流量)

iptables -A INPUT -s 192.168.1.100 -j DROP
  • -A INPUT:追加到 INPUT 链(入站)
  • -s 192.168.1.100:指定源 IP
  • -j DROP:丢弃数据包(相当于拒绝)

3. 添加白名单规则(只允许某个 IP 访问 SSH)

iptables -A INPUT -s 203.0.113.5 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP   # 拒绝其他所有 IP 的22端口
注意:白名单规则必须放在拒绝规则之前,否则拒绝先匹配就进不来了。你可以用 -I INPUT 1 插入到第一行。

4. 保存规则(避免重启丢失)

CentOS 7:

yum install -y iptables-services
service iptables save

Ubuntu 20.04:

iptables-save > /etc/iptables/rules.v4

方法三:用宝塔面板可视化配置(零基础首选)

如果你安装了宝塔面板,点击左侧“安全”菜单,操作非常直观。

1. 进入防火墙管理

在宝塔面板左侧找到 安全防火墙

2. 添加IP规则

  • 点击 添加IP规则
  • 选择 黑名单白名单
  • 输入 IP 地址(例如 192.168.1.100
  • 备注可写可不写
  • 点击 确定

3. 生效验证

规则添加后立刻生效。
你可以在 规则列表 中看到刚添加的条目。
如果填错了,直接删除即可。

宝塔的防火墙本质上是基于 firewalld 或 iptables 的界面封装,所以效果和命令行一致。

高频踩坑与避坑指南

1. 不小心把自己 IP 封了怎么办?

  • 如果你还有其它渠道(比如面板的VNC、云商的带外管理),赶紧登录并删除规则。
  • 如果使用命令行,可以执行 iptables -F 清空所有规则(但会同时放行所有流量,需重新配置)。
  • 防止方式:添加规则前先把自己的 IP 加入白名单,或者先用 -j REJECT 而不是 -j DROP,因为 REJECT 会更礼貌地告诉你被拒绝了。

2. Nginx 的 allow/deny 规则对非 Web 请求无效

Nginx 只处理 HTTP/S 流量。
如果你想封锁SSH、数据库等端口,请使用 iptables 或宝塔防火墙。

3. 规则顺序很重要

无论是 Nginx 还是 iptables,都是按顺序匹配。
白名单规则一定要出现在黑名单规则之前

4. 宝塔面板的防火墙和系统防火墙可能冲突

如果你在宝塔添加了规则,同时又用命令行添加了 iptables 规则,宝塔可能会覆盖你的设置。
建议只使用其中一种方法管理。

如何验证配置已经生效

用 curl 模拟

# 在另一台服务器(或者本地)用被封的 IP 访问你的站点
curl -I http://你的服务器IP

如果返回 403 或连接超时(取决于你用的是 DROP 还是 DENY),说明封锁成功。

查看日志

  • Nginx 错误日志:tail -f /var/log/nginx/error.log,会看到 access forbidden by rule 或类似的记录。
  • iptables 日志:如果你开启了日志(-j LOG),可以在 /var/log/messagesdmesg 中查看被拒绝的连接。

使用在线端口检测工具

可以用站长工具或 ping.pe 输入你的服务器 IP,如果从某个 IP 无法访问,说明规则生效。

总结

服务器访问控制黑白名单设置并不复杂,关键是要清楚自己的业务需求:

  • 保护站点后台 → 用 Nginx 的 allow/deny
  • 封锁恶意 IP 对所有端口的攻击 → 用 iptables 或宝塔防火墙
  • 新手怕出错 → 先用宝塔面板练手,规则生效后立即用浏览器验证自己的 IP 是否还能访问。

建议你按照本文步骤先在测试环境走一遍,再应用到生产环境。
如果遇到异常,优先回看上面的“高频踩坑”部分,基本能解决 90% 的问题。

分享到:
上一篇
数据库分库分表解决大数据量:分库分表解决大数据量问题
下一篇
fail2ban防护暴力破解SSH登录
1
系统公告

高考专属福利来袭|凭准考证免费领香港 CN2 云服务器

值高考落幕之际,泽御云开启考生专属回馈 + 产品限时特惠双重活动,助力学子暑期学习建站 高考 考生专属福利 全体应届高考生,凭高考准考证即可免费申领【香港 CN2 轻量云服务器,4 核 4G AMD 处理器】,免费使用周期 30 天,可用于搭建个人站点、编程实操、技术实训,祝各位考生金榜题名,前程似锦! 泽御云资质齐全合规自营机房,线路覆盖香港 CN2、国内 BGP、内蒙电信、美国精品线路,售后全天候技术支持。 官方网站:www.zeyuyun.com,活动限时有效,优惠逾期不再保留。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意