前言
虽然更喜欢 ufw的简单,忘记当时为啥必须要用 iptables了
Iptables 是一个很大的软件,不止可以做防火墙,还有 Nat、转发等。本篇关注作为防火墙时,“入方向” 的拦截规则
总结
- 抛开其他的功能,了解 iptables的结构及基本命令,就可以很快上手“防火墙”的操作了
开始
1. 软件运行结构
iptables 包含 4个表并存在优先级,依次是(从左到右)
| raw | mangle | nat | filter |
|---|---|---|---|
| 链接跟踪前处理 | 改写封包 | 网址转译工作 | 封包过滤(防火墙) |
filter 是默认表,操作中如不指定表,即为对 filter表操作表中有一些链,其中 filter表中的链有
| INPUT | FORWORD | OUTPUT |
|---|---|---|
| 进入的包 | 通过的包 | 本地生成的包 |
现在我们知道,iptables 默认选择的 filter 表的 INPUT 链即为:"防火墙入方向"
2. 操作命令
链本身(INPUT)的操作有哪些?
-L查看链详情、规则
iptables -L # 查看 filter表下所有链
iptables -L INPUT # 查看 INPUT链
# --line 附带规则行号。可根据行号进行删除规则
# -n 不解析主机名,将显示 IP地址
iptables -L INPUT --line -n -P指定链的默认动作
iptables -P 链名 (DROP/ACCEPT)
iptables -P INPUT ACCEPT # 设置 input链默认允许通过-F清空链规则
iptables -F # 清除 filter 表下所有链的规则
iptables -F INPUT # 清除 INPUT链所有规则为什么执行 iptables -F 要小心?为什么会断网失联?
如果默认动作为拒绝,清除规则后网络连接会被阻止。所以执行前要确保默认动作不是 DROP
- 其他操作 本篇不涉及
-N 指定名字建立新的链 -X 删除用户自定义链 -E 重命名链名称3. 规则操作
链(INPUT)上的规则怎么操作?
有 3个步骤:操作 -> 匹配 -> 动作
操作
| 参数 | 定义 | 备注 |
|---|---|---|
| -N | 新的规则 | |
| -A | 追加规则 | |
| -D | 删除规则 | 删除指定序号 |
| -R | 修改规则 | 修改指定序号 |
| -I | 插入规则 | 在指定序号之前增加 |
匹配
| 参数 | 定义 | 备注 |
|---|---|---|
| -p | 指定协议 | tcp、udp、icmp |
| -s | 来源地址 | 192.168.1.1 |
| -d | 目的地址 | 192.168.1.1 |
| --sport | 来源端口 | 8080 |
| --dport | 目的端口 | 80 |
| -i | 指定入口网卡 | eth0 |
| -o | 指定出口网卡 | eth1 |
动作-j [DROP 丢弃 | REJECT 拒绝 | ACCEPT 接受]
4. 完整规则操作命令
根据上表,将操作 -> 匹配 -> 动作组合出来即可
iptables -N INPUT -s 192.168.2.1 -p tcp --dport 80 -j DROP-N新加一条-s从192.168.2.1来-ptcp协议的--dport 80去80端口的-j DROP丢弃
删除规则需要和添加规则语句一致,将添加动作(N、A、I等)换为删除动作(D)
iptables -D INPUT -s 192.168.2.1 -p tcp --dport 80 -j DROP或者通过行号(--line)
iptables -D INPUT 15. 其他
规则的行号越小(越靠上)优先级越高
规则保存
service iptables save如无法保存,则保存至文件,启动时执行规则恢复
iptables-save > /etc/iptables.rulesiptables-restore < /etc/iptables.rules
/etc/network/if-pre-up.d/custom[附录]
| 表名 | 优先级 | 包含的链 | 特性 |
|---|---|---|---|
| raw | 1 | 链接跟踪前处理,处理后跳过 nat表 | |
| mangle | 2 | 改写封包 | |
| nat | 3 | PREROUTING INPUT OUTPUT POSTROUTING | 一对一、一对多、多对多等网址转译工作 |
| filter | 4 | INPUT FORWARD OUTPUT | 预设规则表,进行封包过滤 |
-t 指定不同表
iptables -t [nat | mangle | filter]不使用 -t 指定表的话 默认使用的 filter表。 
