Iptables原理及应用解析(2)

-s 地址:指定报文源IP地址的匹配的范围;可以是IP,也可以是网络地址;可使用!取反

--src, --source

-d 地址:指定报文目标IP地址匹配的范围

--dst, --destination

-p 协议:指定匹配报文的协议类型,一般有三种tcp,udp,icmp

-i ethX :数据报文流入的接口:PREROUTING,INPUT,FORWARD

-o ethX :数据报文流入的接口:OUTPUT,FORWARD,POSTROUTING

扩展匹配

隐式匹配: 当使用-p{tcp|udp|icmp}中的一种时,可以直接使用扩展专用选项

-p tcp

--sport PORT[-PORT]:指定源端口,可以是多个端口

--dport PORT[-PORT]:指定目标端口,可以是连续的多个端口

--tcp-flag:TCP的标志位列表(用逗号分隔)

必须为1 的标志位列表

eg:--tcp-flags syn,ack,rst,fin syn

-p udp

--sport PORT[-PORT]:指定源端口,可以是多个端口

--dport PORT[-PORT]:指定目标端口,可以是连续的多个端口

-p icmp

--icmp-type:

echo-request(请求回显),一般用8 来表示

echo-reply (响应的数据包)一般用0来表示

显示扩展    -m  必须要指定要扩展的扩展模块名称

multiport: 多端口匹配

可用于匹配非连续或连续端口;最多指定15个端口;用冒号分隔

eg:

iptables -I INPUT -d 172.16.100.7 -p tcp -m multiport --dports 22,80 -j ACCEPT

iptables -I OUTPUT -s 172.16.100.7 -p tcp -m multiport --sports 22,80 -j ACCEPT

iprange: 匹配指定范围内的地址

匹配一段连续的地址而非整个网络时有用;

专用选项:

[!] --src-ragne IP[-IP]

[!] --dst-range

iptables -A INPUT -d 172.16.100.7 -p tcp --dport 23 -m iprange --src-range 172.16.100.1-172.16.100.100 -j ACCEPT

iptables -A OUTPUT -s 172.16.100.7 -p tcp --sport 23 -m iprange --dst-range 172.16.100.1-172.16.100.100 -j ACCEPT

string: 字符串匹配,能够检测报文应用层中的字符串

字符匹配检查高效算法

kmp, bm

专用选项:

--algo {kmp|bm}

--string "STRING"

--hex-string "HEX_STRING": HEX_STRING为编码成16进制格式的字串;

eg:

iptables -I OUTPUT -m string --algo kmp --string "sex" -j DROP

time: 基于时间做访问控制

专用选项:

--datestart YYYY[-MM][-DD[Thh[:mm[:ss]]]]

--datestop

--timestart hh:mm[:ss]

--timestop hh:mm[:ss]

--weekdays day[,day]Mon, Tue,

eg:

iptables -I INPUT -d 172.16.100.7 -p tcp --dport 80 -m time --timestart 08:20 --timestop 18:40 --weekdays Mon,Tue,Thu,Fri -j REJECT

connlimit: 连接数限制,对每IP所能够发起并发连接数做限制;

专用选项:

[!] --connlimit-above [n]

eg:

iptables -A INPUT -d 172.16.100.7 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j DROP

limit: 速率限制

专用选项:

--limit n[/second|/minute|/hour|/day]

--limit-burst n

eg:

iptables -A INPUT -d 172.16.100.7 -p icmp --icmp-type 8 -m limit --limit 20/minute --limit-burst 5 -j ACCEPT

state: 状态检查

专用选项:

--state

连接追踪中的状态:

NEW: 新建立一个会话

ESTABLISHED:已建立的连接

RELATED: 有关联关系的连接

INVALID: 无法识别的连接

调整连接追踪功能所能容纳的连接的最大数目:

/proc/sys/net/nf_conntrack_max

当前追踪的所有连接

/proc/net/nf_conntrack

不同协议或连接类型追踪时的属性:

/proc/sys/net/netfilter目录:

放行被动模式下的FTP服务:

1、装载模块/lib/modules/KERNEL_VERSION/kernel/net/netfilter/

模块:nf_conntrack_ftp

2、放行请求报文:

(1)放行NEW状态对21端口请求的报文;

(2) 放行ESTABLISHED以及RELATED状态的报文

3、旅行响应报文:

(1) 放行ESTABLISHED以及RELATED状态的报文

四、写规则

先确定功能(表),确定报文流向,确定要实现的目标,确定匹配条件

流向

与本机进程通信:

流入:-->PREROUTING-->INPUT

流出:-->OUTPUT-->POSTROUTING

经由本机转发:

请求:-->PREROUTING-->FORWARD-->POSTROUTING

响应:-->PREROUTING-->FORWARD-->POSTROUTING

写规则时要注意:

服务端:先进后出

客户端:先出后进

客户端端口是随机的,因此大多数场景下无须限定

规则文件:/etc/sysconfig/iptables

保存启用中的规则于规则文件中:

1、iptables-save > /etc/sysconfig/iptables

2、service iptables save

生效规则文件中的规则:

1、iptables-restore < /etc/sysconfig/iptables

2、service iptables restart

执行的操作:清空现有规则,读取并生效规则文件中的规则

常用语法

删除规则:

iptables [-t table] -D chain rulenum

设置策略:

iptables [-t table] -P chain target

修改规则:

iptables [-t table] -R chain rulenum rule-specification

插入规则:

iptables [-t table] -I chain [rulenum] rule-specification

创建自定义链:

iptables [-t table] -N chain

删除自定义且0引用的空链

iptables [-t table] -X chain

重命名自定义链:

iptables [-t table] -E old_name new_name

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/17233.html