• 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 时也是要关掉防火墙的。


  • 相关阅读:
    OpenGL马赛克(八)
    windows主机和ubuntu互传文件的4种方法
    noopener, noreferrer 及 nofollow 的用法
    如果要存 IP 地址,用什么数据类型比较好?
    Java8 lambda 表达式 forEach 如何提前终止?
    Dijkstra 算法求最短路径
    oceanbase 基于docker install
    PG的int整形相除
    docker 安装mysql8.0.26
    PG的并行查询生产案例
  • 原文地址:https://www.cnblogs.com/chorm590/p/11367716.html
Copyright © 2020-2023  润新知