linux防火墙 四表五链 语法规则

linux防火墙

 linux防火墙是linux内核的一个功能,iptables(管理工具)

结构:
    四个表五个链

raw表   连接跟踪表     不常用,跟踪记录连接情况      PREROUTING  OUPUT

mangle表    矫正表     不常用,策略路由、QOS限速使用的  5个链都有

nat表    地址转换表    比较常用, SNAT   DNAT    PREROUTING POSTROUTING OUTPUT

filter表   过滤表      经常用  过滤数据包使用的  INPUT  OUTPUT   FORWARD

5链

INPUT:接收,发送方不一定是你,但接收方一定是你

OUTPUT:发送,接收方不一定是你,但发送方一定是你

FORWARD:转发,接收及发送方全都不是你

PREROUTING:路由前时,指代在决定去向前处理

POSTROUTING:路由后时,指代在决定去向后处理


表的优先级

raw  -----》   mangle  -------》  nat  -------- filter


数据包走向:
1、入站

RAW:PREROUTING---》MANGLE:PREROUTING---》NAT:PREROUTING---》路由选择---》MALGLE:INPUT---》FILTER:INPUT

2、出站

路由选择---》RAW:OUPUT---》MALGLE:OUTPUT---》NET:OUTPUT---》FILTER:OUTPUT---》MANGLE:POSTROUTING---》NET:POSTROUTING

3、过路包

RAW:PREROUTING---》MANGLE:PREROUTING---》NAT:PREROUTING---》路由选择---》MANGLE:FORWARD---》FILTER :FORWARD --->MANGLE:POSTROUTING---》NET:POSTROUTING


iptables

语法: iptables -t(指定表名) 表名 命令 链命 [n]  过滤规则 -j(指定动作) 动作
    -t:table,指定表,filter nat raw 。。。。。如果未指定,*****默认是filter

    命令:
        -A:append,追加一条规则,添加为规则列表中最后一条规则
        -D:删除一条规则,后面跟数字n表示删除的规则为第n条规则
        -I:insert ,插入一条规则,后面跟数字n表示插入的规则为第n条规则
        -L:列出表中的规则,******默认是filter表 --list 配合-t使用,指定查看的表
        -N:创建自定义链(一般很少用)
        -P: --policy:定义默认策略
            iptables -t 表 -P (链) [ACCEPT DROP]
        -F:--flush:删除表中所有规则
        -X:删除自定义链
        -R:--replace 替换规则,结合n使用
        n:一个数字,常配合 -I -D -R 使用    
        -n:不进行IP与hostname的反解。将服务使用的端口号来显示
        -v:列出详细信息,包括通过该规则的数据包的总数、计数器
        --line-number:显示行号

    动作:用于指定能够匹配规则的数据包要执行的动作,处理动作有:ACCEPT、REJECT、DROP、MASQUERADE、LOG、DNAT、SNAT
    ACCEPT:(接受)放行符合规则的数据包,进行完此处理动作后将不再匹配其他规则,直接跳到下一个规则链
    REJECT:(拒绝,告诉来源)拒绝符合规则的数据包,并传送封包给对方,可以传送的封包有几个选择:icmp port-unreachable、icmp echo-reply或是tcp-reset(这个封包会要求对方关闭连接),进行完此处理动作后,将不再匹配其他规则,直接中断过滤程序
    DROP:(丢弃)丢弃符合规则的数据包,进行完此动作后将不再匹配其他规则,直接中断过滤程序
    LOG:将匹配的数据包的信息记录到/var/log中,详细存放位置请参考/etc/rsyslog.conf中的设置。进行完此动作后,继续匹配其他规则
    
    DNAT:目标地址转换,用在PREROUTING链
    
    SNAT:源地址转换,用在POSTROUTING链  --to-source 指定IP
    
    MASQUERADE:伪装,用在源地址转换即POSTROUTING链


    过滤规则(网卡、协议、源地址、目的地址、源端口、目的端口)
    
    -i|o 指定网络接口(interface) 设置数据包出入口
        -i:数据包入接口,需要与INPUT链配合
        -o:数据包出接口,需要与OUPUT链配合
    -p 协议:设置此规则使用的协议 tcp、udp、icmp(ping)、udplite、esp、ah  or   all
    
    -s :来源IP、网段  192.168.1.1/32   192.168.1.0/24    !表示取反 !-s 192.168.1.1/32  代表除了1.1之外所有  
    -d:目的IP、网段

    --sport 源端口      要使用必须有-p 并且在-p后面
    --dport 目的端口

规则顺序的重要性
    自上而下逐条规则依次匹配
    一旦匹配成功就不再继续往下匹配(LOG动作除外)
    如果都匹配不上,遵循默认规则

清除规则
语法:iptables [-t table] [-FXZ]
-F:清除所有已制定的规则
-X:清除用户“自定义”的链
-Z:将所有的链的计数器与流量统计归零
注意:上述三个命令会将本机防火墙的所有规则清除,但不会改变默认策略(policy)!


