> ## Knowledge Base Index
> Fetch the complete knowledge base index at: https://helpdesk.ggcircuit.com/sitemap.xml
> Use this file to discover available pages before exploring further.
> Pure-Markdown content can be obtained by appending a '.md' suffix to the content URLs listed in the sitemap (without the trailing slash).

# 🔥 为 ggRock 配置 iptables

本指南为设置 `iptables` 防火墙提供了参考配置，以确保 ggRock 服务器和客户端正常运行。

> 📝 **注意：**  
> 将任何占位符 IP 范围（例如 `X.X.X.X/X`、`Y.Y.Y.Y/Y`）替换为适合您环境的 **CIDR** 格式 IP 地址。

---

## 🔄 将防火墙重置为干净状态

```
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -X
iptables -F
```

---

## 🚫 禁用 IP 转发（路由）

```
iptables -P FORWARD DROP
```

---

## ✅允许预期的入站流量

```
# 丢弃格式错误/无效的流量
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
# 允许已建立或相关的连接
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# 允许本地主机（环回）
iptables -A INPUT -i lo -j ACCEPT
```

---

## 📦 允许传入 DHCP（用于 PXE 启动）

```
iptables -A INPUT -p udp --dport 67:68 --sport 67:68 -j ACCEPT
```

---

## 🛠️ 远程管理访问（例如 ggRock Web UI、HTTPS）

```
iptables -A INPUT -p tcp -s X.X.X.X/X --dport 9090 -j ACCEPT
iptables -A INPUT -p tcp -s X.X.X.X/X --dport 443 -j ACCEPT
iptables -A INPUT -p udp -s X.X.X.X/X --dport 443 -j ACCEPT
```

---

## 🖥️ 允许来自 ggRock 客户端子网的访问

```
iptables -A INPUT -p icmp -s Y.Y.Y.Y/Y -j ACCEPT
iptables -A INPUT -p tcp -s Y.Y.Y.Y/Y -j ACCEPT
iptables -A INPUT -p udp -s Y.Y.Y.Y/Y -j ACCEPT
```

---

## 🔐 ggCircuit VPN IP 白名单

```
# 区域 1
iptables -A INPUT -p tcp -s 34.255.111.148/25 --dport 9090 -j ACCEPT
iptables -A INPUT -p tcp -s 34.255.111.148/25 --dport 443 -j ACCEPT
iptables -A INPUT -p udp -s 34.255.111.148/25 --dport 443 -j ACCEPT
# 区域 2
iptables -A INPUT -p tcp -s 54.228.150.30/25 --dport 9090 -j ACCEPT
iptables -A INPUT -p tcp -s 54.228.150.30/25 --dport 443 -j ACCEPT
iptables -A INPUT -p udp -s 54.228.150.30/25 --dport 443 -j ACCEPT
```

---

## 🚫 阻止所有其他入站流量

```
# 可选：记录丢弃的入站流量
# iptables -A INPUT -j LOG
iptables -P INPUT DROP
```

---

## 📤 允许预期的出站流量

```
# 允许连接响应
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
# 允许本地主机
iptables -A OUTPUT -o lo -j ACCEPT
# 允许 ICMP（ping 等）
iptables -A OUTPUT -p icmp -j ACCEPT
# DHCP
iptables -A OUTPUT -p udp --dport 67 --sport 68 -j ACCEPT
# DNS
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
# NTP（时间同步）
iptables -A OUTPUT -p udp --dport 123 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 123 -j ACCEPT
# HTTP/S（用于更新和网络访问）
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
iptables -A OUTPUT -p udp --dport 443 -j ACCEPT
```

---

## 🌐 允许所有其他出站流量

```
# 可选：记录出站流量
# iptables -A OUTPUT -j LOG
iptables -P OUTPUT ACCEPT
```

---

> ⚠️ **重要提示：**  
> 运行此脚本之前，请用实际的 IP 地址范围**替换**占位符 IP 范围（`X.X.X.X/X`、`Y.Y.Y.Y/Y`）。

