美文网首页
linux 之 自定义防火墙规则(iptables)

linux 之 自定义防火墙规则(iptables)

作者: 丿易小易 | 来源:发表于2017-01-16 21:04 被阅读1529次

    iptables基本理论:

    iptables组成单元:规则(rules),链(chains),表(tables)

    1.规则(rules)

    规则(rules)其实就是网络管理员`预定义的条件`;
    规则一般的定义为“如果数据包头符合这样的条件,就这样处理这个数据包”。
    规则存储在内核空间的信息包过滤表中,
    这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。
    当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。
    '配置防火墙的主要工作就是添加、修改和删除这些规则'。
    

    2.链(chains)(规则的集合)

    链(chains)是数据包传播的路径;
    每一条链其实就是众多规则中的一个检查清单,每一条链中可以有一条或数条规则。
    当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。
    如果满足,系统就会根据该条规则所定义的方法处理该数据包;
    否则iptables将继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定义的默认策略来处理数据包。
    
    INPUT链    针对那些目的地是本地的包。
    FORWARD链  过滤所有不是本地产生的并且目的地不是本地的包。
    OUTPUT链   过滤所有本地生成的包的。
    PREROUTING链(路由前的数据流,修改即将到来的的数据包).
    POSTROUTING链(路由后的数据流,修改即将出去的数据包).
    

    3.表(tables)

    1. 表(tables)提供特定的功能;
    2. iptables内置'filter'表、'nat'表和'mangle'表,
    3. 分别用于实现'包过滤','网络地址转换'和'包重构'的功能。
    

    3.1 .filter表

    1.'主要用于过滤数据包' Filter表是默认的表,iptables就默认使用filter表来执行所以命令,
    2. 防火墙的规则配置也都是在这张表里配置(预定义的一组规则过滤符合条件的数据包)
    3. filter表包含了INPUT链,RORWARD链,OUTPUT链
    在filter表中只能允许对数据包进行接受,丢弃的操作,而无法对数据包进行更改
    

    3.2 .nat表

    1.'主要用于网络地址转换NAT',该表可以实现一对一,一对多,多对多等NAT 工作,iptables就是使用该表实现共享上网的。
    2.NAT表包含了PREROUTING链,POSTROUTING链,OUTPUT链
    

    3.3 .mangle表

    1.主要用于对指定数据包进行更改
    2.在内核版本2.4.18 后的linux版本中该表包含的链为:
    INPUT链,RORWARD链,OUTPUT链,POSTROUTING链,PREROUTING链
    

    iptables命令参数说明

    命令:iptables [-t filter] [-A/I/R/D INPUT,OUTPUT,FORWARD] [-i/o interface] [-p tcp,udp.icmp,all] [-s ip/nerwork] [--sport ports][-d ip/netword] [--dport ports][-j ACCEPT DROP]
    * -t 表名      命令作用于该表,如果省略默认filter表
    * -A          链命令追加到上表该链的尾部
    * -I 链 行数    命令插入到上表该链的第几行
    * -R 链 行数   命令插入到上表该链的第几行
    *iptables -R INPUT 2 -p tcp -m multiport --dport 22,11251,8050,8080,80 -j ACCEPT
    * -D 行数 链   删除上表该链第几行
    * -i 网卡      数据进入要经过的网卡 eth0
    * -o 网卡      数据输出要经过的网卡 eth1
    * -p 协议      通信协议 tcp/udp
    * -s ip       源地址,可以是ip,网络 192.168.2.0/24,域名china-ecar.com
    * --sport 端口 来源端口
    * -d ip       目标IP地址/网络/域名
    * --dport     目标端口
    * -j 规则      执行规则 acccept drop reject
    *
    

    iptables数据包流程

    图一:



    图二:

    图一黄色内容和图二B路线解释:(局域网内的防火墙配置)

    DNAT(DNAT目标地址转换在PREROUTING链上做)

    对外提供服务,将局域网ip映射到外网ip
    DNAT目标地址转换在PREROUTING链上做;可以将虚拟机的服务映射到宿主机的ip上,达到访问宿主的 ip就等于访问虚拟机的效果;
    
    iptables -t nat -A PREROUTING -d 公网ip -p tcp -m tcp --dport 公网端口 -j DNAT --to-destination  内网ip:内网端口
    命令解释:
    -t (table)命令用于哪个表 -t nat 是指该命令作用于nat表
    -A (append)命令追加在表的尾部
    -d (destination)指定的物理机ip
    -p (protocol)指协议
    -m (match)指匹配
    --dport 指定的物理机ip端口
    -j (jump)跳转执行,指定要进行的处理动作(ACCEPT、REJECT、DROP、REDIRECT、MASQUERADE、LOG、DNAT、SNAT、MIRROR、QUEUE、RETURN、MARK)
    --to-destination 目标地址
    iptables可以使用扩展模块来进行数据包的匹配,语法就是 -m module_name, 所以
    -m tcp 的意思是使用 tcp 扩展模块的功能 (tcp扩展模块提供了 --dport, --tcp-flags, --sync等功能)
    其实只用 -p tcp 了话, iptables也会默认的使用 -m tcp 来调用 tcp模块提供的功能。但是 -p tcp 和 -m tcp是两个不同层面的东西,一个是说当前规则作用于 tcp 协议包,而后一是说明要使用iptables的tcp模块的功能 (--dport 等)
    
    应用场景:
    这样主要是为了 能让内网的主机能够对外提供服务:
    数据包的第一站 PREROUTING,匹配到规则就执行规则进行DNAT转发,
    经过FORWARD ,到达POSTROUTING出站。没有匹配到就进入INPUT,进行匹配
    
    备注:让指定的ip访问服务器 (指定的 ip是192.168.1.154,内网网段是192.168.122.0/24)
    将内网ip 192.168.122.2:22 映射到外网ip 192.168.1.51:8081
    iptables -t  nat -A PREROUTING  -d 192.168.1.51 -p tcp -m tcp --dport 8081 --to-destination 192.168.122.2:22
    防火墙开放端口和ip
    iptables -A  FORWARD -s 指定的ip  -d 内网网段 -p tcp -m tcp --dport 22 -j  ACCEPT
    192.168.122.0/24 表示192.168.122.1-192.168.122.254
    需要实践检测
    当内网的主机或本地的虚拟机需要通过本机上网时,需要做SNAT规则:我的环境是虚拟机要通过宿主机上网,虚拟机以宿主机为网关,虚拟机的网段是192.168.122.0/24,宿主机的网段是192.168.1.0/24,相对来说宿主机网段就是外网,虚拟机就是内网。-j  MASQUERADE 是当外网ip不固定时,这个配置 I 可以自动获取外网ip。
    iptables -t nat -A POSTROUTING  -o br0   -s 内网段/24  -j MASQUERADE
    -s配置不是必须的,在真实局域网环境中,也许会有多个局域网段,这时就可以通过-s 配置,指定那个网段可以上网
    参考:http://jiapeng.blog.51cto.com/6706171/1719289
    

    SNAT(SNAT源地址转换在POSTROUTING链上做)

    可以为局域网提供上网服务
    
    iptables -t nat -A PORTROUTING -o eth0 -j MASQUERADE
    -t (table)命令用于哪个表 -t nat 是指该命令作用于nat表
    -A (append)命令追加在表的尾部
    -o (-o eth0 从这块网卡流出的数据,流出一般在OUTPUT和POSTROUTING上)
    -j MASQUERADE 源地址伪装
    
    应用场景:
    主机上的NAT 虚拟机需要访问物理网路,虚拟机直接通过先 经过FORWARD,然后通过POSTROUTING 将源地址转换
    

    图一绿色内容和图二A路线解释:(ssh远程连接阿里云服务器)

    1.清除原有防火墙,并预设规则(默认为filter表)

    #iptables -F INPUT 清除input链中的规则  F flush 清除刷新,该命令不用执行
    #iptables -F  清除 filter表中所有链的规则
    #iptables -X  清除 filter表中自定义的链input output forward是不会清除的 -X --delete-chain 删除链
    #service iptables save 保存防火墙
    #service iptables restart 重启防火墙
    

    2.开启22远程连接端口

    查看防火墙配置 #iptables -L -n 或者查看 vi /etc/sysconfig/iptables 文件如下图

    这里有些问题 input accept [240:20967] 那为什么 22 端口也对外开放了呢????
    开放远程连接端口号22后,在设置INPUT规则为DROP,先后顺序不能乱

    #iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
    --dport 为两个-
    区分大小写
    设置filter表INPUT链的规则为DROP ,及不在开放端口范围的请求一律删除
    #iptables -P INPUT DROP  设置 INPUT链的规则为DROP
    #service iptables save
    #service iptables restart
    

    当由服务器发起的通信建立要INPUT允许,不然可能导致不能连接,该命令是允许已经建立的通信通过input

    #iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    INVALID 表示该封包的联机编号(Session ID)无法辨识或编号不正确。
    ESTABLISHED 表示该封包属于某个已经建立的联机。
    NEW 表示该封包想要起始一个联机(重设联机或将联机重导向)。
    RELATED 表示该封包是属于某个已经建立的联机,所建立的新联机。例如:FTP-DATA 联机必定是源自某个FTP 联机。
    

    关闭防火墙的状态

    清洗完规则后重新开启防火墙的状态

    防火墙启动方式

    自定义规则有两种方式:
    1.在iptables处于stop状态下,将命令写入到配置文件中(/etc/sysconfig/iptables)中,然后save,启动start
    2.在iptables处于start状态下,直接在dos环境中写入命令,然后save,然后重启restart
    这两种都有实际意义:第一种方便,不用写命令; 第二种可以不用停掉防火墙写入规则,时间更短,更安全
    

    总结:在清除完规则后,防火墙的所有规则为accept(放行)

    相关文章

      网友评论

          本文标题:linux 之 自定义防火墙规则(iptables)

          本文链接:https://www.haomeiwen.com/subject/nibpbttx.html