admin 管理员组

文章数量: 1184232

一:Linux中的防火墙

  • 什么是防火墙

  • windows防火墙的设置

  • linux防火墙设置命令

二:什么是防火墙?

防火墙是一种网络安全设备,它能够:

  • 监控和过滤进出网络的流量

  • 阻止不安全的连接

  • 保护计算机和网络免受未授权访问

  • 创建一个安全边界

简单来说,防火墙就像是电脑的"安全门卫",决定谁能进、谁能出。

三:为什么需要防火墙?

防火墙的重要性:

没有防火墙的系统就像没有锁的房门,任何人都可以随意进出:

  • 黑客可以轻易入侵系统

  • 恶意程序可以自由访问网络

  • 个人数据容易被窃取

  • 系统资源可能被滥用

四:Windows中的防火墙

大多数学生可能更熟悉Windows防火墙:

Windows防火墙的基本操作:

(2)什么是Nginx?

Nginx(发音为"engine-x")是一个高性能的开源Web服务器和反向代理服务器。相比传统的Apache服务器,Nginx具有以下特点:

  • 轻量级 :占用资源少,内存消耗低

  • 高并发 :能够同时处理数万个连接

  • 高性能 :处理静态文件的速度非常快

  • 可扩展性 :丰富的模块系统

  • 反向代理 :可以作为前端服务器分发请求

在Windows系统中,Nginx也可以安装使用,同样需要在防火墙中开放相应端口才能正常访问。

五:Linux中的防火墙

(1)Linux防火墙的发展

Linux系统中的防火墙经历了几次演变:

  • CentOS 5/6 使用的是 iptables 防火墙

  • CentOS 7 开始使用 firewalld 防火墙

httpd 最后字母d一般都是守护进程,后台进程

# firewalld名称的由来
firewalld = fire(火) + wall(墙) + d(守护进程)
​
# 守护进程就是在后台持续运行的程序

iptables和firewalld的主要区别:

  1. iptables是静态的,修改规则需要重新加载整个规则集

  2. firewalld是动态的,可以在运行时修改规则

  3. firewalld引入了"区域"的概念,使管理更简单

  4. firewalld提供了更友好的命令行工具

(2)防火墙区域(Zone)

firewalld引入了"区域"的概念,类似于不同的安全级别:

常见区域简介:

