扩展模块分为二种:

(1)隐式扩展:在使用-p选项指明了特定的协议时,无需再用-m选项指明扩展模块的扩展机制,会自动加载对应模块

(2)显式扩展:必须使用-m选项指明要调用的扩展模块的扩展机制,要手动加载扩展模块

使用帮助:

CentOS 6: man iptables

CentOS 7: man iptables-extensions

环境准备:

192.168.12.27、192.168.12.12

在192.168.12.27配置iptables规则并安装httpd和mariadb

iptables -F

iptables -A INPUT -s 192.168.12.1 -j ACCEPT   #允许windows访问

iptables -A  INPUT  -i lo -j ACCEPT     #允许本机访问

iptables -A INPUT -j REJECT    #拒绝所有

隐式模块

1、添加端口

允许192.168.12.12访问本机的80和3306端口,一条规则只能例外一个端口,如果端口相连可以写在一条规则

中,

iptables -I INPUT 3 -s 192.168.12.12 -p tcp --dport 80 -j ACCEPT  

iptables -I INPUT 3 -s 192.168.12.12 -p tcp --dport 81:83 -j ACCEPT       #添加3个连续的端口

2、拒绝tcp的第一次握手

iptables -D INPUT 3  删除上一步的规则

iptables -I INPUT 3 -s 192.168.12.12 -j ACCEPT

iptables -I INPUT 3 -s 192.168.12.12 -p tcp --syn -j REJECT

iptables扩展模块应用(二)_iptables规则优化

iptables扩展模块应用(二)_iptables规则优化_02

curl测试就不通了,但是ping通,并且upd协议也可以使用

3、192.168.12.27可以ping通192.168.12.12,反过来不通

iptables -D INPUT 3

iptables -D INPUT 3

iptables -I INPUT 3 -p icmp --icmp-type 0 -j ACCEPT  #允许响应报文通过,不然icmp报文可以出去无法回来。

iptables扩展模块应用(二)_iptables规则优化_03

iptables扩展模块应用(二)_iptables规则优化_04

显式模块

1、multiport扩展

使用multiport扩展添加,以离散方式定义多端口匹配,最多指定15个端口

iptables -I INPUT 3 -s 192.168.12.12 -p tcp -m multiport --dports 80,3306 -j ACCEPT

iptables扩展模块应用(二)_iptables规则优化_05

2、mac扩展

适用于:PREROUTING, FORWARD,INPUT chains

iptables -D INPUT 3 #删除第三条规则

iptables -I INPUT 3 -m mac --mac-source 00:0c:29:36:a7:c3 -j ACCEPT

iptables扩展模块应用(二)_iptables规则优化_06

4、string扩展

对报文中的应用层数据做字符串模式匹配检测  --algo {bm|kmp} 字符串匹配检测算法

--from offset 开始偏移  应用层数据库开始是从传输层后除去帧的(8+6+6+2)22字节,IP头固定20字节,tcp40个字节,跳过62个

--to offset 结束偏移

建立二个页面

echo www.google.com  > /var/www/html/test.html   

echo hello > /var/www/html/index.html

iptables -A OUTPUT  -p tcp --sport 80 -m string --algo bm --string "google" -j REJECT

此处添加的是OUTPUT,因为客户端请求报文中没有google,是禁止本机带有google字符被访问,测试主页可以访问

iptables扩展模块应用(二)_iptables规则优化_07

5、time扩展

根据将报文到达的时间与指定的时间范围进行匹配

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

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

--timestart hh:mm[:ss] 时间

--timestop hh:mm[:ss]

[!] --monthdays day[,day...] 每个月的几号

[!] --weekdays day[,day...] 星期几,1 – 7 分别表示星期一到星期日

--kerneltz:内核时区,不建议使用,CentOS7系统默认为UTC

注意: centos6 不支持kerneltz ,--localtz指定本地时区(默认)

示例9点到18点上班时间可以访问,默认是UTC

iptables -I INPUT 3 -m time --timestart 1:00 --timestop 10:00 -j ACCEPT

