zoukankan      html  css  js  c++  java
  • iptables的原理以及CentOS7下的使用

    ​ iptables用于创建过滤以及设置NAT规则,使用方便且功能强大,同时iptables适用性非常高,所有的Linux发行版本都可以使用,如果是第一次接触到iptables,会觉得很复杂。

    iptables原理

    ​ 当客户端访问服务器的web服务时,客户端发送报文到网卡,而tcp/ip协议栈是属于内核的一部分,所以,客户端的信息会通过内核的TCP协议传输到用户空间中的web服务中,而此时,客户端报文的目标终点为web服务所监听的套接字(IP:Port)上,当web服务需要响应客户端请求时,web服务发出的响应报文的目标终点则为客户端,这个时候,web服务所监听的IP与端口反而变成了原点,我们说过,netfilter才是真正的防火墙,它是内核的一部分,所以,如果我们想要防火墙能够达到"防火"的目的,则需要在内核中设置关卡,所有进出的报文都要通过这些关卡,经过检查后,符合放行条件的才能放行,符合阻拦条件的则需要被阻止,于是,就出现了input关卡和output关卡,而这些关卡在iptables中被称为"链"。

    ​ 但客户端发来的报文访问的目标地址可能并不是本机,而是其他服务器,当本机的内核支持IP_FORWARD时,我们可以将报文转发给其他服务器,所以,这个时候,我们就会提到iptables中的其他"关卡",也就是其他"链",他们就是 "路由前"、"转发"、"路由后",他们的英文名是PREROUTING、FORWARD、POSTROUTING

    ​ 也就是说,当我们启用了防火墙功能时,报文需要经过如下关卡,也就是说,根据实际情况的不同,报文经过"链"可能不同。如果报文需要转发,那么报文则不会经过input链发往用户空间,而是直接在内核空间中经过forward链和postrouting链转发出去的。如图:

    img

    iptables结构

    ​ 实际上,iptables的结构为iptables => Tables => Chains => Rules.简单来讲,iptables由不同的表组成,而表Tables由不同的链Chains组成,链Chinas由规则Rules组成。

    img

    iptables中有四个内建表,分别为Filter、NAT、Mangle、Raw:

    • Filter表:负责过滤功能、防火墙
    • NAT表:即network address translation 网络地址转换
    • Mangle表:拆解报文、作出修改并重新封装
    • Raw表:关闭NAT表上启用的链接追踪机制

    ​ iptables中有五个内建链,分别为PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING,根据我的个人理解,在iptables中,表和链不是单纯的包含与被包含的关系,而应该是一种组合的关系,根据不同的链Chains和表Tables的组合,将产生不同的功能,换句话说,同一个类型的链Chains在不同的Tables中所能产生的功能是不同的。且不能随意的将链和表进行组合,每个表下只能使用规定好的几种链。

    Filter表:

    Filter表为iptables的默认表,存在三种内建链:

    • INPUT链,处理来自外部的数据
    • OUTPUT链,处理向外发送的数据
    • FORWARD链,将数据转发到本机的其他网卡设备上
    NAT表:

    NAT表有三种内建链:

    • PREROUTING链,处理达到本机且在路由转发之前的数据包,它会转换数据包中的目标IP地址,通常用于DNAT
    • POSTROUTING链,处理即将离开本机的数据包,它会转换数据包的源IP地址,通常用于SNAT
    • OUTPUT链,处理本机产生的数据包
    Mangle表:

    Mangle表主要功能为根据规则修改数据包的一些标志位,便于其他规则或程序利用这种标志对数据包进行过滤或策略路由。Mangle表具有五种内建链:

    • PREROUTING
    • OUTPUT
    • FORWARD
    • INPUT
    • POSTROUTING
    Raw表:

    Raw表用于处理异常,存在两个内建链:

    • PREROUTING
    • OUTPUT

    在平时的使用过程中,一般使用较多的都是NAT链

    iptables语法

    ​ 如果之前没有了解过iptables相关内容,第一次直接看到iptables的追加等规则会觉得语法非常复杂,但是如果理解iptables的一些规则参数之后会发现还是挺好用的。

    查看表:
    # iptables -t nat --list
    

    -t nat:指定表为nat表,-t为指定表,可以省略,如果省略则默认为fliter表

    --list:查看表种的规则

    清空表:
    # iptables -F 
    或
    # iptables --flush
    

    但在部分Liunx上,如果不使用 -t 指定表,默认清空fliter表种的规则。

    保存表:
    # service iptables save
    或
    # iptables-save
    

    通过追加等方式新增的iptables规则在系统重启之后将会失效,需要使用保存命令才能将规则永久保存。

    基本参数:
    参数 描述 备注
    -p(protocol) 协议类型,如tcp、udp、icmp等 默认为all,所有协议
    -s(source) 数据包源地址(可用ip、网络、主机名) 默认所有地址
    -d(dstdestination) 目的地址(可用ip、网络、主机名)
    -j 执行目标,即当与规则匹配时,如何处理数据包
    -i(in-interface) 输入接口、指定要处理来自哪个接口的数据包,如-i eth0指定了处理经由eth0网卡进入的数据包,! -i eth0 为eth0之外的接口,-i eth+ 为所有eth开口的接口进入的数据包 默认所有接口
    -o(out-interface) 输出接口,语法与-i相同 默认所有接口
    扩展参数:
    参数 描述 备注
    --sport 源端口,针对-p tcp或-p udp,可以指定端口号或端口名称,如-sport 22和-sport ssh,建议使用端口号,也可以范围匹配如-sport 22:100 默认所有端口
    --dport 目的端口,针对-p tcp或-p udp,参数与-sport相同 默认所有端口
    -–tcp-flags TCP标志 针对-p tcp
    -–icmp-type ICMP类型 针对-p icmp
    实例展示:

    例如:

    该规则指定将经过5000端口的tcp协议请求转发到9000端口

    # iptables -t nat -A PREROUTING -p tcp --dport 5000 -j REDIRECT --to-ports 9000
    

    -t nat:指定表为nat表,如果不指定默认为fliter表

    -A PREROUTING:指定要追加的链为PREROUTING链

    -p tcp:指定监听的协议为tcp协议,如果不指定默认为all,即所有协议,但不建议使用all

    --dport 5000:描述规则的扩展参数,表示目的地址为5000

    -j REDIRECT:指的是执行目标为转发到9000端口

    CentOS7使用iptables注意事项

    ​ CentOS7中以firewall代替了iptables作为防火墙来使用,所以默认的CentOS中没有iptables组件,可以先查看iptables的状态来确定是否存在iptables服务:

    注意,不能根据追加链不报错来判断已经存在iptables,也不能通过查看iptables表不报错来判断iptables服务已存在

    # service iptables status
    

    如果存在将会显示iptables的状态,若不存在,则提示:

    Unit iptables.service could not be found.
    

    请先安装iptables组件:

    # yum install iptables-services
    
  • 相关阅读:
    函数与方法(方法前 +
    1362 : 修补木桶 -- 最长的最短边
    149. Max Points on a Line *HARD* 求点集中在一条直线上的最多点数
    148. Sort List -- 时间复杂度O(n log n)
    133. Clone Graph 138. Copy List with Random Pointer 拷贝图和链表
    debug && release
    静态库 && 动态库
    枚举
    获取当前用户所使用的是什么浏览器
    java实现在图片上编辑文本内容
  • 原文地址:https://www.cnblogs.com/ellisonzhang/p/13131440.html
Copyright © 2011-2022 走看看