🧱 一、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 <链> <策略>
常用策略:ACCEPT 或 DROP
示例:
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