iptables扩展模块应用(二)_iptables扩展模式_08


iptables扩展模块应用(二)_iptables规则优化_09

修改时间测试可以访问

6、connlimit扩展

根据每客户端IP做并发连接数数量匹配

可防止Dos(Denial of Service,拒绝服务)***

--connlimit-upto #:连接的数量小于等于#时匹配

--connlimit-above #:连接的数量大于#时匹配

通常分别与默认的拒绝或允许策略配合使用

iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 100 -j REJECT    #tcp80并发连接数达到100拒绝

如果tcp连接数达到100禁止访问,该命令能当作简单防护***,如果通过多个ip发起请求就无法禁止了(DDoS)

iptables扩展模块应用(二)_iptables扩展模式_10

7、limit扩展

基于收发报文的速率做匹配

令牌桶过滤器

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

--limit-burst number

 每分钟ping20次前10个不限制

iptables -A INPUT -p icmp --icmp-type 8 -m limit --limit 20/minute --limit-burst 10 -j REJECT

iptables扩展模块应用(二)_iptables扩展模式_11

iptables扩展模块应用(二)_iptables扩展模式_12

8、state扩展

根据”连接追踪机制“去检查连接的状态,较耗资源,conntrack机制:追踪本机上的请求和响应之间的关系

状态有如下几种:

    NEW:新发出请求;连接追踪信息库中不存在此连接的相关信息条目,因

    此,将其识别为第一次发出的请求

    ESTABLISHED:NEW状态之后,连接追踪信息库中为其建立的条目失效之

    前期间内所进行的通信状态

    RELATED:新发起的但与已有连接相关联的连接,如:ftp协议中的数据连

    接与命令连接之间的关系

    INVALID:无效的连接,如flag标记不正确

    UNTRACKED:未进行追踪的连接,如raw表中关闭追踪

已经追踪到的并记录下来的连接信息库

/proc/sys/net/nf_conntrack 

调整连接追踪功能所能够容纳的最大连接数量

/proc/sys/net/nf_conntrack_max  默认65536,工作中如果设置连接追踪根据需要调大

vi /etc/sysctl.conf

net.nf_conntrack_max=88888

sysctl -p

不同的协议的连接追踪时长

/proc/sys/net/netfilter/

先用另一个主机远程到当前主机

iptables -I INPUT 3 -p tcp --dport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables扩展模块应用(二)_iptables扩展模式_13

已经连接的可以保持连接,退出再次连接的用户拒绝

 9、开放被动模式的ftp服务

ftp被动模式的端口号是不确定,

iptables -I INPUT 3 -p tcp --dport 21 -j ACCEPT  #只添加21端口可以连接,不能查看目录内容

iptables扩展模块应用(二)_iptables规则优化_14

modprobe nf_conntrack_ftp   #加载可以识别ftp协议的模块

iptables -I INPUT 3 -m state --state ESTABLISHED,RELATED -j ACCEPT   #使用ftp的连接跟踪模块iptables扩展模块应用(二)_iptables扩展模式_15

iptables扩展模块应用(二)_iptables扩展模式_16

10、iptables的日志功能

ptables -I INPUT 3 -s 192.168.12.12 -j LOG --log-prefix "from 12.12"

iptables扩展模块应用(二)_iptables扩展模式_17


iptables的规则优化

任何不允许的访问,应该在请求到达时给予拒绝

规则在链接上的次序即为其检查时的生效次序

基于上述,规则优化

1 安全放行所有入站和出站的状态为ESTABLISHED状态连接

2 谨慎放行入站的新请求

3 有特殊目的限制访问功能,要在放行规则之前加以拒绝

4 同类规则(访问同一应用),匹配范围小的放在前面,用于特殊处理

5 不同类的规则(访问不同应用),匹配范围大的放在前面

6 应该将那些可由一条规则能够描述的多个规则合并为一条

7 设置默认策略,建议白名单(只放行特定连接)

    1) iptables -P,不建议

    2) 建议在规则的最后定义规则做为默认策略