Skip to main content

针对 Ubuntu 18.04 服务器,要仅封禁特定 IP 地址且不影响其他任何端口及 IP 的访问

针对 Ubuntu 18.04 服务器,要仅封禁特定 IP 地址不影响其他任何端口及 IP 的访问,最标准、高效且对系统性能影响最小的方法是使用 iptables

Ubuntu 18.04 默认可能使用 ufw (Uncomplicated Firewall),但 ufw 底层也是 iptables。为了精准控制且不干扰现有规则,直接使用 iptables 命令是最稳妥的。

以下是具体操作步骤:

🚀 方法一:使用 iptables 直接封禁(推荐,即时生效)

这种方法不需要安装额外软件,直接操作内核防火墙规则。

1. 执行封禁命令

请在终端中逐行复制并执行以下命令(需要 root 权限):

# 封禁 广东深圳 IP
sudo iptables -I INPUT -s 103.44.236.211 -j DROP

# 封禁 江西南昌 IP
sudo iptables -I INPUT -s 223.83.150.76 -j DROP

# 封禁 中国香港 IP (1)
sudo iptables -I INPUT -s 83.229.126.117 -j DROP

# 封禁 中国香港 IP (2)
sudo iptables -I INPUT -s 45.192.103.126 -j DROP

# 封禁 美国 IP
sudo iptables -I INPUT -s 148.153.56.174 -j DROP
  • ** -I INPUT: 表示在输入链的最前面**插入规则(优先级最高,确保先于允许规则执行)。
  • ** -s**: 代表 Source(源地址),即你要封禁的 IP。
  • ** -j DROP**: 代表直接丢弃数据包,对方连接时会显示超时,就像网络断开一样(比 REJECT 更安全,不返回拒绝信息)。

2. 验证是否生效

执行以下命令查看当前的防火墙规则,确认刚才添加的规则是否存在:

sudo iptables -L INPUT -n --line-numbers

你应该能在列表的最上方看到这几条带有 DROP 字样的规则。


💾 关键步骤:永久保存规则(防止重启失效)

注意iptables 命令默认是临时的,服务器重启后规则会丢失。你必须执行以下步骤将其保存。

情况 A:如果你没有安装 iptables-persistent (纯净版 Ubuntu)

  1. 安装保存工具:
    sudo apt-get update
    sudo apt-get install iptables-persistent
    
  2. 在安装过程中,它会问你是否保存当前的 IPv4 和 IPv6 规则,选择 Yes
  3. 如果以后修改了规则,手动保存命令为:
    sudo netfilter-persistent save
    

情况 B:如果你正在使用 UFW

如果你之前一直用 ufw 管理防火墙,直接运行上面的 iptables 命令也是有效的(因为 ufw 本质就是 iptables),且优先级通常高于 ufw 的默认规则。
为了确保重启后依然有效,建议将上述规则写入 UFW 的自定义文件,或者坚持使用上面的 iptables-persistent 方法(两者共存通常没问题,只要不冲突)。

最稳妥的 UFW 用户做法:
创建自定义规则文件:

sudo nano /etc/ufw/before.rules

在文件的 *filter 部分之后,COMMIT 之前,加入以下内容:

# 开始添加封禁 IP
-A ufw-before-input -s 103.44.236.211 -j DROP
-A ufw-before-input -s 223.83.150.76 -j DROP
-A ufw-before-input -s 83.229.126.117 -j DROP
-A ufw-before-input -s 45.192.103.126 -j DROP
-A ufw-before-input -s 148.153.56.174 -j DROP
# 结束添加

保存退出后,重启 UFW:

sudo ufw disable && sudo ufw enable

️ 进阶方案:如果攻击 IP 非常多(使用 ipset)

如果将来封禁的 IP 达到几十上百个,每条都写一条 iptables 规则会降低服务器网络性能。此时建议使用 ipset(IP 集合)。

  1. 安装 ipset:
    sudo apt-get install ipset
    
  2. 创建一个名为 blacklist 的集合:
    sudo ipset create blacklist hash:ip
    
  3. 将恶意 IP 加入集合:
    sudo ipset add blacklist 103.44.236.211
    sudo ipset add blacklist 223.83.150.76
    sudo ipset add blacklist 83.229.126.117
    sudo ipset add blacklist 45.192.103.126
    sudo ipset add blacklist 148.153.56.174
    
  4. 添加一条 iptables 规则,拒绝该集合内的所有 IP:
    sudo iptables -I INPUT -m set --match-set blacklist src -j DROP
    
  5. 保存 ipset 集合 (防止重启丢失):
    sudo apt-get install ipset-persistent
    sudo ipset save > /etc/ipset.conf
    
    (注:需配置开机自动恢复 /etc/ipset.conf,或简单地将 ipset restore < /etc/ipset.conf 加入 /etc/rc.local)

✅ 总结

对于你目前的 5 个 IP,直接使用 方法一(iptables 命令) 最快最直接。
切记: 执行完命令后,务必执行 保存操作 (netfilter-persistent save),否则重启服务器后防护会失效。