03.Linux高级管理
1. Linux 中的 firewalld
1.1. 什么是防火墙
防火墙主要用于防范网络攻击,防火墙一般分为软件防火墙、硬件防火墙
1.2. 防火墙的作用
主要作用是保护系统免受未经授权的访问和攻击,它有助于防止黑客利用系统中的安全漏洞,以及限制对特定网络服务的访问。
1.3. Linux 防火墙分类
CentOS6——>防火墙——>iptables 防火墙 防火墙系统管理工具
CentOS7——>防火墙 ——>firewalld 防火墙
1.4. firewalld 防火墙
firewalld 工具是一个面向用户、方便用户的防火墙配置工具,系统内核依然是基于 iptables 规则来工作的。firewalld 工具其实就是在帮我们配置 iptables 防火墙规则。
1.4.1. firewalld 防火墙服务管理
启动防火墙
systemctl start firewalld停止防火墙
systemctl stop firewalld重启防火墙
systemctl restart firewalld查看防火墙状态
systemctl status firewalld设置开机启动
systemctlenablefirewalld设置开机不启动
systemctl disable firewalld重载防火墙
systemctl reload firewalld1.4.2. 防火墙 zone 的概念
firewalld 相比于 iptables 增加区域(zone)的概念,在 firewalld 中的区域会预先准备不同的防火墙策略集合。
| 区域名 | 默认规则(策略) |
|---|---|
| trusted | 允许所有数据包 |
| home | 拒绝流入的流量,除非与流出的流量相关;而如果流量与 ssh、mdns、ipp-client、amba-client 与 dhcpv6-client 服务相关,则允许流量 |
| internal | 等同于 home 区域 |
| work | 拒绝流入的流量,除非与流出的流量相关;而如果流量与 ssh、ipp-client、dhcpv6-client 服务相关,则允许流量 |
| public | 拒绝流入的流量,除非与流出的流量相关;而如果流量与 ssh、dhcpv6-client 服务相关,则允许流量 |
| external | 拒绝流入的流量,除非与流出的流量相关;而如果流量与 ssh 服务相关,则允许流量 |
| dmz | 拒绝流入的流量,除非与流出的流量相关;而如果流量与 ssh 服务相关,则允许流量 |
| block | 拒绝流入的流量,除非与流出的流量相关 |
| drop | 拒绝流入的流量,除非与流出的流量相关 |
对应配置文件位置
ll /lib/firewalld/zones1.5. 防火墙命令及策略
管理防火墙策略,可以通过 firewalld 的管理工具 firewall-cmd 来对 firewalld 进行防火墙策略配置。
1.5.1. firewall-cmd 工具常用命令
查看防火墙状态
firewall-cmd--state或
systemctl status firewalld查看当前活动 zone 信息
firewall-cmd --get-active-zones查看默认的 zone
firewall-cmd --get-default-zone设置默认的 zone
firewall-cmd --set-default-zone=zone_name查看指定 zone 的详细信息
firewall-cmd --info-zone=zone_name查看当前 zone 可用的服务
firewall-cmd --list-services查看所有的 zones
firewall-cmd --list-all-zones查看当前所有 zone 名称
firewall-cmd --get-zones查看现有的规则
firewall-cmd --list-all重新加载防火墙规则
firewall-cmd--reload1.5.2. 基于服务配置 firewalld 策略
- 基于服务添加策略
基本语法:
临时修改(重载失效)
firewall-cmd --add-service=service_name永久修改(重载生效)
firewall-cmd --add-service=service_name--permanentfirewall-cmd--reload案例:
安装 httpd 服务,并配置防火墙规则,httpd 是一个 web 服务,安装后可以通过虚拟机的 IP地址加上端口 80,即可访问到一个 apache 服务界面
安装
yum-yinstallhttpd启动
systemctl start httpd查看状态
systemctl status httpd查看端口
ss-taunlp|grep80测试访问
http:/192.168.19.128/
无法访问,原因是 firewalld 拦截
配置 firewalld 规则
firewall-cmd --list-allfirewall-cmd --add-service=http备注:服务必须在/usr/lib/firewalld/services 目录中
ll /usr/lib/firewalld/services|grephttpfirewall-cmd --list-allfirewall-cmd--reloadfirewall-cmd --list-all防火墙重载后,规则失效
永久配置:
firewall-cmd --add-service=http--permanent永久配置,需要冲在防火墙才能生效配置
基于服务删除策略
firewall-cmd --remove-service=service_name永久修改(重载生效)
firewall-cmd --remove-service=service_name--permanentfirewall-cmd--reload案例:
临时删除
firewall-cmd -remove-service=http临时修改,重载后失效
永久修改
永久修改,需要重载
防火墙才能生效配置
1.5.3. 基于端口配置 firewalld 策略
基于端口添加策略
基本语法:
firewall-cmd --add-port=port/protocolfirewall-cmd --add-port=port/protocol--permanentfirewall-cmd--reload案例:
firewall-cmd --add-prot=80/tcpfirewall-cmd --add-prot=80/tcp--permanentfirewall-cmd--reload基于端口删除策略
firewall-cmd --remove-port=port/protocolfirewall-cmd --remove-port=port/protocol--permanentfirewall-cmd--reload案例:
firewall-cmd --remove-port=80/tcpfirewall-cmd --remove-port=80/tcp--permanentfirewall-cmd--reload1.5.4. 基于规则配置 firewalld 策略(扩展)
基于规则添加策略
基本语法:
临时修改(重载失效)
firewall-cmd --add-rich-rule='rule 规则明细 action 'firewall-cmd --add-rich-rule='rule 规则明细 action '--permanentaction 对添加的策略实现的动作
动作
Reject 拒绝,对进来的流量直接拒绝
Accept 接收,对进来的流量接收
Drop 丢弃,对进来的流量包直接丢弃
reject 与 drop 的区别
DROP 动作只是简单的丢弃数据,并不反馈任何回应。需要 Client 等待超时,Client 容易发现自己被防火墙所阻挡
REJECT 动作则会更加礼貌的返回一个拒绝(终止)数据包,明确的拒绝对方的连接动作。连接马上断开,Client 会认为访问的主机不存在。
使用 Firewalld 和 rich rules 常见的网络访问控制场景:
源和目标地址过滤:
允许特定网段地址的访问
firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.10.0/24 accept'允许特定 IP地址访问
firewall-cmd --add-rich-rule=' rule family=ipv4 source address=192.168.10.129 accept'服务过滤:
允许特定协议的访问
firewall-cmd --add-rich-rule='rule family=ipv4 service name=http accept'协议过滤:
允许特定协议的访问
firewall-cmd --add-rich-rule='rule family=ipv4 protocol value=icmp accept'源和目标端口过滤:
允许从特定端口访问特定目标端口
firewall-cmd --add-rich-rule='rule family=ipv4 service name=ssh source port=1024-65535 destination port=22 accept'高级条件过滤
限制特定 IP地址的访问速率
firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.19.10 limit value=3/m burst=5 accept'表示源地址 192.168.19.10 允许每分钟三次封包,每次封包的数量不能超过 5 个!
网络地址转换和端口转发:
启用源地址转换
firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.19.10 masquerade'启用源地址 192.168.19.10 伪装
firewall-cmd--permanent--add-rich-rule'rule family=ipv4 source address=192.168.10.1 drop'基于规则删除策略
基本语法
临时修改(重载失效)
firewall-cmd --remove-rich-rule='rule 规则明细 action '永久修改(重载生效)
firewall-cmd --remove-rich-rule='rule 规则明细 action '--permanentfirewall-cmd--reload临时删除
firewall-cmd --remove-rich-rule='rule family=ipv4 source address="192.168.10.0/24" port port="80" protocol="tcp" accept'永久删除
firewall-cmd --remove-rich-rule='rule family=ipv4 source address="192.168.10.0/24" port port="80" protocol="tcp" accept'--permanentfirewall-cmd--reload2. 计划任务
2.1. 什么是计划任务
操作系统设置不可能完全由人去操作,对一些特顶时间的任务,我们可以设置计划任务,让服务在规定时间去执行。
2.2. Linux 中的计划任务
2.2.1. 周期性计划任务 crontab
基本语法:
crontab [ 选项 ]
-l:list,显示当前已经设置的计划任务
-e:使用 vim 编辑器编辑计划文件
- 计划任务的编辑
计划任务的规则语法格式,以行为单位,一行就是一个计划:分 时 日 月 周 要执行的命令(必须使用命令的完整路径,可以使用 which 查看)
取值范围
分:0-59
时:0-23
日:1-31
月:1-12
周:0-7,0 和 7 表示星期天
四个符号:
*:表示取值范围中的每个数字
-:表示做连续区间表达式的,表示 1-7;可以写为 1-7
/:表示每多少个执行一次,如:每 30 分钟一次,*/30
,:表示多个取值,例如每个月的 1 号 5 号 15 号执行,1,5,15
- 计划任务案例
**案例 1:**每月 1、10、22 日的 4:45 重启 network 服务
定制格式
# 分 时 日 月 周 /usr/bin/systemctl restart network4541,10,12 * * /usr/r/bin/systemctl restart network**案例 2:**每周六、周日的 1:10 分 重启 network 服务
定制格式
# 分 时 日 月 周 /usr/bin/systemctl restart network101* *6,7/usr/r/bin/systemctl restart network**案例 3:**每天 18:00 到 23:00 之间每隔 30 分钟重启 network 服务
定制格式
# 分 时 日 月 周 /usr/bin/systemctl restart network*/3018-23 * * * /usr/r/bin/systemctl restart network**案例 4:**每隔两天的上午 8 点到 11 点的第三分钟和第十五分钟执行一次重启 network 服务
定制格式
# 分 时 日 月 周 /usr/bin/systemctl restart network3,158-11 */2 * * /usr/bin/systemctl restart network案例 5:每月每周每天每小时每分钟,创建一个内容为 1 的文件名为 readme.txt 的文件
crontab-e* * * * * /usr/bin/echo1>>/root/readme.txt注 意: 计划任务设置完成后,确保计划任务服务是运行状态
systemctl status crond systemctl start crond- 计划任务权限
crontab 通过 /etc/cron.allow(白名单)和 /etc/cron.deny(黑名单)文件来限制用户是否可以使用 crontab
规则如下:
- 如果文件/etc/cron.allow 存在,则只允许在 cron.allow 提及的用户名使用。
- 如果/etc/cron.allow 不存在,则检查/etc/cron.deny,然后允许 cron.deny 未提及的每个用户名在使用。
- 空的/etc/cron.deny 表示每个用户都可以使用 crontab。
- 如果两者都不存在,则只允许超级用户在使用。
- 白名单优于黑名单,如果一个用户同时存在两个名单文件,则会被默认允许创建计划任务
- 计划任务的保存文件
计划任务的文件具体保存在/var/spool/cron/用户名称
案例:
crontab-e*/5 * * * * /usr/bin/touch /tmp/linux.txtsu- user1crontab-e系统中没有 user1 用户自行添加
*/5 * * * * /usr/bin/touch /tmp/user1.txtexit验证
ll /var/spool/cron/注意:如果删除计划任务文件,等于删除了计划任务,也可以通过创建文件来创建计划任务
- 计划任务日志
在实际应用中,一般会通过计划任务日志,去 查看任务的运行情况
tail-f/var/log/cron2.2.2.一次性计划任务
在 linux 系统下,有两个命令可以实现计划任务:crontab 与 at(第三方安装)
- crontab:每天定时执行计划任务
- at:一次性定时执行任务
- 安装 at
图形化自带 at,最小化需安装
yuminstallat-y- 启动 atd 服务
systemctl start atd systemctlenableatd- 案例
**案例 1:**三天后下午 5 点执行/bin/ls
at 5pm+3 daysat>/bin/ls >> /root/readme.txt
at>ctrl+d
注意:按键盘上的 ctrl + d 键保存退出
案例 2:明天下午 18 点,输出时间到指定的文件中
at18:00 tomorrowat>date > /root/readme.txt
at>ctrl+d (退出)
查看还没有执行的计划任务
atq或
at-l查看计划任务的详细信息
at-c5删除指定的计划任务
atrm 任务 id 删除任务
atrm4atrm5计划任务权限
at 通过 /etc/at.allow(白名单) 和 /etc/at.deny(黑名单) 文件来限制用户是否可以使用 at
规则与 crontab 一致!
