一·故事背景

在前面的基本无操作内容后,来到了大头内容,安全管理!其中的防火墙相关的内容更是重中之重,要好好掌握,熟练运用。

二·SELinux安全上下文

1·SELinux 简介

a. SELinux(Security-Enhanced Linux)

      是Linux内核的强制访问控制(MAC)安全子系统,由美国国家安全局(NSA)与开源社区合作开发。其核心目标是通过精细化权限管理,提升系统安全性,防止恶意程序或用户越权访问敏感资源。

b.核心思想

   最小权限原则:进程/用户只能访问其明确需要的资源。

   基于标签的访问控制:所有资源(文件、端口、进程)被赋予安全上下文(Security Context)。

c.工作模式

Enforcing(强制模式)​
严格执行策略,拒绝违规操作并记录日志(默认生产环境模式)

Permissive(宽容模式)​
仅记录违规行为但不阻止,用于策略调试或兼容性测试

Disabled(禁用模式)​
完全关闭 SELinux,系统回归传统 DAC 权限控制(不推荐,降低安全性)

2·基础操作命令

① 查看SELinux状态

getenforce# 查看当前模式
sestatus# 详细状态(模式/策略类型)

② 切换工作模式

setenforce 0# 切换到Permissive模式
setenforce 1# 切换到Enforcing模式

注意:setenforce仅临时生效,永久修改需编辑 /etc/selinux/config 文件。

3·安全上下文(Security Context)

① 查看上下文

ls -Z /var/www/html # 查看文件/目录的上下文
ps -Z -C httpd# 查看进程的上下文

② 修改上下文

chcon命令
选项 说明 示例消息
-t, --type TYPE 设置安全上下文的类型部分 已将 file.txt 的类型更改为 httpd_sys_content_t
-u, --user USER 设置安全上下文的用户部分 已将 file.txt 的用户更改为 system_u
-r, --role ROLE 设置安全上下文的角色部分 已将 file.txt 的角色更改为 object_r
--reference=FILE 使用指定文件的安全上下文 已从 ref_file 复制上下文到 target_file
-R, --recursive 递归处理文件和目录 已递归更改 dir/ 及其内容的上下文
-h, --help 显示帮助信息 显示帮助菜单
-v, --verbose 显示操作详情 正在更改 file.txt 的安全上下文
--version 显示版本信息 chcon (GNU coreutils) 8.32
semanage 命令
子命令/选项 用途说明 常用选项 示例消息/操作
semanage login 管理SELinux用户与Linux账户的映射关系 -a (添加)、-d (删除)、-m (修改) 将用户 user1 映射到 SELinux 用户 staff_u
semanage user 管理SELinux用户及其角色和权限 -a、-d、-R (角色)、-L (限制) 创建新SELinux用户 web_user 并分配角色 httpd_role
semanage port 管理网络端口与SELinux类型的绑定关系 -a、-d、-t (类型)、-p (协议) 将TCP端口 8080 绑定到 http_port_t 类型
semanage interface 管理网络接口与SELinux类型的绑定关系 -a、-d、-t 将接口 eth1 绑定到 netif_t 类型
semanage module 管理SELinux策略模块(启用/禁用) -a、-d、-e (启用)、-D (禁用) 启用策略模块 my_custom_module
semanage fcontext 管理文件/目录的默认SELinux上下文规则 -a、-d、-t、-s (范围) 添加规则:/webapps(/.*)? 的上下文类型为 httpd_sys_content_t
semanage boolean 管理SELinux布尔值(开关策略功能) -1 (查看)、--on、--off 启用布尔值 httpd_can_network_connect
semanage dontaudit 管理dontaudit规则(是否记录特定访问拒绝事件) --on、--off 关闭对 sshd 的 dontaudit 规则
-h / --help 显示帮助信息 - 显示子命令的帮助菜单
-v / --verbose 显示详细操作信息 - 显示添加端口 8080 的详细过程
-n / --noheading 输出时隐藏列标题 - 仅显示端口列表数据,无标题行

