iptables 的所有主要命令参数及用法

🧱 一、iptables 的基本结构

iptables [选项] [链] [条件匹配] -j [动作]

比如:

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

这条规则的意思是:在 INPUT 链中追加一个规则,允许来自任何主机的 TCP 22 端口(SSH)访问。


🧰 二、核心命令参数及示例


📌 1. -A:追加规则(Append)

语法

iptables -A <链> [匹配条件] -j <动作>

示例

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

➡ 追加一条规则到 INPUT 链,允许 HTTP 流量。


📌 2. -I:插入规则(Insert)

语法

iptables -I <链> [位置] [匹配条件] -j <动作>

示例

iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT

➡ 把允许 SSH 的规则插入到 INPUT 链的第 1 行,比 -A 更优先。


📌 3. -D:删除规则(Delete)

方式一:按规则内容删除

iptables -D INPUT -p tcp --dport 22 -j ACCEPT

方式二:按行号删除

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

➡ 删除 INPUT 链中的第 3 条规则。


📌 4. -R:替换规则(Replace)

语法

iptables -R <链> <行号> [新规则]

示例

iptables -R INPUT 2 -p tcp --dport 443 -j ACCEPT

➡ 替换 INPUT 链的第 2 条规则为“允许 HTTPS”。


📌 5. -L:列出所有规则(List)

iptables -L -n -v --line-numbers
  • -n:不解析域名/IP(提高速度)

  • -v:显示详细信息(如数据包数)

  • --line-numbers:显示规则编号(便于删除)


📌 6. -F:清空链中所有规则(Flush)

清空 INPUT 链规则:

iptables -F INPUT

清空所有链的规则:

iptables -F

📌 7. -P:设置默认策略(Policy)

语法

iptables -P <链> <策略>

常用策略ACCEPTDROP

示例

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

➡ 默认拒绝所有输入和转发,允许输出。


📌 8. -N:创建自定义链(New chain)

iptables -N LOG_DROP

➡ 新建一个叫 LOG_DROP 的链,你可以将匹配的数据跳转到这里做日志记录后丢弃。


📌 9. -X:删除自定义链(eXterminate)

iptables -X LOG_DROP

📌 10. -E:重命名链(Exchange)

iptables -E OLD_CHAIN_NAME NEW_CHAIN_NAME

📌 11. -Z:将数据包和字节计数器清零(Zero)

iptables -Z

📌 12. -t:指定表(Table)

默认是 filter 表,其他有:

表名 用途
filter 默认,处理防火墙策略
nat 做 NAT(如端口映射)
mangle 修改数据包字段(TTL 等)

示例:

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

➡ 使用 nat 表设置端口转发。


📌 13. -j:指定动作(Jump)

常见动作(target):

动作 说明
ACCEPT 接受数据包
DROP 丢弃数据包
REJECT 拒绝,并返回响应
LOG 记录日志(配合 –log-prefix)
DNAT 改变目标地址(NAT)
SNAT 改变源地址(NAT)
MASQUERADE 动态伪装公网地址(常用于拨号)

示例:

iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix "SSH attempt: "

🧪 三、完整例子:限制服务器只开放常用端口

# 清空所有规则
iptables -F

# 设置默认策略为 DROP(更安全)
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

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

# 允许已建立的连接返回流量
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# 开放常用端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT  # SSH
iptables -A INPUT -p tcp --dport 80 -j ACCEPT  # HTTP
iptables -A INPUT -p tcp --dport 443 -j ACCEPT # HTTPS

💾 四、保存和恢复规则

保存(不同系统)

Debian/Ubuntu:

apt install iptables-persistent
netfilter-persistent save

CentOS:

service iptables save

或手动保存/恢复:

iptables-save > /etc/iptables.rules
iptables-restore < /etc/iptables.rules
© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享