首页 > 代码库 > 了解IPtables的工作方式

了解IPtables的工作方式

Firewall:工作域、于主机或网络边缘,对于进出的报文根据规则定义的规则作检查,进而对被规则匹配的报文作为相应的处理。主要分为网络防火墙和主机防火墙

IDS(入侵检测系统):Instrusion Detect System

         分别为以下两种:   HIDS;Host IDS; NIDS: Network IDS

IPS:(入侵防御系统Intrusion Protect System)

HoneyPot: 蜜罐,诱引不法信息进入,使用反向追踪

bt(backtrack):安全工具发行版

安全评估工具:Nessus、nmap、

 

用户编写规则:先确定功能(表),确定报文的流向,确定要实现的目标,确定匹配条件

    规则的功能:

    raw、mangle、nat、fitler

    fitler:过滤,定义是否允许通过防火墙

    nat: 地址转换,启用connection_track

    mangle: 修改tcp/ip的首部

    raw:让用户的请求在经过Network时,为nat表上启用连接追中功能

iptables结构图

   表和链的对应关系

   fitler:INPUT,FORWARD,OUTPUT

   nat:PREROUTING(SNAT),POSRTOUTING,OUTPUT

   mangle:修改报文中某些值的特性 ,-->所有位置都可以修改

   raw:那里能做nat就在那里做

image

iptables中的表链关系2

   ======================================================================

数据报文的流程

       跟本机内部的进程通信

       进入:-->PREROUTING-->INPUT

       出去:-->OUTPUT-->POSTROUTING

     由本机转发

      请求:-->PREROUTING-->FORWARD-->POSTROUTING-->

      响应:-->PREROUTING-->FORWARD-->POETROUTING

      如果规则中限定原地址、目标地址、源端口、目标端口等与流向相关的设定

     数据报文的流向:

       源IP和目标IP有流向决定

Iptables中的表链关系1

PREROUTING:路由前

INPUT:到达本机内部的报文必经之路

FORWARD:有本机转发报文的必经之路

OUTPUT:本机发出的报文的必经之路

POSTROUTING:路由后

 

规则文件/etc/sysconfig/iptables

     保存启用中的规则到规则文件中

      1、#iptables-save > /etc/sysconfig/iptables

      2、#service iptables save

     生效规则文件中的规则

      1、#iptables-restore < /etc/sysconfig/iptables

      2、#service iptables restart

      执行的操作,清空现有规则,读取并生效规则文件中的规则

写规则时

     作为服务器端:先进后出

     作为客户端:先出后进

icmp:控制消息协议

iptables:用户空间的工具,写规则,并发送给netfilter,立即生效

netfilter;接受并生效规则(真正意义上的防火墙)

======================================================================

基本语法:

格式:  iptables [-t TABLE] COMMAND CHAIN CRETIRIA -j TARGET  

     -t TABLE: 默认是filter,其他选项:nat 、mangle、 raw

     COMMAND :

       -F :flush ,清空规则链

       -N:new,自建一条链

       -X:delete,删除一条自定义空链

       -Z:zero,计数器归零

       -p:policy,设定默人策略,对filter表来讲。默认规则为ACCEPT或DROP

       -E  : rEname,重命名自定义的链

链中的规则

       -A:Append,在链末添加一条规则,

       -D:Insert, 删除一条或多条规则,可以指定链中的序号

       -I :Delete,插入条新规则

       -R:Replce,修改一条规则,

查询:

      -L  :list

          -n:以数字格式显示主机地址和端口

          -v:显示详细信息 ;vv,vvv,vvvv

          --line-number:显示规则行号

          -x:exactly,详细信息,不作单位换算 ,而显示其精确值

         pkts    bytes    target  prot   opt in        out          source    destination

         包数    字节数    目标   协议   流入接口    流出接口  源地址      目标地址

==========================================================================

格式:iptables     [-t TABLE]     -A     链名     匹配条件      -j     处理目标

匹配条件:

通用匹配

    -s 地址:指定报文源的IP地址匹配的范围,可以是IP地址或者网络地址,使用!取反

        --src,--source

    -d 地址:自定目标的IP地址的匹配的范围,可以是IP地址或者网络地址,使用!取反

          --dst,--destiantion

    -p 协议: 指定匹配报文的协议类型,一般有三种:tcp,udp,icmp

    -i  INTERFACE: 数据报文流入的接口:prerouting,input,forward

    -o  INTERFACE:数据包流出的接口:output,forward,postrouting

