01--Iptables&Firewalld详解

前言:这里写一下,前面文章里都是直接关闭然后实验,感觉这样有点草率,这里写一下大概的概念和用法,作为知识的补充,这章写轻松点,毕竟是网安毕业的,算是给自己放松一下吧。

1、iptables

1.1、iptables简介

通过linux防火墙, 防火墙有:netfilter和iptables可以有效控制进出服务器的流量和流经服务器的流量。

  • netfilter:内核态,即不以文件和形式存在(kernal space)的防火墙。
  • iptables:用户态,在/sbin/iptables存在(User space)的防火。操作上二者没有区分

IPtables被称为2、3、4层防火墙,是因为它可以在不同的网络层面进行数据包的过滤和控制,具体如下:

  1. 第二层(数据链路层)

    • IPtables可以通过MAC地址进行数据包过滤。虽然主要是第三和第四层的协议和端口过滤工具,但它可以在某些情况下(例如桥接模式)操作第二层。
  2. 第三层(网络层)

    • 在网络层,IPtables主要基于IP地址进行数据包过滤和控制。这包括IPv4和IPv6的支持,可以根据源IP地址、目标IP地址、ICMP协议等进行过滤。
  3. 第四层(传输层)

    • IPtables最常见的用途是在传输层进行数据包的过滤和控制,例如基于TCP或UDP端口号进行规则设置。这使得它能够控制到达计算机的数据流和连接。

因此,尽管IPtables最为人熟知的是其在第三和第四层的防火墙功能,即基于IP地址、端口号和协议进行过滤,但它在某些特定情况下也可以在第二层操作。这种多层面的能力使得IPtables被称为2、3、4层防火墙。

缺点:

(1)防火墙虽然可以过滤互联网的数据包,但却无法过滤内部网络的数据包。因此若有人从内部网络攻击时,防火墙没有作用。

(2)电脑本身的操作系统亦可能因一些系统漏洞,使入侵者可以利用这些漏洞绕过防火墙过滤,从而入侵电脑。

(3)防火墙无法有效阻挡病毒攻击,尤其是隐藏在数据中的病毒。

(4)正常状况下,所有互联网的数据包软件都应经过防火墙的过滤,这将造成网络交通的瓶颈。例如在攻击性数据包出现时,攻击者会不时寄出数据包,让防火墙疲于过滤数据包,而使一些合法数据包软件亦无法正常进出防火墙。

1.2、table&Chain&policy

四表:

  • Filter(过滤器):

    • 在iptables中,Filter是默认表,用于处理数据包的过滤规则。主要用于定义允许或拒绝数据包通过防火墙的策略。
  • NAT(网络地址转换):

    • Network Address Translation(NAT)是一种技术,用于修改数据包的源地址、目标地址或端口,从而实现私有网络内部主机与公共网络进行通信的方法。在iptables中,NAT表(nat table)用于设置和管理网络地址转换规则。
  • Mangle(变换):

    • Mangle表用于修改数据包的特定字段,如TTL(生存时间)、TOS(服务类型)等,以及进行高级的数据包处理。这在一些特殊的网络场景下非常有用,比如QoS(服务质量)管理和数据包标记等。
  • Raw(原始):

    • Raw表用于设置特定数据包的处理规则,通常用于在连接跟踪之前处理数据包。这允许用户在数据包进入连接跟踪系统之前执行某些操作,如设置免连接跟踪或者调整特定协议的参数

四个表的后两个关系到数据包跟踪,运维基本用不上,记一下名字即可,重要的是前两个表。四张表像容器,负责容纳四个方向的事务,可以看做安保小队

五链:

  • PREROUTING (预路由) PREROUTING链用于处理数据包进入网络接口之前的规则。这意味着它们在数据包进行路由之前被处理。主要用于目标地址转换(DNAT)和一些特定的数据包处理需求。

  • POSTROUTING (后路由) POSTROUTING链用于处理数据包离开网络接口之前的规则。这意味着它们在数据包进行出站路由之后,但在数据包离开接口之前被处理。主要用于源地址转换(SNAT/MASQUERADE)和一些网络地址转换需求。

  • INPUT (输入) INPUT链用于处理数据包进入本地计算机的规则。数据包在进行到达本地计算机后,但在交付到本地进程之前,经过这一链的处理。

  • OUTPUT (输出) OUTPUT链用于处理数据包从本地计算机发出的规则。这些规则在数据包从本地进程生成后,但在数据包离开本地计算机之前进行处理。

  • FORWARD (转发) FORWARD链用于处理通过本地计算机进行路由的数据包。这些数据包既不是发往本地计算机,也不是由本地计算机发出,而是通过本地计算机进行转发的。

