zoukankan      html  css  js  c++  java
  • iptables 入门

    2019-08-18

    关键字:iptables、Linux 防火墙


    iptables 是 Linux 上的一款防火墙配置软件。

    防火墙的基本概念

    防火墙是指工作在计算机设备系统边缘或网络设备边缘,能根据既定的规则对数据报文进行检测并做出相应处理的模块。这一模块既可以是软件也可以是硬件。iptables 是属于软件防火墙的范畴。

    在 cent os 中防火墙分为内核态组件与用户态组件。其中,内核态的组件是真正用于定义规则并检测数据报文的模块,而用户态的防火墙通常只直到配置内核态的规则的作用。内核态的防火墙名称为 netfilter,用户态的就是 iptables。但这些组件的名称在不同版本的 cent os 上会有不同的叫法。这种 netfileter 和 iptables 的名称是在 cent os 6 上的名称。但通常,我们就简单地认为 iptables 就是 Linux 的防火墙就可以了。

    Linux 防火墙的简介

    对于计算机设备而言,只有它需要与外界进行数据交换时它才有必要去安装防火墙模块。而数据报文的流转方向无非就三种:1、从外部流至本机应用;2、从本机应用发送至外部网络环境;3、从外部经由本机发送至外部网络环境。因此,防火墙最基本的几道“检查门坎”就是输入、输出与转发了。而在 Linux 防火墙中,检查门坎有专有词汇,称为“链”。即“输入链”、“输出链”与“转发链”。但真实的数据报文流转又远不止这么简单,所以还有另外一些有其它用途的链。在 Linux 防火墙中,它们被称为“四表五链”。

    四表:

    1、raw 表

    2、mangle 表

    3、nat 表

    4、filter 表

    五链:

    1、Input Chain

    2、Output Chain

    3、Forward Chain

    4、PreRouting Chain

    5、PostRouting Chain

    不同的表中记载的是用于不同场景下的过滤规则。raw表下的规则是用于确定是否对该数据包进行状态跟踪的,它通常涉及到 prerouting chain 和 output chain。mangle表则用于为数据包设置标记,它通常涉及到全部的五个链。nat表则用于修改数据包中的源、目标地址或端口,它通常涉及到 prerouting chain, postrouting chain 与 output chain。而 filter 表则用于确定是否放行 该数据包,它通常涉及到 input chain, forward chain 与 output chain。

    在这四张表中,filter 表是用的最多的表,它也是 iptables 默认的表,在你不指定表名时,所写的规则就默认应用到 filter 表下。而对我们非 Linux 运维人员来说,就更是只用的上 filter 表了,甚至于大多数时候都是将防火墙给关掉的。

    Linux 的防火墙在检查数据包时是按表按链顺序检查的,并且采用一种“匹配即停止”的检查方式,若所配置的规则列表中没有匹配的项,则按默认策略处理。Linux 防火墙表检查顺序为:raw表、mangle表、nat表、filter表。链检查顺序就不说了。

    iptables语法规则

    首先必再次强调,iptables 其实仅仅只是一个配置工具而已,真正起到数据包过滤作用的其实是运行于内核态的 netfilter 模块。我们对 iptables 的操作仅仅是配置过滤规则而已。iptables 的基本语法如下所示

    iptables [-t 表名] 选项 [链] [条件] [-j 控制类型]

    可选择的选项有以下几种:

    1、-A

      在指定链的末尾添加一条规则。

    2、-I

      在指定链的开头或指定序号处插入一条规则。

    3、-L

      列出所有的规则条目。

    4、-n

      以数字形式显示IP地址与端口。

    5、-v

      以更详细的形式显示当前规则信息。

    6、--line-numbers

      显示规则的序号。

    7、-D

      删除指定序号的规则。

    8、-F

      清空指定表内的所有规则。

    9、-P

      为指定的链设置默认的规则。

    可选择的控制类型有以下几种:

    1、ACCEPT

      允许数据包通过。

    2、DROP

      丢弃数据包,但不会给出任何回应。

    3、REJECT

      丢弃数据包,并且给源端发送回应。

    4、LOG

      记录日志信息,然后传递给下一条规则继续匹配。

    5、SNAT

      修改数据包源端地址。

    6、DNAT

      修改数据包目的端地址。

    7、REDIRECT

      重定向。

    DROP 与 REJECT 选项对于本机来说效果完全一样,都是丢弃数据包。但这两个选项对源端来讲就有很大区别了。DROP 与 REJECT 唯一的区别就是会不会给源端作出回应。而源端在发出一个数据包时通常都会等待目的端的响应信息。若目的端对数据包采取的是 DROP 操作,则源端就只能在那苦等,直至超时。而若目的端采取的是 REJECT,源端就能立即得到响应结果。目的端的两种处理方式对源端的体验就有很大的差别了。

    iptables 语句要输入的参数还挺多的,但它有一些选项有默认值,在某些情况下可以减少输入量。例如,默认的表名是 filter 表,默认的链是所有链。

    iptables实例

    iptables -t filter -A INPUT -p tcp -j ACCEPT

    上面命令表示,在 filter 表中的 input chain 追加一条规则,放行所有的 tcp 入站请求数据包。

    iptables -I INPUT -p udp -j ACCEPT

    上面命令表示,在 filter 表中的 input chain 插入一条规则,放行所有的 udp 入站请求。而若要在指定位置插入规则,则直接在 INPUT 后面加序号即可。在 iptables 的规则中,序号是从 1 开始的。假设我们要将上面的规则插入到第 2 条的位置上,则可以用:

    iptables -I INPUT 2 -p udp -j ACCEPT

    同样地,删除规则也是直接在链名后面加要删除的规则序号即可,假设我们现在要删除规则列表中的第 3 条规则,则:

    iptables -D INPUT 3 

    如果规则比较多,数序号不好数,则可以在查询时通过 --line-numbers 参数来列出每条规则的序号,例如:

    [chorm@cos101 ~]$ sudo iptables --line-numbers -L
    
    
    Chain INPUT (policy ACCEPT)
    num  target     prot opt source               destination         
    1    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
    2    ACCEPT     tcp  --  anywhere             anywhere            
    
    Chain FORWARD (policy ACCEPT)
    num  target     prot opt source               destination         
    
    Chain OUTPUT (policy ACCEPT)
    num  target     prot opt source               destination

    查看当前所有规则信息可以使用 iptables -L 命令,加多一个 -v 参数会多显示几列数据出来。

    iptables -L -v
    
    [chorm@cos1 ~]$ sudo iptables -L -v
    Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
     pkts bytes target     prot opt in     out     source               destination         
     1157 79453 ACCEPT     all  --  any    any     anywhere             anywhere             state RELATED,ESTABLISHED
        0     0 ACCEPT     icmp --  any    any     anywhere             anywhere            
        0     0 ACCEPT     all  --  lo     any     anywhere             anywhere            
        0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             state NEW tcp dpt:ssh
       14   862 REJECT     all  --  any    any     anywhere             anywhere             reject-with icmp-host-prohibited
        0     0 DROP       tcp  --  any    any     anywhere             anywhere            
    
    Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
     pkts bytes target     prot opt in     out     source               destination         
        0     0 REJECT     all  --  any    any     anywhere             anywhere             reject-with icmp-host-prohibited
    
    Chain OUTPUT (policy ACCEPT 99 packets, 12603 bytes)
     pkts bytes target     prot opt in     out     source               destination 

    加多一个 -v 参数多显示出来的几列数据,值得我们关注的是最前面两列 pkts 与 bytes。它们表示的是当前规则匹配过的包数量与字节数量(不管是否成功匹配)。通常运维人员可以通过这些信息来调整规则顺序,将比较少出现的数据包类型移到后面,高频类型数据包规则移到前面,这样可以减少规则匹配次数,从而减少系统资源的浪费情况。

    通过命令行设置的过滤规则都是一次性生效的。在你重启系统以后这些规则就没有了。如果想要让自己配置的规则永久生效,则需要将当前规则导出到外部配置记录文件中。这个用于记录 iptables 配置规则的外部文件位于

    /etc/sysconfig/iptables

    而保存规则的命令为

    service iptables save

    还有更多高级规则的设置暂时就不列了,例如 iptables 的通用匹配规则、隐含匹配规则与显式匹配规则。有需要的话再自行查询详细用法就好了,笔者这边关于 Linux 的防火墙也仅仅是出于拓展知识面的目的来学习的,能达到扫盲的效果就可以了,反正我平时用 Linux 时也是要关掉防火墙的。


  • 相关阅读:
    A1052. Linked List Sorting (25)
    A1032. Sharing (25)
    A1022. Digital Library (30)
    A1071. Speech Patterns (25)
    A1054. The Dominant Color (20)
    A1060. Are They Equal (25)
    A1063. Set Similarity (25)
    电子码表
    矩阵键盘
    对象追踪、临时对象追踪、绝对坐标与相对坐标
  • 原文地址:https://www.cnblogs.com/chorm590/p/11367716.html
Copyright © 2011-2022 走看看