作为一个IT行业的人士,防火墙是什么我就不多赘述,总之,网络的安全全靠它的能力,就好比是我们的国防。防火墙的设置的优劣会直接影响到一个网络的安全和性能。下面我们就来谈谈实现linux上的防火墙功能的iptables命令的运用和一些基本的防火墙基础知识:
说防火墙我们首先要先来说说TCP/IP协议的三次连接和四次断开;三次连接如下图:
四次断开如下图:
然后就是TCP/IP会话的主动方和被支动方在会话过程中的状态,类型:如下图分析:
这就是我们TCP/IP会话建立时的几种状态,其中我们要注意的是FIN_WAIT_2状态,这个状态是无时间限制的。现在的有些攻击木马就是通过某途径让服务器通过端口主动发起连接,然后主我们的服务器大量的进程牌FIN_WAIT2状态,过多的话就造成了我们服务的停止工作。
讲完上面的的基本概念,那么我们就可以更清楚的的来说明iptables的工作原理,我们知道iptables是和内核进行交流工作的。而我们也知道用户要与内核“通信”需要内核开通特殊的端口来和用记进行通信。于是就有了如下的五个内核端口。如下图:
其中的In就是INPUT ,Out就是OUTPUT,还有PREROUTING,POSTINGROUTING和FORWORD共有五个端口来实现防火墙的控制。这五个规则也就是五个规则链。
我们把要想要达到的限制目的称为规则,规则的定义主要在这五个端口上。另外防火墙还有表扩定义,有filter转发表,nat地址转换表,mangle拆开查询表,raw表。我们定义规则的时候也是针对某个表进行定义的。如果我们不指出,默认的是filter转发表。
下面我们来说明iptables 的语法:
iptables [-t table(表)] COMMAND CHAINS(大写 链) [creteria 匹配规则] -j ACTION(执行的操作)
规则管理:
-A:添加
#iptables -A INPUT
-I: 插入
-D: 删除
-R: 替换
链管理类的:
-F:flash 清空链中的规则
-N:new 新建,
-X: 删除自定义的空链
-E:rename 重命名
默认策略:
-P chain actions:
如:# iptables -P INPUT DROP: 指定链INPUT的默认规则是 DROP(丢弃)
-Z:是清空计数器。
每条规则(包含默认策略)都有两个计数器
1.被此规则匹配到的所有数据包的个数
2.被此规则匹配到的所有数据包的大小之和。
查看类:
-L :list列出信息。
-n :number
-v:详细信息。
-x:精确的。不做单位的换算,显示详细大小。
-line-number:显示行号。
匹配条件:
基本匹配和扩展匹配:
* 基本匹配:
-s: 源地址
-p: 匹配协议
-d: 目标地址
-i: INTERFACE 流入
-o: OUTPUT 流出
例: iptable -A INTPUT -s 172.16.0.0/16 -d 172.16.121.1/16 -j ACCEPT :就是新加一条允许172.16.0.0/16网段的主机通过INTPUT口访问主机172.16.121.1/16主机 。
*扩展匹配分为隐含扩展和显式扩展。
-m :调用iptables的模块,以便扩展iptables的匹配功能
-p 协议
-sport:源端口
-dport:目标端口
例:拒绝所有的主机访问172.16.121.1的web服务;
#iptables -A INPUT -s 0.0.0.0/0.0.0.0 -d 172.16.121.1/16 -p tcp -dport 80 -j DROP
当我们不想让别的主机ping通我们的主机 ,但我们还可以ping通别人的主机的时候可以这样做:
#iptables -A INPUT -s 0.0.0.0/0.0.0.0 -d 172.16.121.1/16 -p icmp --icmp-type 8 -j DORP
这样就可以拒绝别人的ping请求,而自己却可以ping通别人。这是因为ping服务在进来的时候类型为 8 出去的时候类型为0 ,我们拒绝了类型8的ping服务 ,但类型0的ping请求还是可以出去的。
我们在前面提到过服务不允许出现主动连接客户端的情况,那么我们就可以根据状态来进行限定:例:
iptables -A OUTPUT -d 172.16.121.1 -m state --state NEW -j DROP
NEW是TCP/IP建立会话时的第一次握手,显然服务器不该出现主动连接别人的情况。所以拒绝这样的数据包。
--sport 22:80 :是指定某一段端口。
iptables -A OUTPUT --src-range 172.16.0.1-172.16.0.10 -d 172.16.121.1 -p tcp -dport 80 -j DROP
这样就限定了一个范围内的主机可以访问172.16.121.1上的web服务。
-m -limit 用于限定匹配到的数据包的个数,
-limit-burst 用于峰值控制。
-m -string 字符串的匹配。 两种算法 bm| kmp