概念
iptables 是集成在 Linux 内核中的包过滤防火墙系统
硬件 –> 内核空间 –> 网络应用
- netfilter:Linux 内核中的包过滤框架(内核态)
- iptables:用户空间的防火墙管理工具(用户态)
linux主机也可充当一台小型路由
查看主机IP地址:hostname -I
四表五链
四表

| 表名 | 优先级 | 功能说明 |
|---|---|---|
| raw | 最高 | 连接跟踪处理 |
| mangle | 次高 | 数据包修改 |
| nat | 次低 | 网络地址转换 |
| filter | 最低 | 数据包过滤 |
五链

- 进入本机数据包(入站):
PREROUTING→INPUT - 转发数据包(转发):
PREROUTING→FORWARD→POSTROUTING - 本机发出数据包(出站):
OUTPUT→POSTROUTING
| 链名 | 说明 | 应用场景 |
|---|---|---|
| INPUT | 处理入站数据包 | 访问本机服务 |
| OUTPUT | 处理出站数据包 | 本机对外访问 |
| FORWARD | 处理转发数据包 | 路由器转发 |
| PREROUTING | 路由前数据包处理 | 目的地址转换(DNAT) |
| POSTROUTING | 路由后数据包处理 | 源地址转换(SNAT) |
表链关系

操作命令
不指定表默认使用filter表

简化iptables [-t 表名] 管理选项 [链名][序号][匹配条件] [-j 处理动作]
所有链名和处理动作必须使用大写
常用管理选项
| 选项 | 说明 | 示例 |
|---|---|---|
| -A –append | 在链末尾添加规则(追加) | iptables -A INPUT -p tcp –dport 80 -j ACCEPT |
| -I –insert | 在链中插入规则,无指定序号默认插入开头 | iptables -I INPUT 2 -p tcp –dport 22 -j ACCEPT |
| -D –delete | 删除链中指定序号规则(连续删除注意顺位) | iptables -D INPUT 1 |
| -R –replace | 替换链中指定序号的规则 | iptables -R INPUT 2 -p tcp –dport 80 -j ACCEPT |
| -L –list | 列出规则 | iptables -L -n -v |
| -P –policy | 设置默认策略 | iptables -P INPUT DROP |
| -F –flush | 清空规则 | iptables -F |
处理动作
| filter表动作 | 说明 | 示例 |
|---|---|---|
| ACCEPT | 允许 | |
| DROP | 丢弃(无提示信息) | |
| REJECT | 拒绝(有提示信息) | |
| LOG | 写日志 |
| nat表动作 | 说明 | 示例 |
|---|---|---|
| SNAT | 源地址转换 | |
| DNAT | 目标地址转换 |
匹配条件
| 条件 | 说明 | 示例 |
|---|---|---|
| -s x.x.x.x/x | 源地址 | |
| -d x.x.x.x/x | 目标地址 | |
| -p tcp|udp|imcp | 协议 需一一对应 80就是tcp,53就是udp | |
| -i ethx | INPUT链 从ethx接口进入的数据包 | |
| -o ethx | OUTPUT链 从ethx接口出去的数据包 |
保存规则
系统每次重启后规则都会清空,需要保存好规则
iptables-save > /etc/iptables/iptables.rules
手动重载
//先清空现有规则再进行写入
iptables-restore < /etc/iptables/iptables.rules
//不对现有的进行覆盖,追加
iptables-restore -n < /etc/iptables/iptables.rules
iptables-restore -noflush < /etc/iptables/iptables.rules
案例
列出表中所有规则
当一个表里存在多个规则时,iptables默认从上往下执行,及时删除冲突的规则
iptables -t 表名 -L
iptables --table 表名 --list
服务以端口形式显示
iptables -L -n
添加规则 – 禁止其他主机访问
REJECT:主动拒绝并返回响应 — 无法连接
iptables --table filter --append INPUT --source x.x.x.x --jump REJECT

添加规则 – 其他主机访问的数据包直接丢弃
DROP:静默丢弃,不返回任何响应 — 请求超时
iptables --table filter --append INPUT --source x.x.x.x --jump DROP
删除规则 – 删除input链的第一条规则
靠前的规则删除后,后面的规则会自动顺位,根据序号连续删除规则时千万要小心
iptables --table filter --delete INPUT 1

允许SSH连接(端口22)
iptables -A INPUT -p TCP --dport 22 --jump ACCEPT
允许HTTP和HTTPS连接(端口80和443)
iptables -A INPUT -p TCP --dport 80 --jump ACCEPT
iptables -A INPUT -p TCP --dport 443 --jump ACCEPT
允许ping
iptables -A INPUT -p ICMP --jump ACCEPT
拒绝其他所有入站连接
iptables -A INPUT --jump REJECT
//设置默认规则为REJECT
iptables -P INPUT REJECT
