承接上一篇博文,这里讲述主机防火墙高级部分,一个内容一个示例,希望大家明白!
一、显式扩展:
必须显式地指明使用的扩展模块进行的扩展;
使用帮助:
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
本文出自 “深海鱼” 博客,请务必保留此出处http://kingslanding.blog.51cto.com/9130940/1769434
原文地址:http://kingslanding.blog.51cto.com/9130940/1769434