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

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

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

以下是具体操作步骤：

### 🚀 方法一：使用 iptables 直接封禁（推荐，即时生效）

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

#### 1. 执行封禁命令

请在终端中**逐行复制并执行**以下命令（需要 root 权限）：

```bash
# 封禁 广东深圳 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. 验证是否生效

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

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

```

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

---

### 💾 关键步骤：永久保存规则（防止重启失效）

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

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

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

#### 情况 B：如果你正在使用 UFW

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

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

```bash
sudo nano /etc/ufw/before.rules

```

在文件的 `*filter` 部分之后，`COMMIT` 之前，加入以下内容：

```text
# 开始添加封禁 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：

```bash
sudo ufw disable && sudo ufw enable

```

---

### ️ 进阶方案：如果攻击 IP 非常多（使用 ipset）

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

1. **安装 ipset**: ```bash
    sudo apt-get install ipset
    
    ```
2. **创建一个名为 `blacklist` 的集合**: ```bash
    sudo ipset create blacklist hash:ip
    
    ```
3. **将恶意 IP 加入集合**: ```bash
    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**: ```bash
    sudo iptables -I INPUT -m set --match-set blacklist src -j DROP
    
    ```
5. **保存 ipset 集合 (防止重启丢失)**: ```bash
    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`)，否则重启服务器后防护会失效。