承接上一篇博文,这里讲述主机防火墙高级部分,一个内容一个示例,希望大家明白!

一、显式扩展:

 必须显式地指明使用的扩展模块进行的扩展;

   使用帮助:

CentOS 6: man iptables

CentOS 7: man iptables-extensions

1、multiport扩展

 以离散方式定义多端口匹配;最多指定15个端口;

  [!] --source-ports,--sports port[,port|,port:port]...:指定多个源端口“,”表示离散的端口“:”表示连续端口段;

  [!] --destination-ports,--dports port[,port|,port:port]...:指定多个目标端口;

  [!] --ports port[,port|,port:port]...:指明多个端口;

# iptables -S INPUT
-P INPUT DROP
-A INPUT -d 172.18.29.122/32 -p tcp -m multiport --dports 22,80 -j ACCEPT
-A INPUT -d 172.18.29.122/32 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -d 172.18.29.122/32 -p udp -m udp --sport 53 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT

iptables -S OUTPUT
-P OUTPUT DROP
-A OUTPUT -s 172.18.29.122/32 -p tcp -m multiport --sports 22,80 -j ACCEPT
-A OUTPUT -s 172.18.29.122/32 -p icmp -m icmp --icmp-type 0 -j ACCEPT
-A OUTPUT -s 172.18.29.122/32 -p udp -m udp --sport 53 -j ACCEPT
-A OUTPUT -s 172.18.29.122/32 -p udp -m udp --dport 53 -j ACCEPT

2、iprange扩展

指明连续的(但一般不脑整个网络)ip地址范围;

[!] --src-range FROM[-TO]:源IP地址;

[!] --dst-range FROM[-TO]:目标IP地址;

iptables -P INPUT DROP
-A INPUT -p tcp -m multiport --dports 22,80 -m iprange --src-range 172.18.29.1-172.18.29.155 -j ACCEPT
-A INPUT -d 172.18.29.122/32 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -d 172.18.29.122/32 -p udp -m udp --sport 53 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

3、string扩展

对报文中的应用层数据做字符串模式匹配检测;

--algo {bm|kmp}:字符串匹配检测算法;

bm:Boyer-Moore

kmp:Knuth-Pratt-Morris

                 --from :从报文某部分开始

                 --to :从报文某部分结束

[!] --string pattern:要检测的字符串模式;

[!] --hex-string pattern:要检测的字符串模式,16进制格式;

# iptables -A OUTPUT -s 172.16.100.67 -d 172.16.0.0/16 -p tcp --sport 80 -m string --algo bm --string "gay" -j REJECT

4、time扩展

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

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

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

--timestart hh:mm[:ss]:--timestart 08:00:00 --timestop 16:00:00

--timestop hh:mm[:ss]

[!] --monthdays day[,day...]: --monththdays 1,2,3,4...

[!] --weekdays day[,day...]:--weekdays 1,2,3,4...

--kerneltz:使用内核上的时区,而非默认的UTC; #很重要,指定内核时区就是可以

iptables -A INPUT -d 172.18.29.122/32 -p tcp -m tcp --dport 80 -m time --timestart 23:30:00 --timestop 23:50:00 --datestop 2038-01-19T03:14:07 --kerneltz -j ACCEPT

5、connlimit扩展

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

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

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

iptables -A INPUT -d 172.16.100.67 -p tcp --dport 21 -m connlimit --connlimit-above 2 -j REJECT

6、limit扩展

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

令牌桶过滤器;

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

--limit-burst number

# iptables -I INPUT -d 172.16.100.67 -p icmp --icmp-type 8 -m limit --limit 3/minute --limit-burst 5 -j ACCEPT
# iptables -I INPUT 2 -p icmp -j REJECT
-A INPUT -p icmp -m icmp --icmp-type 8 -m limit --limit 10/min --limit-burst 3 -j ACCEPT

7、state扩展:state 是conntrack的自己,用于对报文的状态做连接追踪

      连接追踪模板:条目(SIP:SPORT--DIP:DPORT),倒计时

      如果条目过大那么就拒绝连接。数目可以调整,负载均衡器上不需要加入连接追踪功能。

      根据”连接追踪机制“去检查连接的状态;

     conntrack机制:追踪本机上的请求和响应之间的关系;状态有如下几种:

NEW:新发出请求;连接追踪模板中不存在此连接的相关信息条目,因此,将其识别为第一次发出的请求;

ESTABLISHED:NEW状态之后,连接追踪模板中为其建立的条目失效之前期间内所进行的通信状态;

RELATED:相关联的连接;如ftp协议中的数据连接与命令连接之间的关系;

INVALID:无效的连接;

UNTRACKED:有意未进行追踪的连接;

[!] --state state

# iptables -A INPUT -d 172.16.100.67 -p tcp -m multiport --dports 22,80 -m state --state NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -s 172.16.100.67 -p tcp -m multiport --sports 22,80 -m state --state ESTABLISHED -j ACCEPT

如何开放被动模式的ftp服务?

(1) 装载ftp连()接追踪的专用模块:

# modprobe  nf_conntrack_ftp
# lsmod  |grep nf_conntrack_ftp

(2) 放行命令连接(假设Server地址为172.16.100.67):

tcp -m tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -d 172.18.29.122/32 -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT

(3) 放行数据连接(假设Server地址为172.16.100.67):-A INPUT -d 172.18.29.122/32 -p 

-A OUTPUT -s 172.18.29.122/32 -p tcp -m tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT
-A OUTPUT -s 172.18.29.122/32 -p tcp -m state --state ESTABLISHED -j ACCEPT

规则的优化策略:规则在连接上的次序几位其检查时的生效次序;因此,其优化有一定法则:

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

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

    (3)应该将那些可由一条规则描述的多个规则合并唯一;

    (4)设置默认策略

二、保存规则:

  使用iptables命令定义的规则,手动删除之前,其生效期限为kernel存活期限;

保存规则至指定的文件:

CentOS 6:

~]# service  iptables  save   

   将规则保存至/etc/sysconfig/iptables文件中;

~]# iptables-save  >  /PATH/TO/SOME_RULES_FILE,默认为(/etc/sysconfig/iptables,其他路径不会被读取)

CentOS 7:

                ~]# iptables -S 

~]# iptables-save  >  /PATH/TO/SOME_RULES_FILE

重新载入预存规则文件中规则:

          CentOS 7:

~]# iptables-restore <  /PATH/FROM/SOME_RULES_FILE

CentOS 6:

~]# service  iptables  restart 

              会再次读取配置文件/etc/sysconfig/iptables

自动生效规则文件中的规则:

(1) 用脚本保存各iptables命令;让此脚本开机后自动运行;

/etc/rc.d/rc.local文件中添加脚本路径;

/PATH/TO/SOME_SCRIPT_FILE

(2) 用规则文件保存各规则,开机时自动载入此规则文件中的规则;

/etc/rc.d/rc.local文件添加:

iptables-restore < /PATH/FROM/IPTABLES_RULES_FILE

说明:

    CentOS 7:

引入了新的iptables前端管理工具firewalld,其管理工个有:firewalld-cmd,  firewalld-config

Target:

ACCEPT, DROP, REJECT, RETURN

LOG, SNAT, DNAT, REDIRECT, MASQUERADE,...

LOG:

--log-level level

--log-prefix prefix