• Iptables


    基础

    规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作就是添加、修改和删除这些规则。

    到本机某进程的报文:PREROUTING --> INPUT

    由本机转发的报文:PREROUTING --> FORWARD --> POSTROUTING

    由本机的某进程发出报文(通常为响应报文):OUTPUT --> POSTROUTING

    链的概念

    防火墙的作用就在于对经过的报文匹配"规则",然后执行对应的"动作",所以,当报文经过这些关卡的时候,则必须匹配这个关卡上的规则,但是,这个关卡上可能不止有一条规则,而是有很多条规则,当我们把这些规则串到一个链条上的时候,就形成了"链",所以,我们把每一个"关卡"想象成如下图中的模样 ,这样来说,把他们称为"链"更为合适,每个经过这个"关卡"的报文,都要将这条"链"上的所有规则匹配一遍,如果有符合条件的规则,则执行规则对应的动作。

    表的概念

    A类规则都是对IP或者端口的过滤,B类规则是修改报文,

    把具有相同功能的规则的集合叫做"表",所以说,不同功能的规则,我们可以放置在不同的表中进行管理,而iptables已经为我们定义了4种表,每种表对应了不同的功能

    iptables为我们提供了如下规则的分类,或者说,iptables为我们提供了如下"表"

    filter表:负责过滤功能,防火墙;内核模块:iptables_filter
    
    nat表:network address translation,网络地址转换功能;内核模块:iptable_nat
    
    mangle表:拆解报文,做出修改,并重新封装 的功能;iptable_mangle
    
    raw表:关闭nat表上启用的连接追踪机制;iptable_raw 
    
    

    表链关系

    PREROUTING 的规则可以存在于:raw表,mangle表,nat表。

    INPUT 的规则可以存在于:mangle表,filter表,(centos7中还有nat表,centos6中没有)。

    FORWARD 的规则可以存在于:mangle表,filter表。

    OUTPUT 的规则可以存在于:raw表mangle表,nat表,filter表。

    POSTROUTING 的规则可以存在于:mangle表,nat表。

    表(功能)<--> 链(钩子):

    raw 表中的规则可以被哪些链使用:PREROUTING,OUTPUT

    mangle 表中的规则可以被哪些链使用:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

    nat 表中的规则可以被哪些链使用:PREROUTING,OUTPUT,POSTROUTING(centos7中还有INPUT,centos6中没有)

    filter 表中的规则可以被哪些链使用:INPUT,FORWARD,OUTPUT

    优先级次序(由高而低):

    raw --> mangle --> nat --> filter

    111

    匹配条件

    匹配条件分为基本匹配条件与扩展匹配条件

    基本匹配条件:

    源地址Source IP,目标地址 Destination IP

    上述内容都可以作为基本匹配条件。

    扩展匹配条件:

    除了上述的条件可以用于匹配,还有很多其他的条件可以用于匹配,这些条件泛称为扩展条件,这些扩展条件其实也是netfilter中的一部分,只是以模块的形式存在,如果想要使用这些条件,则需要依赖对应的扩展模块。

    源端口Source Port, 目标端口Destination Port

    上述内容都可以作为扩展匹配条件

    处理动作

    处理动作在iptables中被称为target(这样说并不准确,我们暂且这样称呼),动作也可以分为基本动作和扩展动作。

    此处列出一些常用的动作,之后的文章会对它们进行详细的示例与总结:

    ACCEPT:允许数据包通过。

    DROP:直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了超时时间才会有反应。

    REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息。

    SNAT:源地址转换,解决内网用户用同一个公网地址上网的问题。

    MASQUERADE:是SNAT的一种特殊形式,适用于动态的、临时会变的ip上。

    DNAT:目标地址转换。

    REDIRECT:在本机做端口映射。

    LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作,仍然让下一条规则去匹配。

    iptables操作

    [root@node3 ~]# iptables -t filter -L
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination         
    [root@node3 ~]# 
    
    

    -t:指定要操作的表,

    -L:使用-L选项,查看-t选项对应的表的规则,-L选项的意思是,列出规则

    iptables -t raw -L
    iptables -t nat -L
    iptables -t mangle -L
    

    规则对应的属性

    pkts:对应规则匹配到的报文的个数。

    bytes:对应匹配到的报文包的大小总和。

    target:规则对应的target,往往表示规则对应的"动作",即规则匹配成功后需要采取的措施。

    prot:表示规则对应的协议,是否只针对某些协议应用此规则。

    opt:表示规则对应的选项。

    in:表示数据包由哪个接口(网卡)流入,我们可以设置通过哪块网卡流入的报文需要匹配当前规则。

    out:表示数据包由哪个接口(网卡)流出,我们可以设置通过哪块网卡流出的报文需要匹配当前规则。

    source:表示规则对应的源头地址,可以是一个IP,也可以是一个网段。

    destination:表示规则对应的目标地址。可以是一个IP,也可以是一个网段。

    iptables -nvxL -- line-number
    -v  显示更详细
    -n  不让IP进行反解
    -- line-number即可显示规则的编号
    -x 选项表示显示计数器的精确值
    
    iptables -t 表名 -L 链名 查看指定表的指定链中的规则。
    
    

    [root@node3 ~]# iptables -t filter -I INPUT  -s 192.168.246.132 -j DROP     
    [root@node3 ~]# iptables -t filter -nvL
    Chain INPUT (policy ACCEPT 84 packets, 6144 bytes)
     pkts bytes target     prot opt in     out     source               destination         
        0     0 DROP       all  --  *      *       192.168.246.132      0.0.0.0/0           
    
    Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
     pkts bytes target     prot opt in     out     source               destination         
    
    Chain OUTPUT (policy ACCEPT 47 packets, 5260 bytes)
     pkts bytes target     prot opt in     out     source               destination         
    [root@node3 ~]# 
    
    

    -I选项,指明将"规则"插入至哪个链中,-I表示insert,即插入的意思,所以-I INPUT表示将规则插入于INPUT链中,即添加规则之意。

    -s选项,指明"匹配条件"中的"源地址",即如果报文的源地址属于-s对应的地址,那么报文则满足匹配条件,-s为source之意,表示源地址。

    使用-j选项,指明当"匹配条件"被满足时,所对应的动作,上例中指定的动作为DROP,在上例中,当报文的源地址为192.168.1.146时,报文则被DROP(丢弃)

    [root@node3 ~]# iptables -A INPUT -s 192.168.246.132 -j ACCEPT
    [root@node3 ~]# iptables -t filter -nvL
    Chain INPUT (policy ACCEPT 12 packets, 880 bytes)
     pkts bytes target     prot opt in     out     source               destination         
       91  7644 DROP       all  --  *      *       192.168.246.132      0.0.0.0/0           
        0     0 ACCEPT     all  --  *      *       192.168.246.132      0.0.0.0/0           
    
    Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
     pkts bytes target     prot opt in     out     source               destination         
    
    Chain OUTPUT (policy ACCEPT 6 packets, 760 bytes)
     pkts bytes target     prot opt in     out     source               destination         
    [root@node3 ~]# 
    
    

    使用-A选项,表示在对应的链中"追加规则",-A为append之意

    -I选项进行插入规则操作,-I INPUT 2表示在INPUT链中新增规则,新增的规则的编号为2

    方法一:根据规则的编号去删除规则

    [root@node3 ~]# iptables --line -vnL INPUT
    Chain INPUT (policy ACCEPT 910 packets, 83584 bytes)
    num   pkts bytes target     prot opt in     out     source               destination         
    1      363 30492 ACCEPT     all  --  *      *       192.168.246.132      0.0.0.0/0           
    2      227 19068 DROP       all  --  *      *       192.168.246.132      0.0.0.0/0           
    3        0     0 ACCEPT     all  --  *      *       192.168.246.132      0.0.0.0/0           
    [root@node3 ~]# iptables -t filter -D  INPUT 3
    [root@node3 ~]# iptables --line -vnL INPUT
    Chain INPUT (policy ACCEPT 6 packets, 428 bytes)
    num   pkts bytes target     prot opt in     out     source               destination         
    1      363 30492 ACCEPT     all  --  *      *       192.168.246.132      0.0.0.0/0           
    2      227 19068 DROP       all  --  *      *       192.168.246.132      0.0.0.0/0           
    [root@node3 ~]# 
    
    

    方法二:根据具体的匹配条件与动作删除规则

    [root@node3 ~]# iptables -D INPUT -s 192.168.246.132 -j DROP
    [root@node3 ~]# iptables -t filter -nvL
    Chain INPUT (policy ACCEPT 13 packets, 948 bytes)
     pkts bytes target     prot opt in     out     source               destination         
      363 30492 ACCEPT     all  --  *      *       192.168.246.132      0.0.0.0/0           
    
    Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
     pkts bytes target     prot opt in     out     source               destination         
    
    Chain OUTPUT (policy ACCEPT 8 packets, 1040 bytes)
     pkts bytes target     prot opt in     out     source               destination         
    [root@node3 ~]# 
    
    

    修改

    [root@node3 ~]# iptables -t filter -R INPUT 1 -s 192.168.246.132 -j DROP
    [root@node3 ~]# iptables -t filter -nvL
    Chain INPUT (policy ACCEPT 6 packets, 428 bytes)
     pkts bytes target     prot opt in     out     source               destination         
        0     0 DROP       all  --  *      *       192.168.246.132      0.0.0.0/0           
    
    Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
     pkts bytes target     prot opt in     out     source               destination         
    
    Chain OUTPUT (policy ACCEPT 4 packets, 512 bytes)
     pkts bytes target     prot opt in     out     source               destination         
    [root@node3 ~]# 
    
    

    -R选项表示修改指定的链

    保存

    使用iptables-save并不能保存当前的iptables规则,但是可以将当前的iptables规则以"保存后的格式"输出到屏幕上。

    所以,我们可以使用iptables-save命令,再配合重定向,将规则重定向到/etc/sysconfig/iptables文件中即可。

    iptables-save > /etc/sysconfig/iptables

    我们也可以将/etc/sysconfig/iptables中的规则重新载入为当前的iptables规则,但是注意,未保存入/etc/sysconfig/iptables文件中的修改将会丢失或者被覆盖。

    使用iptables-restore命令可以从指定文件中重载规则,示例如下

    iptables-restore < /etc/sysconfig/iptables

    再次提醒:重载规则时,现有规则将会被覆盖。

    匹配条件

    基本匹配条件总结

    -s用于匹配报文的源地址,可以同时指定多个源地址,每个IP之间用逗号隔开,也可以指定为一个网段。  
    
    -d用于匹配报文的目标地址,可以同时指定多个目标地址,每个IP之间用逗号隔开,也可以指定为一个网段。 
    
    -p用于匹配报文的协议类型,可以匹配的协议类型tcp、udp、udplite、icmp、esp、ah、sctp等(centos7中还支持icmpv6、mh)。 
    
    -i用于匹配报文是从哪个网卡接口流入本机的,由于匹配条件只是用于匹配报文流入的网卡,所以在OUTPUT链与POSTROUTING链中不能使用此选项。  
    
    -o用于匹配报文将要从哪个网卡接口流出本机,于匹配条件只是用于匹配报文流出的网卡,所以在INPUT链与PREROUTING链中不能使用此选项。 
    

    扩展匹配条件总结

    tcp扩展模块

    常用的扩展匹配条件如下:

    -p tcp -m tcp --sport 用于匹配tcp协议报文的源端口,可以使用冒号指定一个连续的端口范围
    
    -p tcp -m tcp --dport 用于匹配tcp协议报文的目标端口,可以使用冒号指定一个连续的端口范围
    
    

    multiport扩展模块

    常用的扩展匹配条件如下:

    -p tcp -m multiport --sports 用于匹配报文的源端口,可以指定离散的多个端口号,端口之间用"逗号"隔开
    
    -p udp -m multiport --dports 用于匹配报文的目标端口,可以指定离散的多个端口号,端口之间用"逗号"隔开
    
    
  • 相关阅读:
    【转】请说出三种减少页面加载时间的方法。
    【转】Web前端性能优化——如何提高页面加载速度
    【转】数据分析sql常用整理
    【转】消息中间件系列之简单介绍
    Could not load file or assembly 'System.Core, Version=2.0.5.0 和autofac冲突的问题
    云主机与传统主机性能对比表
    真假云主机,VPS资料集合
    将网站部署到windows2003 iis6之后,出现asp.net程序页面无法访问情况
    想当然是编程最大的坑,记更新删除过期cookie无效有感
    FlashBuilder(FB/eclipse) 打开多个无效
  • 原文地址:https://www.cnblogs.com/mrwuzs/p/9482729.html
Copyright © 2020-2023  润新知