iptables

服务管理 /etc/init.d/iptables start/stop/restart......
服务自启动  chkconfig  iptables on/off  

ip6tables

save 执行完保存之后

规则保存在、/etc/sysconfig/iptables


    高级匹配规则(基于数据包状态来判断)

    -m 指定高级参数

        state 数据包的状态
            --state 指定匹配数据包状态(NEW ESTABLISHED INVALID  RELATED)
            NEW:当tcp连接时 发送的第一个包  (SYN位被设置为1)状态就是NEW
            ESTABLISHED:传输数据的状态
            INVALID:无效的数据包
            RELATED:表示该数据包属于某个已经建立的链接所建立的新链接,eg ftp-data链接必定是源自某个ftp链接
    例子:iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
          iptables -A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT
        
        icmp icmp数据包
            --icmp-type  icmp数据包类型
            echo-request 请求
            echo-reply   应答
    例子:iptables -A INPUT -p icmp -m icmp --icmp-type echo-request -j DROP

        multiport 多端口
            --sport 源
            --dport 目的

    例子:iptables -A INPUT -p tcp -s 192.168.20.3 -m multiport --sport 111,222,3333,4444,50000:50010 -j DROP
                
        iprange 指定IP范围
            --src-range  源IP范围
            --dst-range  目的IP范围

    例子:iptables -A INPUT -m iprange --src-range 192.168.20.1-192.168.20.249 -j DROP


        connlimit 限定连接数  (established的数量)
            --connlimit-above n 限定链接数量
    
    例子:iptables -A INPUT -s 192.168.20.250 -m connlimit --connlimit-above 3 -j REJECT(限制同时最多3个链接)

        limit 限定网速
            --limit (指定一秒通过的数据包数量)
        eg:-m limit --limit 100/second  MTU 1500    150000B/s  146.48Kb/换成带宽  1171.84K 

    例子:iptables -A OUTPUT -s 192.168.1.0/24 -m limit --limit 100/second -j ACCEPT
          iptables -A OUTPUT -s 192.168.1.0/24 -j DROP  
            
            --limit-burst (计数器)
        
    例子:iptables -A OUPUT -s 192.168.1.0/24 -m limit --limit 100/second --limit-burst 300 -j ACCEPT
            第一个包到第300不限速通过,第301包按照100包每秒的规则通过
        iptables -A OUTPUT -s 192.168.1.0/24 -j DROP

        mac 网卡的物理地址

            --mac-source 匹配源mac地址(只能用在进来的包)
    例子: iptables -A INPUT -m mac --mac-source aa:bb:cc:dd:ff:gg
        
        tos 匹配服务类型
            --tos
            0x10  最小延迟的
            0x08  最大吞吐量
            0x04  可靠性要求
            0x02  最小代价
            0x00  一般服务
    例子: iptables -A INPUT -p tcp -m tos --tos 0x10 -j DROP

        ttl 匹配数据包的生存时间

            --ttl
    例子:iptables -A INPUT -p tcp -m ttl --ttl 69 -j DROP
        
        

iptables -A INPUT -p icmp -j ACCEPT 
iptables -A INPUT -i lo -j ACCEPT 
iptables -A INPUT -p tcp   -s 192.168.180.0/24 --dport 22 -j ACCEPT 
iptables -A INPUT -p tcp  --dport 46846 -j ACCEPT 
iptables -A INPUT -p tcp  -s 192.168.180.0/24 --dport 80 -j ACCEPT 

实例:


# Generated by iptables-save v1.4.7 on Fri Mar 31 18:30:24 2017
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [42:3886]

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -p icmp -j ACCEPT 
-A INPUT -i lo -j ACCEPT 
-A INPUT -p tcp -m state --state NEW -m tcp -s 192.168.180.0/24 --dport 22 -j ACCEPT 
-A INPUT -p tcp -m state --state NEW -m tcp --dport 46846 -j ACCEPT 
-A INPUT -p tcp -m state --state NEW -m tcp -s 192.168.180.0/24 --dport 80 -j ACCEPT 
-A INPUT -j REJECT --reject-with icmp-host-prohibited 
-A FORWARD -i bond0 -o eth4 -j ACCEPT
-A FORWARD -i eth4 -o bond0 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited 
COMMIT
# Completed on Fri Mar 31 18:30:24 2017
# Generated by iptables-save v1.4.7 on Fri Mar 31 18:30:24 2017
*nat
:PREROUTING ACCEPT [99:7667]
:POSTROUTING ACCEPT [1:108]
:OUTPUT ACCEPT [1:108]
-A POSTROUTING -s 192.168.180.0/24 -o eth4 -j SNAT --to-source 223.223.184.131 
COMMIT
# Completed on Fri Mar 31 18:30:24 2017

你可能感兴趣的:(Linux运维-初级)