iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。分为四个表和五个链,其中表是按照对数据包的操作区分的,链是按照不同的Hook点来区分的,表和链实际上是netfilter的两个维度。
4个表:filter,nat,mangle,raw,默认表是filter(没有指定表的时候就是filter表)。表的处理优先级:raw>mangle>nat>filter。
filter:一般的过滤功能,如不-t指定表,则默认filter
nat:用于nat功能(端口映射,地址映射等)
mangle:用于对特定数据包的修改
raw:优先级最高,设置raw时一般是为了不再让iptables做数据包的链接跟踪处理,提高性能
5个链:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING。
PREROUTING:数据包进入路由表之前
INPUT:通过路由表后目的地为本机
FORWARDING:通过路由表后,目的地不为本机
OUTPUT:由本机产生,向外转发
POSTROUTIONG:发送到网卡接口之前
用表格表示下他们之间关系
四个表/五个链 | PREROUTING | INPUT | FORWARD | OUTPUT | POSTROUTING |
rew | √ | √ | |||
mangle | √ | √ | √ | √ | √ |
nat | √ | √ | √ | ||
filter | √ | √ | √ |
用图来表示他们的过滤匹配流程
常用参数:
链中规则:
-A 添加一条规则
-I 根据给出的规则序号向所选链中插入一条或更多规则
-R 从选中的链中取代一条规则
-D 删除一条规则
链:
-N 新建一条自定义链
-X 删除一条自定义链
-E 重命名一条自定义链
-F 清空指定链,如果不指定链,则清空表中的所有链
-P 设定链的默认策略
-Z 把所有链的包及字节的计数器清空
查看:
-L 查看
-v 详细查看
-vv 更详细查看
-x 显示包和字节计数器的精确值,代替用K,M,G表示的约数。 这个选项仅能用于 ‘-L -v‘命令
-n 数字输出。IP地址和端口会以数字的形式打印
--line-numbers 在每个列表前加上行号
服务脚本:/etc/rc.d/init.d/iptables
脚本配置文件:/etc/sysconfig/iptables-config
service iptables {status|start|stop|restart|save}
规则的保存位置/etc/sysconfig/iptables
匹配条件:
通用匹配
-s 源地址匹配
-d 目标地址匹配
(源地址和目标地址可以是ip地址,也可以是网络地址,网络地址需加上掩码,如:192.168.1.0/24 。如需取反则加上!,如:! 192.168.1.11,即除192.168.1.11以外的ip)
-p 协议匹配,通常有三种协议{icmp|tcp|udp}
-i IN_INTERFACE 流入接口,注意:通常接的链有 PREROUTING、INPUT、FORWARD
-o OUT_INTERFACE 流出接口,注意:通常接的链有 FORWARD、OUTPUT、POSTROUTING
扩展匹配
隐式扩展
-p tcp
--dport PORT
--sport PORT
(这里可以指定端口片,如:{22:67}指定22端口到67端口,{22: }指定22端口以上,{ :22}指定22端口以下,也可以使用!取反{! 22:67})
--tcp-flage SYN,ACK,RST,FIN SYN 检查tcp标志位,SYN为1,其他三个为0(tcp标识位有6个,分别是SYN、ACK、URG、PSH、RST、FIN----建立连接、确认、紧急、强迫、复位、结束)
-p udp
--sport PORT
--dport PORT
(这里同上tcp)
-p icmp
--icmp-type typename
(typename有‘8‘请求、‘0‘应答等类型,例如配置一个不让某网段ping本机:iptables -t filter -A INPUT -s 192.168.0.0/24 -p icmp --icmp-type 8 -j DROP )
显示扩展
(netfilter 扩展模块引入的扩展,用于扩展匹配条件,通常需要额外专用选项来定义)
-m state:用于实现连接的状态检测模块
--state NEW(新建连接),ESTABLISHED(确认连接),RELATED(关联连接),INVALID(无效连接)
-m multiport :多端口
--source-port :源端口组
--destination-ports :目标端口组
--ports
例如:将同是tcp协议的22、80端口合并一条规则
[root@david ~ ]#iptables -L INPUT -n Chain INPUT (policy DROP) target prot opt source destination ACCEPT tcp -- 0.0.0.0/0 172.31.12.4 tcp dpt:22 ACCEPT tcp -- 0.0.0.0/0 172.31.12.4 tcp dpt:80 [root@david ~ ]#iptables -F INPUT [root@david ~ ]#iptables -I INPUT 1 -d 172.31.12.4 -p tcp -m multiport --destination-ports 22,80 -m state --state NEW,ESTABLISHED -j ACCEPT
本文出自 “时不待我!” 博客,请务必保留此出处http://zengweidao.blog.51cto.com/8342699/1432696
原文:http://zengweidao.blog.51cto.com/8342699/1432696