Iptables学习笔记(一)

iptables,即linux上的防火墙,实现了linux上的访问控制功能。

它的实现原理是在TCP/IP协议栈上放置了5个钩子函数(hook function),通过在每个函数设定相应的规则来实现访问控制的目的。


这5个钩子函数分别定义了规则生效的地方,他们分别是

prerouting:路由决策前生效
input:由内核空间转至用户空间服务进程生效
output:由用户空间进程转至内核空间生效

forward:内核空间转发生效
postrouting:路由决策后生效


每个点都可以有多条规则,叫做规则链

PREROUTING
INPUT
FORWARD
OUTPUT
POSTROUTING


规则使用:

规则:匹配标准,处理动作

iptables [-t TABLE] COMMAND CHAIN [num] 匹配标准 -j 处理办法

匹配标准:

    通用匹配
        -s, --src: 指定源地址
        -d, --dst:指定目标地址
        -p {tcp|udp|icmp}:指定协议
        -i INTERFACE: 指定数据报文流入的接口
            可用于定义标准的链:PREROUTING,INPUT,FORWARD
        -o INTERFACE: 指定数据报文流出的接口
            可用于标准定义的链:OUTPUT,POSTROUTING,FORWARD
    扩展匹配
        隐含扩展:不用特别指明由哪个模块进行的扩展,因为此时使用-p {tcp|udp|icmp}

            -p tcp
            --sport PORT[-PORT]: 源端口
            --dport PORT[-PORT]: 目标端口
            --tcp-flags mask comp: 只检查mask指定的标志位,是逗号分隔的标志位列表;comp:此列表中出现的标记位必须为1,comp中没出现,而mask中出现的,必须为0;
            --tcp-flags SYN,FIN,ACK,RST SYN = --syn
            --syn

            -p icmp
            --icmp-type
            0: echo-reply    icmp响应报文
            8: echo-request    icmp请求报文


例如:

iptables -t filter -A INPUT -s 172.16.0.0/16 -d 172.16.100.7 -j DROP

丢弃从172.16.0.0/16网络的主机访问主机172.16.100.7的数据包


        显式扩展:必须指明由哪个模块进行的扩展,在iptables中使用-m选项可完成此功能    

            -m EXTESTION --spe-opt

            state: 状态扩展
                结合ip_conntrack追踪会话的状态
                NEW: 新连接请求
                ESTABLISHED:已建立的连接
                INVALID:非法连接
                RELATED:相关联的
                例:    -m state --state NEW,ESTABLISHED -j ACCEPT  放行新建连接和已连接的数据包

            

        ftp的规则使用
        首先要装载ip_conntrack_ftp和ip_nat_ftp模块

        在/etc/sysyconfig/iptables-config中加载指定模块


    multiport: 离散的多端口匹配扩展
        --source-ports
        --destination-ports
        --ports

    -m multiport --destination-ports 21,22,80 -j ACCEPT
条件取反:!,-s ! 172.16.100.6


例如:

        iptables -A INPUT -d 172.16.100.7 -p tcp -m state --state ESTABLISHED,RELATED -j 

        ACCEPT 

        放行到172.16.100.7的ESTABLISED的状态的数据包

        iptables -A INPUT -d 172.16.100.7 -p tcp -m state --state NEW -m multiport            --destination-ports 21,22,80 -j ACCEPT

        放行到172.16.100.7的21,22,80端口的NEW状态的数据包

命令:
    管理规则
        -A:附加一条规则,添加在链的尾部
        -I CHAIN [num]: 插入一条规则,插入为对应CHAIN上的第num条;
        -D CHAIN [num]: 删除指定链中的第num条规则;
        -R CHAIN [num]: 替换指定的规则;
    管理链:
        -F [CHAIN]:flush,清空指定规则链,如果省略CHAIN,则可以实现删除对应表中的所有链
        -P CHAIN: 设定指定链的默认策略;
        -N:自定义一个新的空链
        -X: 删除一个自定义的空链
        -Z:置零指定链中所有规则的计数器;
        -E: 重命名自定义的链;
    查看类:
        -L: 显示指定表中的规则;
            -n: 以数字格式显示主机地址和端口号;
            -v: 显示链及规则的详细信息
            -vv:
            -x: 显示计数器的精确值
            --line-numbers: 显示规则号码

动作(target):
        ACCEPT:放行
        DROP:丢弃
        REJECT:拒绝
        DNAT:目标地址转换
        SNAT:源地址转换
        REDIRECT:端口重定向
        MASQUERADE:地址伪装
        LOG:日志
        MARK:打标记

例:

172.16.100.7,sshd:22/tcp
放行到172.16.100.7的ssh报文
iptables -t filter -A INPUT  -d 172.16.100.7 -p tcp --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -s 172.16.100.7  -p tcp --sport 22 -j ACCEPT


保存规则:
    # service iptables save
        /etc/sysconfig/iptables 保存的文件

你可能感兴趣的:(学习笔记,iptables)