1.扩展匹配:分为隐式扩展和显式扩展
隐式扩展:所谓隐式扩展是对某种指定协议的扩展
- -p tcp
- --sport PORT[PORT2]
- --sport PORT[PORT2]
- --tcp-flags SYN,ACK,RST,FIN,SYN 也可以化作—syn,效果相同
- --tcp-flags ACK,SYN,FIN,RST ACK,SYN
- -p icmp 主要用于ping回应
- --icmp-type
- echo-reply 0 给予回应报文
- echo-reply 8 请求报文
- eg:iptables –t filter –A INPUT –s 172.16.0.0/16 –p icmp-type 8 –j DROP 源地址ping目标地址172.16.0.0/16被拒绝
- iptables -t filter -L -n 查看编写的规则
- iptables -t filter -L -n -v 查看规则是否匹配到数据包
- iptables -L –n –line-numbers 显示行号
- iptables -t filter -D INPUT 2 指定删除INPUT链中的第二条
- iptables -t filter -F INPUT 清空INPUT链中的规则
- iptables -t filter -A INPUT -s 0.0.0.0/0 -d 172.16.100.1 -p tcp --dport 22 -j ACCEPT 来自于0.0.0.0网段的源地址访问目标地址的172.16.100.1的22号端口是被允许的.
显式扩展:显式扩展则是由netfilter的扩展模块引入的某种扩展,用于指定匹配条件,通常需要额外的专用选项来定义,因此如果我们要在iptables中使用模块的话,则必须要使用-m指定模块.模块的存放位置:/lib/iptables/目录下,下面举例说明几个常用模块
- 显式扩展状态:state
- -m state
- --state 用来实现连接的状态监测
- NEW(新发起的连接),ESTABLISHED(建立的连接),RELATED(相关联的),INVALID(非法的)
- eg: [root@ns ~]# iptables -t filter -A INPUT -d 172.16.7.1 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
- //目标地址允许任何源地址可以对172.16.7.1的tcp/22发起NEW和ESTABLISHED
- [root@ns ~]# iptables -t filter -A OUTPUT -s 172.16.7.1 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
- //限定源地址只能通过172.16.7.1的tcp/22发起一个ESTABLISHED
- [root@ns ~]# iptables -P INPUT DROP
- [root@ns ~]# iptables -P OUTPUT DROP
- [root@ns ~]# iptables -L -n -v
- Chain INPUT (policy DROP 9 packets, 945 bytes)
- pkts bytes target prot opt in out source destination
- 372 25112 ACCEPT tcp -- * * 0.0.0.0/0 172.16.7.1 tcp dpt:22 state NEW,ESTABLISHED
- Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
- pkts bytes target prot opt in out source destination
- Chain OUTPUT (policy DROP 0 packets, 0 bytes)
- pkts bytes target prot opt in out source destination
- 93 8400 ACCEPT tcp -- * * 172.16.7.1 0.0.0.0/0 tcp spt:22 state ESTABLISHED
- 注释:上面的规则运用到服务器中可以这样解释,一般来说,为了系统安全我们是不允许服务器端新建连接的,即NEW状态,所以,源地址可以对目标服务器地址发起NEW和ESTABELISED状态,而服务器端只能发起ESTABLISED状态,这样的规则可以大大的加强系统的安全性。
- -m connlimit 表示连接上限[Allows you to restrict the number of parallel TCP connections to a server per client IP address (or address block).]
- [!] --connlimit-above # 表示多于#才满足条件,意味着被拒绝,如果你的默认策略是DROP的话,应该要取反,表示应该不允许。[match if the number of existing tcp connections is (not) above #]
- -m iprange 表示在规则匹配的IP范围内,执行的动作
- --src-range ip-ip 源IP的网段
- --dst-range ip-ip 目标IP的网段
- g:-m iprange --src-range 172.16.7.1-172.16.100.1 限定一段IP地址
- -m mac 表示mac地址的匹配
- --mac-source XX:XX:XX:XX:XX:XX mac地址的匹配只能用在PREROUTING,INPUT,FORWARD链中
- -m string 在规则中依据特定的模式和策略匹配相应的字符特征,以达到过滤的目的
- --algo bm|kmp 匹配算法 algo: algorithm表算法
- --string “pattern” 给定匹配模式
- eg:iptables -I OUTPUT 1 -o eth0 -s 172.16.7.1 -p tcp --sport 80 -m string --algo kmp --string “sex” -j DROP
- 注释:匹配到的报文中出现了sex类似的字符串都过滤掉
- -m recent 允许动态创建一个ip地址表,凡是表内的IP都不让其匹配
- --name NAME
- --set 把数据包源地址加到指定列表中
- --rcheck 通常和--set一起使用
- --remove 从列表中释放
- --second 限定时间,通常和--rcheck|--update一起使用
- --hitcount hits
- -m time 规则内基于时间的匹配
- --datestart 开始日期
- --datestop 结束日期
- --timestart 开始时间
- --timestop 结束时间
- --weekdays 礼拜几
2.使用iptables为netfilter添加规则
- 语法格式:iptables [-t TABLE] COMMAND CHAIN [CRETIRIA匹配条件] –j ACTION
- Iptables对应的服务脚本(实际上不是服务):
- /etc/sysconfig/iptables-config
- 对应的脚本配置文件:/etc/rc.d/init.d/iptables-config使其让默认规则生效。
- 这里有一个调用iptables-config脚本的专用选项:
- Service iptables {status|start|stop|restart|save},
- 其中save的功能最重要,用户可以把自己写的规则保存到特定位置中去。
- 规则的存放位置:/etc/sysconfig/iptables
3.新建链,调用主链,并返回主链
- # iptables -A INPUT -d 172.16.7.1 -j clean_in
- //调用主链
- # iptables -N clean_in
- //新建链
- # iptables -A clean_in -d 255.255.255.255 -p icmp -j DROP
- # iptables -A clean_in -d 172.16.255.255 -p icmp -j DROP
- # iptables -A clean_in -p tcp ! --syn -m state --state NEW -j DROP
- # iptables -A clean_in -p tcp --tcp-flags ALL ALL -j DROP
- # iptables -A clean_in -p tcp --tcp-flags ALL NONE -j DROP
- # iptables -A clean_in -d 172.16.100.1 -j RETURN
- //新建链中规则匹配完毕后,返回主链