iptables的使用

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 匹配即中止的特性,否则一不当心就掉坑里了.........
不说了,我买火车票去了.
相关文章
相关标签/搜索