温馨提示×

怎样写debian iptables脚本

小樊
48
2026-09-22 23:31:07
栏目: 智能运维

下面从基础概念 → 示例脚本 → 实用模板 → 开机自启一步步说明,如何在 Debian 下写一个可用的 iptables 脚本。


一、Debian 中 iptables 的基本情况

Debian 通常使用:

  • iptables(传统)
  • 或 nftables(新默认,但 iptables 仍可用)

本文以 iptables(最常见、资料最多)为例。


二、最简单的 iptables 脚本结构

一个标准脚本一般包含:

  1. 清空旧规则
  2. 设置默认策略
  3. 允许回环
  4. 允许已建立连接
  5. 开放必要端口
  6. 拒绝其余流量

三、一个基础示例脚本(推荐新手)

/usr/local/sbin/iptables.sh

#!/bin/bash

# 清空规则
iptables -F
iptables -X

# 默认策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# 允许回环
iptables -A INPUT -i lo -j ACCEPT

# 允许已建立连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# SSH(重要!别锁自己)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# HTTP / HTTPS
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# 允许 ping(可选)
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

# 日志(可选)
# iptables -A INPUT -j LOG --log-prefix "iptables-deny: "

保存后:

chmod +x /usr/local/sbin/iptables.sh
./usr/local/sbin/iptables.sh

四、更实用的服务器模板(Web 服务器)

#!/bin/bash

iptables -F
iptables -X

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

# 基础允许
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# SSH(建议限制 IP)
# iptables -A INPUT -p tcp -s 1.2.3.4 --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# Web
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# DNS(如果本机跑解析)
iptables -A INPUT -p udp --dport 53 -j ACCEPT

# 防爆破(示例)
iptables -A INPUT -p tcp --dport 22 -m recent --set
iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 10 -j DROP

五、让 iptables 开机自动生效(非常重要)

方法 1:使用 iptables-persistent(推荐)

apt update
apt install iptables-persistent

保存规则:

netfilter-persistent save

或:

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

开机自动恢复 ✅


方法 2:systemd 执行脚本(旧方式)

systemctl enable rc-local

或写 service(略复杂,不推荐新手)


六、调试 & 查看命令

iptables -L -n -v
iptables -S
iptables -F   # 清规则(紧急时用)

七、常见坑(非常重要)

❌ 忘了允许 SSH → 被锁外面
❌ 没保存规则 → 重启失效
❌ FORWARD DROP 影响 Docker / 虚拟机
❌ 用 nftables 系统却写 iptables(仍可用但混乱)


八、如果你愿意,我可以进一步帮你

你可以告诉我:

  • 是 云服务器 / 物理机 / Docker 主机
  • 用途(Web / 数据库 / 内网)
  • 是否允许公网 SSH

我可以直接给你定制版脚本。

0 踩