zoukankan      html  css  js  c++  java
  • iptables 工具

    iptables 工具

    参考文档:
     
    netfilter/iptabels应用程序,被认为是Linux中实现包过滤功能的第四代应用程序。
    netfilter/iptables包含在2.4以后的内核中,它可以实现FirewallNAT(网络地址转换)和数据包的分割等功能。
    netfilter工作在内核中,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集;
    iptables工作在用户态空间,它使插入、修改和除去信息包过滤表中的规则变得容易。
     
    iptables读取流入和流出数据包的报头,将它们与规则集(Rule set)相比较:
    1、将可接受的数据包从一个网卡转发至另一个网卡;
    2、对被拒绝的数据包,可以丢弃或按照所定义的方式来处理。
     
    根据规则所处理的信息包类型,可以将规则分组在链中:
    1、处理入站信息包的规则被添加到INPUT链中;
    2、处理出站信息包的规则被添加到OUTPUT链中;
    3、处理正在转发的信息包的规则被添加到FORWARD链中;
    这三个链是基本信息包过滤表中内置的缺省主链。另外,还有其他许多可用的链的类型(如PREROUTING和POSTROUTING),以及提供用户自定义的链。
    每个链都可以有一个策略,它定义“缺省目标”,也就是要执行的缺省操作,当信息包与链中的任何规则都不匹配时,执行此操作。
     
     
     
    iptables有多张table(如下),每个table又包含若干chains,每条chain是由一组rules构成;
    table name
    description
    operation
    filter (default)
    用于包过滤,包含 INPUT 、OUTPUT 和 FORWARD链
    ACCEPT、DROP、REJECT、LOG
    nat
    转换包的源或目的地址,包含 PREROUTING 、OUTPUT 和 POSTROUTING链
    SNAT、DNAT、MASQUERADE
    mangle
    包含一些规则来标记用于高级路由的信息包,包含 PREROUTING 、OUTPUT 链
    TOS、TTL、MARK
         
     
     
     
     
     
    以本地为目的的包
    step
    table
    chain
    comment
    1
     
     
    在 Internet线路上传输
    2
     
     
    进入网卡接口(如 eth0 )
    3
    mangle
    PREROUTING
     
    4
    nat
    PREROUTING
    这个链主要做 DNAT
    5
     
     
    路由判断,包是要转发还是送往本地
    6
    mangle
    INPUT
     
    7
    filter
    INPUT
    这里可以加过滤
    8
     
     
    到达本地的应用程序
      
     
    以本地为源的包
    step
    table
    chain
    comment
    1
     
     
    本地的应用程序
    2
     
     
    路由判断
    3
    mangle
    OUTPUT
     
    4
    nat
    OUTPUT
    这个链主要做 DNAT
    5
    filter
    OUTPUT
    这里可以加过滤
    6
    mangle
    POSTROUTING
     
    7
    nat
    POSTROUTING
    这个链主要做 SNAT
    8
     
     
    离开网卡接口(如 eth0 )
    9
     
     
    在 Internet线路上传输
      
     
    转发的包
    step
    table
    chain
    comment
    1
     
     
    在 Internet线路上传输
    2
     
     
    进入网卡接口(如 eth0 )
    3
    mangle
    PRETROUTING
     
    4
    nat
    PRETROUTING
    这个链主要做 DNAT
    5
     
     
    路由判断,包是要转发还是送往本地
    6
    mangle
    FORWARD
    特殊情况才使用
    7
    filter
    FORWARD
    转发的包会走该链,进行过滤
    8
    mangle
    POSTROUTING
    特殊情况才使用
    9
    nat
    POSTROUTING
    这个链主要做 SNAT
    10
     
     
    离开网卡接口(如 eth0 )
    11
     
     
    在 Internet线路上传输
      
     
     
    filter表
    INPUT链针对目的是本地的包;
    OUTPUT链过滤本地生成的包;
    FORWARD链过滤不是本地产生的,且目的地也不是本地的包(即转发的包);
     
    nat表
    属于一个流的包只会经过nat表一次,如果第一个包被允许做nat,其后的包会自动被做相同的处理;所以nat表不要做任何过滤操作;
    PREROUTING链的主要作用是包刚刚到达firewall时改变它的目的地址;
    POSTROUTING链的主要作用是包离开firewall时改变其源地址;
    OUTPUT链改变本地产生的包的目的地址;
     
    mangle表
    不建议在mangle表里做任何过滤;
     
     
     
    iptables 命令格式
     
    对来自某个源地址,到达某个目的地址或具有特定协议类型的信息包要做些什么指令、规则控制信息包的过滤,
    可以通过使用iptables系统提供的命令去建立这些规则,并将其添加到内核空间特定信息包过滤表内的链中。
     
    关于添加、去除、编辑规则的命令,一般语法如下:
    iptables [-t table] command [chain] [rules] [-j target]
     
    [-t table] :用来指明使用的表, 可以为: filter(缺省表), nat 和 mangle。 
     
    command 表明iptables命令要做什么,比如:
    -L <CHAIN>, -S <CHAIN>
    列出链中的所有规则;输出格式不同

    -I <CHAIN>, -A <CHAIN>
    插入一条规则,I此规则会作为链的第一条规则;A则会在最后一条

    -D <CHAIN> N, -D <CHAIN>
    删除一条规则,可以明确指明规则内容,也可以用N指出链中的第N条

    -F <CHAIN>, -Z <CHAIN>
    F清除链中的所有规则,不指明链,则清除所有链;Z则是只清除计数器,不清除规则

    -P <CHAIN>
    指定某条链的默认动作,ACCEPT、DROP或REJECT等
     
    chain 表明操作的链,例如INPUT、OUTPUT、FORWARD等;

    rules 匹配的包规则,同一条规则里的多个条件是“与”的关系,比如:

    -p, --protocol
    协议匹配,如 -p tcp

    -s, --src, --source
    来源匹配,如 -s 202.108.37.49

    -d, --dst, --destination
    目的匹配,如 -d 172.16.115.117

    -i, --in-interface
    入网卡接口匹配,如 -i eth0

    -o, --out-interface
    出网卡接口匹配,如 -o eth1

    --sport, --source-port
    来源端口匹配(tcp或udp),如 --sport 80;也可以用端口范围,如 --sport 135:139

    --dport, --destination-port
    目的端口匹配(tcp或udp),如 --dport 80;同样支持端口范围

    --tcp-flags
    tcp状态匹配,如 --tcp-flags RST RST

    -m mac --mac-source
    mac地址匹配,如 -m mac --mac-source 00:1E:C9:B0:53:D2

    -m multiport --source-port , --destination-port
    多端口匹配,如-m multiport --destination-port 80,443

    -m iprange
    简单的指定ip范围。用--src-range或--dst-range匹配,如 -m iprange --src-range 192.168.1.33-192.168.1.50

    -m time
    指定匹配时间(UTC),可以使用--datestart、--datestop、--timestart或--timestop等参数。如 -m time --datestart 2014-01-01T00:00:00 --datestop 2014-12-31T23:59:59 。注意时间是UTC时间。

     
    target: 是由规则指定的操作。 包括下面几种:
    -j ACCEPT:
    接收信息包(允许它前往目的地),并且将停止遍历chain;
     
    -j DROP
    默默丢弃包(对方不知道);
     
    -j REJECT
    拒绝包,会发RST明确通知对方拒绝;
     
    -j SNAT

    源地址转换,如 -j SNAT --to 61.135.152.194

    -j MASQUERADE
    类似SNAT,但是根据默认路由转换,适用于动态ip(不需要指明转换后的地址)

    -j DNAT
    进行目的地址转换,如 -j DNAT --to-destination 192.168.0.254

    -j REDIRECT
    (对于tcp和udp)进行端口重定向,如 -j REDIRECT --to-ports 8080

    此外还有, RETURN, LOG, MARK, MIRROR, MAQUERADE等。 
     
     
     
     
     
    应用场景
     
    1、查看已添加的规则
    iptables -L -n
    iptables -t nat -L
     
    2、保存
    /etc/rc.d/init.d/iptables save
     
    3、删除已添加的规则
    iptables -L -n --line-numbers
     
    4、清除已有的规则
    iptables -F          清除filter表的所有规则
    iptables -X          清除filter表中用户自定义的规则
    iptables -Z          
     
    5、开放指定的端口
    iptables -A INPUT -p tcp --dport 21 -j ACCEPT
      
    6、阻止一个IP连接本机
    iptables -t filter -A INPUT -s 192.168.1.5  -i eth0 -j DROP
      
    7、端口转发
    iptables -t nat -A PREROUTING -d 1.2.3.4 -p tcp -m tcp --dport 81 -j DNAT --to-destination192.168.0.2:8180
    iptables -t nat -A POSTROUTING -s 192.168.0.0/255.255.0.0 -d 192.168.0.2 -p tcp -m tcp --dport 8180 -j SNAT --to-source 192.168.0.1
     
    8、

    丢弃RST包

    iptables -I INPUT -p tcp --sport 80 --tcp-flags RST RST -j DROP

     
  • 相关阅读:
    [APIO2012]派遣
    Luogu_2774 方格取数问题
    Luogu4149 [IOI2011]Race
    Luogu_4886 快递员
    Loj_6282. 数列分块入门 6
    LOJ 6281 数列分块入门 5
    三维偏序 cdq
    【逆序对】 模板
    【luogu P1637 三元上升子序列】 题解
    【luogu P3609 [USACO17JAN]Hoof, Paper, Scissor蹄子剪刀布】 题解
  • 原文地址:https://www.cnblogs.com/chenny7/p/3922834.html
Copyright © 2011-2022 走看看