zoukankan      html  css  js  c++  java
  • iptables快速上手

    2021-05-25

    关键字:iptables入门、Linux防火墙入门、基础知识


    1、什么是iptables?

    iptables 顾名思义就是一张记载IP信息的表格。从名称描述上来看就能知道它与网络通信有关。

     

    事实上,iptables是一个运行在Linux平台的用户层的防火墙工具。

     

    何谓用户层呢?

     

    Linux将系统分为两个层次:

    1、内核层;

    2、用户层;

    内核层一般指Linux系统程序及驱动程序,大多数人都接触不到。而用户层则是给普通人用来跑应用程序的环境。

     

    何谓防火墙呢?

     

    计算机领域的防火墙是一个类比的说法。

     

    现实世界中防火墙可以隔绝火灾的漫延,将危险阻隔在高墙之外。此术语在计算机领域也是类似的意思。基于IP地址配置所需的规则,对来往于设备的每一个网络包都先经iptables过滤一遍以决定丢弃或放行。计算机领域的防火墙就是将来自网络世界的“危险”阻隔在高墙之外。

     

    Linux有“两套防火墙”:

    1、运行于内核层的netfilter;

    2、运行于用户层的iptables。

     

    那为什么要将防火墙分成内核层和用户层两部分的呢?

     

    答案非常简单。

     

    因为无论是用户层还是内核层都有网络通信的需求。而用户又有权自由配置防火墙规则。直接将内核层的配置接口暴露给普通用户是不合理的,所以就有了iptables程序。其实iptables仅仅是一个“传话筒”,用户配置给它的规则会被传递到netfilter中起效。Linux中真正的防火墙是运行于内核的netfilter。

    2、iptables概述

    下面贴出一份iptables规则表的示例:

    # iptables -L
    Chain PREROUTING (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain INPUT (policy DROP)
    target     prot opt source               destination         
    ACCEPT     tcp  --  anywhere             192.168.1.23        
    ACCEPT     all  --  anywhere             192.168.2.0/24      
    ACCEPT     all  --  192.168.77.10        192.168.1.254       
    DROP       all  --  192.168.77.10        192.168.1.254 
    
    Chain FORWARD (policy DROP)
    target     prot opt source               destination         
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination         
    #

    上述标红部分可以理解成是一个“规则模块”,即对于“这一类”的网络通信,你想采用什么规则。iptables共提供五种“规则模块”:

    1、PREROUTING;

    2、POSTROUTING;

    3、INPUT;

    4、OUTPUT;

    5、FORWARD。

     

    后面标绿部分表示此类规则模块中的默认操作方式。操作方式共两种:

    1、ACCEPT;

    2、DROP。

     

    各类规则模块下方的内容列表就表示各种类型的规则了。

     

    如上述第一类模块:PREROUTING,它的默认规则是 ACCEPT。规则内容为空。即表示:对PREROUTING模块,所有的网络包都ACCEPT放行。

     

    再看到下面的INPUT模块。它的默认规则是DROP,规则内容不为空。这表示,对于INPUT模块,所有不在规则内容里的类型,都DROP丢弃掉。

     

    而iptables的规则是对顺序敏感的,即排在后面的规则内容的优先级大于前面的。

     

    看第一条规则,它表示:对于发往192.168.1.23的TCP包放行,无论它的来源是哪里。

     

    第二条规则,它表示:对于发往192.168.2 网段的任意类型网络包放行,无论它的来源是哪里。

     

    第三条规则要与第四条规则一起看,因为它们是同一条规则。第三条表示对于来自192.168.77.10的发往192.168.1.254的任意类型网络包放行,但第四条则配置为丢弃,系统最终会为后面那条为准,即采取丢弃操作。

     

    后面的可以此类推,就不再赘述了。

    3、五链

    一般提到iptables总是不得不说它的“四表五链”。四表下一节再说,这里先来看看五链。

    所谓五链即上一节中提到的“规则模块”,即在网络通信过程中,适用于不同类型的网络包做过滤的通信规则集合。

    五链分别为:

    1、INPUT链;

    2、OUTPUT链;

    3、FORWARD链;

    4、PREROUTING链;

    5、POSTROUTING链;

    INPUT链是用于过滤所有目的设备为本机的网络包的规则集合。

    OUTPUT链是用于过滤所有从本机产生并发出去的网络包的规则集合。

    FORWARD链是用于过滤所有以本机作为中转站的网络包的规则集合。再说通俗一点,这个网络包不是发给本机的,但是本机知道接下来应该把它传给谁的网络包类型。一般仅路由器才会用到这条链,因为普通网络终端设备默认是关闭“转发/中转”功能的。

    PREROUTING链是用于过滤发给本机,但是在传递给应用之前要先做目的地址转换的网络包。一般路由器设备用这条链才比较多吧。

    POSTROUTING链与PREROUTING链相对,用于过滤从本机发出,但是在发出之前要先做源地址转换的网络包。同样一般路由器设备才用的上这条链。

    讲到这可能有的同学要问了,既然iptables有五条链,为何在上一节的示例中只看到有四条?

    别急,下一节就告诉你为什么。

    4、四表

    除了五条链,iptables还拥有四张表:

    1、filter表;

    2、nat表;

    3、mangle表;

    4、raw表;

    四表与五链之间是什么关系呢?

    就是简单的包含与被包含的关系。链中列出了网络包在某个流向上的过滤规则集合,而表中则囊括了不同的链。

    为何要这样划分呢?

    因为网络通信是一个复杂的过程,每一张表中的链又都是独立的,只要在网络通信的不同过程应用不同的表,辅以不同的控制规则,就可以对网络通信的控制达到一个非常细粒化的程度。说白了,之所以弄个四表五链,纯粹是为了控制方便。但其控制方便的代价就是系统复杂。

    不同的表用途不同,因此其包含的链条也不尽相同。具体如下:

    1、filter表包含三个链条:

    a. INPUT

    b. OUTPUT

    c. FORWARD

    2、nat表包含三个链条:

    a. PREROUTING

    b. OUPUT

    c. POSTROUTING

    3、mangle表包含五条链条:

    a. PREROUTING

    b. INPUT

    c. OUTPUT

    d. FORWARD

    e. POSTROUTING

    4、raw表包含两条链条:

    a. PREROUTING

    b. OUTPUT

    不同的表的用途用文字很难描述清楚,下面直接贴出一张不同流向的网络包及各表与链生效点的图来展示:

    5、iptables规则的增删改查

    iptables规则配置最权威的手册还得看官方文档,这里贴出地址,想深入学习的可以过去看看:

    https://linux.die.net/man/8/iptables

    也可通过命令 iptables --help 来查看简略版的帮助文档 。

    与传统的Linux程序一致,iptables也是通过运行程序 + 传入参数来配置规则的。

    iptables的参数组合非常复杂,但只需要记住以下几个点差不多就能随时享受徒手撸规则的乐趣了。

    iptables配规则,必定离不开以下几种参数类型:

    1、哪张表;

    2、哪条链;

    3、哪种操作类型;

    新增、删除、插入还是替换?

    4、哪种数据类型;

    源地址、目的地址、数据类型是什么?

    5、哪种操作方式;

    放行还是丢弃?

    搞清楚目的了敲起命令来就容易了,不用再死记硬背了。

    指定哪张表是通过参数 -t / --table 来控制的。如:

    iptables -t filter
    iptables -t nat
    iptables --table mangle

    需要强调的是:表参数是可以省略不写的,默认操作的是 filter 表

    指定哪种操作类型和哪条链是一起的,它是通过参数 -A / --append 与 -D / --delete 来控制的。如:

    iptables -A INPUT
    iptables -D OUTPUT
    iptables --table nat --append FORWARD

    指定哪种数据类型是通过 -s / --source 与 -d / --destination / --dst 与 -p / --protocol 来指定的,分别表示源IP地址目的IP地址通信协议。如:

    iptables -A INPUT -s 192.168.1.0/24 -d 192.168.2.9 -p tcp
    iptables -A INPUT -s 192.168.1.0/24 -d 192.168.2.9 -p all
    iptables -A INPUT -s 192.168.1.7 -p tcp
    iptables -A INPUT -d 192.168.2.9 -p tcp

    指定哪种操作方式是通过参数 -j / --jump 来控制的。如:

    iptables -A OUTPUT -d 192.168.2.9 -p all -j DROP

    --jump 参数的含义是“跳跃”,它除了配置当一个网络包符合此规则时的操作方式外,还可以控制满足匹配后跳转到另一条由用户定义的链条中。使用 -N / --new-chain 和 -X / --delete-chain 参数可以新增和删除自定义链。

    一条完整的配置命令如下所示:

    iptables --table filter --append INPUT -s 192.168.1.0/24 -d 192.168.2.9 -p udp --jump DROP

    这条命令表示,在 nat 表的INPUT链上增加一条规则,此规则将所有来自192.168.1网段且目的主机为192.168.2.9的的UDP数据包丢弃。

    插入和取代操作与新增和删除类似,就不再赘述了。


    +++
  • 相关阅读:
    Android ListView和CheckBox应用之批量删除操作(附带源码)
    Spring3 MVC 3到Spring MVC框架简介
    Struts2.3 + Spring3.1 + Hibernate3.6 + HTML5 + CSS3整合开发
    Java和MongoDB之Hello World
    SQL Server 2008中的hierarchyid
    SQLSERVER复制表的方法
    去掉struts2标签的样式
    KineticJS教程(12)
    SQL Server日期时间格式转换字符串详解
    生活不易,且行且珍惜!
  • 原文地址:https://www.cnblogs.com/chorm590/p/14609095.html
Copyright © 2011-2022 走看看