1.linux防火墙的隐含扩展
前面的有关防火墙的博客地址点击打开链接
我的操作系统是centos6.用的防火墙是iptables。其实centos7的firewall也是基于iptabels再封装的。但我觉得还是iptables还是更好学一点。
首先iptables他不是服务,但有服务脚本。其实iptables就是在装载和移除相应的内核模块。
这里说下卸载内核模块的命令modprobe。
前面的学习笔记已经详细说了Iptables的概念等知识。其实iptables是特别强大的。他针对TCP/IP四层模型中的TCP层和IP层,可以针对协议报头中的内容进行拦截和放行。比如说。大家都知道。TCP协议中一个握手包的报头信息中SYN为1代表的是请求连接,FIN为1代表的是断开连接的请求。
那么在iptables中有一选项 -p 协议名
比如说
-p tcp
--sport 端口
--dport 端口
--tcp-flags <mask> <comp> 其中mask代表要检查的标志位。comp表示这些位必须为1。
--tcp-flags SYN,ACK,FIN,RST SYN
知道上面的那个例子是什么意思吗。
后面的解释已经说的很清楚了。就是检查SYN,ACK,FIN,RST 其中 SYN要为1。剩下的要为0。
这就是tcp三次握手的第一次。其实还可以简写为--syn。
2.iptables的显式扩展。
说白了就是扩展模块。当想要使用这个显式扩展式就是用-m 使用这些模块来增强匹配。
当使用-m 引入模块后就可以匹配更丰富的内容
state:状态扩展
结合ip_conntrack模块追踪会话的状态。
[root@suse ~]# lsmod|grep ip
iptable_filter 2793 1
ip_tables 17831 1 iptable_filter
ip6t_REJECT 4628 2
nf_conntrack_ipv6 8748 2
nf_defrag_ipv6 11182 1 nf_conntrack_ipv6
nf_conntrack 79758 2 nf_conntrack_ipv6,xt_state
ip6table_filter 2889 1
ip6_tables 18732 1 ip6table_filter
ipv6 317340 283 ip6t_REJECT,nf_conntrack_ipv6,nf_defrag_ipv6
这样的状态扩展会追踪
NEW:新的连接请求
ESTABLISHED:已建立的连接
INVALID:非法状态
RELATED:相关连的
比如 -m state --state NEW,ESTABLISHED -j ACCEPT
下面的就是一个在OUTPUT 链上只放行已建立连接的请求。只是什么意思呢。
就是说,我现在本机只接受被人连接。我不能主动去连接别人(当然OUTPUT的默认策略是DROP)
.不信?当然这里只是针对22端口
就是不能主动与外界联系
那么怎么针对所有协议。
那么我加一条.不指定协议就默认是所有协议。
1.还有多端口匹配。可实现离散的多端口匹配。(!可以取反)
--source-ports 22,80,21,20
--destination-ports 22,80,21,20
--ports22,80,21,20 (这个就不区分源端口还是目的端口了)
2.还有多IP地址的匹配。可以实现多个IP写一块匹配。(iprange模块)方便的指定一段IP地址。
当然还有dst--range
3.还有一个模块叫做connlimit。用来限制连接数
像迅雷这样的下载工具。会开启多线程,每一个线程都会是一个连接。可以使用connlimit模块中的扩展来加以限制
也就是。
! --connlimit-above n 每台主机最多连接n个请求
这个模块引进后,一台主机低于2个请求才会被接受。也就是他不能无限制的连接我。
下面实验一下这个模块。
看看防火墙策略
访问一下试试
第一个好着。第二个就打不开了
4.limit模块也可以做流量控制。
采用令牌桶控制。它不能限定整体的上限,但是它可以限定单位时间内可以放进来多少个连接。
--limit <RATE> 速率
--limit-burst <COUNT> 一次可以放进来几个
举个例子。我只允许每分钟被ping30次。每次放行一个ping请求。如下图
看看效果,看,一般的丢包率
这就是速率限定。
有了limit和connlimit就可以保护主机不受大流量的冲击。(当然某些用户会被限制连接)
5.还有字符串匹配
请求中含有abc的字符串将不予相应。