三·Linux防火墙-Firewalld

1·概述

按表现形式划分:

软件防火墙: 集成在系统内部,Linux系统: iptables、firewalld、ufw; windows系统下: windows defender

硬件防火墙: 华为防火墙、思科防火墙、奇安信防火墙、深信服防火墙等

按技术划分:

包过滤防火墙: 检查数据包的源IP、目的IP、源端口、目的端口、TCP的syn控制位

七层防火墙:除了上述检查外,还会检查数据内容

防火墙的作用:

阻止来自网络外部的攻击、进行流量控制

2、 Linux防火墙

① 防火墙结构

用户态:

iptables: 使用iptables命令对防火墙规则进行管理,必须深度理解网络技术和四表五链,对于初                    学者或者网络技术不达标的人员不友好

firewalld:使用firewall-cmd命令对防火墙进行管理,采用的是区域划分的形式。不需要连接底层                     的四表五链,对于初学者比较友好

ufw: 使用ufw命令对防火墙进行管理,命令简单易懂。(默认未安装)

内核态:

四表: 从内核->用户的顺序: raw -> mangle -> nat -> filter

五链: input、output、forward、prerouting、postrouting

② firewalld防火墙

区域分类,功能

九大区域:

block: 阻塞区域 (拒绝任何流量,但给出回应)

dmz: 非军事化管理区域(内部的服务器放于该区域)

drop: 丢弃区域(丢弃一切流量,不给出任何回应)

