iptables_iptables详解 - CSDN
iptables 订阅
IPTABLES 是与最新的 3.5 版本 Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。防火墙在做数据包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的数据包过滤表中,而这些表集成在 Linux 内核中。在数据包过滤表中,规则被分组放在我们所谓的链(chain)中。而netfilter/iptables IP 数据包过滤系统是一款功能强大的工具,可用于添加、编辑和移除规则。虽然 netfilter/iptables IP 信息包过滤系统被称为单个实体,但它实际上由两个组件netfilter 和 iptables 组成。netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。除非您正在使用 Red Hat Linux 7.1 或更高版本,否则需要下载该工具并安装使用它。 [1] 展开全文
IPTABLES 是与最新的 3.5 版本 Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。防火墙在做数据包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的数据包过滤表中,而这些表集成在 Linux 内核中。在数据包过滤表中,规则被分组放在我们所谓的链(chain)中。而netfilter/iptables IP 数据包过滤系统是一款功能强大的工具,可用于添加、编辑和移除规则。虽然 netfilter/iptables IP 信息包过滤系统被称为单个实体,但它实际上由两个组件netfilter 和 iptables 组成。netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。除非您正在使用 Red Hat Linux 7.1 或更高版本,否则需要下载该工具并安装使用它。 [1]
信息
版    本
Red Hat Linux 7.1
有效状态
ESTABLISHED 、 INVALID
组    件
netfilter 和 iptables
中文名
iptables
优    点
配置有状态的防火墙
外文名
iptables
IPTABLES历史版本
与Linux内核各版本集成的防火墙历史版本:2.0.X内核:ipfwadm2.2.X内核:ipchains2.4.X内核:iptables
收起全文
精华内容
参与话题
  • iptables详解

    千次阅读 2018-08-24 17:20:04
    iptables从入门到应用  一、简介  1.1、是什么?  iptables是隔离主机以及网络的工具,通过自己设定的规则以及处理动作对数据报文进行检测以及处理。   1.2、发展史  防火墙的发展史就是从墙到链再到表...

    iptables从入门到应用

    wKiom1lH6gjwDzT1AAA1YKJJ6uU865.png

     一、简介

     1.1、是什么?

        iptables是隔离主机以及网络的工具,通过自己设定的规则以及处理动作对数据报文进行检测以及处理。 

     1.2、发展史

        防火墙的发展史就是从墙到链再到表的过程,也即是从简单到复杂的过程。为什么规则越来越多,因为互联网越来越不安全了,所有防火墙的的规则也越来越复杂。防火的工具变化如下:

        ipfirewall(墙)-->ipchains(链条)--iptables(表)

        2.0版内核中,包过滤机制是ipfw,管理工具是ipfwadm;

        2.2 版内核中,包过滤机制ipchain,管理工具是ipchains;

        2.4版及以后的内核中,包过滤机制是netfilter,管理工具iptables。

     二、原理

      2.1、组成

        linux的防火墙由netfilter和iptables组成。用户空间的iptables制定防火墙规则,内核空间的netfilter实现防火墙功能。

        netfilter(内核空间)位于Linux内核中的包过滤防火墙功能体系,称为Linux防火墙的“内核态”。

        iptables(用户空间)位于/sbin/iptables,是用来管理防火墙的命令的工具,为防火墙体系提供过滤规则/策略,决定如何过滤或处理到达防火墙主机的数据包,称为Linux防火墙的“用户态”。

     2.2、实现方式

        Linux系统的防火墙功能是由内核实现的,包过滤防火墙工作在TCP/IP的网络层。

     

    wKioL1lH7qfQp-fvAAA2J5u4FOw073.png

        用户空间的iptables制定相应的规则策略控制内核空间的netfilter处理相应的数据访问控制。

         iptables有四表五链(其实有五表,是后来加进来的),四表分别是下图的的raw,mangle,nat,filter表。五链分别是PREROUTING,INPUT,OUTPUT,FORWARD,POSTROUTING链。表有什么用?链又有什么用呢?其实表决定了数据报文处理的方式,而链则决定了数据报文的流经哪些位置。

        你可以从图中看出规则表的优先级:raw-->mangle-->nat-->filter。

     

    wKioL1lH7uaimCIyAABOvTNqFYc093.png   

        四表的介绍如图(ps:由于现在有五表了,所以我把另一个表也加了进来)。

        wKiom1l65nKgFui_AABFeGNtpAk587.png

        五链的介绍如图。

        wKiom1l65tOQ8bdKAABnzYuun1Y634.png

        制作防火墙规则通常有两种基本策略。一是黑名单策略;二是白名单策略。

        黑名单策略指没有被拒绝的流量都可以通过,这种策略下管理员必须针对每一种新出现的攻击,制定新的规则,因此不推荐。

        白名单策略指没有被允许的流量都要拒绝,这种策略比较保守,根据需要,逐渐开放,目前一般都采用白名单策略,推荐。

     2.3、数据包过滤匹配流程

         如图,我们可以分析数据报文进入本机后应用了哪些表规则以及链规则,根据表规则和链规则我们分析数据包的过滤匹配流程。

        比如我们制定一个filter表的规则,filter表决定是否放行数据包通过,那如果通过,则必须经由INPUT链流入数据包,INPUT链是处理入站数据的,如果没问题,继续放行到用户空间,再经由OUTPUT链将数据包流出。

        那如果是nat表的规则,nat表主要实现转发功能,数据包先经由PREROUTING链进行路由选择,选择好路线后再经由FORWARD链转发数据,然后再进行一个路由选择,最后由POSTROUTING链流出数据。

        其他表规则的数据包流程不做介绍,图中介绍的十分详尽。

    wKiom1lH70jiFhIxAACKxJ40ZPQ037.png

    三、iptables命令

    wKiom1lH8R2zoWlrAAAyHhrQ3CE712.png

     3.1、制定iptables表规则思路

        (1)选择一张表(此表决定了数据报文处理的方式)

        (2)选择一条链(此链决定了数据报文的流经哪些位置)

        (3)选择合适的条件(此条件决定了对数据报文做何种条件匹配)

        (4)选择处理数据报文的动作,制定相应的防火墙规则。

     3.2、基本语法结构

       结构:

        iptables [ -t 表名 ] 管理选项 [ 链名 ] [ 条件匹配 ] [ -j 目标动作或跳转 ]

       几个注意事项:

        不指定表名时,默认表示filter表,不指定链名时,默认表示该表内所有链,除非设置规则链的缺省策略,否则需要指定匹配条件。

    wKioL1l8Yd2QEFI7AAA4OBtHvM8697.png

     3.3、详细语法

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    iptables [-t table] {-A|-C|-D} chain rule-specification

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

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

      iptables [-t table] -D chain rulenum

      iptables [-t table] -S [chain [rulenum]]

      iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]

      iptables [-t table] -N chain

      iptables [-t table] -X [chain]

      iptables [-t table] -P chain target

      iptables [-t table] -E old-chain-name new-chain-name

        rule-specification = [matches...] [target]

       match = -m matchname [per-match-options]

       target = -j targetname [per-target-options]

     3.4、语法结构解析

      语法结构解析如下。

      注意:本导图是按照iptables语法结构的使用的先后顺序制作的,如果按照此种方式能够很快地帮助我们记忆以及掌握iptables规则的制定。

     wKioL1lH8S6znmfeAAAd7Eu3avA994.png

      3.4.1、表

        其实表的介绍,在上面已经介绍了。这里我们可以再来回顾以下五张表的功能。

    wKiom1l65nKgFui_AABFeGNtpAk587.png

      3.4.2、管理选项

        管理选项分为三大类,分别为:规则的显示,规则链管理以及规则管理。我们可以通过man帮助查看iptables的用法,大多选项用法都见名知意。

        wKioL1l678rAFq6fAAAXSal1rvo583.png

         链管理

    1

    2

    3

    4

    5

    6

    7

    8

    9

        -N, --new-chain chain:新建一个自定义的规则链;

        -X, --delete-chain [chain]:删除用户自定义的引用计数为0的空链;

        -F, --flush [chain]:清空指定的规则链上的规则;

        -E, --rename-chain old-chain new-chain:重命名链;

        -Z, --zero [chain [rulenum]]:置零计数器;

          注意:每个规则都有两个计数器

          packets:被本规则所匹配到的所有报文的个数;

          bytes:被本规则所匹配到的所有报文的大小之和;

        -P, --policy chain target 制定链表的策略(ACCEPT|DROP|REJECT)

        规则管理

     

    1

    2

    3

    4

    5

        -A, --append chain rule-specification:追加新规则于指定链的尾部; 

        -I, --insert chain [rulenum] rule-specification:插入新规则于指定链的指定位置,默认为首部;

        -R, --replace chain rulenum rule-specification:替换指定的规则为新的规则;

        -D, --delete chain rulenum:根据规则编号删除规则;

        -D, --delete chain rule-specification:根据规则本身删除规则;

        规则显示      

    1

    2

    3

    4

    5

    6

    7

         -L, --list [chain]:列出规则;

         -v, --verbose:详细信息; 

         -vv 更详细的信息

         -n, --numeric:数字格式显示主机地址和端口号;

         -x, --exact:显示计数器的精确值,而非圆整后的数据;

         --line-numbers:列出规则时,显示其在链上的相应的编号;

         -S, --list-rules [chain]:显示指定链的所有规则;

     3.4.3、链

        五链的功能如图所示。   

    wKiom1l65tOQ8bdKAABnzYuun1Y634.png

     3.4.4、条件匹配

        条件匹配分为基本匹配和扩展匹配,扩展匹配又分为显示匹配和隐式匹配。

        基本匹配的特点是:无需加载扩展模块,匹配规则生效;扩展匹配的特点是:需要加载扩展模块,匹配规则方可生效。

        隐式匹配的特点:使用-p选项指明协议时,无需再同时使用-m选项指明扩展模块以及不需要手动加载扩展模块;  

        显示匹配的特点:必须使用-m选项指明要调用的扩展模块的扩展机制以及需要手动加载扩展模块。

        基本匹配的使用选项及功能

    1

    2

    3

    4

    5

    6

    -p 指定规则协议,tcp udp icmp all

    -s 指定数据包的源地址,ip hostname

    -d 指定目的地址

    -i 输入接口

    -o 输出接口                                              

    ! 取反

        隐式匹配的使用选项及功能    

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    -p tcp

      --sport 匹配报文源端口;可以给出多个端口,但只能是连续的端口范围 

      --dport 匹配报文目标端口;可以给出多个端口,但只能是连续的端口范围

      --tcp-flags mask comp 匹配报文中的tcp协议的标志位

    -p udp

      --sport 匹配报文源端口;可以给出多个端口,但只能是连续的端口范围

      --dport 匹配报文目标端口;可以给出多个端口,但只能是连续的端口范围

    --icmp-type

      0/0: echo reply 允许其他主机ping

      8/0echo request 允许ping其他主机

        显式匹配的使用选项及功能

        显式匹配的选项特别多,所以使用思维导图的方式梳理一下。我们可以使用命令:man iptables-extensions查看具体用法。

    wKioL1l683GTswz4AAAsOymPziY855.png

        1.multiport(多端口)

         开放多个端口。

    wKioL1l69AmAOZ92AAAhoutC95Y516.png

    1. 1

      2

      3

      例子:

              iptables -I INPUT -d 172.16.100.7 -p tcp -m multiport --dports 22,80 -j ACCEPT

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

        2.iprange(ip范围)

         以连续地址块的方式来指明多IP地址匹配条件。

    1. 1

      2

      3

      例子:

          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

        3.time(时间范围)

         指定时间范围。

    1. 1

      2

      3

       例子:

              iptables -A INPUT -d 172.16.100.7 -p tcp --dport 901 -m time --weekdays Mon,Tus,Wed,Thu,Fri --timestart 08:00:00 --time-stop 18:00:00 -j ACCEPT

              iptables -A OUTPUT -s 172.16.100.7 -p tcp --sport 901 -j ACCEPT

        4.string(字符串)

         对报文中的应用层数据做字符串模式匹配检测(通过算法实现)。

    1. 1

      2

      3

          --algo {bm|kmp}:字符匹配查找时使用算法

          --string "STRING": 要查找的字符串

          --hex-string “HEX-STRING”: 要查找的字符,先编码成16进制格式

        5.connlimit(连接限制)

         根据每个客户端IP作并发连接数量限制。

    1

    2

        --connlimit-upto n  连接数小于等于n时匹配

        --connlimit-above n 连接数大于n时匹配

        6.limit(速率限制)

         报文速率控制。  

        7.state(状态)

         追踪本机上的请求和响应之间的数据报文的状态。状态有五种:INVALID, ESTABLISHED, NEW, RELATED, UNTRACKED.

    wKiom1l69pPSccqrAABEsH6cAKw223.png

    1.  法则:

    2.         1、对于进入的状态为ESTABLISHED都应该放行;

    3.         2、对于出去的状态为ESTABLISHED都应该放行;

    4.         3、严格检查进入的状态为NEW的连接;

    5.         4、所有状态为INVALIED都应该拒绝;  

       

     3.4.5、处理动作

        处理动作有内置的处理动作和自定义的处理动作。自定义的处理动作用的比较少,因此只介绍内置的处理动作。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    ACCEPT:允许数据包通过

     

    DROP:直接丢弃数据包,不给出任何回应信息

     

    REJECT:拒绝数据包通过,必要时会给数据发送端一个响应信息

     

    LOG:在日志文件中记录日志信息,然后将数据包传递给下一条规则

     

    QUEUE: 防火墙将数据包移交到用户空间

     

    RETURN:防火墙停止执行当前链中的后续Rules,并返回到调用链 

     

    REDIRECT:端口重定向  

     

    MARK:做防火墙标记

     

    DNAT:目标地址转换

     

    SNAT:源地址转换   

                                                     

    MASQUERADE:地址伪装

     3.5、保存和载入规则

        CentOS6和CentOS7保存和载入的规则稍有差异。

      3.5.1、CentOS 7

    1

    2

    3

    4

        保存:iptables-save > /PATH/TO/SOME_RULE_FILE   

       重载:iptabls-restore < /PATH/FROM/SOME_RULE_FILE    

        -n, --noflush:不清除原有规则    

        -t, --test:仅分析生成规则集,但不提交

      3.5.2、CentOS 6

     

    1

    2

    3

        保存规则:service iptables save   #保存规则于/etc/sysconfig/iptables文件,覆盖保存;   

       重载规则:service iptables restart #默认重载/etc/sysconfig/iptables文件中的规则   

       配置文件:/etc/sysconfig/iptables-config

    四、iptables的实践应用

        iptables十分重要与网络的安全息息相关,我们理所应当掌握。不过我们大可不必死记硬背,一定结合实际项目,多多练习,效果才会更好。

     4.1、iptables常用规则

        1.放行sshd服务

    1

    2

     iptables -t filter -A INPUT -s 192.168.0.0/24 -d 192.168.0.1 -p tcp --dport 22 -j ACCEPT

     iptables -t filter -A OUTPUT -s 192.168.0.1  -p tcp --sport 22 -j ACCEPT

    1.   2.放行httpd/nginx服务

    1

    2

     iptables -I OUTPUT -s 192.168.0.1 -p tcp --sport 80 -j ACCEPT

     iptables -I INPUT -d 192.168.0.1 -p tcp --dport 80 -j ACCEPT

    1.  

    2.  3.放行本机端的流入流出

    1

    2

    3

      iptables -A  INPUT  -s 127.0.0.1 -d 127.0.0.1 -i lo -j ACCEPT

      iptables -A  OUTPUT  -s 127.0.0.1 -d 127.0.0.1 -o lo -j ACCEPT

      #不放行本机的流入与流出,访问本机的httpd服务,网页会出现Error establishing a database connection。

    1.  4.限制ping 192.168.0.1主机的数据包数,平均2/s个,最多不能超过3个

    1

    iptables -A INPUT -i ens33 -d 192.168.0.1 -p icmp --icmp-type 8 -m limit --limit 2/second --limit-burst 3 -j ACCEPT

     4.2、如何配置iptables

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    a) 1. 删除现有规则

    iptables -F

    b) 2. 配置默认链策略

    iptables -P INPUT DROP

    iptables -P FORWARD DROP

    iptables -P OUTPUT DROP

    c) 3. 允许远程主机进行SSH连接

    iptables -A INPUT -i eth0 -p tcp –dport 22 -m state –state NEW,ESTABLISHED -j ACCEPT

    iptables -A OUTPUT -o eth0 -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT

    d) 4. 允许本地主机进行SSH连接

    iptables -A OUTPUT -o eth0 -p tcp –dport 22 -m state –state NEW,ESTABLISHED -j ACCEPT

    iptables -A INPUT -i eth0 -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT

    e) 5. 允许HTTP请求

    iptables -A INPUT -i eth0 -p tcp –dport 80 -m state –state NEW,ESTABLISHED -j ACCEPT

    iptables -A OUTPUT -o eth0 -p tcp –sport 80 -m state –state ESTABLISHED -j ACCEPT

     4.3、iptables初始化脚本

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    #!/bin/bash

      

    echo &quot;Setting firewall . . . . start&quot;

      

    #--------RULESET INIT----------#

    iptables -F

    iptables -X

    iptables -P INPUT DROP

    iptables -P OUTPUT ACCEPT

    iptables -P FORWARD ACCEPT

    iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT

    #------------------------------#

    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

    iptables -A INPUT -i eth0 -p tcp ! --syn -j ACCEPT

    iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

    iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

    #------------------------------#

    #zabbix

    iptables -A INPUT -p tcp --destination-port 10050 -j ACCEPT

    iptables -A INPUT -p udp --destination-port 10051 -j ACCEPT

    iptables -A OUTPUT -p tcp --destination-port 10050 -j ACCEPT

    iptables -A OUTPUT -p udp --destination-port 10051 -j ACCEPT

    #for web

    iptables -A INPUT -p tcp --destination-port 21 -j ACCEPT

    iptables -A INPUT -p tcp --destination-port 80 -j ACCEPT

    iptables -A OUTPUT -p tcp --destination-port 80 -j ACCEPT

    iptables -A OUTPUT -p tcp --destination-port 21 -j ACCEPT

    #for mysql

    iptables -A INPUT -p tcp --destination-port 3306 -j ACCEPT

    iptables -A OUTPUT -p tcp --destination-port 3306 -j ACCEPT

    #for mail

    iptables -A INPUT -p tcp --destination-port 25 -j ACCEPT

    iptables -A OUTPUT -p tcp --destination-port 25 -j ACCEPT

    iptables -A OUTPUT -p tcp --destination-port 110 -j ACCEPT

    #for ssh

    iptables -A INPUT -p tcp -s any/0 --destination-port 22 -j ACCEPT

    iptables -N icmp_allowed

    iptables -A icmp_allowed -p ICMP --icmp-type 11 -j ACCEPT

    iptables -A icmp_allowed -p ICMP --icmp-type 8 -j ACCEPT

    iptables -A icmp_allowed -p ICMP -j DROP

    iptables -A OUTPUT -p icmp -j ACCEPT

    iptables -A INPUT -p icmp -j ACCEPT

    iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

    iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

    iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT

    /etc/init.d/iptables save

    https://www.cnblogs.com/frankb/p/7427944.html

    展开全文
  • iptables命令详解和举例

    万次阅读 多人点赞 2018-03-27 10:25:47
    防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种。无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘。而我们的任务就是需要去定义到底防火墙如何工作,这...

        防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种。无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘。而我们的任务就是需要去定义到底防火墙如何工作,这就是防火墙的策略,规则,以达到让它对出入网络的IP、数据进行检测。

    目前市面上比较常见的有3、4层的防火墙,叫网络层的防火墙,还有7层的防火墙,其实是代理层的网关

    对于TCP/IP的七层模型来讲,我们知道第三层是网络层,三层的防火墙会在这层对源地址和目标地址进行检测。但是对于七层的防火墙,不管你源端口或者目标端口,源地址或者目标地址是什么,都将对你所有的东西进行检查。所以,对于设计原理来讲,七层防火墙更加安全,但是这却带来了效率更低。所以市面上通常的防火墙方案,都是两者结合的。而又由于我们都需要从防火墙所控制的这个口来访问,所以防火墙的工作效率就成了用户能够访问数据多少的一个最重要的控制,配置的不好甚至有可能成为流量的瓶颈。
     
    二:iptables 的历史以及工作原理
    1.iptables的发展:

    iptables的前身叫ipfirewall (内核1.x时代),这是一个作者从freeBSD上移植过来的,能够工作在内核当中的,对数据包进行检测的一款简易访问控制工具。但是ipfirewall工作功能极其有限(它需要将所有的规则都放进内核当中,这样规则才能够运行起来,而放进内核,这个做法一般是极其困难的)。当内核发展到2.x系列的时候,软件更名为ipchains,它可以定义多条规则,将他们串起来,共同发挥作用,而现在,它叫做iptables,可以将规则组成一个列表,实现绝对详细的访问控制功能

    他们都是工作在用户空间中,定义规则的工具,本身并不算是防火墙。它们定义的规则,可以让在内核空间当中的netfilter来读取,并且实现让防火墙工作。而放入内核的地方必须要是特定的位置,必须是tcp/ip的协议栈经过的地方。而这个tcp/ip协议栈必须经过的地方,可以实现读取规则的地方就叫做 netfilter.(网络过滤器)

        作者一共在内核空间中选择了5个位置,
        1.内核空间中:从一个网络接口进来,到另一个网络接口去的
        2.数据包从内核流入用户空间的
        3.数据包从用户空间流出的
        4.进入/离开本机的外网接口
        5.进入/离开本机的内网接口
            
    2.iptables的工作机制

    从上面的发展我们知道了作者选择了5个位置,来作为控制的地方,但是你有没有发现,其实前三个位置已经基本上能将路径彻底封锁了,但是为什么已经在进出的口设置了关卡之后还要在内部卡呢? 由于数据包尚未进行路由决策,还不知道数据要走向哪里,所以在进出口是没办法实现数据过滤的。所以要在内核空间里设置转发的关卡,进入用户空间的关卡,从用户空间出去的关卡。那么,既然他们没什么用,那我们为什么还要放置他们呢?因为我们在做NAT和DNAT的时候,目标地址转换必须在路由之前转换。所以我们必须在外网而后内网的接口处进行设置关卡。        

     这五个位置也被称为五个钩子函数(hook functions),也叫五个规则链。
    1.PREROUTING (路由前)
    2.INPUT (数据包流入口)
    3.FORWARD (转发管卡)
    4.OUTPUT(数据包出口)
    5.POSTROUTING(路由后)
            这是NetFilter规定的五个规则链,任何一个数据包,只要经过本机,必将经过这五个链中的其中一个链。       

    3.防火墙的策略

    防火墙策略一般分为两种,一种叫“通”策略,一种叫“堵”策略,通策略,默认门是关着的,必须要定义谁能进堵策略则是,大门是洞开的,但是你必须有身份认证,否则不能进。所以我们要定义,让进来的进来,让出去的出去,所以通,是要全通,而堵,则是要选择。当我们定义的策略的时候,要分别定义多条功能,其中:定义数据包中允许或者不允许的策略,filter过滤的功能,而定义地址转换的功能的则是nat选项。为了让这些功能交替工作,我们制定出了“表”这个定义,来定义、区分各种不同的工作功能和处理方式。

    我们现在用的比较多个功能有3个:
    1.filter 定义允许或者不允许的
    2.nat 定义地址转换的 
                    3.mangle功能:修改报文原数据

    我们修改报文原数据就是来修改TTL的。能够实现将数据包的元数据拆开,在里面做标记/修改内容的。而防火墙标记,其实就是靠mangle来实现的。
     
    小扩展:
    对于filter来讲一般只能做在3个链上:INPUT ,FORWARD ,OUTPUT
    对于nat来讲一般也只能做在3个链上:PREROUTING ,OUTPUT ,POSTROUTING
    而mangle则是5个链都可以做:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
     
    iptables/netfilter(这款软件)是工作在用户空间的,它可以让规则进行生效的,本身不是一种服务,而且规则是立即生效的。而我们iptables现在被做成了一个服务,可以进行启动,停止的。启动,则将规则直接生效,停止,则将规则撤销。 
    iptables还支持自己定义链。但是自己定义的链,必须是跟某种特定的链关联起来的。在一个关卡设定,指定当有数据的时候专门去找某个特定的链来处理,当那个链处理完之后,再返回。接着在特定的链中继续检查。

    注意:规则的次序非常关键,谁的规则越严格,应该放的越靠前,而检查规则的时候,是按照从上往下的方式进行检查的。
     
    三.规则的写法:

     iptables定义规则的方式比较复杂:
     格式:iptables [-t table] COMMAND chain CRETIRIA -j ACTION
     -t table :3个filter nat mangle
     COMMAND:定义如何对规则进行管理
     chain:指定你接下来的规则到底是在哪个链上操作的,当定义策略的时候,是可以省略的
     CRETIRIA:指定匹配标准
     -j ACTION :指定如何进行处理

     比如:不允许172.16.0.0/24的进行访问。
     iptables -t filter -A INPUT -s 172.16.0.0/16 -p udp --dport 53 -j DROP
     当然你如果想拒绝的更彻底:
     iptables -t filter -R INPUT 1 -s 172.16.0.0/16 -p udp --dport 53 -j REJECT

     iptables -L -n -v #查看定义规则的详细信息
     
    四:详解COMMAND:

    1.链管理命令(这都是立即生效的)
    -P :设置默认策略的(设定默认门是关着的还是开着的)
    默认策略一般只有两种
    iptables -P INPUT (DROP|ACCEPT)  默认是关的/默认是开的
    比如:
    iptables -P INPUT DROP 这就把默认规则给拒绝了。并且没有定义哪个动作,所以关于外界连接的所有规则包括Xshell连接之类的,远程连接都被拒绝了。
            -F: FLASH,清空规则链的(注意每个链的管理权限)
        iptables -t nat -F PREROUTING
        iptables -t nat -F 清空nat表的所有链
            -N:NEW 支持用户新建一个链
                iptables -N inbound_tcp_web 表示附在tcp表上用于检查web的。
            -X: 用于删除用户自定义的空链
                使用方法跟-N相同,但是在删除之前必须要将里面的链给清空昂了
            -E:用来Rename chain主要是用来给用户自定义的链重命名
                -E oldname newname
             -Z:清空链,及链中默认规则的计数器的(有两个计数器,被匹配到多少个数据包,多少个字节)
                iptables -Z :清空
     
    2.规则管理命令
             -A:追加,在当前链的最后新增一个规则
             -I num : 插入,把当前规则插入为第几条。
                -I 3 :插入为第三条
             -R num:Replays替换/修改第几条规则
                格式:iptables -R 3 …………
             -D num:删除,明确指定删除第几条规则
            
    3.查看管理命令 “-L”
     附加子命令
     -n:以数字的方式显示ip,它会将ip直接显示出来,如果不加-n,则会将ip反向解析成主机名。
     -v:显示详细信息
     -vv
     -vvv :越多越详细
     -x:在计数器上显示精确值,不做单位换算
     --line-numbers : 显示规则的行号
     -t nat:显示所有的关卡的信息
     
    五:详解匹配标准

    1.通用匹配:源地址目标地址的匹配
     -s:指定作为源地址匹配,这里不能指定主机名称,必须是IP
    IP | IP/MASK | 0.0.0.0/0.0.0.0
    而且地址可以取反,加一个“!”表示除了哪个IP之外
     -d:表示匹配目标地址
     -p:用于匹配协议的(这里的协议通常有3种,TCP/UDP/ICMP)
     -i eth0:从这块网卡流入的数据
    流入一般用在INPUT和PREROUTING上
     -o eth0:从这块网卡流出的数据
    流出一般在OUTPUT和POSTROUTING上
            
    2.扩展匹配
    2.1隐含扩展:对协议的扩展
        -p tcp :TCP协议的扩展。一般有三种扩展
    --dport XX-XX:指定目标端口,不能指定多个非连续端口,只能指定单个端口,比如
    --dport 21  或者 --dport 21-23 (此时表示21,22,23)
    --sport:指定源端口
    --tcp-fiags:TCP的标志位(SYN,ACK,FIN,PSH,RST,URG)
        对于它,一般要跟两个参数:
    1.检查的标志位
    2.必须为1的标志位
    --tcpflags syn,ack,fin,rst syn   =    --syn
    表示检查这4个位,这4个位中syn必须为1,其他的必须为0。所以这个意思就是用于检测三次握手的第一次包的。对于这种专门匹配第一包的SYN为1的包,还有一种简写方式,叫做--syn
        -p udp:UDP协议的扩展
            --dport
            --sport
        -p icmp:icmp数据报文的扩展
            --icmp-type:
    echo-request(请求回显),一般用8 来表示
    所以 --icmp-type 8 匹配请求回显数据包
    echo-reply (响应的数据包)一般用0来表示
                      
    2.2显式扩展(-m)
         扩展各种模块
          -m multiport:表示启用多端口扩展
          之后我们就可以启用比如 --dports 21,23,80
                      
            
    六:详解-j ACTION

     常用的ACTION:
     DROP:悄悄丢弃
    一般我们多用DROP来隐藏我们的身份,以及隐藏我们的链表
     REJECT:明示拒绝
     ACCEPT:接受
    custom_chain:转向一个自定义的链
     DNAT
     SNAT
     MASQUERADE:源地址伪装
     REDIRECT:重定向:主要用于实现端口重定向
     MARK:打防火墙标记的
     RETURN:返回
    在自定义链执行完毕后使用返回,来返回原规则链。
     
    练习题1:
         只要是来自于172.16.0.0/16网段的都允许访问我本机的172.16.100.1的SSHD服务
         分析:首先肯定是在允许表中定义的。因为不需要做NAT地址转换之类的,然后查看我们SSHD服务,在22号端口上,处理机制是接受,对于这个表,需要有一来一回两个规则,如果我们允许也好,拒绝也好,对于访问本机服务,我们最好是定义在INPUT链上,而OUTPUT再予以定义就好。(会话的初始端先定义),所以加规则就是:
         定义进来的: iptables -t filter -A INPUT -s 172.16.0.0/16 -d 172.16.100.1 -p tcp --dport 22 -j ACCEPT
         定义出去的: iptables -t filter -A OUTPUT -s 172.16.100.1 -d 172.16.0.0/16 -p tcp --dport 22 -j ACCEPT
         将默认策略改成DROP:
      iptables -P INPUT DROP
      iptables -P OUTPUT DROP
      iptables -P FORWARD DROP
            
    七:状态检测:

    是一种显式扩展,用于检测会话之间的连接关系的,有了检测我们可以实现会话间功能的扩展
            什么是状态检测?对于整个TCP协议来讲,它是一个有连接的协议,三次握手中,第一次握手,我们就叫NEW连接,而从第二次握手以后的,ack都为1,这是正常的数据传输,和tcp的第二次第三次握手,叫做已建立的连接(ESTABLISHED),还有一种状态,比较诡异的,比如:SYN=1 ACK=1 RST=1,对于这种我们无法识别的,我们都称之为INVALID无法识别的。还有第四种,FTP这种古老的拥有的特征,每个端口都是独立的,21号和20号端口都是一去一回,他们之间是有关系的,这种关系我们称之为RELATED。
    所以我们的状态一共有四种:
            NEW
            ESTABLISHED
            RELATED
            INVALID
     
    所以我们对于刚才的练习题,可以增加状态检测。比如进来的只允许状态为NEW和ESTABLISHED的进来,出去只允许ESTABLISHED的状态出去,这就可以将比较常见的反弹式木马有很好的控制机制。
            
    对于练习题的扩展:
    进来的拒绝出去的允许,进来的只允许ESTABLISHED进来,出去只允许ESTABLISHED出去。默认规则都使用拒绝
    iptables -L -n --line-number  :查看之前的规则位于第几行
        改写INPUT
            iptables -R INPUT 2 -s 172.16.0.0/16 -d 172.16.100.1 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
            iptables -R OUTPUT 1 -m state --state ESTABLISHED -j ACCEPT
     
        此时如果想再放行一个80端口如何放行呢?
            iptables -A INPUT -d 172.16.100.1 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
     
            iptables -R INPUT 1 -d 172.16.100.1 -p udp --dport 53 -j ACCEPT
     
    练习题2:
    假如我们允许自己ping别人,但是别人ping自己ping不通如何实现呢?
    分析:对于ping这个协议,进来的为8(ping),出去的为0(响应).我们为了达到目的,需要8出去,允许0进来
     
    在出去的端口上:iptables -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT
    在进来的端口上:iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
     
    小扩展:对于127.0.0.1比较特殊,我们需要明确定义它
    iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
    iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
     
    八:SNAT和DNAT的实现

    由于我们现在IP地址十分紧俏,已经分配完了,这就导致我们必须要进行地址转换,来节约我们仅剩的一点IP资源。那么通过iptables如何实现NAT的地址转换呢?

    1.SNAT基于原地址的转换
    基于原地址的转换一般用在我们的许多内网用户通过一个外网的口上网的时候,这时我们将我们内网的地址转换为一个外网的IP,我们就可以实现连接其他外网IP的功能
    所以我们在iptables中就要定义到底如何转换:
    定义的样式:
    比如我们现在要将所有192.168.10.0网段的IP在经过的时候全都转换成172.16.100.1这个假设出来的外网地址:
    iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 172.16.100.1
    这样,只要是来自本地网络的试图通过网卡访问网络的,都会被统统转换成172.16.100.1这个IP.
    那么,如果172.16.100.1不是固定的怎么办?
    我们都知道当我们使用联通或者电信上网的时候,一般它都会在每次你开机的时候随机生成一个外网的IP,意思就是外网地址是动态变换的。这时我们就要将外网地址换成 MASQUERADE(动态伪装):它可以实现自动寻找到外网地址,而自动将其改为正确的外网地址。所以,我们就需要这样设置:
             iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE
             这里要注意:地址伪装并不适用于所有的地方。
     
    2.DNAT目标地址转换
    对于目标地址转换,数据流向是从外向内的,外面的是客户端,里面的是服务器端通过目标地址转换,我们可以让外面的ip通过我们对外的外网ip来访问我们服务器不同的服务器,而我们的服务却放在内网服务器的不同的服务器上

        如何做目标地址转换呢?:
    iptables -t nat -A PREROUTING -d 192.168.10.18 -p tcp --dport 80 -j DNAT --todestination 172.16.100.2
            目标地址转换要做在到达网卡之前进行转换,所以要做在PREROUTING这个位置上
     
    九:控制规则的存放以及开启

    注意:你所定义的所有内容,当你重启的时候都会失效,要想我们能够生效,需要使用一个命令将它保存起来
    1.service iptables save 命令
    它会保存在/etc/sysconfig/iptables这个文件中
        2.iptables-save 命令
    iptables-save > /etc/sysconfig/iptables
     
        3.iptables-restore 命令
    开机的时候,它会自动加载/etc/sysconfig/iptabels
    如果开机不能加载或者没有加载,而你想让一个自己写的配置文件(假设为iptables.2)手动生效的话:
    iptables-restore < /etc/sysconfig/iptables.2
    则完成了将iptables中定义的规则手动生效
     
     
    十:总结
             Iptables是一个非常重要的工具,它是每一个防火墙上几乎必备的设置,也是我们在做大型网络的时候,为了很多原因而必须要设置的。学好Iptables,可以让我们对整个网络的结构有一个比较深刻的了解,同时,我们还能够将内核空间中数据的走向以及linux的安全给掌握的非常透彻。我们在学习的时候,尽量能结合着各种各样的项目,实验来完成,这样对你加深iptables的配置,以及各种技巧有非常大的帮助。

    附加iptables比较好的文章:
    展开全文
  • iptables基础知识详解

    万次阅读 多人点赞 2018-09-13 11:41:24
    iptables防火墙可以用于创建过滤(filter)与NAT规则。所有Linux发行版都能使用iptables,因此理解如何配置 iptables将会帮助你更有效地管理Linux防火墙。如果你是第一次接触iptables,你会觉得它很复杂,但是一旦你...

    iptables防火墙可以用于创建过滤(filter)与NAT规则。所有Linux发行版都能使用iptables,因此理解如何配置 iptables将会帮助你更有效地管理Linux防火墙。如果你是第一次接触iptables,你会觉得它很复杂,但是一旦你理解iptables的工 作原理,你会发现其实它很简单。 
     

    首先介绍iptables的结构:iptables -> Tables -> Chains -> Rules. 简单地讲,tables由chains组成,而chains又由rules组成。如下图所示。 iptables基础知识详解

    图: IPTables Table, Chain, and Rule Structure

    一、iptables的表与链

    iptables具有Filter, NAT, Mangle, Raw四种内建表:

    1. Filter表

    Filter表示iptables的默认表,因此如果你没有自定义表,那么就默认使用filter表,它具有以下三种内建链:

    • INPUT链 – 处理来自外部的数据。
    • OUTPUT链 – 处理向外发送的数据。
    • FORWARD链 – 将数据转发到本机的其他网卡设备上。

    2. NAT表

    NAT表有三种内建链:

    • PREROUTING链 – 处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标IP地址(destination ip address),通常用于DNAT(destination NAT)。
    • POSTROUTING链 – 处理即将离开本机的数据包。它会转换数据包中的源IP地址(source ip address),通常用于SNAT(source NAT)。
    • OUTPUT链 – 处理本机产生的数据包。

    3. Mangle表

    Mangle表用于指定如何处理数据包。它能改变TCP头中的QoS位。Mangle表具有5个内建链:

    • PREROUTING
    • OUTPUT
    • FORWARD
    • INPUT
    • POSTROUTING

    4. Raw表

    Raw表用于处理异常,它具有2个内建链:

    • PREROUTING chain
    • OUTPUT chain

    5.小结

    下图展示了iptables的三个内建表:

    iptables基础知识详解

    图: IPTables 内建表

    二、IPTABLES 规则(Rules)

    牢记以下三点式理解iptables规则的关键:

    • Rules包括一个条件和一个目标(target)
    • 如果满足条件,就执行目标(target)中的规则或者特定值。
    • 如果不满足条件,就判断下一条Rules。

    目标值(Target Values)

    下面是你可以在target里指定的特殊值:

    • ACCEPT – 允许防火墙接收数据包
    • DROP – 防火墙丢弃包
    • QUEUE – 防火墙将数据包移交到用户空间
    • RETURN – 防火墙停止执行当前链中的后续Rules,并返回到调用链(the calling chain)中。

    如果你执行iptables –list你将看到防火墙上的可用规则。下例说明当前系统没有定义防火墙,你可以看到,它显示了默认的filter表,以及表内默认的input链, forward链, output链。

    # iptables -t filter –list 
    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

    查看mangle表:

    # iptables -t mangle –list

    查看NAT表:

    # iptables -t nat –list

    查看RAW表:

    # iptables -t raw –list

    !注意:如果不指定 -t选项,就只会显示默认的 filter表。因此,以下两种命令形式是一个意思:

    # iptables -t filter –list 
    (or) 
    # iptables –list

    以下例子表明在filter表的input链, forward链, output链中存在规则:

    # iptables –list 
    Chain INPUT (policy ACCEPT) 
    num        target                 prot    opt        source            destination 
    1    RH-Firewall-1-INPUT     all       —         0.0.0.0/0         0.0.0.0/0

    Chain FORWARD (policy ACCEPT)
    num        target                 prot    opt        source            destination
    1      RH-Firewall-1-INPUT   all        –      0.0.0.0/0           0.0.0.0/0

    Chain OUTPUT (policy ACCEPT)
    num  target    prot opt source              destination

    Chain RH-Firewall-1-INPUT (2 references)
    num  target    prot opt source              destination
    1    ACCEPT    all  –  0.0.0.0/0            0.0.0.0/0
    2    ACCEPT    icmp –  0.0.0.0/0            0.0.0.0/0          icmp type 255
    3    ACCEPT    esp  –  0.0.0.0/0            0.0.0.0/0
    4    ACCEPT    ah  –  0.0.0.0/0            0.0.0.0/0
    5    ACCEPT    udp  –  0.0.0.0/0            224.0.0.251        udp dpt:5353
    6    ACCEPT    udp  –  0.0.0.0/0            0.0.0.0/0          udp dpt:631
    7    ACCEPT    tcp  –  0.0.0.0/0            0.0.0.0/0          tcp dpt:631
    8    ACCEPT    all  –  0.0.0.0/0            0.0.0.0/0          state RELATED,ESTABLISHED
    9    ACCEPT    tcp  –  0.0.0.0/0            0.0.0.0/0          state NEW tcp dpt:22
    10  REJECT    all  –  0.0.0.0/0            0.0.0.0/0          reject-with icmp-host-prohibited

    以上输出包含下列字段:

    • num – 指定链中的规则编号
      target – 前面提到的target的特殊值
      prot – 协议:tcp, udp, icmp等
      source – 数据包的源IP地址
      destination – 数据包的目标IP地址

    三、清空所有iptables规则

    在配置iptables之前,你通常需要用iptables –list命令或者iptables-save命令查看有无现存规则,因为有时需要删除现有的iptables规则:

    iptables –flush 
    或者 
    iptables -F

    这两条命令是等效的。但是并非执行后就万事大吉了。你仍然需要检查规则是不是真的清空了,因为有的linux发行版上这个命令不会清除NAT表中的规则,此时只能手动清除:

    iptables -t NAT -F

    四、永久生效

    当你删除、添加规则后,这些更改并不能永久生效,这些规则很有可能在系统重启后恢复原样。为了让配置永久生效,根据平台的不同,具体操作也不同。下面进行简单介绍:

    1.Ubuntu

    首先,保存现有的规则:

    iptables-save > /etc/iptables.rules

    然后新建一个bash脚本,并保存到 /etc/network/if-pre-up.d/目录下:

    #!/bin/bash 
    iptables-restore < /etc/iptables.rules

    这样,每次系统重启后iptables规则都会被自动加载。

    !注意:不要尝试在.bashrc或者.profile中执行以上命令,因为用户通常不是root,而且这只能在登录时加载iptables规则。

    2.CentOS, RedHat

    # 保存iptables规则 
    service iptables save

    # 重启iptables服务
    service iptables stop
    service iptables start

    查看当前规则:

    cat  /etc/sysconfig/iptables

    五、追加iptables规则

    可以使用iptables -A命令追加新规则,其中 -A表示 Append。因此, 新的规则将追加到链尾。

    一般而言,最后一条规则用于丢弃(DROP)所有数据包。如果你已经有这样的规则了,并且使用 -A参数添加新规则,那么就是无用功。

    1.语法

    iptables -A chain firewall-rule

    • -A chain – 指定要追加规则的链
    • firewall-rule – 具体的规则参数

    2.描述规则的基本参数

    以下这些规则参数用于描述数据包的协议、源地址、目的地址、允许经过的网络接口,以及如何处理这些数据包。这些描述是对规则的基本描述。

    -p 协议(protocol)

    • 指定规则的协议,如tcp, udp, icmp等,可以使用all来指定所有协议。
    • 如果不指定-p参数,则默认是all值。这并不明智,请总是明确指定协议名称。
    • 可以使用协议名(如tcp),或者是协议值(比如6代表tcp)来指定协议。映射关系请查看/etc/protocols
    • 还可以使用–protocol参数代替-p参数

    -s 源地址(source)

    • 指定数据包的源地址
    • 参数可以使IP地址、网络地址、主机名
    • 例如:-s 192.168.1.101指定IP地址
    • 例如:-s 192.168.1.10/24指定网络地址
    • 如果不指定-s参数,就代表所有地址
    • 还可以使用–src或者–source

    -d 目的地址(destination)

    • 指定目的地址
    • 参数和-s相同
    • 还可以使用–dst或者–destination

    -j 执行目标(jump to target)

    • -j代表”jump to target”
    • -j指定了当与规则(Rule)匹配时如何处理数据包
    • 可能的值是ACCEPT, DROP, QUEUE, RETURN,MASQUERADE
    • 还可以指定其他链(Chain)作为目标
    • 注:MASQUERADE,地址伪装,算是snat中的一种特例,可以实现自动化的snat(详情见上一篇文章)。

    -i 输入接口(input interface)

    • -i代表输入接口(input interface)
    • -i指定了要处理来自哪个接口的数据包
    • 这些数据包即将进入INPUT, FORWARD, PREROUTE链
    • 例如:-i eth0指定了要处理经由eth0进入的数据包
    • 如果不指定-i参数,那么将处理进入所有接口的数据包
    • 如果出现! -i eth0,那么将处理所有经由eth0以外的接口进入的数据包
    • 如果出现-i eth+,那么将处理所有经由eth开头的接口进入的数据包
    • 还可以使用–in-interface参数

    -o 输出(out interface)

    • -o代表”output interface”
    • -o指定了数据包由哪个接口输出
    • 这些数据包即将进入FORWARD, OUTPUT, POSTROUTING链
    • 如果不指定-o选项,那么系统上的所有接口都可以作为输出接口
    • 如果出现! -o eth0,那么将从eth0以外的接口输出
    • 如果出现-i eth+,那么将仅从eth开头的接口输出
    • 还可以使用–out-interface参数

    3.描述规则的扩展参数

    对规则有了一个基本描述之后,有时候我们还希望指定端口、TCP标志、ICMP类型等内容。

    –sport 源端口(source port)针对 -p tcp 或者 -p udp

    • 缺省情况下,将匹配所有端口
    • 可以指定端口号或者端口名称,例如”–sport 22″与”–sport ssh”。
    • /etc/services文件描述了上述映射关系。
    • 从性能上讲,使用端口号更好
    • 使用冒号可以匹配端口范围,如”–sport 22:100″
    • 还可以使用”–source-port”

    –-dport 目的端口(destination port)针对-p tcp 或者 -p udp

    • 参数和–sport类似
    • 还可以使用”–destination-port”

    -–tcp-flags TCP标志 针对-p tcp

    • 可以指定由逗号分隔的多个参数
    • 有效值可以是:SYN, ACK, FIN, RST, URG, PSH
    • 可以使用ALL或者NONE

    -–icmp-type ICMP类型 针对-p icmp

    • –icmp-type 0 表示Echo Reply
    • –icmp-type 8 表示Echo

    4.追加规则的完整实例:仅允许SSH服务

    本例实现的规则将仅允许SSH数据包通过本地计算机,其他一切连接(包括ping)都将被拒绝。

    # 1.清空所有iptables规则 
    iptables -F

    # 2.接收目标端口为22的数据包
    iptables -A INPUT -i eth0 -p tcp –dport 22 -j ACCEPT

    # 3.拒绝所有其他数据包
    iptables -A INPUT -j DROP

    六、更改默认策略

    上例的例子仅对接收的数据包过滤,而对于要发送出去的数据包却没有任何限制。本节主要介绍如何更改链策略,以改变链的行为。

    1. 默认链策略

    /!\警告:请勿在远程连接的服务器、虚拟机上测试!

    当我们使用-L选项验证当前规则是发现,所有的链旁边都有 policy ACCEPT标注,这表明当前链的默认策略为ACCEPT:

    # iptables -L 
    Chain INPUT (policy ACCEPT) 
    target    prot opt source              destination 
    ACCEPT    tcp  –  anywhere            anywhere            tcp dpt:ssh 
    DROP      all  –  anywhere            anywhere

    Chain FORWARD (policy ACCEPT)
    target    prot opt source              destination

    Chain OUTPUT (policy ACCEPT)
    target    prot opt source              destination

    这种情况下,如果没有明确添加DROP规则,那么默认情况下将采用ACCEPT策略进行过滤。除非:

    a)为以上三个链单独添加DROP规则:

    iptables -A INPUT -j DROP 
    iptables -A OUTPUT -j DROP 
    iptables -A FORWARD -j DROP

    b)更改默认策略:

    iptables -P INPUT DROP 
    iptables -P OUTPUT DROP 
    iptables -P FORWARD DROP

    糟糕!!如果你严格按照上一节的例子配置了iptables,并且现在使用的是SSH进行连接的,那么会话恐怕已经被迫终止了!

    为什么呢?因为我们已经把OUTPUT链策略更改为DROP了。此时虽然服务器能接收数据,但是无法发送数据:

    # iptables -L 
    Chain INPUT  (policy DROP) 
    target    prot opt source              destination 
    ACCEPT    tcp  –  anywhere            anywhere            tcp dpt:ssh 
    DROP      all  –  anywhere            anywhere

    Chain FORWARD (policy DROP)
    target    prot opt source              destination

    Chain OUTPUT (policy DROP)
    target    prot opt source              destination

    七、配置应用程序规则

    尽管5.4节已经介绍了如何初步限制除SSH以外的其他连接,但是那是在链默认策略为ACCEPT的情况下实现的,并且没有对输出数据包进行限 制。本节在上一节基础上,以SSH和HTTP所使用的端口为例,教大家如何在默认链策略为DROP的情况下,进行防火墙设置。在这里,我们将引进一种新的 参数-m state,并检查数据包的状态字段。

    1.SSH

    # 1.允许接收远程主机的SSH请求 
    iptables -A INPUT -i eth0 -p tcp –dport 22 -m state –state NEW,ESTABLISHED -j ACCEPT

    # 2.允许发送本地主机的SSH响应
    iptables -A OUTPUT -o eth0 -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT

    • -m state: 启用状态匹配模块(state matching module)
    • –-state: 状态匹配模块的参数。当SSH客户端第一个数据包到达服务器时,状态字段为NEW;建立连接后数据包的状态字段都是ESTABLISHED
    • –sport 22: sshd监听22端口,同时也通过该端口和客户端建立连接、传送数据。因此对于SSH服务器而言,源端口就是22
    • –dport 22: ssh客户端程序可以从本机的随机端口与SSH服务器的22端口建立连接。因此对于SSH客户端而言,目的端口就是22

    如果服务器也需要使用SSH连接其他远程主机,则还需要增加以下配置:

    # 1.送出的数据包目的端口为22 
    iptables -A OUTPUT -o eth0 -p tcp –dport 22 -m state –state NEW,ESTABLISHED -j ACCEPT

    # 2.接收的数据包源端口为22
    iptables -A INPUT -i eth0 -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT

    2.HTTP

    HTTP的配置与SSH类似:

    # 1.允许接收远程主机的HTTP请求 
    iptables -A INPUT -i eth0 -p tcp –dport 80 -m state –state NEW,ESTABLISHED -j ACCEPT

    # 1.允许发送本地主机的HTTP响应
    iptables -A OUTPUT -o eth0 -p tcp –sport 80 -m state –state ESTABLISHED -j ACCEPT

    3.完整的配置

    # 1.删除现有规则 
    iptables -F

    # 2.配置默认链策略
    iptables -P INPUT DROP
    iptables -P FORWARD DROP
    iptables -P OUTPUT DROP

    # 3.允许远程主机进行SSH连接
    iptables -A INPUT -i eth0 -p tcp –dport 22 -m state –state NEW,ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -o eth0 -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT

    # 4.允许本地主机进行SSH连接
    iptables -A OUTPUT -o eth0 -p tcp –dport 22 -m state –state NEW,ESTABLISHED -j ACCEPT
    iptables -A INPUT -i eth0 -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT

    # 5.允许HTTP请求
    iptables -A INPUT -i eth0 -p tcp –dport 80 -m state –state NEW,ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -o eth0 -p tcp –sport 80 -m state –state ESTABLISHED -j ACCEPT

    iptables命令是Linux上常用的防火墙软件,是netfilter项目的一部分。可以直接配置,也可以通过许多前端和图形界面配置。

    语法

    iptables(选项)(参数)

    选项

    -t<表>:指定要操纵的表;
    -A:向规则链中添加条目;
    -D:从规则链中删除条目;
    -i:向规则链中插入条目;
    -R:替换规则链中的条目;
    -L:显示规则链中已有的条目;
    -F:清楚规则链中已有的条目;
    -Z:清空规则链中的数据包计算器和字节计数器;
    -N:创建新的用户自定义规则链;
    -P:定义规则链中的默认目标;
    -h:显示帮助信息;
    -p:指定要匹配的数据包协议类型;
    -s:指定要匹配的数据包源ip地址;
    -j<目标>:指定要跳转的目标;
    -i<网络接口>:指定数据包进入本机的网络接口;
    -o<网络接口>:指定数据包要离开本机所使用的网络接口。

    iptables命令选项输入顺序:

    iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作

    表名包括:

    • raw:高级功能,如:网址过滤。
    • mangle:数据包修改(QOS),用于实现服务质量。
    • net:地址转换,用于网关路由器。
    • filter:包过滤,用于防火墙规则。

    规则链名包括:

    • INPUT链:处理输入数据包。
    • OUTPUT链:处理输出数据包。
    • PORWARD链:处理转发数据包。
    • PREROUTING链:用于目标地址转换(DNAT)。
    • POSTOUTING链:用于源地址转换(SNAT)。

    动作包括:

    • accept:接收数据包。
    • DROP:丢弃数据包。
    • REDIRECT:重定向、映射、透明代理。
    • SNAT:源地址转换。
    • DNAT:目标地址转换。
    • MASQUERADE:IP伪装(NAT),用于ADSL。
    • LOG:日志记录。

    实例

    清除已有iptables规则

    iptables -F
    iptables -X
    iptables -Z

    开放指定的端口

    iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT               #允许本地回环接口(即运行本机访问本机)
    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT    #允许已建立的或相关连的通行
    iptables -A OUTPUT -j ACCEPT         #允许所有本机向外的访问
    iptables -A INPUT -p tcp --dport 22 -j ACCEPT    #允许访问22端口
    iptables -A INPUT -p tcp --dport 80 -j ACCEPT    #允许访问80端口
    iptables -A INPUT -p tcp --dport 21 -j ACCEPT    #允许ftp服务的21端口
    iptables -A INPUT -p tcp --dport 20 -j ACCEPT    #允许FTP服务的20端口
    iptables -A INPUT -j reject       #禁止其他未允许的规则访问
    iptables -A FORWARD -j REJECT     #禁止其他未允许的规则访问

    屏蔽IP

    iptables -I INPUT -s 123.45.6.7 -j DROP       #屏蔽单个IP的命令
    iptables -I INPUT -s 123.0.0.0/8 -j DROP      #封整个段即从123.0.0.1到123.255.255.254的命令
    iptables -I INPUT -s 124.45.0.0/16 -j DROP    #封IP段即从123.45.0.1到123.45.255.254的命令
    iptables -I INPUT -s 123.45.6.0/24 -j DROP    #封IP段即从123.45.6.1到123.45.6.254的命令是

    查看已添加的iptables规则

    iptables -L -n -v
    Chain INPUT (policy DROP 48106 packets, 2690K bytes)
     pkts bytes target     prot opt in     out     source               destination         
     5075  589K ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
     191K   90M ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:22
    1499K  133M ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:80
    4364K 6351M ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
     6256  327K ACCEPT     icmp --  *      *       0.0.0.0/0            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 3382K packets, 1819M bytes)
     pkts bytes target     prot opt in     out     source               destination         
     5075  589K ACCEPT     all  --  *      lo      0.0.0.0/0            0.0.0.0/0  

    删除已添加的iptables规则

    将所有iptables以序号标记显示,执行:

    iptables -L -n --line-numbers

    比如要删除INPUT里序号为8的规则,执行:

    iptables -D INPUT 8

    前提基础:
    1、当主机收到一个数据包后,数据包先在内核空间中处理,若发现目的地址是自身,则传到用户空间中交给对应的应用程序处理,若发现目的不是自身,则会将包丢弃或进行转发。

    2、iptables实现防火墙功能的原理是:在数据包经过内核的过程中有五处关键地方,分别是PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTING,称为钩子函数,iptables这款用户空间的软件可以在这5处地方写规则,对经过的数据包进行处理,规则一般的定义为“如果数据包头符合这样的条件,就这样处理数据包”。

    3、iptables中定义有5条链,说白了就是上面说的5个钩子函数,因为每个钩子函数中可以定义多条规则,每当数据包到达一个钩子函数时,iptables就会从钩子函数中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合钩子函数中任一条规则,iptables就会根据该函数预先定义的默认策略来处理数据包

    4、iptables中定义有表,分别表示提供的功能,有filter表(实现包过滤)、nat表(实现网络地址转换)、mangle表(实现包修改)、raw表(实现数据跟踪),这些表具有一定的优先级:raw-->mangle-->nat-->filter



    一条链上可定义不同功能的规则,检查数据包时将根据上面的优先级顺序检查

    linux iptables详解--个人笔记
    1、目的地址是本地,则发送到INPUT,让INPUT决定是否接收下来送到用户空间,流程为①--->②;

    2、若满足PREROUTING的nat表上的转发规则,则发送给FORWARD,然后再经过POSTROUTING发送出去,流程为: ①--->③--->④--->⑥

    主机发送数据包时,流程则是⑤--->⑥

    iptables安装配置

    linux一般默认都已经安装iptables,只需要开启服务即可

    service iptables start //启动

    service iptables restart //重启

    service iptables stop //关闭

    iptables规则书写:

    基本语法:iptables [-t 表] [操作命令] [链] [规则匹配器] [-j 目标动作]

    说明 支持的链
    raw 一般是为了不再让iptables对数据包进行跟踪,提高性能 PREROUTING、OUTPUT
    mangle 对数据包进行修改 五个链都可以
    nat 进行地址转换 PREROUTING、OUTPUT、POSTROUTING
    filter(默认) 对包进行过滤 INPUT、FORWARD、OUTPUT

    常用操作命令 说明
    -A 在指定链尾部添加规则
    -D 删除匹配的规则
    -R 替换匹配的规则
    -I 在指定位置插入规则(例:iptables -I INPUT 1 --dport 80 -j ACCEPT(将规则插入到filter表INPUT链中的第一位上)
    -L/S 列出指定链或所有链的规则
    -F 删除指定链或所有链的规则
    -N 创建用户自定义链[例:iptables -N allowed]
    -X 删除指定的用户自定义链
    -P 为指定链设置默认规则策略,对自定义链不起作用
    -Z 将指定链或所有链的计数器清零
    -E 更改自定义链的名称[例:iptables -E allowed disallowed]
    -n ip地址和端口号以数字方式显示[例:iptables -nL]

    常用规则匹配器 说明
    -p tcp/udp/icmp/all 匹配协议,all会匹配所有协议
    -s addr[/mask] 匹配源地址
    -d addr[/mask] 匹配目标地址
    --sport port1[:port2] 匹配源端口(可指定连续的端口)
    --dport port1[:port2] 匹配目的端口(可指定连续的端口)
    -o interface 匹配出口网卡,只适用FORWARD、POSTROUTING、OUTPUT(例:iptables -A FORWARD -o eth0)
    -i interface 匹配入口网卡,只使用PREROUTING、INPUT、FORWARD。
    --icmp-type 匹配icmp类型(使用iptables -p icmp -h可查看可用的ICMP类型)
    --tcp-flags mask comp 匹配TCP标记,mask表示检查范围,comp表示匹配mask中的哪些标记。(例:iptables -A FORWARD -p tcp --tcp-flags ALL SYN,ACK -j ACCEPT 表示匹配SYN和ACK标记的数据包)

    目标动作 说明
    ACCEPT 允许数据包通过
    DROP 丢弃数据包
    REJECT 丢弃数据包,并且将拒绝信息发送给发送方
    SNAT 源地址转换(在nat表上)例:iptables -t nat -A POSTROUTING -d 192.168.0.102 -j SNAT --to 192.168.0.1
    DNAT 目标地址转换(在nat表上)例:iptables -t nat -A PREROUTING -d 202.202.202.2 -j DNAT --to-destination 192.168.0.102
    REDIRECT 目标端口转换(在nat表上)例:iptables -t nat -D PREROUTING -p tcp --dport 8080 -i eth2.2 -j REDIRECT --to 80
    MARK 将数据包打上标记;例:iptables -t mangle -A PREROUTING -s 192.168.1.3 -j MARK --set-mark 60

    PS:
    1、目标地址转换一般在PREROUTING链上操作
    2、源地址转换一般在POSTROUTING链上操作



    保存和恢复iptables规则

    使用iptables-save可以保存到特定文件中

    iptables-save >/etc/sysconfig/iptables_save

    使用iptables-restore可以恢复规则

    iptables-restore</etc/sysconfig/iptables_save



    iptables的进阶使用
    1、limit限制流量:
    -m limit --limit 1000/s #设置最大平均匹配速率
    -m limit --limit-burst 15 #设置一开始匹配的最大数据包数量
    -m limit --limit 5/m --limit-burst 15 #表示一开始能匹配的数据包数量为15个,每匹配到一个,limit-burst的值减1,所以匹配到15个时,该值为0,以后每过12s,limit-burst的值会加1,表示又能匹配1个数据包
    例子:

    iptables -A INPUT -i eth0 -m limit --limit 5/m --limit-burst 15 -j ACCEPT

    iptables -A INPUT -i eth0 -j DROP

    注意要点:

    A、--limit-burst的值要比--limit的大

    B、limit本身没有丢弃数据包的功能,因此,需要第二条规则一起才能实现限速的功能

    2、time :在特定时间内匹配

    -m time 说明
    --monthdays day1[,day2] 在每个月的特定天匹配
    --timestart hh:mm:ss 在每天的指定时间开始匹配
    --timestop hh:mm:ss 在每天的指定时间停止匹配
    --weekdays day1[,day2] 在每个星期的指定工作日匹配,值可以是1-7

    例子:

    iptables -A INPUT -i eth0 -m time --weekdays 1,2,3,4 -jACCEPT

    iptables -A INPUT -i eth0 -j DROP

    3、ttl:匹配符合规则的ttl值的数据包

    参数 说明
    --ttl -eq 100 匹配TTL值为100的数据包
    --ttl -gt 100 匹配TTL值大于100的数据包
    --ttl -lt 100 匹配TTL值小于100的数据包

    例子:

    iptables -A OUTPUT -m ttl --ttl-eq 100 -j ACCEPT

    4、multiport:匹配离散的多个端口

    参数 说明
    --sports port1[,port2,port3] 匹配源端口
    --dports port1[,port2,port3] 匹配目的端口
    --ports port1[,port2,port3] 匹配源端口或目的端口

    例子:

    iptables -A INPUT -m multiport --sports 22,80,8080 -j DROP

    5、state:匹配指定的状态数据包

    参数 说明
    --state value value可以为NEW、RELATED(有关联的)、ESTABLISHED、INVALID(未知连接)

    例子:

    iptables -A INPUT -m state --state NEW,ESTABLISHED -j ACCEPT

    6、mark:匹配带有指定mark值的数据包

    参数 说明
    --mark value 匹配mark标记为value的数据包

    例子:

    iptables -t mangle -A INPUT -m mark --mark 1 -j DROP

    7、mac:匹配特定的mac地址

    例子:

    iptables -A FORWARD -m mac --mac-source 00:0C:24:FA:19:80 -j DROP

     

     

    展开全文
  • Linux下iptables 禁止端口和开放端口

    万次阅读 2018-08-07 11:57:51
    iptables 禁止端口和开放端口(转载) 1、关闭所有的 INPUT FORWARD OUTPUT 只对某些端口开放。 下面是命令实现: iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT DROP 再用命令 iptables ...

    iptables 禁止端口和开放端口(转载)

    1、关闭所有的 INPUT FORWARD OUTPUT 只对某些端口开放。
    下面是命令实现:

    iptables -P INPUT DROP
    iptables -P FORWARD DROP
    iptables -P OUTPUT DROP

    再用命令 iptables -L -n 查看 是否设置好, 好看到全部 DROP 了
    这样的设置好了,只是临时的, 重启服务器还是会恢复原来没有设置的状态
    还要使用 service iptables save 进行保存
    看到信息 firewall rules 防火墙的规则 其实就是保存在 /etc/sysconfig/iptables
    可以打开文件查看 vi /etc/sysconfig/iptables


    2、下面只打开22端口,就是下面2个语句

    iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT

    再查看下 iptables -L -n 是否添加上去, 看到添加了

    Chain INPUT (policy DROP)
    target     prot opt source               destination
    ACCEPT     tcp -- 0.0.0.0/0            0.0.0.0/0           tcp dpt:22

    Chain FORWARD (policy DROP)
    target     prot opt source               destination

    Chain OUTPUT (policy DROP)
    target     prot opt source               destination
    ACCEPT     tcp -- 0.0.0.0/0            0.0.0.0/0           tcp spt:22

    现在Linux服务器只打开了22端口,用putty.exe测试一下是否可以链接上去。
    可以链接上去了,说明没有问题。

    最后别忘记了保存 对防火墙的设置
    通过命令:service iptables save 进行保存

    iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
    针对这2条命令进行一些讲解吧
    -A 参数就看成是添加一条 INPUT 的规则
    -p 指定是什么协议,常用的tcp 协议,当然也有udp 例如53端口的DNS
    到时要配置DNS用到53端口,就会发现使用udp协议的

    而 --dport 就是目标端口 当数据从外部进入服务器为目标端口
    反之 数据从服务器出去 则为数据源端口 使用 --sport

    -j 就是指定是 ACCEPT 接收 或者 DROP 不接收
    3、禁止某个IP访问
    1台Linux服务器,2台windows xp 操作系统进行访问
    Linux服务器ip 192.168.1.99
    xp1 ip: 192.168.1.2
    xp2 ip: 192.168.1.8

    下面看看2台xp 都可以访问的

    192.168.1.2 这是 xp1 可以访问的,
    192.168.1.8 xp2 也是可以正常访问的。

    那么现在禁止 192.168.1.2 xp1 访问, xp2 正常访问,
    下面看看演示

    通过命令 iptables -A INPUT -p tcp -s 192.168.1.2 -j DROP
    这里意思就是 -A 就是添加新的规则, 怎样的规则呢? 由于访问网站使用tcp的,
    就用 -p tcp , 如果是 udp 就写udp,这里就用tcp了, -s就是 来源的意思,
    ip来源于 192.168.1.2 ,-j 怎么做 拒绝它 这里应该是 DROP

    好,看看效果。好添加成功。下面进行验证 一下是否生效

    一直出现等待状态 最后 该页无法显示 ,这是 192.168.1.2 xp1 的访问被拒绝了。

    再看看另外一台 xp 是否可以访问, 是可以正常访问的 192.168.1.8 是可以正常访问的
    4、如何删除规则
    首先要知道 这条规则的编号,每条规则都有一个编号

    通过 iptables -L -n --line-number 可以显示规则和相对应的编号
    num target     prot opt source               destination
    1    DROP       tcp -- 0.0.0.0/0            0.0.0.0/0           tcp dpt:3306
    2    DROP       tcp -- 0.0.0.0/0            0.0.0.0/0           tcp dpt:21
    3    DROP       tcp -- 0.0.0.0/0            0.0.0.0/0           tcp dpt:80
    多了 num 这一列, 这样就可以 看到刚才的规则对应的是 编号2

    那么就可以进行删除了
    iptables -D INPUT 2
    删除INPUT链编号为2的规则。

    再 iptables -L -n 查看一下 已经被清除了。
    5、过滤无效的数据包
    假设有人进入了服务器,或者有病毒木马程序,它可以通过22,80端口像服务器外传送数据。
    它的这种方式就和正常访问22,80端口区别。它发向外发的数据不是通过访问网页请求
    而回应的数据包。

    下面要禁止这些没有通过请求回应的数据包,统统把它们堵住掉。

    iptables 提供了一个参数 是检查状态的,下面来配置下 22 和 80 端口,防止无效的数据包。

    iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

    可以看到和以前使用的:
    iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
    多了一个状态判断。

    同样80端口也一样, 现在删掉原来的2条规则,
    iptables -L -n --line-number    这个是查看规则而且带上编号。看到编号就可以
    删除对应的规则了。

    iptables -D OUTPUT 1     这里的1表示第一条规则。

    当你删除了前面的规则, 编号也会随之改变。看到了吧。

    好,删除了前面2个规则,22端口还可以正常使用,说明没问题了

    下面进行保存,别忘记了,不然的话重启就会还原到原来的样子。

    service iptables save    进行保存。

    Saving firewall rules to /etc/sysconfig/iptables:          [ OK ]
    其实就是把刚才设置的规则写入到 /etc/sysconfig/iptables 文件中。
    6、DNS端口53设置
    下面来看看如何设置iptables来打开DNS端口,DNS端口对应的是53

    只开放22和80端口, 现在看看能不能解析域名。

    hostwww.google.com    输入这个命令后,一直等待,说明DNS不通

    出现下面提示 :
    ;; connection timed out; no servers could be reached

    ping 一下域名也是不通
    [root@localhost ~pingwww.google.com
    ping: unknown hostwww.google.com

    这里的原因就是 iptables 限制了53端口。

    有些服务器,特别是Web服务器减慢,DNS其实也有关系的,无法发送包到DNS服务器导致的。

    下面演示下如何使用 iptables 来设置DNS 53这个端口,如果你不知道 域名服务端口号,你

    可以用命令 : grep domain /etc/services

    [root@localhost ~grep domain /etc/services
    domain          53/tcp                          # name-domain server
    domain          53/udp
    domaintime      9909/tcp                        # domaintime
    domaintime      9909/udp                        # domaintime

    看到了吧, 一般使用 udp 协议。

    好了, 开始设置。。。

    iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
    这是 ping 一个域名,数据就是从本机出去,所以先设置 OUTPUT,按照ping这个流程来设置。

    然后 DNS 服务器收到发出去的包,就回应一个回来
    iptables -A INPUT -p udp --sport 53 -j ACCEPT

    同时还要设置
    iptables -A INPUT -p udp --dport 53 -j ACCEPT
    iptables -A OUTPUT -p udp --sport 53 -j ACCEPT

    好了, 下面开始测试下, 可以用 iptables -L -n 查看设置情况,确定没有问题就可以测试了

    [root@localhost ~iptables -L -n
    Chain INPUT (policy DROP)
    target     prot opt source               destination
    ACCEPT     tcp -- 0.0.0.0/0            0.0.0.0/0           tcp dpt:22
    ACCEPT     tcp -- 0.0.0.0/0            0.0.0.0/0           tcp dpt:80
    ACCEPT     udp -- 0.0.0.0/0            0.0.0.0/0           udp spt:53
    ACCEPT     udp -- 0.0.0.0/0            0.0.0.0/0           udp dpt:53

    Chain FORWARD (policy DROP)
    target     prot opt source               destination

    Chain OUTPUT (policy DROP)
    target     prot opt source               destination
    ACCEPT     tcp -- 0.0.0.0/0            0.0.0.0/0           tcp spt:22 state ESTABLISHED
    ACCEPT     tcp -- 0.0.0.0/0            0.0.0.0/0           tcp spt:80 state ESTABLISHED
    ACCEPT     udp -- 0.0.0.0/0            0.0.0.0/0           udp dpt:53
    ACCEPT     udp -- 0.0.0.0/0            0.0.0.0/0           udp spt:53

    可以测试一下 是否 DNS 可以通过iptables 了。

    [root@localhost ~hostwww.google.com
    www.google.comis an alias forwww.l.google.com.
    www.l.google.comis an alias for www-china.l.google.com.
    www-china.l.google.com has address 64.233.189.104
    www-china.l.google.com has address 64.233.189.147
    www-china.l.google.com has address 64.233.189.99

    正常可以解析 google 域名。

    ping 方面可能还要设置些东西。

    用 nslookup 看看吧

    [root@localhost ~nslookup
    >www.google.com
    Server:         192.168.1.1
    Address:        192.168.1.1#53

    Non-authoritative answer:
    www.google.comcanonical name =www.l.google.com.
    www.l.google.com        canonical name = www-china.l.google.com.
    Name:   www-china.l.google.com
    Address: 64.233.189.147
    Name:   www-china.l.google.com
    Address: 64.233.189.99
    Name:   www-china.l.google.com
    Address: 64.233.189.104

    说明本机DNS正常, iptables 允许53这个端口的访问。
    7、iptables对ftp的设置
    现在开始对ftp端口的设置,按照以前的视频,添加需要开放的端口
    ftp连接端口有2个 21 和 20 端口,现在添加对应的规则。

    [root@localhost rootiptables -A INPUT -p tcp --dport 21 -j ACCEPT
    [root@localhost rootiptables -A INPUT -p tcp --dport 20 -j ACCEPT
    [root@localhost rootiptables -A OUTPUT -p tcp --sport 21 -j ACCEPT
    [root@localhost rootiptables -A OUTPUT -p tcp --sport 20 -j ACCEPT

    好,这样就添加完了,用浏览器访问一下ftp,出现超时。

    所以刚才说 ftp 是比较特殊的端口,它还有一些端口是 数据传输端口,
    例如目录列表, 上传 ,下载 文件都要用到这些端口。

    而这些端口是 任意 端口。。。 这个 任意 真的比较特殊。

    如果不指定什么一个端口范围, iptables 很难对任意端口开放的,
    如果iptables允许任意端口访问, 那和不设置防火墙没什么区别,所以不现实的。

    那么的解决办法就是 指定这个数据传输端口的一个范围。

    下面修改一下ftp配置文件。

    这里使用vsftpd来修改演示,其他ftp不知道哪里修改,大家可以找找资料。

    [root@localhost rootvi /etc/vsftpd.conf

    在配置文件的最下面 加入

    pasv_min_port=30001
    pasv_max_port=31000

    然后保存退出。

    这两句话的意思告诉vsftpd, 要传输数据的端口范围就在30001到31000 这个范围内传送。

    这样们使用 iptables 就好办多了,们就打开 30001到31000 这些端口。

    [root@localhost rootiptables -A INPUT -p tcp --dport 30001:31000 -j ACCEPT
    [root@localhost rootiptables -A OUTPUT -p tcp --sport 30001:31000 -j ACCEPT

    [root@localhost rootservice iptables save

    最后进行保存, 然后再用浏览器范围下 ftp。可以正常访问

    用个账号登陆上去,也没有问题,上传一些文件上去看看。

    看到了吧,上传和下载都正常。。 再查看下 iptables 的设置

    [root@localhost rootiptables -L -n
    Chain INPUT (policy DROP)
    target     prot opt source               destination
    ACCEPT     tcp -- 0.0.0.0/0            0.0.0.0/0          tcp dpt:22
    ACCEPT     tcp -- 0.0.0.0/0            0.0.0.0/0          tcp dpt:21
    ACCEPT     tcp -- 0.0.0.0/0            0.0.0.0/0          tcp dpt:20
    ACCEPT     tcp -- 0.0.0.0/0            0.0.0.0/0          tcp dpts:30001:31000

    Chain FORWARD (policy DROP)
    target     prot opt source               destination

    Chain OUTPUT (policy DROP)
    target     prot opt source               destination
    ACCEPT     tcp -- 0.0.0.0/0            0.0.0.0/0          tcp spt:22
    ACCEPT     tcp -- 0.0.0.0/0            0.0.0.0/0          tcp spt:21
    ACCEPT     tcp -- 0.0.0.0/0            0.0.0.0/0          tcp spt:20
    ACCEPT     tcp -- 0.0.0.0/0            0.0.0.0/0          tcp spts:30001:31000

    这是我为了演示ftp特殊端口做的简单规则,大家可以添加一些对数据包的验证
    例如 -m state --state ESTABLISHED,RELATED 等等要求更加高的验证

     

    转自:http://hi.baidu.com/beijiqieys/item/5ee9bbcf94f0a712b67a24cf

    展开全文
  • yum install -y iptables iptables-services (2)查看状态等 ## 开机启动 systemctl enable iptables.service #开启服务 systemctl start iptables.service #查看状态 systemctl status iptables.service...
  • Iptables介绍和实用使用方法

    千次阅读 2018-05-20 17:39:29
     IPTABLES 是与最新的 3.5 版本 Linux 内核集成的 IP 信息包过滤系统,在redhat7.1 centos7.1以上都内置装有。2)---&gt; iptables 的最大优点是它可以配置有状态的防火墙,有四种有效状态,名称分别...
  • iptables

    2020-09-17 14:24:16
    配置与管理iptables防火墙 一、防火墙概述 1、什么是防火墙 防火墙通常具备以下几个特点。 1)位置权威性。 2)检测合法性。 3)性能稳定性。 2、防火墙的种类 1)包过滤防火墙 2)代理防火墙 3)状态检测技术 二、...
  • iptables-服务篇

    2019-06-13 12:38:23
    文章目录iptables help iptables help [root@localhost ~]# iptables --help iptables v1.4.7 Usage: iptables -[ACD] chain rule-specification [options] iptables -I chain [rulenum] rule-specification...
  • iPtables规则保存及加载等操作

    万次阅读 2017-12-09 13:10:55
    iptables(一)详细教程:基础、架构、清空规则、追加规则、应用实例 转载 2016年05月28日 23:35:20 2945  iptables防火墙可以用于创建过滤(filter)与NAT规则。所有Linux发行版都能
  • Iptables

    千次阅读 2019-09-06 16:53:42
    iptables介绍 linux的包过滤功能,即linux防火墙,它由netfilter 和 iptables 两个组件组成。 netfilter 组件也称为内核空间,是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则...
  • Iptables详解

    万次阅读 2017-08-30 11:48:21
    Iptabels是与Linux内核集成的包过滤防火墙系统,几乎所有的linux发行版本都会包含Iptables的功能。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则Iptables有利于在 Linux 系统上更...
  • linux系统中查看己设置iptables规则

    万次阅读 2016-07-13 14:20:27
    1、iptables -L 查看filter表的iptables规则,包括所有的链。filter表包含INPUT、OUTPUT、FORWARD三个规则链。 说明:-L是--list的简写,作用是列出规则。 2、iptables -L [-t 表名] ...
  • iptables防火墙 1、基本操作 # 查看防火墙状态 service iptables status # 停止防火墙 service iptables stop # 启动防火墙 service iptables start # 重启防火墙 service iptables restart # 永久关闭...
  • 使用 /sbin/iptables -F 要小心,搞不好,你就马上同服务器断开连接了   以下是来自 http://wiki.ubuntu.org.cn/IptablesHowTo 上的说明 可以通过/sbin/iptables -F清除所有规则来暂时停止...
  • CentOS7中执行service iptables start/stop会报错Failed to start iptables.service: Unit iptables.service failed to load: No such file or directory.在CentOS 7或RHEL 7或Fedora中防火墙由firewalld来管理,...
  • 在Linux下,使用ipteables来维护IP规则表。要封停或者是解封IP,其实就是在IP规则表中对入站部分的规则进行添加操作。 要封停一个IP,使用下面这条命令: ...iptables -D INPUT -s ***.***.***.*** -j DROP
  • iptables简介与常用命令

    万次阅读 2018-03-07 22:25:23
    1. iptables防火墙简介Iptables也叫netfilter是Linux下自带的一款免费且优秀的基于包过滤的防火墙工具,它的功能十分强大,使用非常灵活,可以对流入、流出、流经服务器的数据包进行精细的控制。iptables是Linux2.4...
  • 目前由于项目要求需要修复一些linux系统的漏洞,部分使用了iptables的功能,因此研究了一下iptables的原理,并讲述创建系统访问白名单的过程。 1.iptables的工作机制首先列出iptables在linux内核中涉及的五个位置: ...
  • nftables相比iptables到底改变了什么

    万次阅读 2017-01-07 11:05:44
    这不是一篇教你怎么可以配置nftables实现一个哪怕最简单防火墙的文章,我从来不写这种Howto,因为我...相反,这篇文章是一篇檄文,只为吹擂打鼓,目的是让你在无感于iptables的前提下爱上nftables。------------------
  • CentOS之——CentOS7安装iptables防火墙

    万次阅读 多人点赞 2016-03-02 14:45:20
    CentOS7默认的防火墙不是iptables,而是firewalle. 安装iptable iptable-service #先检查是否安装了iptables service iptables status #安装iptables yum install -y iptables #升级iptables yum update iptables #...
1 2 3 4 5 ... 20
收藏数 176,726
精华内容 70,690
关键字:

iptables