区域名称 信任级别 适用场景
trusted 全信任 完全信任的网络,允许所有连接
home 高度信任 家庭网络,信任大多数计算机
internal 高度信任 内部网络,类似home区域
work 中度信任 工作环境,信任部分计算机
public 低信任 公共场所,仅信任选择的连接( 默认区域
external 低信任 外部网络,用于启用伪装模式
dmz 低信任 隔离区,有限度地允许外部访问
block 拒绝 拒绝所有连接,没有回应
drop 拒绝 丢弃所有连接,无任何回应

六:基本命令

(1)查看防火墙状态
# 查看firewalld是否运行
systemctl status firewalld
# 查看firewalld服务状态
firewall-cmd --state

(2)启动和停止防火墙
# 启动防火墙
systemctl start firewalld
# 停止防火墙(不推荐)
systemctl stop firewalld
# 设置开机自启动
systemctl enable firewalld
# 禁止开机自启动(不推荐)
systemctl disable firewalld
(3)查看防火墙配置
# 查看默认区域(default)firewall-cmd --get-default-zone​
# 查看活动区域firewall-cmd --get-active-zones

七:防火墙规则管理

(1)服务管理

在Linux防火墙中,"服务"是预定义的常用端口和协议组合。

# 查看所有可用服务
firewall-cmd --get-services
# 查看当前区域启用的服务
firewall-cmd --zone=public --list-services
# 临时添加服务
firewall-cmd --zone=public --add-service=http
# 永久添加服务
firewall-cmd --zone=public --add-service=http --permanent
# 移除服务
firewall-cmd --zone=public --remove-service=http --permanent

常用服务示例:

  • http (80端口):网站服务

  • https (443端口):安全网站服务

  • ssh (22端口):远程连接

  • ftp (21端口):文件传输

(2)端口管理

除了服务,还可以直接管理具体端口:

# 查看开放的端口
firewall-cmd --zone=public --list-ports
# 临时开放单个端口
firewall-cmd --zone=public --add-port=8080/tcp
# 永久开放端口范围
firewall-cmd --zone=public --add-port=5000-6000/tcp --permanent
# 关闭端口
firewall-cmd --zone=public --remove-port=8080/tcp --permanent

(3)防火墙规则模式

防火墙规则有两种模式:

  1. 临时模式

    • 立即生效

    • 重启后失效

    • 命令不包含 --permanent 参数

  2. 永久模式

    • 写入配置文件

    • 重启后仍有效

    • 命令包含 --permanent 参数

    • 需要执行 firewall-cmd --reload 使规则立即生效

# 添加永久规则后重新加载
firewall-cmd --zone=public --add-service=https --permanent
firewall-cmd --reload

八:简单应用案例

(1)什么是Apache HTTP Server(httpd)?

Apache HTTP Server(通常简称为httpd)是世界上最流行的Web服务器软件之一。它具有以下特点:

  • 稳定可靠 :经过多年验证的稳定性和可靠性

  • 模块化设计 :丰富的模块可以扩展功能

  • 跨平台 :支持几乎所有主流操作系统

  • 活跃的社区 :大型开发者社区提供支持

  • 多功能 :支持CGI、PHP、Perl等多种技术

Apache在Linux系统中被广泛使用,特别适合:

  • 网站托管

  • 动态内容处理

  • 虚拟主机

  • 身份验证和授权

(2)换源

步骤 1:备份原有的 YUM 源文件 在更换 YUM 源之前,建议先备份系统自带的 YUM 源配置文件,以防需要恢复原配置。

sudo cp /etc/yum.repos.d/CentOS-Base.repo
 /etc/yum.repos.d/CentOS-Base.repo.bak

步骤 2:下载国内源的 YUM 配置文件 以下是一些常用的国内镜像源,你可以选择其中一个替换。

  1. 阿里云源 sudo wget -O /etc/yum.repos.d/CentOS-Base.repo

  2. 清华大学源 sudo wget -O /etc/yum.repos.d/CentOS-Base.repo

  3. 网易源 sudo wget -O /etc/yum.repos.d/CentOS-Base.repo

  4. 中科大源 sudo wget -O /etc/yum.repos.d/CentOS-Base.repo

步骤 3:清理 YUM 缓存 更换源之后需要清理原有的缓存,以便使用新的源进行软件包更新。

sudo yum clean all
sudo yum makecache

(3) 配置Apache Web服务器防火墙

以下是一个简单的Web服务器防火墙配置案例:

# 1. 安装Apache Web服务器
yum install httpd -y
# 2. 启动Apache服务
systemctl start httpd
systemctl enable httpd
# 3. 配置防火墙允许HTTP访问
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --reload
# 4. 验证防火墙规则
firewall-cmd --list-all | grep http
# 5. 测试访问Web服务器
curl 
# 也可以从浏览器访问服务器IP地址

默认情况下,Apache使用80端口提供HTTP服务。如果需要配置HTTPS服务,还需要开放443端口:

# 为Apache添加HTTPS支持
firewall-cmd --zone=public --add-service=https --permanent
firewall-cmd --reload

(4)配置SSH远程连接

保护SSH服务的案例:

# 1. 确认SSH服务状态
systemctl status sshd
# 2. 查看SSH是否已在防火墙中开放
firewall-cmd --list-services | grep ssh
# 3. 如果没有开放,添加SSH服务
firewall-cmd --zone=public --add-service=ssh --permanent
firewall-cmd --reload

九:常见问题排查

(1)服务无法访问

如果配置了防火墙规则但服务仍然无法访问:

# 1. 检查服务是否正在运行
systemctl status httpd  # 以Apache为例
# 2. 确认防火墙是否启用了相应服务或端口
firewall-cmd --list-all
# 3. 暂时关闭防火墙测试
systemctl stop firewalld
# 尝试访问服务,如果现在可以访问,说明是防火墙规则问题
# 4. 检查SELinux状态(可能也会阻止服务)
getenforce
# 如果显示Enforcing,可以尝试临时关闭SELinux
setenforce 0

(2)规则不生效

如果添加的规则没有生效:

# 1. 确认是否添加了--permanent参数但忘记reload
firewall-cmd --reload
​# 2. 检查是否在正确的区域添加了规则
firewall-cmd --get-default-zone
firewall-cmd --get-active-zones
​# 3. 检查防火墙服务是否运行
systemctl status firewalld

十:安全建议

  1. 最小权限原则

    • 只开放必要的服务和端口

    • 定期检查已开放的端口列表

    • 关闭不需要的服务

  2. 记录和审计

    • 启用防火墙日志记录可疑活动

    • 定期审查防火墙规则

  3. 防火墙不是唯一防线

    • 结合其他安全措施(强密码、更新补丁等)

    • 定期备份重要数据

本文标签: 服务 端口 系统