iptables的基本使用

四表五链

四表
    filter表——过滤数据包(确定是否放行数据包)
    Nat表——用于网络地址转换(IP、端口)(修改数据包的源/目标地址或端口)
    Mangle表——修改数据包的服务类型、TTL、并且可以配置路由实现QOS(为数据包设置标记)
    Raw表——决定数据包是否被状态跟踪机制处理(确定是否对数据包进行状态跟踪)

    五链
    INPUT链——进来的数据包应用此规则链中的策略
    OUTPUT链——外出的数据包应用此规则链中的策略
    FORWARD链——转发数据包时应用此规则链中的策略
    PREROUTING链——对数据包作路由选择前应用此链中的规则(所有的数据包进来的时侯都先由这个链处理)
    POSTROUTING链——对数据包作路由选择后应用此链中的规则(所有的数据包出来的时侯都先由这个链处理)

包过滤匹配流程

    规则顺序对比,匹配则停止(LOG除外),没有匹配按默认规则处理。
    表之间的顺序:
    raw ——> mangle ——> net ——> filter
    链之间的顺序
    入站:PREROUTING ——> INPUT
    出站:OUTPUT ——> POSTROUTING
    转发:PREROUTING ——> FORWARD ——> POSTROUTING

目标动作:

    ACCEPT  允许通过
    DROP    直接丢弃,不给出任何回应
    REJECT  拒绝通过,会给出提示
    LOG 记录日志(匹配则停止规则的唯一例外)

iptables常用选项

    添加规则
                -A 在链的末尾追加一条规则
                -I 在链的开头或者指定序号插入一条规则
    查看规则
                -L 列出所有规则
                -n 以数字形式显示地址、端口等信息
                --line-numbers 显示规则的序号(iptables -nL --line)
    删除规则
                -D 删除指定序号的一条规则
                -F 清空所有的规则
    默认策略
                -P 为指定的链设置默认规则

iptables基本匹配条件

    通用匹配
            协议匹配 -p 协议名
            地址匹配 -s 源地址、-d 目标地址
            接口匹配 -i 接收数据的网卡、-o 发送数据的网卡
    隐含匹配
            端口匹配 --sport 源端口、-dport目标端口
            ICMP类型匹配 --icmp-type ICMP类型
            TCP标记匹配 --tcp-flags 检查哪些位被设置
    扩展匹配
            状态匹配 -m state --state状态值
            MAC地址匹配 -m mac --mac-source MAC地址
            多端口匹配  -m multiport --sports 源端口列表
                       -m multiport --dports 目标端口列表
            IP范围匹配  -m iprange --src-range IP1-IP2
                       -m iprange --dst-range IP1-IP2

扩展匹配的状态跟踪机制

 网络连接的物种状态:
 NEW   请求建立连接的包,完全陌生的包。
 ESTABLISHED   将要或已经建立连接的包。
 RELATED   与已知某个连接相关联的包。
 INVALID   无对应连接,以及连接无效的包。
 UNTRACKED   未跟踪状态包。         

开启内核路由转发功能

    sysctl -w net.ipv4.ip_forward=1
     或者
     echo 1 > /proc/sys/net/ipv4/ip_forward

iptables基本使用示例

iptables [-t 表名] 选项 [链名] [条件] [-j目标动作]
    不指定表默认为filter表
    不指定链默认为所有链

设置默认规则

    所有链初始默所有规则为ACCEPT
    iptables -t filter -P INPUT DROP(设置为默认拒绝所有,此规则慎用......)

主机防护,针对入站访问的源地址

    iptables -A INPUT -s 172.30.1.53 -j DROP
    iptables -A INPUT -s 192.168.1.0/24 -j DROP

网络防护,针对转发访问的原地址

    iptables -A FORWARD -s 172.30.1.53 -i eth1 -j DROP 
    iptables -A FORWARD -s 192.168.1.0/24 -i eth1 -j DROP

允许特定的IP访问80端口

    iptables -A INPUT -s 172.30.1.53 -p tcp --dport 80 -j ACCEPT  
    iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 80 -j ACCEPT  

允许所有访问80端口

    iptables -A INPUT -p tcp --dport 80 -j ACCEPT

拒绝所有访问80端口

    iptables -A INPUT -p tcp --dport 80 -j DROP

插入一条规则在第二行 (如果不指序号,则默认插入到第一行)

    iptables -I INPUT 2 -p tcp --dport 22 -j ACCEPT

删除第二行

    iptables -D INPUT 2

禁ping策略限制

禁止其他主机ping本机

    iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
    iptables -A INPUT -p icmp ! --icmp-type echo-request -j ACCEPT 

允许本机ping其他主机

    iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
    iptables -A OUTPUT -p icmp ! --icmp-type echo-request -j DROP 

丢弃陌生的TCP响应包

    iptables -A INPUT -m state --state NEW -p tcp ! --syn -j DROP 
    iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP 

识别FTP数据连接,

    iptables -A FORWARD -d 172.30.1.53 -p tcp --dport 20:21 -j ACCEPT  
    iptables -A FORWARD -s 172.30.1.53 -p tcp --dport 20:21 -j ACCEPT 

针对FTP被动模式

    iptables -A FORWARD -d 172.30.1.53 -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A FORWARD -s 172.30.1.53 -m state --state ESTABLISHED,RELATED -j ACCEPT

根据MAC地址封锁主机

     iptables -A INPUT -m mac --mac-source 00:0C:29:74:BE:21 -j DRIP

一条规则开放多个端口

     iptables -A INPUT -p tcp -m multiport --dports 20:25,80,110,143,3306,10051, -j ACCEPT 
     (21:25 代表21到25 冒号表示连续 ,21,25代表 21和25 逗号则为分隔符 )

根据IP范围封锁主机

     iptables -A INPUT -p tcp --dport 3306 -m iprange --src-range 192.168.1.10-192.168.1.20 -j DROP

NAT 防火墙,

需要打开内核 ip 转发 (sysctl -w net.ipv4.ip_forward=1)

POSTROUTING 源地址伪装

通过伪装 192.168.4.0 网段的机器上网,首先防火墙本机可以访问互联网
iptables -t nat -A POSTROUTING -s 192.168.4.0 -j SNAT --to-source 防火墙外网ip地址

PERROUTING 目的地址转换

所有访问防火墙 10022 端口的请求都转发给后端的 192.168.4.15 的 22 端口
iptables -t nat -A PREROUTING -p tcp --dport 10022 -j DNAT --to-destination 192.168.4.15:22 

注意:

iptables 不是服务,只是生效规则或者清空规则,规则关机重置。
把它定义成service 是为了让他开机自动生效规则,
想要永久生效保存规则:service iptables save
规则会被保存至/etc/sysconfig/iptables 文件中,start 时会读取此文件中的规则,

iptables-save > /path/to/some_rulefile 保存iptables规则至别的位置,
iptables-restore < /path/to/some_rulefile 从自定义的位置读取iptables规则并使之生效。 

所有链初始默所有规则为ACCEPT

iptables -t filter -P INPUT DROP(设置为默认拒绝所有,此规则慎用......)
在设置此规则之前应该先允许重要的规则,比如ssh的端口。
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

iptables -F  若不指定表,默认只清空filter表,(默认规则为DROP时,此规则慎用......)
在默认规则为DROP时,默认为拒绝所有,如果这个时候再iptables -F 清空filter开放的规则,这个时候会断开所有连接。

记住iptables 匹配即停止的特性,不然一不小心就掉坑里了.........
不说了,我买火车票去了.