external: 外部区域 (连接外部网络,例如: internet网络

home: 家庭区域

internal: 内部区域 (连接内部网络)

public:公共区域,默认区域

trusted: 完全信任区域
work: 工作区域

命令分类:
查看命令

firewall-cmd --list-all --zone=public    #查看指定区域的详细信息

添加命令

 firewall-cmd --add-port=80/tcp --zone=public #添加端口到指定区域

修改命令

firewall-cmd --change-interface=ens224 --zone=internal #修改网络接口所属区域

删除命令

firewall-cmd --remove-port=80/tcp --zone=public #删除端口到指定区域

保存规则

firewall-cmd --runtime-to-permanent        #一次性保存所有规则

案例:①禁止外部主机ping本机

本机ip:192.168.71.132

②允许外部主机访问本机的http服务

本机ip:192.168.71.132 ens160

#######环境配置 开始#########
##本机安装httpd服务


#改变SElinux的规则
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum install -y httpd


##启动httpd服务
[root@localhost ~]# systemctl start httpd


##修改httpd服务的监听IP
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
Listen 192.168.80.128:80


##重启httpd服务
[root@localhost ~]# systemctl restart httpd


##验证服务监听状态
[root@localhost ~]# netstat -naptu | grep :80
tcp00 192.168.80.128:800.0.0.0:* LISTEN5884/httpd 


#######环境配置 结束#########
#防火墙配置
[root@localhost ~]# firewall-cmd --change-interface=ens34 --zone=dmz
success


##客户端验证访问##
[root@localhost ~]# curl 192.168.80.128
curl: (7) Failed connect to 192.168.80.128:80; 拒绝连接
##发现无法访问###


#服务端查看dmz区域信息
[root@localhost ~]# firewall-cmd --list-all --zone=dmz

#发现没有放心http服务
#配置dmz区域http服务放行策略
[root@localhost ~]# firewall-cmd --add-service=http --zone=dmz 
success
 

四·网络知识补充

在学习Iptables之前,必须要了解一些关于网络的知识,这样就方便学习Iptables命令

1.交换机配置(交换机又称交换设备)

① 以太网MAC地址

以太网地址用来识别一个以太网上的某个单独的设备或一组设备。
在局域网中,  硬件地址又称为物理地址,或 MAC 地址:如果连接在局域网上的主机或路由器安装有多个适配器,那么这样 的主机或路由器就有多个“地址”

单播MAC地址:  是指第一个字节的最低位是0的MAC地址,代表了一块特定的网卡。

组播MAC地址:  是指第一个字节的最低位是1的MAC地址,代表了一组网卡。

广播MAC地址:   是指每一位都是1的MAC地址,广播MAC地址是组播MAC地址的一个特例,代表了所有网卡。

广播/组播地址只能作为目的地址使用 。

② Ethernet II帧格式

  1. 前导码(Preamble)​​:7字节
    • 功能:用于同步发送方和接收方的时钟,确保数据传输的时序一致。
  2. 帧起始定界符(Start Frame Delimiter, SFD)​​:1字节
    • 功能:标识帧的正式开始,通常为二进制模式10101011
  3. 目的地址(Destination Address)​​:6字节
    • 功能:存储目标设备的MAC地址(如00:1A:2B:3C:4D:5E),用于路由帧到正确的接收方。
  4. 源地址(Source Address)​​:6字节
    • 功能:存储发送方设备的MAC地址,用于标识帧的来源。
  5. 类型(Type/Length)​​:2字节
    • 功能:标识上层协议的类型,例如:
      • 0800H(十六进制)表示IP协议(用于互联网数据传输)。
      • 0806H表示ARP协议(用于地址解析)。
    • 注意:该字段有时也用于表示数据字段的长度,但图中明确标注为“类型”。
  6. 数据(Data)​​:46–1500字节
    • 功能:承载实际传输的上层数据(如IP数据包)。最小长度46字节是为了确保帧总长度满足最小要求(64字节),避免冲突;最大1500字节是标准以太网的最大传输单元(MTU)。
  7. 帧校验序列(Frame Check Sequence, FCS)​​:4字节
    • 功能:用于错误检测,通常使用CRC(循环冗余校验)算法。接收方计算校验和,如果与FCS不匹配,则丢弃帧以请求重传。

③ 交换机工作原理

1·构建网络

运行Cisco Packet Tracer软件,先添加一个交换机和三个主机,配置ip地址

 点击交换机,进入用户模式

打开模拟模式

2.模式切换

从用户模式进入特权模式

从特权模式进入全局配置模式

3.连通

初始状态

此时使用1.1ping一下另外一台主机1.2

MAC地址学习(源MAC

广播未知数据帧

接收方回应,交换机再次学习MAC地址

此时通过交换机,1.2收到信息,1.3拒绝信息,交换机是广播,然后再返回1.1,此时交换机接收了两个信息

交换机实现单播通信

④交换机以太网接口的工作模式

a.交换机以太网接口双工模式

单工 两个数据站之间只能沿单一方向传输数据

半双工:两个数据站之间可以双向数据传输,但不能同时进行

全双工:两个数据站之间可双向且同时进行数据传输

b.交换机以太网接口速率

接口连接时进行协商

协商失败则无法正常通信

2·路由器配置

网络层作用: 定位,路由,流控; 封装IP头部

① IP数据包格式

 

字段名 位数 功能说明
版本(Version)​ 4 bit 标识IP协议版本(如IPv4值为4,IPv6值为6)。
首部长度(IHL)​ 4 bit 表示IP首部长度(单位:​4字节)。最小值为5(20字节),最大值为15(60字节)。
优先级与服务类型(ToS)​ 8 bit 定义数据包优先级和服务类型(如延迟、吞吐量优化),现被DSCP(差分服务)取代。
总长度(Total Length)​ 16 bit 整个IP数据报的长度​(首部+数据),单位:字节。最大值为65535字节。
标识符(Identification)​ 16 bit 唯一标识一个数据报。分片时,同一数据报的所有分片共享此标识符。
标志(Flags)​ 3 bit 控制分片:
第1位:保留位(0)
第2位:禁止分片(DF,1=禁止)
第3位:更多分片(MF,1=后续还有分片)
段偏移量(Fragment Offset)​ 13 bit 分片后,当前片在原数据中的偏移位置(单位:​8字节)。
生存时间(TTL)​ 8 bit 数据报最大经过的路由器数。每经过一个路由器减1,归0时被丢弃(防环路)。
协议号(Protocol)​ 8 bit 标识上层协议类型:
6=TCP,17=UDP,1=ICMP,89=OSPF等。
首部校验和(Header Checksum)​ 16 bit 仅校验IP首部是否传输错误(不包含数据部分)。
源地址(Source IP)​ 32 bit 发送方的IPv4地址(如192.168.1.10)。
目标地址(Destination IP)​ 32 bit 接收方的IPv4地址(如10.0.0.2)。
可选项(Options)​ 可变 扩展功能(如时间戳、路由记录),一般为空(IPv6已删除此字段)。
数据(Data)​ 可变 上层协议数据(如TCP段、ICMP消息等)。

MAX TTL(每经过一个路由器减1):

windows 64

linux128

网络设备:255

② 广播与广播域

a.广播与广播域

          广播:将广播地址做为目的地址的数据帧

          广播域:网络中能接收到同一个广播所有节点的集合

b.MAC地址广播

          广播地址为FF-FF-FF-FF-FF-FF

c.IP地址广播

           广播MAC地址为FF-FF-FF-FF-FF-FF

           广播IP地址为IP地址网段的广播地址

通信方式 目标设备数 地址类型 典型协议 适用场景
广播 域内全部设备 MAC全F / IP全1 ARP, DHCP 局域网设备发现
单播 单一指定设备 具体MAC或IP地址 HTTP, FTP 点对点精准通信
组播 特定组内设备 IPv4 D类地址(224.0.0.0起) OSPF, IPTV流媒体 高效一对多分发(如视频会议)

③ 路由的概念

跨越从源主机到目标主机的一个互联网络来转发数据包的过程
使用1.1去ping2.1,由1.1先去交换机,交换机广播,进入路由器,此时路由器返回1.1,再次1.1进入交换机,然后进入路由器,再进入右方交换机,进行广播,到2.1,然后2.1收到回复到路由器,但是路由器未识别再次返回2.1,学习后左右全部通后,2.1通信即可返回1.1,实现ping通。

3·传输层协议

① TCPTransmission Control Protocol ),传输控制协议

TCP是面向连接的、可靠的进程到进程通信的协议

TCP提供全双工服务,即数据可在同一时间双向传输

TCP报文段

TCP将若干个字节构成一个分组,叫报文段(Segment

TCP报文段封装在IP数据报文中

名称 描述
序号
发送端为每个字节进行编号,便于接收端正确重组
确认号 用于确认发送端的信息
窗口大小 用于说明本地可接收数据段的数目,窗口大小是可变的
SYN 同步序号位,TCP需要建立连接时将该值设为1
ACK 确认序号位,当该位为1时,用于确认发送方的数据
FIN TCP断开连接时将该位置为1

维度 三次握手 四次挥手
目的 建立可靠双向连接 安全终止全双工连接
交互次数 3次 4次
合并可能性 SYN与ACK可合并(SYN-ACK) ACK与FIN通常不可合并
状态复杂性 简单(仅SYN_SENT/SYN_RCVD 复杂(含TIME_WAIT/CLOSE_WAIT
本质原因 避免历史连接冲突 适应全双工数据流异步关闭
端口
协议 说  明
21
FTP FTP服务器所开放的控制端口
23
TELNET 用于远程登录,可以远程控制管理目标计算机
25
SMTP SMTP服务器开放的端口,用于发送邮件
80
HTTP 超文本传输协议
110
POP3 用于邮件的接收

② UDPUser Datagram Protocol ),用户数据报协议

无连接、不可靠的传输协议

花费的开销小

UDP报文的首部格式

UDP长度:用来指出UDP的总长度,为首部加上数据。

校验和:用来完成对UDP数据的差错检验,它是UDP协议提供的唯一的可靠机制

端口
协议 说  明
69
TFTP 简单文件传输协议
111
RPC 远程过程调用
123
NTP 网络时间协议

五·Linux防火墙-Iptables

1· Iptables概述

Iptables 是一个用户空间程序,可以用于设置和管理 Linux 操作系统的内核级防火墙。它通过表、链和规则组成,可以灵活地根据不同的需求进行配置。

iptables 具有以下特点:

  • Iptables 作为内核级别的防火墙,具有高效、稳定、安全等优点。

  • Iptables 的表、链、规则结构非常灵活,可适应各种不同的网络环境和应用场景。

  • Iptables 相对于其他防火墙工具而言比较容易学习和掌握,并且拓展性非常强。

2· Iptables 组成

Iptables 的核心是由表(table)、链(chain)和规则(rule)三部分组成的。

表(Table)

在 iptables 中,表是一个规则的集合,每个表都包含若干个链和一些相关的规则。常用的五种 table 如下:

  • raw表:确定是否对该数据包进行状态跟踪。包含两个规则链,OUTPUT、PREROUTING。

  • mangle表:修改数据包内容,用来做流量整形的,给数据包设置标记。包含五个规则链,INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING。

  • nat表:负责网络地址转换,用来修改数据包中的源、目标IP地址或端口。包含三个规则链,OUTPUT、PREROUTING、POSTROUTING。

  • filter表:负责过滤数据包,确定是否放行该数据包(过滤)。包含三个规则链,INPUT、FORWARD、OUTPUT。

表之间的优先级

数据包到达防火墙时,规则表之间的优先顺序 ​ raw > mangle > nat > filter

链(Chain)

在 iptables 中,链是一个规则的集合,每个链都包含一些相关联的规则。

  • INPUT链: 当接收到防火墙本机地址的数据包(入站)时,应用此链中的规则。

  • OUTPUT链: 当防火墙本机向外发送数据包(出站)时,应用此链中的规则。

  • FORWARD链: 当接收到需要通过防火墙发送给其他地址的数据包(转发)时,应用此链中的规则。

  • PREROUTING链: 在对数据包作路由选择之前,应用此链中的规则,用来修改目的地址,如DNAT。

  • POSTROUTING链: 在对数据包作路由选择之后,应用此链中的规则,用来修改源地址,如SNAT。

链表对应关系

数据包过滤的匹配流程

  • 入站

入站数据包从A网络发到B网络,首先发到防火墙,先后顺序经过有PREROUTING链的三个表(raw、mangle、nat),如果都是放通状态的会经过路由选择,然后根据目的地址一层一层往上送,经过有INPUT的两个表(mangle、filter),一直送到应用程序。

  • 转发

目的地不是本机,数据包先从A网络过滤,经过PREROUTING链,看是否是自己的目的地址,如果是外网到内网需要用nat转换成内网IP,找到内网用户,经过FORWARD链进行过滤,允许放通的到达POSTROUING链,再把内网地址转换成公网,这样数据包才能回去;如果是内网往外网发顺序就是反过来。

  • 出站

从本机的应用程序发出来, 经过路由选择,让路由知道从哪里发,先后顺序经过有OUTPUT链的四个表(raw、mangle、nat、filter),都放通后到达POSTROUING链的两个表(mangle、nat),如果没有什么转换地址,就出站。

  • 总结

当一个数据包进入网卡时,数据包首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。

如果数据包是进入本机的,数据包就会沿着图向上移动,到达INPUT链。数据包到达INPUT链后, 任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包经过OUTPUT链,然后发送出去。

如果数据包是要转发出去的,且内核允许转发,数据包就会向右移动,经过FORWARD链,然后到达POSTROUTING链输出。

​​​​​​​规则匹配策略
自上而下进行顺序匹配,匹配到即停止,不会再去查看下面的规则,然后根据允许或者丢弃或者拒绝等规则进行数据包的处理

3· Iptables防火墙配置

iptables命令

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

#注意:链名必须大写;控制类型必须大写

选项 作用
-t 指定表名(raw、mangle、nat、filter)
-j 指定控制类型
​​​​​​​
常用管理选项
选项 作用
-A (--append) 在指定链的末尾追加一条新的规则
-I (--insert) 在指定链的开头插入一条新的规则;未指定序号时默认作为第一条规则
-R (--replace) 修改、替换指定链中的某一条规则,可指定规则序号或具体内容
-P (--policy) 设置指定链的默认策略
-D (--delete) 删除指定链中的某一条规则,可指定规则序号或具体内容
-F (--flush) 清空指定链中的所有规则;若未指定链名,则清空表中的所有链
-L (--list) 列出指定链中所有的规则;若未指定链名,则列出表中的所有链
-n (--numeric) (搭配-L使用)使用数字形式显示输出结果,如显示IP地址而不是主机名
-v (搭配-L使用)显示详细信息,包括每条规则的匹配包数量和匹配字节数
--line-numbers (搭配-L使用)查看规则时,显示规则的序号
常用控制类型​​​​
控制类型 作用
ACCEPT 允许数据包通过
DROP 直接丢弃数据包,不给出任何回应消息
REJECT 拒绝数据包通过,会给数据发送端一个响应信息
SNAT 修改数据包的源地址
DNAT 修改数据包的目的地址
MASQUERADE 伪装成—个非固定公网IP地址
LOG 在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则。(没有真正处理数据包)
匹配条件​​​​​​​
匹配条件 说明
-p 指定要匹配的数据包的协议类型
-s 指定要匹配的数据包的源IP地址
-d 指定要匹配的数据包的目的IP地址
-i 指定数据包进入本机的网络接口
-o 指定数据包离开本机做使用的网络接口
--sport 指定源端口号
--dport 指定目的端口号
命令操作
​​​​​​​
添加新的规则

​​​​​​​在filter表的INPUT链末行添加拒绝icmp的规则

不指定行,是在指定链首行插入规则(允许tcp 22端口)

查看规则

​​​​​​​查看指定表的规则,以数字形式显示​​​​​​​

删除规则
​​​​​​​

注意
       若规则列表中有多条相同的规则时,按内容匹配只删除的序号最小的一条按号码匹配删除时,确保规则号码小于等于已有规则数,否则报错按内容匹配删数时,确保规则存在,否则报错

清空规则
​​​​​​​

注意
-F仅仅是清空链中的规则,并不影响-Р设置的默认规则,默认规则需要手动进行修改。

-P设置了默认规则为DROP后,使用-F一定要小心,因为iptables的修改是立刻生效的!

防止把允许远程连接的相关规则清除后导致无法远程连接主机,此情况如果没有保存规则可重启主机解决如果不写表名和链名,默认清空filter表中所有链里的所有规则

修改规则
​​​​​​​

4· 规则的匹配

通用匹配

可直接使用,不依赖其他条件或扩展包括网络协议、IP地址、网络接口等条件。

类型 选项
协议匹配 -p 协议名
地址匹配 -s 源地址 -d 目的地址(可以是IP、网段、域名、空(代表任何地址))
接口匹配 -i 入站网卡 -o 出站网卡

​​​​​​​(使用!取反)不是icmp协议的其他数据包全部接受

虽然不是icmp包都接受,但是没有指定icmp包的规则,所以icmp包默认还是接受的

将指定主机192.168.116.20的数据包丢弃

拒绝指定网段的数据包从ens160网卡进入

隐含匹配

某些条件,如端口、TCP标记、ICMP类型,隐含要求以特定的协议匹配作为前提。

协议端口匹配
​​​​​​​

--sport 和 --dsport 必须配合 -p 指定协议使用!

类型 作用
--sport 1000 匹配源端口是1000的数据包
--sport 1000:3000 匹配源端口是1000-3000的数据包
--dport :3000 匹配目标端口是3000及以下的数据包
--dport 1000: 匹配目标端口是1000及以上的数据包

​​​​​​​允许tcp的20和21端口通过(即允许ftp数据包)

tcp标记匹配
​​​​​​​​​​​​​​

--tcp-flags 配合 -p tcp 使用,指定tcp标记(SYN、ACK、RST、URG、PSH、FIN)

##丢弃SYN请求包,允许其他指定的数据包
[root@localhost ~]# iptables -A INPUT -p tcp --tcp-flags SYN,RST,ACK SYN -j ACCEPT

##SYN,RST,ACK SYN前面指定包范围,空格后再指定


##表明前面指定的里面,除了这空格后面的SYN,其他都放行

##tcp三次握手第一次接受SYN,拒绝其他,第二次发送SYN和ACK
[root@localhost ~]# iptables -I INPUT -p tcp --dport 22 --tcp-flags   SYN,ACK,FIN,RST,URG,PSH SYN -j REJECT


[root@localhost ~]# iptables -I OUTPUT -p tcp --dport 22 --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN,ACK -j REJECT

ICMP类型匹配
​​​​​​​

--icmp-type 配合 -p icmp 使用,指定icmp类型(字符串或数字代码)
icmp类型可用iptables -p icmp -h 查看帮助信息

类型 含义
Echo-Request(代码为8) 请求
Echo-Reply (代码为0) 回显
Destination-Unreachable(代码为3) 目标不可达
​​​​​​​
显式匹配

要求以 -m (扩展模块)的形式明确指出类型,包括多端口、MAC地址、IP范围、数据包状态等条件。

多端口匹配
​​​​​​​

-m multiport --sport 源端口列表
-m multiport --dport 目的端口列表

允许tcp的20,21,22,53端口

ip范围匹配

-m iprange --src-range 源IP范围
-m iprange --dst-range 目的IP范围

禁止转发源ip范围是192.168.10.100-192.168.10.200的udp数据包

mac地址匹配

-m mac --mac-source 源MAC地址

状态匹配
​​​​​​​

-m state --state 连接状态

常见的连接状态​​​​​​
状态 含义
NEW 本机要连接目标主机,在目标主机上看到的第一个想要连接的包
ESTABLISHED 本机已与目标主机进行通信,判断标准只要目标主机回应了第一个包,就进入该状态
RELATED 本机已与目标主机进行通信,目标主机发起新的链接方式,一般与ESTABLISHED配合使用
INVALID 无效的封包,例如数据破损的封包状态

第一个包我只看22端口的包(-p tcp是隐含匹配,可以省略-m tcp)

5·Iptables配置NAT地址转换

 配置SNAT

应用场景

局域网主机共享转换的公网ip接入internet公网(内 --> 外)

模拟实验环境
​​​​​​​

私网客户端一台、网关服务器一台(设置iptables防火墙)、外网web服务端(有httpd服务)


三台都需要关闭默认防火墙firewalld和selinux


准备私网客户端:设置网卡网段为192.168.1.0/24;ip设为192.168.1.1;网关设为192.168.1.254。


准备网关服务器:一个网卡设为192.168.1.0/24网段,并设置ip为192.168.1.254;另一个网卡设为192.168.2.0/24网段,并设置ip为192.168.2.254;添加路由转发功能;下载 iptables-services(默认自带) 并开始iptables之后做防护墙策略。


准备外网web服务端:设置网卡网段为192.168.2.0/24;ip设为192.168.2.254;下载并开启httpd服务。

转换为固定公网ip

iptables -t nat -A POSTROUTING -s 源网段 -o 出站网卡 -j SNAT --to 转换的公网地址
iptables -t nat -A POSTROUTING -s 源网段 -o 出站网卡 -j SNAT --to-source 转换的公网地址范围(如10.0.0.1-10.0.0.10)
注:每一个做转换的公网ip,一般可以支持内网100~200台主机。

转换为非固定的公网ip(动态)

iptables -t nat -A POSTROUTING -s 源网段 -o 出站网卡 -j MASQUERADE

配置DNAT

应用场景

在internet公网中发布位于企业局域网的服务器(外 --> 内)​​​​​​​

模拟实验环境
​​​​​​​

私网客户端一台(有httpd服务)、网关服务器一台(设置iptables防火墙)、外网web服务端
三台都需要关闭默认防火墙firewalld和selinux


可参考上个模拟场景,再为私网主机增设httpd服务使之成为私网web服务端,将原来的外网主机当做客户端。


为私网主机添加httpd服务并启用

转换为私网ip

iptables -t nat -A PREROUTING -i 连接外部网络的接口名称 -d 外部接口IP地址 -p tcp --dport 发布的端口号 -j DNAT --to-destination 服务器内部网络地址:服务实际端口号

6·iptables防火墙策略的备份和恢复

​​​​​​​iptables的配置存放在/etc/sysconfig/iptables 文件中,我们对iptables所做的策略修改,虽然会立刻生效,但是并没有保存下来,当我们重启iptables防火墙时,会读取配置文件中设置的策略,我们之前修改过的策略便失效了。所以需要对修改的iptables策略进行备份和恢复。

iptables-save > 备份文件 将修改的iptables策略导入到备份文件中


iptables-restore < /opt/iptables.bak 将备份文件中的策略还原到配置文件中


systemctl restart iptables.service 重启服务生效

##查看配置文件中的默认策略
[root@localhost opt]#cat /etc/sysconfig/iptables-config

##使用iptables -nL查看修改过的策略
[root@localhost opt]#iptables -nL

##对自定义的iptables策略做备份(将命令导入一个备份文件iptables.bak)
[root@localhost opt]# iptables-save > /opt/iptables.bak
[root@localhost opt]# cd /opt
[root@localhost opt]# cat iptables.bak

##重启服务(用作模拟未保留修改的策略),再查看发现策略又恢复成了配置文件中的默认策略
[root@localhost opt]# systemctl restart iptables.service

[root@localhost opt]# iptables -nL

##将备份文件中的策略恢复到配置文件中,再重启服务就还原成功了
[root@localhost opt]# iptables-restore < /opt/iptables.bak

[root@localhost opt]# systemctl restart iptables.service

[root@localhost opt]# iptables -nL


#rocky系统,若要启动时读取iptables规则
iptables-save > /opt/iptables.save
vim /etc/profile
iptables-restore < /opt/iptables.save

7·案例实战

网络规划
  • 内部PC1位于内网区域,地址段为: 192.168.1.0/24,pc1地址为:192.168.1.1/24,网关地址为:192.168.1.254/24

  • 服务器S1位于服务器区域,地址段为: 192.168.2.0/24,pc1地址为:192.168.2.1/24,网关地址为:192.168.2.254/24

  • PC2位于互联网区域,模拟外部互联网,地址段为:10.0.0.0/8,pc2地址为:10.0.0.1/8

  • Linux防火墙的三块网卡为别连接不同的网络区域,地址分别为 :ens33 192.168.1.254/24;ens34 10.0.0.100/8 ;ens35 192.168.2.254/24

实验要求
  • A·内部网络中的pc1采用SNAT访问外部互联网,但是无法ping到内部网关。

  • B·内部网络服务器s1通过DNAT发布服务到互联网。

  • C·互联网主机pc2能够访问DMZ区域的服务器,但是不能够进行ping和ssh连接。

规划准备

防火墙配置

PC1配置

PC2配置

S1服务器配置

A

先将pc1的源ip转为防火墙ip

再去防火墙设置,将来自PC1的icmp请求拒绝掉

此时ping内部网关无法ping通

B

先在防火墙上设置,将80号端口转发至服务器S1

再允许外网到服务器S1的http(nginx)流量

C

禁止PC2的ping

禁止ssh连接

六·总结

今日的重点是firewall的操作,但是目前最实用的还是明日的iptables,重点是Iptables的运用,明日会继续更新。


本次更新了在学习Iptables之前的网络知识,掌握好更容易理解Iptables命令,这一部分是很重要的,希望可以多多回顾,为之后打下基础。


本次更新iptables的语法,命令,结构,以及一些使用场景,实战案例,重点掌握iptables相关内容。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