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)

  • 相关阅读:
    WCF、Net remoting、Web service概念及区别
    新浪微博技术架构分析
    谈SOA和云的分层架构
    开发人员眼中最好的代码编辑器是什么?
    调试脚本,远离alert
    struts2与cookie实现自动登录和验证码验证
    把旧的项目改变名称重新部署到tomcat下发现项目名称还是原来的项目名称,解决方案
    myeclipse2014 安装maven3.3.9和mave配置本地仓库
    mysql在表的某一位置增加一列、删除一列、修改列名
    Java实现对cookie的增删改查
  • 原文地址:https://www.cnblogs.com/embedded-linux/p/10323671.html
Copyright © 2011-2022 走看看