iptables 小提升

相信作为运维的我们对iptables都不陌生了,但是简单的基础语法好掌握,稍微复杂一点的语法相信座位菜鸟的我们还不是很了解,今天我就总结些给菜鸟提升的一些知识。

       首先介绍下Netfilter与iptables的关系。Netfilter是运行在Linux内核中的小功能,作为Linux的第三代防火墙。而iptables则是一个管理Netfilter的一个工具。

       然后要说的一个重要的小知识点,在菜鸟级别应该需要知道的,就是规则匹配方式。当我们在防火墙上添加新规则时,这些规则是按照“先后顺序”一条一条被加入到链中的。因此,第一条被加进来的规则,就会存放在链内的第一条规则,最后加进来的就会使链中的最后一条规则。当一个数据包进入链中之后,filter机制就会根据该数据包的特征,从链中的第一条规则逐一向下匹配。假设该数据包的特征在第一条规则就被匹配到,将由这条规则来决定数是否放弃该数据包,如果该规则说:“该数据包丢弃掉”,那么数据包马上就被丢弃掉,不管后面的规则内容是什么。相反,如果第一条规则说:“该数据包可以进来”,那么该数据包随即就进入到“本机进程”的位置,当然不管后面的规则内容是什么也都不再重要。如果都没匹配到,那默认策略就发挥作用了,因为默认策略用永远是每个链的最低端。默认策略的默认状态是ACCEPT。

       接下来就说些小提高。

       一、iptables的语法分为基本语法与高级语法。filter机制是由ipTables_filter.ko模块提供的功能,而这个模块本身就已经提供了一些简单的匹配过滤方式,而所谓的基本语法是只使用ipTable_filter.ko模块自身提供的功能;而高级语法就是,当基本语法无法满足我们的需求时,我们需要些调用些其他模块去实现功能,使用这些其他模块的语法,我们就称之为高级语法。例如-m mac 就是告诉iptables工具,我们需要调用tx_mac.ko这个模块的功能。

       二、xt_state.ko模块。state模块定义的是连接状态,这个连接状态跟tcp/ip中的12种连接状态完全两码事,切勿混为一谈。state的连接状态分4种。

               第一种:ESTABLISHED,解释为只要数据包能够成功穿越防火墙,那么之后的所有的数据包(包括反向的的所有数据包),其状态都会是ESTABLISHED。

               第二种:NEW,比如客户端主机使用tcp port 50000,连接服务器端tcp port 22,这一条链路中的第一个数据包的状态就是NEW。

               第三种:RELATED,只要应答的数据包是因为本机先送出一个数据包而导致另一条连接的产生,那么这个新连接的所有数据包都属于RELATED状态的数据包。

               第四种:INVALID,状态不明的数据包不属于以上的三种的任何一种。

          对应语法:

         iptables -A INPUT -p tcp -m state --state INVALID -j DROP  一般放在匹配规则最上方,直接把不名状态的包丢弃掉。

         iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT 紧接着INVALID状态的语句,允许是ESTABLISHED与RELATED状态的数据包进入本机。

小总结:

-A 加入新规则  -I 插入新规则  -R 取代规则  -D删除规则

iptables -t filter -F

iptables -t filter -P INPUT DROP

iptables -t filter -P FORWARD DROP

iptables -A INPUT -p tcp -m state --state INVALID -j DROP

iptables -A INPUT -p tcp -d  192.168.0.1(localhostserver) --dport 25 -j ACCEPT

iptables -A INPUT -p tcp -d  192.168.0.1(localhostserver) --dport 80 -j ACCEPT

iptables -A INPUT -p tcp -s 192.168.0.2(客户端) -d 192.168.0.1 --dport 22 -j ACCEPT

iptables -A INPUT -p tcp -s 192.168.0.2(客户端) -d 192.168.0.1 --dport 23 -j ACCEPT

iptables -A INPUT -p tcp -m state  --state ESTABLISHED,RELATED -j ACCEPT

          三、几种常用的高级匹配。

                   高级匹配一般是只对不同类别的数据包内部的信息的一个过滤。

                  (1) ICMP的高级匹配――――内置的匹配方式

                            对于ICMP包又分为请求包与应答包,请求包与应带包中都有两个字段,分别是type与code,他们的区别就是请求包中的type的值为8,而应答包中的type的值为:0,所以当我们的需求是,只想ping别人,而不要别人ping自己时的iptables的语法如下:
          iptables -A INPUT -p icmp --icmp-type 8 -j DROP  把进入本机的icmp包中type为8的包都DROP掉。

       (2)TCP/IP的高级匹配

通过分析TCP的包头内容,--dport 与--sport我们都很熟悉了,但是TCP-Flags的匹配应该还很陌生。

本文出自 “成长之路” 博客,转载请与作者联系!

你可能感兴趣的:(iptables,提高)