zoukankan      html  css  js  c++  java
  • Linux防火墙介绍和iptables常用命令

    一、Linux防火墙介绍
    IPTABLES由四个表(raw表、mangle表、nat表、filter表)和五个链(INPUT链、OUTPUT链、FORWARD链、PREROUTING链、POSTROUTING链)组成。
    1、规则表分为以下4种
    1)filter表:用来对数据包进行过滤,表内包含三个链,即:INPUT,FORWARD,OUTPUT
    2)Nat表:nat表主要用来修改数据包的ip地址、端口号等信息。包含三个链,即PREROUTING,POSTROUTING,OUTPUT
    3)Mangle表:用来修改数据包的TOS、TTL,或者为数据包设置MARL标记,实现流量×××,策略路由等高级应用,包含五个链,PREROUTING,POSTROUTING,INPUT,OUTPUT,FORWARD
    4)Raw表:用来决定是否对数据包进行状态跟踪,包含两个链:即OUTPUT,PREROUTING

    2、规则链分为以下5种
    1)INPUT链:当收到访问防火墙本机地址的数据包(入站),应用此链中的规则。
    2)OUTPUT链:当防火墙本机向外发送数据包(出站)时,应用此链中的规则。
    3)FORWARD链:当收到需要通过防火墙中转发送给其他地址的数据包(转发)时,应用此链中的规则。
    4)PREROUTING链:在对数据包做路由选择之前,应用此链中的规则。
    5)POSTROUTING链:在对数据包做路由选择之后,应用此链中的规则。

    3、数据包过滤的匹配流程
    1)规则表的顺序
    当数据包抵达防火墙时,将依次应用raw表,mangle表,nat表和filter表中对应链内的规则,应用顺序为raw-mangle-nat-filter

    2)规则链之间的顺序
    A、入站数据流向:来自外界的数据包到达防火墙后,首先被PRETOUTING链处理,然后进行路由选择,如果数据包的目标地址是防火墙本机,那么内核将其传递给INPUT链进行处理,通过以后再讲给系统的上层应用程序进行响应。

    B、转发数据流向:来自外界的数据包到达防火墙后,首先被PREROUTING链处理,然后再进行路由选择,如果数据包的目的地址是其他外部的地址,则内核将其传递给FORWARD链进行处理,最后交给POSTROUTING链进行处理。

    C、出站数据流向:防火墙本机向外部地址发送的数据包,首先被OUTOUT处理,然后进行路由选择,再交给POSTROUTING链进行处理。

    3)规则链内部各条防火墙规则之间的顺序
    当数据包经过每条规则链时,依次按第一条规则,第二条规则......的顺序进行匹配和处理,链内的过滤遵循“匹配即停止”的原则,一旦找到一条相匹配的规则,则不再检查本链内后续的其它规则,如果比对完整个链,也找不到与数据包相匹配的规则,就按照规则链的默认策略进行处理。


    二、IPTABLES执行规则顺序
    iptables执行规则时,是从规则表中从上至下顺序执行的,如果没遇到匹配的规则,就一条一条往下执行,如果遇到匹配的规则后,那么就执行本规则, 执行后根据本规则的动作(accept, reject, log等),决定下一步执行的情况,后续执行一般有三种情况。
    1)一种是继续执行当前规则队列内的下一条规则。比如执行过Filter队列内的LOG后,还会执行Filter队列内的下一条规则.
    2)一种是中止当前规则队列的执行,转到下一条规则队列。比如从执行过accept后就中断Filter队列内其它规则,跳到nat队列规则去执行.
    3)一种是中止所有规则队列的执行.

    iptables 是采用规则堆栈的方式来进行过滤,当一个封包进入网卡,会先检查 Prerouting,然后检查目的 IP 判断是否需要转送出去,接着就会跳到 INPUT 或 Forward 进行过滤,如果封包需转送处理则检查 Postrouting,如果是来自本机封包,则检查 OUTPUT 以及 Postrouting。过程中如果符合某条规则将会进行处理,处理动作除了 ACCEPT、REJECT、DROP、REDIRECT 和 MASQUERADE 以外,还多出 LOG、ULOG、DNAT、SNAT、MIRROR、QUEUE、RETURN、TOS、TTL、MARK 等,其中某些处理动作不会中断过滤程序,某些处理动作则会中断同一规则炼的过滤,并依照前述流程继续进行下一个规则炼的过滤(注意:这一点与 ipchains 不同),一直到堆栈中的规则检查完毕为止。透过这种机制所带来的好处是,我们可以进行复杂、多重的封包过滤,简单的说,iptables 可以进行纵横交错式的过滤(tables)而非炼状过滤(chains)。

    ACCEPT:将封包放行,进行完此处理动作后,将不再比对其它规则,直接跳往下一个规则炼(nat:postrouting)

    REJECT:拦阻该封包,并传送封包通知对方,可以传送的封包有几个选择:ICMP port-unreachable、ICMP echo-reply 或是 tcp-reset(这个封包会要求对方关闭联机),进行完此处理动作后,将不再比对其它规则,直接 中断过滤程序。 范例如下:
    iptables -A FORWARD -p TCP --dport 22 -j REJECT --reject-with tcp-reset

    DROP  :丢弃封包不予处理,进行完此处理动作后,将不再比对其它规则,直接中断过滤程序。

    REDIRECT:将封包重新导向到另一个端口(PNAT),进行完此处理动作后,将会继续比对其它规则。 这个功能可以用来实作通透式 porxy 或用来保护 web 服务器。例如:iptables -t nat -A PREROUTING -p tcp ——dport 80 -j REDIRECT ——to-ports 8080


    三、IPTABLES规则介绍
    1、增加一条规则

    iptables [-AI 链名] [-io 网络接口] [-p 协议] [-s 来源IP/网域] [-d 目标IP/网域] -j [ACCEPT|DROP|REJECT|LOG]
    -A :新增一条规则,该规则增加在规则的最后面。
    -I :插入一条规则,如果没有指定此规则的顺序,默认是插入成第一条规则。
    -io:网络接口,设定封包进出的接口规范。
    -i :封包所进入的那个网络接口,例如 eth0, lo 等接口。需与 INPUT 链配合。
    -o :封包所传出的那个网络接口,需与 OUTPUT 链配合。
    -p :协定,设定此规则适用于哪种封包格式。主要的封包格式有:tcp, udp, icmp 及 all。
    -s :来源 IP/网域:设定此规则之封包的来源项目,可指定单纯的 IP 或包括网域,例如:
      IP :192.168.0.100
      网域:192.168.0.0/24, 192.168.0.0/255.255.255.0 均可。
      若规范为『不许』时,则加上 ! 即可,例如:-s ! 192.168.100.0/24 表示不许 192.168.100.0/24 之封包来源;
    -d :目标 IP/网域:同 -s ,只不过这里指的是目标的 IP 或网域。
    -j :后面接动作,主要的动作有接受(ACCEPT)、丢弃(DROP)、拒绝(REJECT)及记录(LOG)

    2、删除一条规则

    iptables -D INPUT [line-number]

    -D :删除一条规则。

    通常使用:iptables -nL --line-numbers,显示规则及序号,然后通过前面的序号来删除。
    注意:每删除一条规则后,它后面的规则的序号是会改变的。

    3、查看iptables情况

    -L :list, 列出指定鏈上的所有规则,本选项须置后。
    -n :numberic,以数字格式显示地址和端口号。
    -v :verbose,详细信息。
    -vv:更详细。
    -x :exactly,显示计数器结果的精确值,而非单位转换后的易读值。
    --line-numbers:显示规则的序号。

    常用组合:

    --vnL
    --vvnxL --line-numbers

     

    四、常用命令
    1、屏蔽某个IP地址

    iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP

    注意需要将上述的 XXX 改成要屏蔽的实际 IP 地址,其中的 -A 参数表示在 INPUT 链的最后追加本条规则。(IPTables中的规则是从上到下匹配的,一旦匹配成功就不再继续往下匹配)

    2、使用Multiport控制多端口

    iptables -A INPUT -p tcp -m multiport --dports 22,80,443 -j ACCEPT

    3、在规则中使用 IP 地址范围

    iptables -A OUTPUT -p tcp -d 192.168.100.0/24 --dport 22 -j ACCEPT

    4、配置端口转发

    iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 2525

    上述命令会将所有到达 eth0 网卡 25 端口的流量重定向转发到 2525 端口。

    5、屏蔽HTTP服务Flood攻击

    iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT

    上述命令会将连接限制到每分钟 100 个,上限设定为 200。

    6、禁止PING

    iptables -A INPUT -p icmp -i eth0 -j DROP

    7、允许访问回环网卡

    iptables -A INPUT -i lo -j ACCEPT
    iptables -A OUTPUT -o lo -j ACCEPT

    环回访问(127.0.0.1)是比较重要的,建议都开放。

    8、限制并发连接数

    iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT

    以上规则限制每客户端不超过 3 个连接。

    9、清空IPtables规则

    iptables -F
    iptables -F INPUT
    
    #要清空特定的表可以使用 -t 参数进行指定,例如:
    iptables -t nat -F

    10、丢弃无效数据包

    iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

    11、屏蔽邮件发送规则

    iptables -A OUTPUT -p tcp --dports 25,465,587 -j REJECT

    12、阻止连接到某块网卡

    iptables -A INPUT -i eth0 -s xxx.xxx.xxx.xxx -j DROP

    13、限制某个IP(网段/某段IP)连接指定端口

    iptables -I INPUT -s 192.168.20.0/24 -p tcp -d 192.168.20.40 --dport 3008 -j ACCEPT

    14、配置完规则后记得:保存和重启

    service iptables save
    service iptables restart

    15、通过字符串实现URL过滤 

    iptables -I OUTPUT -p tcp -m string --string "myqcloud.com" --algo bm -j ACCEPT

      

    注:CentOS中iptables存在位置:/etc/sysconfig/iptables

     

    欢迎关注我的公众号:云栖语,不一样的研发视界。
    云栖语微信公众号:change-1978
  • 相关阅读:
    《仔仔细细分析Ext》 第N2章 GridPanel的小难点 第一节 每条数据后面跟随几个操作按钮
    TextField输入验证
    Ext.FormPanel 及控件横排显示
    备份
    重写
    this关键字
    TestCircle程序分析
    java方法重载
    static关键字
    super关键字
  • 原文地址:https://www.cnblogs.com/hunttown/p/13572429.html
Copyright © 2011-2022 走看看