在Linux服务器运维中,防火墙配置是最基础也是最重要的安全措施之一。CentOS 7默认使用firewalld作为防火墙管理工具,相比传统的iptables,它提供了更友好的动态管理接口和区域(zone)概念。
firewalld采用服务(service)和端口(port)两种方式来管理网络访问。服务是预定义的端口集合(如http服务对应80端口),而端口则是直接指定具体的端口号。实际工作中建议优先使用服务方式管理,因为:
查看所有预定义服务:
bash复制firewall-cmd --get-services
防火墙状态管理是运维人员的基本功,以下是生产环境中常用的操作组合:
bash复制# 查看防火墙状态(两种方式)
systemctl status firewalld
firewall-cmd --state
# 临时启停防火墙(立即生效)
systemctl stop firewalld # 停止
systemctl start firewalld # 启动
# 永久启停防火墙(需重启生效)
systemctl disable firewalld # 禁用开机启动
systemctl enable firewalld # 启用开机启动
# 重载防火墙配置(不中断现有连接)
firewall-cmd --reload
重要提示:生产环境强烈不建议直接关闭防火墙,正确的做法是只开放必要的端口或服务。
以开放Tomcat默认端口8080为例,详细说明操作步骤和原理:
bash复制# 1. 添加端口规则(--permanent表示永久生效)
firewall-cmd --zone=public --add-port=8080/tcp --permanent
# 2. 立即生效的两种方式
firewall-cmd --reload # 方式一:重载所有规则
firewall-cmd --zone=public --add-port=8080/tcp # 方式二:添加临时规则
# 3. 验证端口是否开放
firewall-cmd --zone=public --list-ports
firewall-cmd --zone=public --query-port=8080/tcp
实际工作中可能会遇到的一些问题及解决方案:
端口开放但服务仍不可访问
需要开放端口范围
bash复制firewall-cmd --zone=public --add-port=8000-9000/tcp --permanent
误操作删除重要端口
bash复制# 查看操作日志定位问题
journalctl -u firewalld --no-pager | tail -n 50
MySQL作为最流行的开源关系数据库,其安装方式有多种。RPM安装方式虽然步骤稍多,但能让我们更深入理解MySQL的组件构成和依赖关系。
在安装MySQL前,必须做好以下准备工作:
bash复制# 检查已安装的MariaDB包
rpm -qa | grep mariadb
# 强制卸载(假设包名为mariadb-libs-5.5.60-1.el7_5.x86_64)
rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_64
bash复制mkdir -p /usr/local/mysql
chmod 755 /usr/local/mysql
bash复制# 假设安装包在/root目录下
tar -zxvf /root/mysql-5.7.25-1.el7.x86_64.rpm-bundle.tar.gz -C /usr/local/mysql
MySQL 5.7的RPM包被拆分为多个组件,必须按特定顺序安装:
bash复制cd /usr/local/mysql
rpm -ivh mysql-community-common-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-devel-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-compat-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.25-1.el7.x86_64.rpm
# 安装server前检查依赖
yum install -y net-tools perl
rpm -ivh mysql-community-server-5.7.25-1.el7.x86_64.rpm
安装过程中可能遇到的错误及解决方案:
MySQL安装完成后需要进行初始化配置:
bash复制systemctl start mysqld
systemctl enable mysqld
bash复制grep 'temporary password' /var/log/mysqld.log
mysql复制-- 降低密码强度要求(仅测试环境使用)
SET GLOBAL validate_password_policy=LOW;
SET GLOBAL validate_password_length=4;
-- 修改root密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'your_new_password';
-- 创建远程访问用户(生产环境建议创建专用用户)
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' IDENTIFIED BY 'secure_password';
FLUSH PRIVILEGES;
bash复制firewall-cmd --zone=public --add-service=mysql --permanent
firewall-cmd --reload
在纯命令行环境下,lrzsz是最常用的文件传输工具之一。它通过ZModem协议实现文件传输,兼容大多数终端工具。
yum作为RPM的前端工具,主要解决了以下问题:
yum常用命令一览:
bash复制# 搜索软件包
yum search lrzsz
# 查看软件包信息
yum info lrzsz
# 安装软件
yum install -y lrzsz
# 更新软件
yum update lrzsz
# 卸载软件
yum remove lrzsz
安装lrzsz非常简单:
bash复制yum install -y lrzsz
使用技巧:
bash复制rz -be
-b 选项表示二进制模式传输
-e 选项表示对所有控制字符进行转义
bash复制sz filename
bash复制# 发送方重新执行sz命令
# 接收方按Ctrl+C中断后输入:
rz -b -e
终端不支持ZModem协议:
大文件传输失败:
bash复制# 增加缓冲区大小
rz -b -e -B 1024000
中文文件名乱码:
bash复制# 指定字符集
LANG=zh_CN.UTF-8 rz
在实际运维工作中,积累了一些宝贵的经验:
bash复制firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="8080" accept'
xml复制<!-- 在/etc/firewalld/services/下创建自定义服务 -->
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>My Custom Service</short>
<description>...</description>
<port protocol="tcp" port="1234"/>
</service>
ini复制# /etc/my.cnf
[mysqld]
port=3307
bash复制mysql_ssl_rsa_setup --datadir=/var/lib/mysql
sql复制SELECT * FROM mysql.user INTO OUTFILE '/backup/mysql_users.csv';
当lrzsz不可用时,可以考虑:
bash复制# 从本地复制到远程
scp local_file user@remote:/path
# 从远程复制到本地
scp user@remote:/path/file local_path
bash复制# 在文件所在目录执行
python -m SimpleHTTPServer 8000
bash复制# 接收方
nc -l 1234 > file
# 发送方
nc receiver_ip 1234 < file
这些经验都是在实际运维工作中积累的宝贵财富,希望能帮助大家少走弯路。记住,好的运维工程师不仅要会解决问题,更要能预防问题的发生。