扩展匹配:调用nstfilter额外模块实现特殊检查机制,必须使用-m选项来指定调用那个模块

    隐式扩展:当使用-p{tcp | udp | icmp}指定中的一种时,可以直接使用扩展中的一种选项

        -p tcp == [-m tcp]

            --sports PORT[-PORT]:指定源端口

            --dport PORT[-PORT]:指定目标端口

            --tcp-flag 要检查标志位列表(逗号分割),必须为1的标志位列表(逗号分割)

                eg:--tcp-flags syn,ack,rst,fin syn

            --syn

        -p udp == [-m udp]

           --sports [PORT]...:指定源端口

            --dport PORT:指定目标端口

        -p icmp == [-m icmp]

           --icmp-type 

           0:echo-relplay,ping响应

           8:echo-request,ping请求

    显式扩展:必须明确说明使用那个模块扩展,才能使用扩展选项

       iptables、netfitler分别拥有模块的一部分代码

       -m 扩展模块的名称

       mutiport:多端口匹配-->可用于匹配非连续或连续端口(max<=15)

       专用选项

       --source-ports、--sports port[,port,port:port]

       --estination-ports、--dports

       #iptables -I INPUT -d 目标地址 -p tcp -m mutiport --dports 20,80 -j ACCEPT

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

       ===#watch -n 1 ‘iptables -L -n -v’===查看iptables信息

       iprange:匹配指定范围内的地址(匹配一段连续的地址而不是整个网络)

       专用选项

       [!] --src-range IP[-IP]

       [!] --dst-range IP[-IP]

       # iptables -A INPUT -d 172.16.100.7 -p tcp --dport 23 -m iprange --src-range 172.16.100.1-172.16.100.100 -j ACCEPT

       # iptables -A OUTPUT -s 172.16.100.7 -p tcp --sport 23 -m iprange --dst-range 172.16.100.1-172.16.100.100 -j ACCEPT

       string:字符匹配,能够检测报文应用层中的字符串(字符串匹配检查高效算法)

          kmp、bm (基于编码后的二进制进行匹配比较)

       专用选项

       --slgo {kmp|bm}

       --string "STRING"

       --hex-string "HEX_STRING":HEX_STRING编程成16进制格式的字串

       #iptables -I OUTPUT -m string --algo kmp --string "sex" -j DROP

       表示凡事含有“sex”字符串的响应都不让出去

       time:基于时间做访问控制

       专用选项

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

       --datestop

       --timestop hh:mm[:ss]

       --timestart hh:mm[:ss]

       --weekdays day[,day]

       #iptables -I INPUT -d 172.16.100.7 -p tcp --dport 80 -m time --timestart 08:20 --timestop 18:40 --weekdays Mon,Tue,Thu,Fri -j REJECT

       connlimit:连接数限制,对每个Ip所鞥够发起并发连接数作限制

       专用选项 (可以取反)

       --connlimit-above [N]

       #iptables -A INPUT -d 172.16.100.7 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j DROP

       limit:作速率限制

       专用选项

       --limit n[/second|/minutel|/hour|/day]

       --limit-burst n

       #iptables -A INPUT -d 172.16.100.7 -p icmp --icmp-type 8 -m limit --limit 20/minute --limit-burst 5 -j ACCEPT

       state:状态检查,连接追踪中的状态

       NEW:新建立一个会话

       ESTABLISHED:以建立的连接

       RELATED:有关联关系的连接

       INVALID:无法识别的连接

       调整连接追踪功能所能容纳的连接的最大连接数

        /proc/sys/net/nf_conntrack_max

       当前追踪的所有连接

        /proc/net/nf_conntrack

       不同协议或连接类型追踪时的属性

        /proc/sys/netfilter目录

       放行被动模式下的FTP服务

       1)、装载模块/lib/modules/KERNEL_VERSION/kernel/net/netfilter/

          模块:nf_conntrack_ftp

       2)、放行请求报文

           1、放行NEW状态对21端口请求的报文

           2、放行ESTABLISHED以及RELATED状态报文

       3)、履行响应报文

         1、放行ESTABLISHED以及RELATED状态报文

