温馨提示×

ubuntu iptables如何设置规则

小樊
50
2026-07-23 19:54:55
栏目: 智能运维

在 Ubuntu 上设置 iptables 防火墙规则,可以按下面步骤来。内容从基础概念 → 常见规则示例 → 保存与开机生效逐步说明。


一、检查 iptables 状态

sudo iptables -L -n -v
  • -L:列出规则
  • -n:不做 DNS 解析(更快)
  • -v:显示详细信息

查看指定表(如 nat):

sudo iptables -t nat -L -n -v

二、iptables 基本结构

iptables 由 表(table)链(chain) 组成:

常用表

  • filter(默认):过滤数据包
  • nat:地址转换
  • mangle:修改数据包
  • raw:连接跟踪

filter 表常用链

  • INPUT:进入本机的数据包
  • OUTPUT:本机发出的数据包
  • FORWARD:转发的数据包

三、常用规则示例

1️⃣ 允许已建立的和相关的连接

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

2️⃣ 允许本地回环(lo)

sudo iptables -A INPUT -i lo -j ACCEPT

3️⃣ 允许 SSH(非常重要)

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

⚠️ 设置默认策略前一定要先允许 SSH,否则可能断连


4️⃣ 允许 HTTP / HTTPS

sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

5️⃣ 设置默认策略(推荐)

sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT

含义:

  • 入站:默认拒绝
  • 转发:拒绝
  • 出站:允许

6️⃣ 允许 ping(ICMP)

sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

7️⃣ 允许指定 IP 访问

sudo iptables -A INPUT -s 192.168.1.100 -j ACCEPT

8️⃣ 拒绝某个 IP

sudo iptables -A INPUT -s 10.0.0.5 -j DROP

四、删除 / 插入规则

删除某条规则(按编号)

sudo iptables -L INPUT --line-numbers
sudo iptables -D INPUT 3

插入规则(放到最前面)

sudo iptables -I INPUT 1 -p tcp --dport 3306 -j ACCEPT

五、NAT 示例(共享上网 / 端口映射)

SNAT(内网上网)

sudo iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

开启 IP 转发:

echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward

DNAT(端口映射)

sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.10:80

六、保存 iptables 规则(非常重要)

Ubuntu 20.04 / 22.04 推荐方式

sudo apt install iptables-persistent
sudo netfilter-persistent save

规则保存在:

/etc/iptables/rules.v4
/etc/iptables/rules.v6

七、清空所有规则(慎用)

sudo iptables -F
sudo iptables -X
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT

八、推荐的安全规则模板(Web 服务器)

sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT

sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

如果你愿意,可以告诉我:

  • ✅ Ubuntu 版本
  • ✅ 是服务器还是桌面
  • ✅ 是否需要 NAT / 端口转发
  • ✅ 是否使用 Docker(会影响 iptables)

我可以帮你定制一套安全且不会断网的 iptables 规则

0