一、Iptables说明
1.0 概述
netfilter/iptables :
IP信息包过滤系统,实际上是由两个组件netfilter和iptables组成
netfilter/iptables 关系:
netfilter组件也称内核空间,是内核的一部分,由一些包过滤表组成的规则集来对信息包进行过滤处理.
iptables组件称为用户空间, 它是一种可以通过插入、修改、删除包过滤表中的规则的一种工具。配置完成后立即生效,内置了filter、nat、mangle三张表。
iptables 三张表
filter: 负责过滤数据包,影响的规则链:input, output,forword
nat: 负责网络地址的转换,影响的规则链:prerouting, postrouting, output
mangle: 负责修改数据包内容,可以用来做流量整形、数据包标识等。影响的规则链:input, output,forword, prerouting, postrouting
raw 用于处理异常,包括的规则链: prerouting, output, 一般用不到。
iptables 五个链
input: 处理数据包目标地址是本机的规则
output: 处理本机发送的数据包,即包源地址是本机的规则
forward: 匹配流经过本机的数据包
prerouting: 用来修改目标地址,用来做DNAT(网络地址转换)例:端口映射
postrouting: 用来修改源地址,用来做SNAT(源地址转换)例:内网通过路由器NAT实现内网多个PC公用一个公网IP地址进行上网。
1.1 数据过滤流程
二、Iptables语法
语法结构:
iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 动作]
[-t 表名]:默认为filter表
[链名]: 默认所有链
[匹配条件]: 如需要所有ip生效可不填写或填入:0:0:0:0/0
管理选项
-A 在指定链的末尾添加(append)一条新的规则
-I 在指定链中插入(insert)一条新的规则,默认在第一行添加
-D 删除(delete)指定链中的某一条规则,可以按规则序号和内容删除
需要确保链中的存在这条规则,否则报错
-R 替换(replace)指定链中的某一条规则,可以按规则序号和内容替换
-E 重命名用户定义的链,不改变链本身
-F 清空(flush),不影响-P默认规则
-N 新建(new-chain)一条用户自己定义的规则链
-X 删除指定表中用户自定义的规则链(delete-chain)
-P 设置指定链的默认策略(policy)
iptables -P INPUT DROP ==>修改默认规则为DROP
-Z 将所有表的所有链的字节和数据包计数器清零
-[vn]L 列出(list)指定链中所有的规则进行查看,输出样式可追加:
-n 使用数字形式(numeric)显示输出结果
-v 查看规则表详细信息(verbose)的信息
例:iptables -nvL
匹配条件
1.按网络接口匹配
- -i eth0
匹配是否从网络接口eth0进来 - -o eth0
匹配是否往网络接口eth0流出 - -s <ip>
匹配是来自<ip>的数据 ip: 来源地址 - -d <ip>
匹配目的地址
2.按网络协议匹配
- -p [tcp|udp|icmp]
匹配网络协议
3.按源端口匹配
- --sport <源端口号> 注: 可以是端口,也可是范围
例: --sport 1000 匹配源端口是1000的数据包
--sport 1000:3000 匹配源端口是1000~3000的数据包(含1000,3000) - --dport <目的端口号>
动作
- ACCEPT 允许数据包通过
- DROP 直接丢弃数据包,不给任何回应信息
- REJECT 拒绝数据包通过,必要时会给数据发送端一个响应的信息。
- MASQUERADE 伪装一个公网IP
- SNAT 源地址转换
- 例: iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT 1.1.1.1 => 将内网ip转换成公网ip(路由器原理)
- LOG在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则
附加模块 -m
- 按包状态匹配 : -m mac --mac-source <mac地址>
- 按来源mac地址匹配
- 按包速率: -m limit --limit <速率>
- 多端口匹配: -p tcp -m multiport --dport <ip1>,<ip2>,<ip3> 必须与-p一起使用