防火墙的分类:

   简单包过滤防火墙

   带状态检测的包过滤防火墙(不适用于访问量庞大的站点)

处理目标:

         内置目标:

DROP    拒绝,(悄悄丢弃)

REJECT  拒绝,强行丢弃    

ACCEPT 接受

          #iptables     -t     [filter] -A     INPUT    -s     172.16.0.0/16     -d    172.16.1.1    -p     icmp    -j    {DROP | REJECT}

              ****表示本地主机(172.16.1.1)拒绝来自172.16.网段的主机访问(即拒绝在网段主机上使用#ping 172.16.1.1)

    自定义的链

删除规则:

格式:iptables    [-t  table]    -D    chain    rulenum

#iptables [-t filter]  -D  INPUT 1    **表示删除链INPUT上的第一条

设置策略

     iptables [-t TABLE]    -P chain target

修改规则

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

插入规则

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

   

==============================================================================

        动态编译的可执行文件需要附带一个的动态链接库。在执行时,需要调用其对应动态链接库中的命令。所以其优点一方面是缩小了执行文件本身的体积,另一方面是加快了编译速度,节省了系统资源。缺点一是哪怕是很简单的程序,只用到了链接库中的一两条命令,也需要附带一个相对庞大的链接库;二是如果其他计算机上没有安装对应的运行库,则用动态编译的可执行文件就不能运行。

        静态编译就是编译器在编译可执行文件的时候,将可执行文件需要调用的对应动态链接库(.so或.lib)中的部分提取出来,链接到可执行文件中去,使可执行文件在运行的时候不依赖于动态链接库。所以其优缺点与动态编译的可执行文件正好互补。

==============================================================================

TCP     Wrappers

TCP Wrappers是有/etc/hosts.allow 、/etc/hosta.deny连个文件来管理的一个类似防火墙的机制,但是并非所有的软件都可以通过这两个文件管理,被管理的软件必须具备下面两个条件:

    1)有xinetd这个超级进程管理的服务

    2)支持libwrap.so模块的服务

所有我们在实现TCP Wrappers前需要保证安装了xinetd软件

查看某软件是否可以被tcp wrappers管理:

    1)#ldd $(which SERVER_NAME)

    2)查看是否被xinetd管理,没有则不能使用tcp wrappers

tcp_wrapper通过读取配置文件中的规则来判定某服务是否可被访问:

  /etc/hosts.allow  该文件允许,但是可以使用deny对某行规则取反   

  /etc/hosts.deny   该文件拒绝,同样可以使用allow对某一行规则取反

  编辑上面两个文件中的规则是即时生效的;

配置文件的语法:

  daemon_list: client_list [:options]

例如:in.telnetd: ALL : spawn /bin/echo `date` login attempt from %c to %s, %d >> /var/log/telnet.log

服务检查逻辑:client --> /etc/hosts.allow -->(Y) --> ALLOW

      client --> /etc/hosts.allow -->(N) --> /etc/hosts.deny -->(Y) --> DENY

                                                             -->(N) --> ALLOW

优先级:

先以/etc/hosts.allow进行优先比对,规则符合予以放行

再以/etc.hosta.deny进行比对,规则符合则予以抵消

若不再这两个文件中(或者规则都不符合),予以放行

各项的意义

  daemon_list:

   应用程序程序名称

   应用程序程序名称列表:使用逗号分隔

    例如sshd, in.telnetd

   ALL:所有受控进程

client_list:

   IP地址

   主机名

   网络地址:必须使用完整格式掩码,不能使用长度掩码,172.16.0.0/16不合用;

   简短的网络地址:172.16. 表示为 172.16.0.0/255.255.0.0

   ALL: 所有客户端地址;

   KNOWN:

   UNKNOWN:

   PARANOID:主机名和IP地址的各自的正反解析结果不匹配;

特殊的变量:

    EXCEPT:除了

[:options]

   deny: 通常用于在hosts.allow文件实现拒绝的规则;

   allow: 通常用于在hosts.deny文件实现允许的规则;

   spawn: 启动一个额外命令


***************待修改。iptables的layer7功能还未添加**************************

本文出自 “菜鸟前行之路” 博客,谢绝转载!