```
#!/bin/bash
# ggRock iptables 防火墙配置脚本
# 运行前请使用实际的 CIDR 块替换 X.X.X.X/X 和 Y.Y.Y.Y/Y！
echo "⚙️ 为 ggRock 应用 iptables 规则..."
# === 重置现有规则 ===
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
iptables -F
iptables -X
# === 允许预期的入站流量 ===
# 丢弃无效数据包
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
# 允许已建立和相关的流量
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# 允许环回
iptables -A INPUT -i lo -j ACCEPT
# 允许 DHCP（PXE 启动）
iptables -A INPUT -p udp --dport 67:68 --sport 67:68 -j ACCEPT
# 远程管理（Web UI）
iptables -A INPUT -p tcp -s X.X.X.X/X --dport 9090 -j ACCEPT
iptables -A INPUT -p tcp -s X.X.X.X/X --dport 443 -j ACCEPT
iptables -A INPUT -p udp -s X.X.X.X/X --dport 443 -j ACCEPT
# 允许来自 ggRock PC 子网的所有流量
iptables -A INPUT -p icmp -s Y.Y.Y.Y/Y -j ACCEPT
iptables -A INPUT -p tcp -s Y.Y.Y.Y/Y -j ACCEPT
iptables -A INPUT -p udp -s Y.Y.Y.Y/Y -j ACCEPT
# ggCircuit VPN IP 地址
iptables -A INPUT -p tcp -s 34.255.111.148/25 --dport 9090 -j ACCEPT
iptables -A INPUT -p tcp -s 34.255.111.148/25 --dport 443 -j ACCEPT
iptables -A INPUT -p udp -s 34.255.111.148/25 --dport 443 -j ACCEPT
iptables -A INPUT -p tcp -s 54.228.150.30/25 --dport 9090 -j ACCEPT
iptables -A INPUT -p tcp -s 54.228.150.30/25 --dport 443 -j ACCEPT
iptables -A INPUT -p udp -s 54.228.150.30/25 --dport 443 -j ACCEPT
# 丢弃所有其他入站流量
# 取消注释以启用日志记录：
# iptables -A INPUT -j LOG
iptables -P INPUT DROP
# === 允许预期的出站流量 ===
# 允许相关的出站流量
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
# 允许环回
iptables -A OUTPUT -o lo -j ACCEPT
# 允许 ICMP（ping）
iptables -A OUTPUT -p icmp -j ACCEPT
# DHCP
iptables -A OUTPUT -p udp --dport 67 --sport 68 -j ACCEPT
# DNS
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
# NTP
iptables -A OUTPUT -p udp --dport 123 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 123 -j ACCEPT
# HTTP/S
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
iptables -A OUTPUT -p udp --dport 443 -j ACCEPT
# 允许所有其他出站流量
# 取消注释以启用日志记录：
# iptables -A OUTPUT -j LOG
iptables -P OUTPUT ACCEPT
echo "✅ iptables 规则应用成功！"
```

---

### 🔐 使用方法：

1. 将此脚本保存为 `configure-iptables.sh`
2. 使其可执行：

```
   chmod +x configure-iptables.sh
```
3. 以 root 身份运行（或使用 sudo）：

```
   sudo ./configure-iptables.sh
```

---

### 可选：

要使您的 `iptables` 规则在**系统重启后保持不变**：

---

## 🧊 步骤 1：安装持久化工具

运行以下命令来安装所需的软件包：

```
sudo apt-get update && sudo apt-get install -y iptables-persistent
```

在安装过程中，系统会提示您**保存当前规则**——出现提示时选择**是**。
 
---

## 💾 步骤 2：保存当前 iptables 规则

运行 `configure-iptables.sh` 脚本后，按以下方式保存活动规则：

```
sudo netfilter-persistent save
```

这会将 IPv4 和 IPv6 规则保存到：

* `/etc/iptables/rules.v4`
* `/etc/iptables/rules.v6`

> 如果只使用 IPv4，完全没有问题——IPv6 文件可以保持为空。

---

## 🔁 步骤 3：在启动时自动加载

`netfilter-persistent` 服务会自动在启动时加载规则。您可以通过以下命令验证它是否已启用：

```
sudo systemctl is-enabled netfilter-persistent
```

如果未启用，您可以启用它：

```
sudo systemctl enable netfilter-persistent
```

---

## 🧪 可选：在不重启的情况下重新加载

要在不重启系统的情况下应用已保存的规则：

```
sudo netfilter-persistent reload
```

---

✅ 完成！您的自定义 `iptables` 配置现在将在系统重启后保持不变。