这些链结合了iptables规则,允许管理员在不同的数据包处理阶段和方向上定义特定的过滤、转换和操作规则,从而实现对网络流量的详细控制和管理。主要是INPUT,OUTPUT,POSTROUTING这三个链 。可以看作安保人员

策略:

上面已经详细的解释了四表5链的内容及作用,可以看作系统的安保小队及安保人员,而策略就是下 达给他们的工作准则,这样由“四表五链一堆策略”就组成了iptables负责的所有事务。

架构图:

关系图:

 表链关系及对应用途

filter表(重点):

Filter(过滤器)

INPUT

访问本机的数据包进行过滤

FORWARD

途径本机的数据包进行过过滤

OUTPUT

本机访问互联网的数据包进行过滤

根据规则来处理数据包,如转或者丢。 就是实现主机型防火墙的主要表。 内核模块 iptable_filter

nat表(次重点):

NAT(网络地址转换)

PREROUTING

修改目的地址

POSTTOUTING

修改源地址

OUTPUT

主要是控制内部

转换地址的表(改IP,改端口。 当网关使用的linux。保护内外网流量。 内核模块叫iptable_nat)

 mangle表(了解):

Mangle(变换)

PREROUTING,POSTROUTING,INPUIT,OUTPUT,FORWARD

流量整形的表(流量控制)。 路由标记用的表。改TOS,TTL,Mark标记策略路由等, 内核模块iptables_mangle

raw表(了解):

Raw(原始)

PREROUTING,OUTPUT

数据包跟踪,一般网安的溯源用 iptables_raw

先后顺序详解:

raw --> mangle --> nat --> filter

链:

入站 比如访问自身的web服务流量。先PREROUTING(是否改地址),再INPUT(是否允许)到达程序。
转发 经过linux网关的流量。 先PREROUTING(是否改地址),然后路由。转发给FORWARD(转发或者丢弃),最后经过POSTROUTING(看看改不改地址。如NAT)
出站 源自linux自身的流量。 先OUTPUT,然后路由。再给POSTROUTING(是否改IP)。

规则应用顺序:

ACL逐条匹配,匹配即停止。(除了LOG规则)

这句话指的是在网络设备或防火墙中使用的ACL(Access Control List,访问控制列表)规则匹配过程。ACL用于控制数据包在网络中的流动,决定是否允许或阻止数据包通过特定的接口或进入特定的网络。

具体解释如下:

  1. 逐条匹配:ACL规则是按照设定的顺序逐条进行匹配的。这意味着每个数据包在通过ACL时,会从第一条规则开始逐条进行比对,直到找到与该数据包匹配的规则为止。

  2. 匹配即停止:一旦某个数据包与某条ACL规则匹配成功(即符合该规则的条件),ACL会立即按照该规则的设定来处理数据包,不再继续检查后续的规则。这样做是为了提高处理效率,避免不必要的资源消耗。

  3. 除了LOG规则:通常,ACL中的LOG规则是指那些用于记录(logging)数据包流量的规则,而不是直接控制数据包流动的规则。这些LOG规则可以记录匹配的数据包,但通常不会中断数据包的传输流程,因此即使某个数据包匹配了LOG规则,ACL仍然会继续检查后续的规则,以决定数据包的最终处理。

综上所述,ACL逐条匹配,匹配即停止的原则确保了在网络设备上有效地实施安全策略,并能够迅速处理数据包,同时允许灵活地记录需要的信息。

1.3、编写防火墙规则

基本语法

iptables -t 表名 管理选项  [链名] [匹配条件] [-j 控制类型]

-t 表名 每个表都可以用。不写默认filter表。
管理选项 操作方式如插入,删除,查看等。
链名 
匹配条件 数据包特征ip,端口等
控制类型 数据包处理方式,ACCEPT允许,REJECT拒绝,DROP丢弃,LOG日志(log不适用匹配即停止,记录后下一条)等。

