zoukankan      html  css  js  c++  java
  • iptables用法

    一. iptables简述

    防火墙的作用就在于对经过的报文匹配(match)“规则”(rules),然后执行对应的“动作”(target)。

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

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

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

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

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

    iptables运行在用户态,用户制定防火墙规则;netfilter运行与内核空间,规则存储在内核空间的信息包过滤表中。用户空间的iptables制定相应的规则策略控制内核空间的netfilter处理相应的数据访问控制。

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

    二. iptables规则

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

    表介绍(table

    filter表:负责过滤功能,确认是否放行该数据包;内核模块:iptables_filter

    nat表:网络地址转换功能,修改数据包中的源、目标IP或端口;内核模块iptables_nat

    mangle表:拆解报文、做出修改,并重新封装,为数据包设置标记;iptable_mangle

    raw表:确认是否对该数据包进行状态追踪,关闭nat表上启动的连接追踪机制;iptable_raw

    security表:是否定义强制访问控制规则(MAC)。

    规则表的优先级:raw->mangle->nat->filter

    链介绍(chain)

    PREROUTING链:在进行路由选择前处理数据包,判断目标主机

    INPUT:处理入栈数据包

    OUTPUT:处理出栈数据包

    FORWARD:处理转发数据包(主要是将数据转发到本机其他网卡设备)

    POSTROUTING链:在进行路由选择后处理数据包,判断经由哪一个接口送往下一跳

     

    制定iptables规则的思路:

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

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

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

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

    三. iptables命令

    iptables/ip6tables - administration tool for IPv4/IPv6 packet filtering and NAT

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

    不指定表名时,默认表示filter表;

    不指定链名时,默认表示该表内所有链;

    除非设置规则链的缺省策略,否则需要指定匹配条件。

     

           iptables [-t table] {-A|-C|-D} chain rule-specification
    
           ip6tables [-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]

    1. 管理选项

    管理选项-规则管理

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

    -C, --check chain rule-specification:确认匹配规则是否在存在chain中

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

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

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

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

    管理选项-规则显示

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

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

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

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

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

    管理选项-链管理

    -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),增加的规则应该是相反的,需要特殊处理的。

    2. 条件匹配

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

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

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

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

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

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

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

    -d 指定目的地址

    -i 输入接口

    -o 输出接口

    ! 取反

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

    -p tcp

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

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

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

    -p udp

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

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

    --icmp-type

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

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

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

    man iptables-extensions查看具体用法

    包含multiport(多端口),iprange,time,string,connlimit,limit,state(数据报文状态:INVALID,ESTABLISHED,NEW,RELATED,UNTRACKED)。

    3.处理动作

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

    ACCEPT:允许数据包通过

    DROP:直接丢弃数据包,不给出任何回应信息,这时客户端会感觉请求丢失了,过了超时时间才会有反应。

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

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

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

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

    REDIRECT:端口重定向,在本机做端口映射。

    MARK:做防火墙标记

    DNAT:目标地址转换

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

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

    四. iptables应用

    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

    6. 查看本机关于iptables的设置情况

    iptables -L -n

    7.有线端口接收到数据包转发到无线端口wlan0后发送出去

    iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o wlan0 -j MASQUERADE

    五. iptables系列工具

    iptables

    用于建立,维护和检查Linux内核中IP包过滤规则的表格。

    iptables-restore

    用于从STDIN指定的数据恢复IP表。 使用shell提供的I/O重定向从文件读取。

    iptables-save

    用于将IP表的内容以易于解析的格式转储到STDOUT。 使用shell提供的I / O重定向写入文件。

    iptables-xml

    用于将iptables-save的输出转换为XML格式。 使用iptables.xslt样式表将XML转换回iptables-restore的格式。

    iptables-apply

    更安全的方式来远程更新iptables。

    ip6tables*

    是一组用于并行上述iptables命令的IPV6命令。

    nfsynproxy

    (可选)配置工具。 在这种情况下,SYNPROXY目标可以处理大型SYN洪水,而不会造成连接跟踪造成的大量性能损失。

    xtables-multi

    是一个二进制,它的行为是根据它所调用的名字。

    六. 防火墙REJECT和DROP区别和选择

    Linux防火墙内的策略动作有REJECT和DROP两种,区别如下

    1.、REJECT动作会返回一个拒绝(终止)数据包(TCP FIN或UDP-ICMP-PORT-UNREACHABLE),明确的拒绝对方的连接动作。连接马上断开,Client会认为访问的主机不存在。

    REJECT在IPTABLES里面有一些返回参数,参数如下:ICMP port-unreachable、ICMP echo-reply 或是 tcp-reset(这个封包会要求对方关闭联机),进行完此处理动作后,将不再比对其它规则,直接中断过滤程序。

    2、DROP动作只是简单的直接丢弃数据,并不反馈任何回应。需要Client等待超时,Client才发现自己被防火墙所阻挡。

     至于使用DROP还是REJECT更合适一直未有定论,因为的确二者都有适用的场合

    1、REJECT是一种更符合规范的处理方式,并且在可控的网络环境中,更易于诊断和调试网络/防火墙所产生的问题;

    2、DROP则提供了更高的防火墙安全性和稍许的效率提高,但是由于DROP不很规范(不很符合TCP连接规范)的处理方式,可能会对你的网络造成一些不可预期或难以诊断的问题。因为DROP虽然单方面的中断了连接,但是并不返回任何拒绝信息,因此连接客户端将被动的等到tcp session超时才能判断连接是否成功,这样在企业内部网络中会有一些问题,例如某些客户端程序或应用需要IDENT协议支持(TCP Port 113, RFC 1413),如果防火墙未经通知的应用了DROP规则的话,所有的同类连接都会失败,并且由于超时时间,将导致难以判断是由于防火墙引起的问题还是网络设备/线路故障。

    注:在部署防火墙时,如果是面向企业内部(或部分可信任网络),那么最好使用更绅士REJECT方法,对于需要经常变更或调试规则的网络也是如此;而对于面向危险的Internet/Extranet的防火墙,则有必要使用更为粗暴但是安全的DROP方法,可以在一定程度上延缓黑客攻击的进度(和难度,至少,DROP可以使他们进行TCP-Connect方式端口扫描时间更长)。

    参考:

    1.  iptables 从入门到应用

    2.  iptables详解:iptables概念

    3.    netfiler/iptables

    4.  Ubuntu 16.04中iptables的工具简介(iptables/iptables-restore/iptables-xml/iptables-apply/iptables-save)

  • 相关阅读:
    2020年. NET Core面试题
    java Context namespace element 'component-scan' and its parser class ComponentScanBeanDefinitionParser are only available on JDK 1.5 and higher 解决方法
    vue 淡入淡出组件
    java http的get、post、post json参数的方法
    vue 父子组件通讯案例
    Vue 生产环境解决跨域问题
    npm run ERR! code ELIFECYCLE
    Android Studio 生成apk 出现 :error_prone_annotations.jar (com.google.errorprone:error) 错误
    记忆解析者芜青【总集】
    LwIP应用开发笔记之十:LwIP带操作系统基本移植
  • 原文地址:https://www.cnblogs.com/embedded-linux/p/10323671.html
Copyright © 2011-2022 走看看