iptables四表五链原理
iptables流程图
iptables
是操作包过滤转发规则的命令,背后使用规则的模块叫netfilter
四表table
- filter表
过滤数据包
- nat表
网络地址转换
- mangle表
修改数据包的服务类型、TTL、并且可以配置路由实现QoS内核模块
- raw表
决定数据包是否被状态跟踪机制处理
规则rules
就是表的记录
五链chain
- PREROUTING 进入设备
raw->mangle->nat
- INPUT 本机为终点
mangle->filter
- FORWARD 转发
mangle->filter
- OUTPUT 本机为起点
raw->mangle->nat->filter
- POSTROUTING 离开设备
mangle->nat
表和链的关系
表和链之间是多对多的对应关系
iptables 的基本语法命令格式
iptables [-t 表名] 子命令 [链名] [匹配条件] [-j 目标动作]
iptables语法格式
条件取值
子命令详解
-A 在指定链的末尾添加(append)一条新的规则
-D 删除(delete)指定链中的某一条规则,可以按规则序号和内容删除
-I 在指定链中插入(insert)一条新的规则,默认在第一行添加
-R 修改、替换(replace)指定链中的某一条规则,可以按规则序号和内容替换
-L 列出(list)指定链中所有的规则进行查看
-E 重命名用户定义的链,不改变链本身
-F 清空(flush)
-N 新建(new)一条用户自己定义的规则链
-X 删除指定表中用户自定义的规则链(delete)
-P 设置指定链的默认策略(policy)
-Z 将所有表的所有链的字节和数据包计数器清零(zero)
-n 使用数字形式(num)显示输出结果
-v 查看规则表详细信息(verbose)的信息
-V 查看版本(version)
-h 获取帮助(help)
命令举例
删除INPUT链的第一条规则
iptables -D INPUT 1
拒绝进入防火墙的所有ICMP协议数据包
iptables -I INPUT -p icmp -j REJECT
允许防火墙转发除ICMP协议以外的所有数据包
iptables -A FORWARD -p ! icmp -j ACCEPT
拒绝转发来自192.168.1.10主机的数据
iptables -A FORWARD -s 192.168.1.11 -j REJECT
允许转发来自192.168.0.0/24网段的数据
iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT
丢弃从外网接口(eth1)进入防火墙本机的源地址为私网地址的数据包
iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DROP C类私网
iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DROP B类私网
iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP A类私网
只允许从202.13.0.0/16网段登录防火墙主机
iptables -A INPUT -p tcp --dport 22 -s 202.13.0.0/16 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP
允许本机开放从TCP端口20-1024提供的应用服务
iptables -A INPUT -p tcp --dport 20:1024 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 20:1024 -j ACCEPT