示例如下

    #    添加本机禁ping
[root@localhost ~]# iptables -t filter -I INPUT -p icmp -j REJECT


#这条命令使用iptables工具在filter表的INPUT链中插入一条规则,详细解释如下:

    #iptables: 这是Linux系统上用于配置iptables防火墙的命令行工具。

    #-t filter: 指定操作的表(table)为filter表。iptables有多个预定义的表,每个表用于不同的目的,filter表用于数据包过滤。

    #-I INPUT: 指定在INPUT链中插入规则。INPUT链是处理目标是本地系统的数据包的链。

    #-p icmp: 指定匹配协议为ICMP。ICMP(Internet Control Message Protocol)用于在IP网络上发送控制消息。

    #-j REJECT: 指定如果匹配到规则,执行动作为拒绝(REJECT)。拒绝动作会向发送方发送一条拒绝信息,并且不会回应对应的ICMP包。

#综合起来,这条命令的作用是:在本地系统的INPUT链中插入一条规则,匹配所有的ICMP协议的数据包,并且对这些数据包执行拒绝操作。换言之,当有ICMP数据包进入本地系统时,系统将会发送一个ICMP拒绝消息给发送方,并且不会处理这些数据包。

#这样的规则通常用于防火墙配置中,用来控制允许或者拒绝从外部网络进入本地系统的ICMP流量。



[root@localhost ~]# iptables -L

    #    默认查询filter

Chain INPUT (policy ACCEPT)
    #    默认策略放行所有
target     prot opt source               destination         
REJECT     icmp --  anywhere             anywhere             reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination   



    #    删除本机禁ping      
