iptables介绍

iptables 规则

表和链关系

匹配规则

iptables 常用命令选项



iptables:

一:iptables介绍

     如果linux系统连接到因特网或LAN服务器或连接LAN和因特网的代理服务器,则该系统有利于在linux系统上更好控制IP信息过滤和防火墙配置防火墙在做信息包过滤决定时.有一套遵循和组成的规则,这些规则存储在专用的信息包过滤表中,

而这些表集成在linux内核中.在信息包过滤表中,规则被分组放在我们所谓的链中.而netfilter/iptables IP信息包过滤系统是一款功能强大的工具,可用于添加.编辑和移除规则.  

  状态 ESTABLISHED 指出该信息包属于已建立的连接,该连接一直用于发送和接收信息包并且完全有效。INVALID 状态指出该信息包与任何已知的流或连接都不相关联,它可能包含错误的数据或头。状态 NEW 意味着该信息包已经或将启动新的连接,或者它与尚未用于发送和接收信息包的连接相关联。最后, RELATED 表示该信息包正在启动新连接,以及它与已建立的连接相关联。

netfilter/iptables 的另一个重要优点是,它使用户可以完全控制防火墙配置和信息包过滤。您可以定制自己的规则来满足您的特定需求,从而只允许您想要的网络流量进入系统。

      另外,netfilter/iptables 是免费的,这对于那些想要节省费用的人来说十分理想,它可以代替昂贵的防火墙解决方案。

  防火墙分类: 主机防火墙,网络防火墙

  主机防火墙:针对单个主机,工作在内核中的TCP/IP栈上,一般为软件防火墙

   网络防火墙:针对多台主机,工作网络边缘,一般为硬件防火墙

   网络防火墙分类: 网络层防火墙 应用层防火墙

在internet中,企业通过架设各种服务器系统为用户提供丰富多彩的网络应用,例如web网站,电子邮件系统,FTP服务器,数据库系统等.那么如何来保护这些特定的服务,过滤企业不需要的访问甚至是恶意的***呢?试用防火墙正是强有力的防护措施之一.

     1.linux防火墙基础

     作为隔离内网,过滤非法数据的有力屏障,防火墙通常按实现环境的不同分为硬件防火墙和软件防火墙.硬件防火墙是功能专一的硬件设备,具有比较全面的功能,其工作效率高,但是价格贵,通常只应用于非常重要的主干网络节点.而软件防火墙的功能是由操作系统或软件程序实现的,可以在linux或者windows等系统平台构建软件防火墙.软件防火墙的价格优势比较明显,配置也相对灵活,如果设置得当,同样可以实现硬件防火墙具有的功能和效率.Internet中有大量的企业网络在试用linux系统搭建软件防火墙

     1.1 linux防火墙体系主要工作在网络层,针对TCP/IP数据包过滤和限制,属于典型的包过滤防火墙(或称为网络防火墙).linux的防火墙体系基于内核编码实现,因此具有非常稳定的性能和高效率,也因此被更加广泛采纳和应用.

      LINUX 防火墙发展历史

      linux内核从很早的时候就实现了网络防火墙的功能,并为用户提供了管理防火墙规则的命令工具.

      在2.0版本的内核中,包过滤机制是ipfw,管理防火墙规则的命令工具是ipfwadm.

      在2.2版本的内核中,包过滤机制是ipchain,管理防火墙规则的命令工具是ipchains.

      在2.4版本的内核开始,包过滤机制是netfilter,管理防火墙的命令工具是iptables.

      本文以iptables作为主要命令工具,学习linux防火墙的配置和试用

   netfilter和iptables

    netfilter:指的是linux内核实现包过滤防火墙的内部结构,不以程序或文件的形式存在,属于"内核态"(Kernel Space,又称内核空间)的防火墙体系

    iptables:指的是管理防火墙的命令工具,程序通常位于/sbin/iptables,属于"用户态"(User Space,又称用户空间)的防火墙体系.

     1.2 iptables的规则表 链结构

      iptables的作用在于为包过滤的实现提供规则,通过各种不同的规则,告诉netfilter对来自有些源.前往某目的地或具有某些协议特征的数据包应该如何处理.为了更方便地组织和管理防火墙策略,iptables采用了"表"和"链"的分层结构.每个规则"表"相当于内核空间的一个容器,根据处理数据包的时机不同,表容器内包挂不同的规则"链".针对数据包的各种防火墙规则,按顺序依次放入对应的规则"链"中.


      规则表:

        安装防火墙策略的不同用户,iptables管理着四个不同的规则表,其功能分别由独立的内核模块实现.

         filter表,包含三个规则链: INPUT,FORWARD,OUTPUT.

         filter表对应的内核模块为: iptable_filter

         NAT表,包含三个规则链: PREROUTING,POSTROUTING,OUTPUT.

         nat (Network Address Translation,网络地址转换)表主要用户修改数据包的IP地址 端口号等信息

         nat 表对应的内核模块为 iptable_nat.

         mangle表主要用户修改数据包的TOS (Type of Service,服务类型). TTL (Time to live)



