Iptables使用方法
Iptables的组成
iptables由四个表和五个链以及一些规则组成
四张表
四张表及其功能简介
表名 | 功能 |
---|---|
filter表 | 过滤规则表,根据预定义的规则过滤符合条件的数据包 |
nat表 | 地址转换规则表 |
mangle表 | 修改数据标记位规则表 |
raw表 | 关闭nat表上启用的连接追踪功能,加快封包穿越防火墙的速度 |
四张表按优先级由高到低的顺序为: raw–>mangle–>nat–>filter
五个链
五个内置链(chain)及其所在位置
链名 | 位置 |
---|---|
PREROUTING | 报文进入本机的路由前的位置 |
INPUT | 到达本机内部的报文的位置 |
FORWARD | 由本机转发的报文的位置 |
OUTPUT | 由本机内部发出的报文的位置 |
POSTROUTING | 报文路由后流出本机的位置 |
数据报文流向
跟本机内部进程通信:
- 流入 : –> PREROUTING –> INPUT
- 流出 : –> OUTPUT –> POSTROUTING
经由本机转发:
- 请求: –> PREROUTING –> FORWARD –> POSTROUTING
- 响应: –> PREROUTING –> FORWARD –> POSTROUIING
表和链的对应关系
表名 | 链 |
---|---|
filter | INPUT, FORWARD, OUTPUT |
nat | PREROUTING(SNAT),POSTROUTING(DNAT),OUTPUT |
mangle | PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING |
raw | PREROUTING, OUTPUT |
添加规则的要点
iptables添加规则时的考量点
- 要实现哪种功能:判断添加在哪张表上
- 报文流经的路径:判断添加在哪个链上
- 报文的流向:判断源和目的地
- 匹配规则:根据业务需要
- 客户端端口是随机的,因此大多数场景下无须限定
链上规则的次序,即为检查的次序
- 切记:先添加放行自己的规则
- 同类规则(访问同一应用),匹配范围小的放上面
- 不同类规则(访问不同应用),匹配到报文频率较大的放上面
- 将那些可由一条规则描述的多个规则合并为一个
- 设置默认策略,允许所有或拒绝所有
Iptables的使用
基本语法:
iptables [-t 表名] <-A|-I|-D|-R> 链名 [规则编号] [-i|-o 网卡名称] [-p 协议类型] [-s 源IP地址|源子网] [-sport 源端口号] [-d 目标IP地址|目标子网] [-dport 目标端口号] [-m 模式 [模式选项]] -j 动作 [动作选项]
对表进行的操作
- -t TABLE
- nat
- mangle
- raw
- filter
默认为filter表
示例:
~]#iptables -t filter -A INPUT -s 172.18.255.254 -j DROP
~]#iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 172.18.255.254
对链进行的操作
- -N:new,新建一条链
- -X:delete,删除一条用户自定义链(空链)
- -F:lush,清空一条链,默认清空表中所有链
- -P:policy,定义链的默认处理策略
- ACCEPT 接受
- DROP 丢弃
- REJECT 拒绝
- -E:rename,重命名自定义的未被引用的(计数器为0)链
对规则进行的操作
- -L: list,列出规则
- -n:numeric,以数字格式显示地址和端口
- -v:verbose,详细信息,-vv, -vvv
- -x:exactly,显示计数器的精确值
- –line-numbers:显示链上规则的编号
- -A:append,追加,在链的最后加一条规则
- -I: Insert,插入一条规则,默认第一个,一般使用 -I CHAIN NUM 给规则加一个编号
- -D:delete,删除一条规则,可以输入完整规则,或者直接指定标号加以删除
- rule speclfication
- rule number
- -R:replace,替换某条规则,规则被替换并不会改变顺序,必须要指定替换的规则编号。-R CHAIN NUM
- -Z: zero,清空计数器,iptables中每条规则默认有两个计数器
- -S:selected,以iptables-save 命令的格式显示链上的规则
示例:
~]#iptables -A INPUT -s 172.18.255.254 -j DROP
~]#iptables -A INPUT -s 172.18.10.0 -j REJECT
~]#iptables -I INPUT -s 172.18.0.2 -j ACCEPT #默认插入到的是第一条
~]#iptables -I INPUT 2 -s 172.18.22.100 -j ACCEPT #指定插入位置
~]#iptables -D INPUT 2 #删除规则
~]#iptables -R INPUT 2 -s 172.18.255.254 -j ACCEPT #替换指定规则
~]#iptables -F #清空所有规则
~]#iptables -Z #清空计数器
~]#iptables -nvL #查看规则
~]#iptables -nvL --line-numbers #显示规则编号
~]#iptables -S #命令格式显示链上规则
~]#iptables -nvL -t nat #查看指定的表
匹配条件
基本匹配
基本匹配:netfilter自带的匹配规则
- -s:指定匹配数据包的源地址
- -d:指定匹配数据包的目标地址
- -i:指定数据包的流入接口(逻辑接口),只能用于PREROUTING 、INPUT及FORWARD
- -o:指定数据包的流出接口,只能用于OUTPUT、FORWARD及POSTROUTING
示例:
~]#iptables -A INPUT -s 172.18.0.0/16 -j REJECT #拒绝整个网段
~]#iptables -A INPUT -s 172.18.0.2,172.18.10.0 -j REJECT #同时定义多个IP
~]#iptables -A INPUT -s 172.18.0.2,172.18.10.0 -d 192.168.10.129 -j REJECT
~]#iptables -A INPUT -d 192.168.10.129 -j REJECT #拒绝访问特定目标ip
~]#iptables -A INPUT ! -d 192.168.10.129 -j REJECT #取反,除访问特定地址外的数据包都拒绝
~]#iptables -A INPUT ! -s 172.18.10.0 -j REJECT
~]#iptables -A INPUT -p icmp -j REJECT #只拒绝指定协议
~]#iptables -A INPUT -i ens32 -p icmp -j REJECT #拒绝指定接口的流量
扩展匹配
扩展匹配:对某一种功能的扩展,经由扩展模块引入的匹配机制
语法:-m macth_name - -spec_options
示例:-m tcp - -dport 22
隐式扩展:对某一种协议扩展
- -p (tcp|udp|icmp|icmpv6|ah|esp|sctp|mh|all):做协议匹配
- tcp:隐藏了”-m tcp”的专用选项
- [!] - -source-port, –sport port [:port] 匹配报文中TCP首部源端口,可以是端口范围;
- [!] - -dport port [:port]:目标端口,可以是单个端口或连续多个端口;
- [!] - -tcp-flags (SYN, ACK, FIN, RST, PSH, URG,RST,ALL,NONE)指定TCP的标志位,需要跟两个标志位列表,如:SYN,ACK,FIN,RST,SYN 第一个列表表
- tcp:隐藏了”-m tcp”的专用选项