[root@localhost ~]# iptables -t filter  -D INPUT -p icmp -j REJECT
[root@localhost ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
[root@localhost ~]# 

使用另一台ping添加规则的机器

1.4、添加查看删除规则 

1.4.1、添加新的规则

-I(大写的i):在链的开头(或指定序号)插入一条规则

-A:在链的末尾追加一条规则

示例如下:

[root@localhost ~]# iptables -t filter -I INPUT -p icmp -j REJECT
[root@localhost ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
REJECT     icmp --  anywhere             anywhere             reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination    

     
[root@localhost ~]# iptables -t filter -A INPUT -p tcp -j ACCEPT
[root@localhost ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
REJECT     icmp --  anywhere             anywhere             reject-with icmp-port-unreachable
ACCEPT     tcp  --  anywhere             anywhere            

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         


[root@localhost ~]# iptables -t filter -I INPUT -p udp -j ACCEPT
[root@localhost ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  anywhere             anywhere            
REJECT     icmp --  anywhere             anywhere             reject-with icmp-port-unreachable
ACCEPT     tcp  --  anywhere             anywhere            

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination     

    
[root@localhost ~]# 

1.4.2、查看规则列表

-L:列出所有的规则条目

-n:以数字形式显示地址、端口等信息

-v:以更详细的方式显示规则信息

--line-numbers:查看规则时,显示规则的序号(方便之处,通过需要删除规则-D INPUT 1)

[root@localhost ~]# iptables -L -n -v --line-numbers
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        1    76 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           
2        0     0 REJECT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
3      181 11740 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 59 packets, 9400 bytes)
num   pkts bytes target     prot opt in     out     source               destination 

1.4.3、删除、清空规则

-D:删除链内指定序号(或内容)的一条规则

-F:清空所有的规则(-X是清理自定义的链,用的少;-Z清零规则序号)

[root@localhost ~]# iptables -D INPUT 3
[root@localhost ~]# iptables -L -n -v --line-numbers
Chain INPUT (policy ACCEPT 9 packets, 564 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        3   228 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           
2        0     0 REJECT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 7 packets, 564 bytes)
num   pkts bytes target     prot opt in     out     source               destination



[root@localhost ~]# iptables -F
[root@localhost ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

1.4.4、设置默认策略

-P:为指定的链设置默认规则

这里我将所有进入本机的数据丢弃,所以ssh直接断连

[root@localhost ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
[root@localhost ~]# iptables -t filter  -P   INPUT   DROP
[root@localhost ~]# 
Socket error Event: 32 Error: 10053.
Connection closing...Socket close.

Connection closed by foreign host.

Disconnected from remote host(Centos7_mini_1) at 16:50:03.

Type `help' to learn how to use Xshell prompt.
[C:\~]$ 

该状态无法使用-F删除,只能进行设置

此时重连ssh正常使用 

1.5、规则匹配条件

1)通用匹配(协议,地址,网络接口),可以独立使用

协议:

iptables -I INPUT -p icmp -j DROP
    #    禁ping

地址:

iptables -I INPUT -s 192.168.188.129 -j REJECT
    #    禁止源188.129主机进来。(换个主机ping一下,就可以通信)


iptables -I INPUT -s 192.168.188.0/24 -j DROP
    #    禁止源188网段的数据包

网络接口:

iptables -I INPUT -i ens33 -j DROP
    #    目标地址为ens33的包全部丢弃

2)隐含匹配--sport/--dport

  • --sport 用于匹配源端口,适用于出站数据包。
  • --dport 用于匹配目标端口,适用于入站数据包。

端口匹配

iptables -I INPUT -s 192.168.188.0/24 -p tcp --dport 80 -j ACCEPT
    #    允许来自192.168.188.0/24网段的TCP协议的数据包,目标端口为80(即HTTP服务)的数据包通过防火墙

iptables -I INPUT -p tcp --dport 20:21 -j ACCEPT
    #    允许通过防火墙的TCP数据包,目标端口为20或21,用于FTP服务的数据传输和控制连接

iptables -I INPUT -p tcp --dport 24500:24600 -j ACCEPT
    #    允许通过防火墙的TCP数据包,目标端口在24500到24600范围内

标记位匹配(SYN,ACK,RST,)

iptables -I INPUT -i ens33 -p tcp --tcp-flags SYN,RST,ACK SYN -j DROP
    #    输入接口为ens33 的数据包中,丢弃所有只包含TCP SYN标志的数据包。通常情况下,这种规则用于防范SYN洪水攻击(SYN flood)

ICMP类型匹配(请求8回应0)

iptables -A INPUT -p icmp --icmp-type 8 -j DROP
    #    主机在收到其他主机发送的ping请求时,直接丢弃这些请求
    #    自己ping别人可以,反过来不可以

3)显示匹配

通过调用模块:lsmod | grep xt_ 来加载内核扩展模块,如端口匹配,IP范围,MAC地址,状态等特殊匹配

    #    多端口匹配
iptables -A INPUT -p tcp -m multiport --dport 80,20,21 -j  DROP


    #-A INPUT: 将规则附加到INPUT链,即数据包进入主机时应用此规则。
    #-p tcp: 指定协议为TCP。
    #-m multiport --dport 80,20,21: 使用multiport模块指定多个端口,这里包括了80(HTTP)、20(FTP数据端口)、21(FTP控制端口)。
    #-j DROP: 指定动作为丢弃(drop),即如果匹配到目标端口为这些端口的TCP数据包,就丢弃这些数据包,不做任何响应。

#因此,这条规则会导致你的主机在收到目标端口为HTTP(80)、FTP数据端口(20)、FTP控制端口(21)的TCP数据包时,直接丢弃这些数据包。
    #    IP范围匹配
iptables -I INPUT -p tcp -m iprange --src-range 192.168.188.166-192.168.188.199 -j ACCEPT


    #-I INPUT: 使用-I选项表示插入规则到INPUT链的顶部,即优先级最高,最先匹配。
    #-p tcp: 指定协议为TCP,规则只影响TCP协议的数据包。
    #-m iprange --src-range 192.168.188.166-192.168.188.199: 使用iprange模块指定源IP地址范围为192.168.188.166到192.168.188.199。
    #-j ACCEPT: 指定动作为接受(ACCEPT),即如果匹配到来源IP在指定范围内的TCP数据包,就允许这些数据包通过。

#因此,这条规则允许来自IP地址在192.168.188.166到192.168.188.199之间的主机发起的所有TCP连接通过你的主机的INPUT链。
    #    MAC地址匹配
iptables -I INPUT -m mac --mac-source 00:0C:29:64:E3:8D -j ACCEPT

    #-m mac --mac-source 00:0C:29:64:E3:8D: 使用mac模块指定源MAC地址为00:0C:29:64:E3:8D。

#因此,这条规则会允许具有MAC地址为00:0C:29:64:E3:8D的主机的所有流量通过你的主机的INPUT链。
    #    TCP状态匹配

iptables -I INPUT -p tcp -m multiport --dport 80 -j  ACCEPT
    #-m multiport --dport 80: 使用multiport模块指定目标端口为80,这表示规则只适用于目标端口为HTTP的TCP数据包。
    #因此,这条规则允许通过INPUT链进入你的主机的所有TCP流量,并且目标端口为80(HTTP)的数据包会被允许通过。


iptables -I INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
    #-m state --state ESTABLISHED,RELATED: 使用state模块指定连接状态为已建立(ESTABLISHED)或者相关联(RELATED)。这个规则会匹配已经建立的双向通信或者与已建立连接相关的数据包。
    #因此,这条规则允许通过INPUT链进入你的主机的所有TCP流量,只要这些流量是已建立或者相关联的连接。这样做是为了允许响应已建立连接的数据包或与已建立连接相关的数据包能够顺利通过防火墙。

1.6、iptables网络型

 这里在现实工作中用不到,现在使用的都是成品路由器,这里当作网络路由知识记录一下,不需要学习这种技术。

filter表主要做服务器流量控制。控制别人访问服务器的。 nat表主要做网关路由器的。网络地址转换。SNAT和DNAT

1.6.1、SNAT

internet访问,在没有NAT(network address translation)时,外部服务器对内部的私有地址是无法进行路由的。做了SNAT就可以转换地址,进行路由通信。 

环境如上,实验步骤如下

使用centos的路由转发功能测试

#server2
echo "net.ipv4.ip_forward = 1" >>/usr/lib/sysctl.d/50-default.conf
echo 1 > /proc/sys/net/ipv4/ip_forward
sysctl -a | grep ip_forward

    #    三条命令结合起来的作用是启用Linux系统的IP转发功能,并将其配置持久化到系统重启后依然有效
    #    server1,3配置网关
    #    检查网络连通

删除server3的网关,模拟私有IP没有路由的情况。再次通信失败

建立SNAT,在server2上

iptables -FXZL
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j SNAT --to-source 192.168.200.10

    #-t nat: 指定操作表为nat,即网络地址转换表。nat表用于配置网络地址转换规则,包括源地址转换(SNAT)、目标地址转换(DNAT)等。

    #-A POSTROUTING: 添加一条规则到POSTROUTING链中。POSTROUTING链用于处理数据包在离开系统之前的网络地址转换。

    #-s 192.168.100.0/24: 指定源地址为192.168.100.0/24,即来自192.168.100.0/24子网的数据包。

    #-o ens33: 指定出接口为ens33。数据包将从ens33接口出去,这是一个网络接口的名称。

    #-j SNAT --to-source 192.168.200.10:
        #-j SNAT: 指定动作为源地址转换(SNAT,Source NAT)。SNAT用于修改数据包的源IP地址。
        #--to-source 192.168.200.10: 将数据包的源IP地址修改为192.168.200.10。

#解释: 这条规则的目的是,当来自192.168.100.0/24子网的数据包经过ens33接口离开系统时,将数据包的源IP地址改为192.168.200.10。这种配置通常用于实现内部私有网络访问外部网络时的地址转换,使得外部网络看到的源IP地址是192.168.200.10,而不是内部子网的原始IP地址。

1.6.2、MASQUERADE

MASQUERADE —— 地址伪装 地址伪装:适用于外网IP地址非固定的情况 因为:对于ADSL拨号连接,接口通常为 ppp0、ppp1 所以:将SNAT规则改为MASQUERADE即可,使动态地址作为SNAT的目标地址。效果同前一个实验

iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE


    #-t nat: 指定操作表为nat,即网络地址转换表。nat表用于配置网络地址转换规则,包括源地址转换(SNAT)、目标地址转换(DNAT)等。

    #-A POSTROUTING: 添加一条规则到POSTROUTING链中。POSTROUTING链用于处理数据包在离开系统之前的网络地址转换。

    #-s 192.168.100.0/24: 指定源地址为192.168.100.0/24,即来自192.168.100.0/24子网的数据包。

    #-o ens33: 指定出接口为ens33。数据包将通过ens33接口出去,这是一个网络接口的名称。

    #-j MASQUERADE: 使用MASQUERADE目标动作。MASQUERADE是一种特殊的SNAT,它允许动态地将内部网络的私有IP地址转换为外部网络接口的公共IP地址。

#这条规则的作用是,当来自192.168.100.0/24子网的数据包要通过ens33接口出去时,将这些数据包的源IP地址修改为该接口的IP地址(外部网络接口的公共IP地址),以实现内部私有网络访问外部网络的转换。这种配置通常用于允许内部网络的多个设备共享同一个公共IP地址访问互联网。

#例如,如果ens33接口的公共IP地址是动态分配的,MASQUERADE会自动调整转换规则以匹配实际接口IP的变化,确保内部网络设备始终能够访问外部网络。

#这种设置在路由器或者网关上经常使用,用于实现NAT(网络地址转换)功能,以保护内部网络并简化对外部网络的访问管理。

前面这两种都是用于内网访问外网

1.6.3、DNAT

在网关配置DNAT,外网访问内网测试成功。

iptables -t nat -A PREROUTING -i ens33 -d 192.168.200.10 -p tcp --dport 80 -j DNAT --to-destination 192.168.100.10



    #-t nat: 指定操作表为nat,即网络地址转换表。nat表用于配置网络地址转换规则,包括源地址转换(SNAT)、目标地址转换(DNAT)等。

    #-A PREROUTING: 添加一条规则到PREROUTING链中。PREROUTING链用于处理数据包进入系统之前的网络地址转换。

    #-i ens33: 指定入接口为ens33。数据包将通过ens33接口进入系统,这是一个网络接口的名称。

    #-d 192.168.200.10: 指定目标地址为192.168.200.10。这意味着当数据包的目标地址是192.168.200.10时,将会应用这条规则。

    #-p tcp: 指定协议为TCP。这条规则只适用于TCP协议的数据包。

    #--dport 80: 指定目标端口为80。这表示当数据包的目标端口是80时,将会应用这条规则。

    #-j DNAT --to-destination 192.168.100.10:
        #-j DNAT: 指定动作为目标地址转换(DNAT,Destination NAT)。DNAT用于修改数据包的目标IP地址。
        #--to-destination 192.168.100.10: 将数据包的目标IP地址修改为192.168.100.10。

#这条规则的目的是,当通过ens33接口进入系统的目标地址是192.168.200.10且目标端口是80的TCP数据包时,将数据包的目标IP地址修改为192.168.100.10。这种配置通常用于实现端口映射或反向代理,将外部对特定IP和端口的请求转发到内部网络的特定主机和端口上。

#例如,外部网络通过访问192.168.200.10:80时,实际上会被转发到内部网络的192.168.100.10:80上处理。

#这种设置在网络中常用于实现服务的透明访问,或者实现负载均衡和高可用性服务。

1.6.4、PNAT

端口转换(PNAT)是DNAT的一种形式,用于增强安全性。例如,内网服务器的SSH服务通常运行在标准的22号端口。为了提高安全性,在发布时可以配置SSH服务使用不同的端口,比如2345端口

iptables -t nat -A PREROUTING -i ens33 -d 192.168.200.10 -p tcp --dport  2345 -j DNAT --to-destination 192.168.100.10:22




    #--dport 2345: 指定目的端口为2345,即这些规则只适用于目标端口为2345的数据包。

    #-j DNAT --to-destination 192.168.100.10:22: 如果匹配了上述条件的数据包,执行目标地址转换(DNAT)。将目标地址转换为192.168.100.10:22,即数据包的目标IP地址变为192.168.100.10,目标端口变为22(SSH默认端口)。

#解释:这条规则的作用是将进入ens33接口、目的IP地址为192.168.200.10、目的端口为2345的TCP数据包,转换为目标IP地址为192.168.100.10的SSH服务(端口22)。这种设置允许外部用户通过访问192.168.200.10:2345来实际连接到内网的192.168.100.10服务器的SSH服务,从而实现了端口和地址的映射和转换。

2、firewalld

Firewalld是CentOS 7.0新推出的管理Netfilter的工具,用于配置和监控防火墙规则的系统守护进程。它继承了iptables、ip6tables 和 ebtables 的功能,服务由firewalld包提供。Firewalld支持划分区域(zone),每个zone可以设置独立的防火墙规则。

在归入zone的顺序方面:

  1. 首先根据数据包中的源地址将其纳入某个zone。
  2. 然后根据网络接口所属的zone 纳入相应的区域。
  3. 如果前两个条件都不适用,则归入默认的zone。默认情况下,public zone是默认zone,管理员可以根据需要更改。

网络接口默认属于public zone,而lo(本地回环)网络接口属于trusted zone。这三种归入方式的优先级按顺序依次降低。这意味着如果能够根据源地址找到相应的zone,则不会再根据接口进行查找。只有当前两个条件都无法匹配时,才会使用firewalld.conf中配置的默认zone

2.1、区域zone

trusted

允许经过的流量通过

home/internal

仅允许ssh数据通过

work

仅允许ssh,ipp-client,dhcpv6-client数据通过

public

默认区域,仅允许ssh,dhcpv6-client数据通过

external

仅允许ssh数据通过,通过该区域的数据将会伪装(SNAT/DNAT)

dmz

非军事化区域 仅允许ssh数据通过

block

拒绝经过流量

drop

拒绝经过流量(甚至不进行ICMP错误进行回应)

2.2、常用端口

http

80/tcp, https 443/tcp, ssh 22/tcp

telnet

23/tcp

dns

53/udp(解析主机名) 53/tcp(区域同步)

ftp

20/tcp, 21/tcp

dhcp

67/udp, 68/udp

mail

25/tcp(SMTP), 110/tcp(POP3), 143/tcp(IMAP4)

mysql

3306/tcp

ntp

123/udp

samba

137/udp, 138/udp; 139/tcp,445/tcp

iscsi

i3260/tcp

2.3、配置实战

这是24年的rhce的一道考试题

⾮标准端⼝ 82 上运⾏的 Web 服务器在提供内容时遇到问题。根据需要调试并解决问题,使其满⾜ 以下条件:

  • 系统上的 Web 服务器能够提供 /var/www/html 中所有现有的 HTML ⽂件(注:不要删除或以其 他⽅式改动现有的⽂件内容)
  • Web 服务器在端⼝ 82 上提供此内容 Web 服务器在系统启动时⾃动启动 确保SELinux机制运⾏在Enforcing模式
[root@node1 ~]# yum provides "*/semanage"
[root@node1 ~]# yum -y install policycoreutils-python-utils
[root@node1 ~]# semanage fcontext -m -t httpd_sys_content_t /var/www/html/file1
[root@node1 ~]# semanage port -a -t http_port_t -p tcp 82
[root@node1 ~]# restorecon -Rv /var/www/html
# 也可以使⽤man semanage port,然后/EXAMPLE
[root@node1 ~]# firewall-cmd --permanent --add-service=http
[root@node1 ~]# firewall-cmd --permanent --add-port=82/tcp
[root@node1 ~]# firewall-cmd --reload
[root@node1 ~]# systemctl restart httpd
[root@node1 ~]# systemctl enable --now httpd

 

相关推荐

  1. 零基础入门学习Python第二阶05MySQL详解01

    2024-07-15 06:52:01       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-15 06:52:01       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-15 06:52:01       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-15 06:52:01       58 阅读
  4. Python语言-面向对象

    2024-07-15 06:52:01       69 阅读

热门阅读

  1. linux命令更新-iostat 和 iotop

    2024-07-15 06:52:01       22 阅读
  2. IOSUI自动化之mobiledevice

    2024-07-15 06:52:01       22 阅读
  3. Flask `before_request` 方法解析

    2024-07-15 06:52:01       26 阅读
  4. Hive常用内置函数合集

    2024-07-15 06:52:01       20 阅读
  5. ArrayList和LinkedList的区别

    2024-07-15 06:52:01       23 阅读
  6. 【python】数据类型和运算符

    2024-07-15 06:52:01       20 阅读
  7. 前端系列-5 SCSS使用介绍

    2024-07-15 06:52:01       24 阅读
  8. Flutter笔记--WebSocket

    2024-07-15 06:52:01       22 阅读
  9. MongoDB Shard 集群 Docker 部署

    2024-07-15 06:52:01       25 阅读
  10. 数据结构第27节 优先队列

    2024-07-15 06:52:01       20 阅读
  11. 速盾:cdn技术是什么意思?

    2024-07-15 06:52:01       22 阅读
  12. 使用adb连接安卓手机

    2024-07-15 06:52:01       22 阅读