表和链关系

   netfilter表 链结构四.表:filter,NAT,mangle.raw


   filter:筛选过滤

   nat:端口映射,地址映射

   mangle:修改特定数据包

   raw:有限级最高,设置RAW时一般是为了不再让iptables做数据包的连接跟踪

处理,提高性能


     四表等级由高到低排列:raw --> man'gle-->nat-->filter

     五链:PRETOUING INPUT FORWARDS OUTPUT POSTROUTING


     PREROUTING:路由前

     INPUT:进入用户进程空间

     OUTPUT:进入内核空间

     FOEWARDS:内核空间中转发

     POSTROUTING:路由后


FORWARD:filter mangle

INPUT:filter mangle

OUTPUT:filter mangle nat

PREROUTING: mangle nat

POSTROUTING: mangle nat


iptables 规则


通:默认为堵.只对能识别的进行放行

堵:默认为通.只对能识别的进行阻塞


处理机制

    DROP:丢弃

    REJECT:直接拒绝

    ACCEPT:接受

    SNAT:静态NAT

DNAT:动态NAT

RETURN:返回调用链

格式: -j 处理机制

例如: -j ACCEPT


匹配规则

条件匹配: a通用匹配b扩展匹配c扩展匹配


通用匹配:

-s: 匹配原地址,可以IP,也可以网络地址;可以使用!操作取反,!172.16.0.0/16;

-s 相当于 --src,或 --source

-d:匹配目标地址

-p:匹配协议,通常只使用{TCP|UDP|ICMP}三者之一

-i: 数据报文流入的接口;通常只用于INPUT FORWARD和PREROUTING

-o:流出的接口,通常只能用于OUTPUT FORWARD POSTROUTING



扩展匹配

 1.隐含匹配:试用-p {tcp|udp|icmp}指定某特定协议后,自动能够对协议进行的扩展

-p tcp

--dport m[-n]: 匹配的目标端口,可以是连接的多个端口;

--sport:源

--tcp-flags rst,syn,ack,fin sync(等同于 --syn)


例子:放行来自于172.16.0.0/16网络的主机对本机ssh服务的请求;

iptables --A INPUT s 172.16.0.0/16 -p tcp --dport 22 -j ACCEPT

iptbales  -A OUTPUT -s 172.16.100.7 -d 172.16.0.0/16 -p tcp --dport 22 -j ACCEP

放行本机的tftp服务:

iptables  -A INPUT -s 172.16.0.0/16 -d 172.16.100.7 -p udp --dport 69 -j ACCEPT

iptables -A OUTPUT -s 172.16.100.7 -d 172.16.0.0/16 -p udp --dport 69 -j ACCE

dns的udp 53端口

iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.7 -p udp --dport 53 -j ACCEPT

iptables -A OUTPUT -s 172,16,100,7 -d 172.16.0.0/16 -p udp --dport 53 -j ACCEPT

iptables -A OUTPUT -s 172.16.100.7 -p tcp --dport 53 -j ACCEPT

iptables -A INTPUT -d 172.16.100.7 -p tcp --sport 53 -j ACCEPT

-p icmp

--icmp-type

      8 ping 请求

      0 ping 应答

例子:放行ping其它主机

ping其他主机的规则

iptables -A OUTPUT -s 172.16.100.7 -p icmp --icmp-type 8 -j ACCEPT

iptables -A INPUT -d 172.16.100.7 -p icmp --icmp-type 0 -j ACCEPT

还有其它主机的ping规则

