文章目录
1. systemd、systemctl 服务管理
字母 d 是守护进程(daemon)的缩写。 systemd 这个名字的含义,就是它要守护整个系统。
systemd 是用于管理 Linux 所有系统资源。在 systemd 中,所有的服务、套接字、设备等都被视为 Unit,翻译为 单元。
systemctl 是用于与 systemd 交互的 命令行工具。systemctl 是 CentOS7 的服务管理工具,用于管理这些 Unit,启动、停止、重启、查看状态以及管理 Unit。
systemctl 提供了一组子命令来管理单个的 unit,其命令 格式 为:
systemctl [command] [unit]
📌 command 主要有:
start:启动 unitstop:关闭 unitrestart:重启 unitreload:不关闭 unit 的情况下,重新载入 unit 的配置文件,让设置生效。daemon-reload:重载所有修改过的配置文件。enable:设置 unit 开机启动disable:设置 unit 开机不被启动status:查看 unit 的状态,会列出是否正在运行、是否开机启动等信息。is-active:查看 unit 是否正在运行is-enable:查看 unit 是否开机启动kill:不要被 kill 这个名字吓着了,它其实是向运行 unit 的进程 发送信号。show:列出 unit 的配置mask:注销 unit,注销后你就无法启动这个 unit 了。unmask:取消对 unit 的注销
查看服务状态
systemctl status sshd
启动服务
systemctl start sshd
停止服务
systemctl stop sshd
重启服务
systemctl restart sshd
重新加载服务
重新加载服务的配置文件,而无需重新启动,不会更改与各种服务进程关联的进程ID。
systemctl reload sshd
开机自启动
systemctl enable sshd
开机解除自启动
systemctl disable sshd
重载systemd
systemctl daemon-reload
reload 作用是重新加载 某个服务 程序的配置文件。
daemon-reload 作用是重新加载系统管理守护进程 (systemd) 的配置文件,而所有的 unit 配置文件都是作为 systemd 程序的配置文件存在的,所以会 重载所有修改过的配置文件。所以结论是:
- 新添加 unit 配置文件时需要执行 daemon-reload
- 有 unit 的配置文件发生变化时也需要执行 daemon-reload
daemon-reload 命令会做很多的事情,其中之一是重新生成依赖树(也就是 unit 之间的依赖关系),所以当你修改了 unit 配置文件中的依赖关系后如果不执行 daemon-reload 命令是不会生效的。
2. firewalld、firewalld-cmd 防火墙
CentOS6 及以前版本采用 iptables,CentOS7 采用新的 firewalld,不过 firewalld 底层仍然调用的是 iptables。
firewalld-cmd 是 firewalld 的 命令行工具。
⚠️注: firewall-cmd 命令需要 firewalld 进程处于 运行 状态。
2.1 firewalld 防火墙服务相关操作
防火墙服务 firewalld 通过 systemctl 操作,命令如下:
## 显示防火墙状态
systemctl status firewalld
## 开启防火墙
systemctl start firewalld
## 关闭防火墙
systemctl stop firewalld
## 重启防火墙
systemctl restart firewalld
## 开机启用
systemctl enable firewalld
## 开机禁用
systemctl disable firewalld
## 查看服务是否开机启动
systemctl is-enabled firewalld
## 查看已启动的服务列表
systemctl list-unit-files|grep enabled
2.2 firewall-cmd 防火墙端口管理
开启端口
firewall-cmd --zone=public --add-port=443/tcp --permanent
- –zone:作用域
- –add-port=443/tcp:添加端口,格式为:
端口 / 通讯协议 - –permanent:永久生效,没有此参数重启后失效
关闭端口
firewall-cmd --zone=public --remove-port=80/tcp --permanent
重启生效防火墙
firewall-cmd --reload
查看端口列表
firewall-cmd --permanent --list-port
查看指定端口开通情况
firewall-cmd --query-port=80/tcp
显示当前系统中的默认区域
firewall-cmd --get-default-zone
显示默认区域的所有规则
firewall-cmd --list-all
查看所有区域的所有规则
firewall-cmd --list-all-zones
伪装IP
防火墙可以实现 伪装IP 的功能,端口转发 就会用到这个功能。
## 检查是否允许伪装IP
firewall-cmd --query-masquerade
## 允许防火墙伪装IP
firewall-cmd --add-masquerade --permanent
## 禁止防火墙伪装IP
firewall-cmd --remove-masquerade --permanent
端口转发
端口转发 可以将指定地址访问指定的端口时,将流量 转发 至指定地址的指定端口。如果转发的目的不指定 IP 的话就默认为本机 IP,如果指定了 IP 却没指定端口,则默认使用来源端口。
📌 如果配置好端口转发之后不能用,可以检查下面两个问题:
- 比如我将 80 端口转发至 8080 端口,首先检查本地的 80 端口和目标的 8080 端口是否开放监听
- 其次检查是否允许
伪装IP,若没允许的话要 开启伪装IP。
## 将 80 端口的流量转发至 8080
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080 --permanent
## 将 80 端口的流量转发至 192.168.0.1:80
firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.0.1 --permanent
## 将 80 端口的流量转发至 192.168.0.1 的 8080 端口
firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.0.1:toport=8080 --permanent
## 删除端口转发
firewall-cmd --remove-forward-port=port=80:proto=tcp:toaddr=192.168.0.1:toport=8080 --permanent
📌 端口转发 用途:
- 当我们想把某个端口隐藏起来的时候,就可以在防火墙上阻止那个端口访问,然后再开一个不规则的端口,之后配置防火墙的端口转发,将流量转发过去。
- 端口转发还可以做流量分发,一个防火墙拖着好多台运行着不同服务的机器,然后用防火墙将不同端口的流量转发至不同机器。
redis默认端口是 6379,mysql默认端口是 3306,如果不想外部访问,就会考虑将这些端口隐藏。
- 通过端口转发将 96379 端口转发至 6379,将 93306 端口转发至 3306。
- 防火墙关闭端口 6379、3306,打开端口 96379、93306。
这样,外部就不能直接通过端口 6379、3306 访问redis、mysql,只能通过
自定义的端口 96379、93306 访问。
案例:📖 centos7 firewall-cmd主机之间端口转发
📌 引申: 微服务还可以通过网关 gateway 控制
微服务通过
gateway端口转发,比如,gateway端口为 9080,manager-server端口为 8081,pay-server端口为 9081,我们不想外部直接访问服务manager-server、pay-server。
- 通过
gatewayURL转发不同的微服务。- 防火墙关闭端口 8081、9081,打开端口 9080。
这样,外部只能通过网关
gateway的端口 9080 访问服务,再由gateway配置的路由规则进行服务转发。
IP黑名单
firewall-cmd --add-rich-rule='rule family=ipv4 source address=14.18.16.0/24 reject' --permanent
3. 服务管理 Unit 配置文件
Unit 一共分成12种。
- Service unit:系统服务
- Target unit:多个 Unit 构成的一个组
- Device Unit:硬件设备
- Mount Unit:文件系统的挂载点
- Automount Unit:自动挂载点
- Path Unit:文件或路径
- Scope Unit:不是由 Systemd 启动的外部进程
- Slice Unit:进程组
- Snapshot Unit:Systemd 快照,可以切回某个快照
- Socket Unit:进程间通信的 socket
- Swap Unit:swap 文件
- Timer Unit:定时器
3.1 查看系统上的 Unit
systemctl 提供了子命令可以查看系统上的 unit,其命令 格式 为:
systemctl [command] [–type=TYPE] [–all]
📌 command 主要有:
list-units:列出当前已经启动的 unit,如果添加 --all 选项会同时列出没有启动的 unit。list-unit-files:根据/lib/systemd/system/目录内的文件列出所有的 unit。type=TYPE:可以过滤某个类型的 unit。
⚠️注: systemctl 不加参数,其实等同于 systemctl list-units。
3.1.1 查看 Unit
## 列出正在运行的 Unit
systemctl list-units
## 列出所有Unit,包括没有找到配置文件的或者启动失败的
systemctl list-units --all
这个列表显示每个配置文件的状态,一共有四种。
- enabled:已建立启动链接
- disabled:没建立启动链接
- stat

最低0.47元/天 解锁文章

5141

被折叠的 条评论
为什么被折叠?