iptables  -A OUTPUT -d 172.16.100.7 -p icmp --icmp-type 8 -j ACCEPT

iptables -A INPUT -d 172.16.100.7 -p icmp --icmp-type 0 -j ACCEPT



扩展匹配

2.显式夸张:必须明确指定的扩展模块

-m:扩展模块名称  --专用选项1  --专用选项2


multiport:多端口匹配,一次指定多个离散端口

--sport port[,port|,port:port]

--dport

例子:

 iptables  -I INPUT -d 172.16.100.7 -p tcp -m multiport --dport 22,80 -j ACCEPT

iptables -I OUTPUT -s 172.16.100.7 -p tcp -m multiport --dport 22,80 -j ACCEPT


iprange: ip地址范围

       [!] --src-range from [-to]

       [!] --dst-range from [-to]

例子:

    iptables -A INPUT -d 172.16.100.7 -p tcp --dport 23 -m iprange --src-range 172.16.100.1- 172.

    iptables -A OUTPUT -s 172.16.100.7 -p tcp --sport 23 -m iprange --dst-range 172.16.100.1-172.16



time:指定时间范围

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

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

             --timestart hh:mm[:ss]

             --timestop  hh:mm[:ss]

             [!] --weekdays day[,day]

例子:

        iptables -A INPUT -d 172.16.100.7 -p tcp --dport 901 -m time --weekdays Mon,Tus,Wed,Thu,Fri --

        iptables -A OUTPUT -s 172.16.100.7 -P tcp --sport 901 -j ACCEPT


string:字符串匹配

       --algo {bm|kmp}: 字符匹配查找时使用算法

       --string "STRING":要查找的字符串

       --hex-string "HEX-STRING":要查找的字符,先编码成16进制格式


conlimit: 每IP对指定服务的最大并发连接数:

               [!] --connlimit-above [n]  如:15


limit: 报文速率控制

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

         --limit-burst #峰值速率

***工具: hping3: 安装此包,做测试

     hping -c 1000 -i u1000 172.16.100.7



state:状态匹配

         --state

            NEW

            ESTABLISHED

            RELATED

            INVALID

             法则:

                1.对于进入的状态为ESTABLISHED都应该放行;

                2.对于出去的状态为ESTABLIESHED都应该放行;

                3.严格检查进入的状态为NEW的连接:

                4.所有状态为INVALIED都应该拒绝


iptables 常用命令选项

  创建删除自定义的规则链

  iptables [-t table] -N chain


  创建一条自定义的规则连, -t table 指定对应的表名可省略

   例如: iptables -N coming

  iptables [ -t table ] -X chain


  删除一条自定义的规则链,-t table 指定对应的表名可省略

   iptables -X coming


修改自定义链名

     iptables [-t table] -E old-chain-name new-chain-name


为链指定默认规则

   iptables [ -t table ] -P chain target

    iptables -t filter -P INPUT ACCPET 为filter表中的INPUT链指定ACCEPT规则


iptables [-t table] {-F|-L|-Z [chain [rulenum]][options...]}

       -F :清空链中的规则,规则有编号在链中自上而下,从1开始

       -L: 列出表中的所有规则

            -n数字格式显示IP和端口

            -v以详细格式显示

            -vv 更详细的格式显示

            -x exactly,精确值 不执行单位换算

            --line-number 显示个规则的行号

       -Z 清零


 iptables [-t table ] {-A|-D} chain rule-specification

  iptables -A OUTPUT -s 192.168.1.111 -d 192.168.0.0/16 -p icmp --icmp-type 0 -j ACCEPT


iptbles [-t table ] -D chain rulenum

删除一个规则链

iptables -D OUTPUT 1



   常用规则命令:

         删除规则

         iptbles [-t table] -D chain rulenum

         插入规则

         iptables [-t table ] -I chain [rulenum] rule-specification


         替换指定规则

        iptables [-t table] -R chain rulenum rule-specification


        只显示指定链上的规则添加命令:

         iptables [-t table] -S [ chain [rulenum]] start时也会读取此文件中的内容以设置规则


           保存规则

       service iptables save

       iptables -save > /etc/myiptbles;

       iptables -F  清空所有链中的规则;

       iptables-restore < /path/tp/some-rulrfile;重读该文档中的规则,规则又恢复了