日常运维-防火墙、定时任务
一、iptables的备份及恢复
-
iptables 规则备份
防火墙规则只存在内存中,并没保存在文件中。如果系统重启之前设定的规则就没有了,所以设定完成后需要保存一下。
service iptables save
//会备份到/etc/sysconfig/iptables文件中service iptables save > 文件名
//指定文件备份 -
恢复
iptables-restore < 备份的文件名
//恢复备份文件中的规则步骤:
清理nat表规则
iptables -t nat -F
iptables -t nat -nvL
恢复备份文件:
iptables-restore < test.tpt
二、使用firewalld
-
开启firewalld
systemctl stop iptables.service
systemctl disable iptables.service
systemctl enable firewalld.service
-
firewalld默认9个zone(zone为firewalld的单位,默认为pulic)
-
zone操作
firewall-cmd --set-default-zone=work
//设定默认zonefirewall-cmd --get-zone-of-interface=ens33
//查看指定网卡firewall-cmd --zone=public --add-interface=lo
//给指定网卡设置zonefirewall-cmd --zone=dmz --remove-interface=lo
//删除指定网卡zone
三、linux任务计划
linux中任务计划必不可以少,它可以定时执行一些备份数据、重启服务器等操作,操作可能是一个脚本或者命令。
-
crontab任务计划命令:
-
格式:分 时 日 月 周 user command
分范围:0-59,时范围:0-60,日范围:0-31,月范围1-12,周范围:1-7
指定范围:1-5 ,指定1到5范围 可以用1,2,3表示1或者2或者3
*/2表示被2整除的数字,比如小时,那就是每隔2小时
-
-
注意点:
- 文件/var/spool/cron/username
- 可用格式1-5表示一个范围1到5
- 可用格式1,2,3表示1或者2或者3
- 可用格式*/2表示被2整除的数字,比如小时,那就是每隔2小时
- 要保证服务是启动状态
systemctl start crond.service
-
计划任务配置文件
cat /etc/crontab
文件中有几个环境变量:
SHELL=/bin/bash
PATH:环境变量,命令的路径
MAILTO:发邮件给谁
-
格式说明
# Example of job definition:
# .---------------- minute (0 - 59) //分钟
# | .------------- hour (0 - 23) //小时
# | | .---------- day of month (1 - 31)//日期
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ... //月份
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat //星期
# | | | | |
# * * * * * user-name command to be executed //需要执行的命令
-
新增定时任务
crontab -e
//进入编辑模式,和vim一样,按i进行编辑 -
示例:
1.新增一个凌晨3点执行的脚本,*代表所有的意思。并且把日志和错误日志输出
0 3 1-10 */2 * /bin/bash /usr/local/sbin/test.sh /tmp/test.log 2>> /tmp/test2.log
2.新增一个周二、周五才执行的脚本:
0 3 * * 2,5 /bin/bash /usr/local/sbin/test.sh /tmp/test.log 2>> /tmp/test2.log
如果想用年份可以用星期确定唯一性,比如说今年的6月18号和明年的6月18号的星期肯定是不同的
-
启动定时任务
需要启动crond服务,定时任务才会生效
systemctl start crond.service
检查是否启动成功
ps aux |grep cron
或者:systemctl status crond 查看,如果状态是绿色就说明成功了
-
任务计划不执行的原因分析
写了定时任务,crond服务也是正常,但是就是不执行。
原因可能为:脚本中命令未使用绝对路径,解决:要么将命令写一个绝对路径,要么将命令的路径加入到PATH变量里面去
建议追加一个日志,这样就可以根据日志来判断。
-
任务计划备份
crontab文件存在位置/var/spool/cron/username,需要备份的时候直接复制即可。
四、chkconfig工具
-
chkconfig工具是linux服务的管理工具,cron、iptables、firewalld、mysql等都是服务。chkconfig可以管理这些服务开机是否启动等。
-
chkconfig工具在centos6和之前的版本中使用,centos7中已经逐渐的不在使用了,为了过度centos7还可以使用,但是后面趋势是会被遗弃。
-
列出系统所有服务
chkconfig --list
0-6 表示7个启动级别(centos6及以前):
0:关机 1: 单用户 2:多用户模式(不带nfs服务) 3: 多用户模式(不带图形) 4: 保留级别 5: 多用户(带有图形) 6: 重启
-
需要注意的是:启动脚本需要放到/etc/init.d/目录下
-
关闭network服务
chkconfig network off
-
指定某一服务的某个级别开启或关闭
chkconfig --level 3 network off
//指定第三级别network服务关闭chkconfig --level 345 network on
//指定network中的3,4,5级别开启 -
将一个脚本加入到服务列表列表中
首先把脚本放到/etc/init.d/目录下
脚本名称没有要求,但是格式有要求:
1、必须是一个shell脚本
2、需指定运行级别,第10位开启,第90关闭
示例:init.d目录下 cp network服务 随便起一个名字,进行添加
cp network 123
chkconfig --add 123
结果:
删除:
chkconfig --del 123
五、systemd管理服务
-
几个常用的服务相关的命令
systemctl enable crond.service
//让服务开机启动systemctl disable crond
//不让开机启动systemctl status crond
//查看状态systemctl stop crond
//停止服务systemctl start crond
//启动服务systemctl restart crond
//重启服务systemctl is-enabled crond
//检查服务是否开机启动在centos6或之前的版本中用chkconfig工具去管理系统的服务,在centos7中使用systemd。
-
列出所有的service
-
设置服务开机启动
systemctl enable crond.service
//.service 可以不加 -
关闭开机启动
systemctl disable crond
-
查看状态
systemctl status crond
-
启动服务
systemctl start crond
-
停止服务
systemctl stop crond
-
检查服务是否开机启动
systemctl is-enabled crond
###六、unit介绍
-
ssystemctl 状态如果是enabled 会在 /usr/lib/systemd/system 目录下生产软连接,这些文件都叫做unit。
-
unit分为以下类型:
service 系统服务
target 多个unit组成的组
device 硬件设备
mount 文件系统挂载点
automount 自动挂载点
path 文件或路径
scope 不是由systemd启动的外部进程
slice 进程组
snapshot systemd快照
socket 进程间通信套接字
swap swap文件
timer 定时器
-
unit相关的命令
列出正在运行的unit:
systemctl list-units
列出所有的unit:
systemctl list-units --all
列出inactive状态的unit
systemctl list-units --all --state=inactive
列出状态为active的service
systemctl list-units --type=service
查看某个服务是否为active
systemctl is-active crond.service
七、target介绍
系统为了方便管理target来管理unit
-
target相关的命令
列出系统中所有的target:
systemctl list-unit-files --type=target
查看指定target下面有哪些unit
systemctl list-dependencies multi-user.target
查看系统默认的target
systemctl get-default
设置默认的target
systemctl set-default multi-user.target
-
一个service属于一种类型的unit
-
多个unit组成了一个target
-
一个target里面包含了多个service
-
cat /usr/lib/systemd/system/sshd.service 看[install]部分
八、课堂笔记
-
firewalld-cmd添加规则示例
firewall-cmd --add-port=80/tcp
firewall-cmd --permanent --add-port=80/tcp; firewall-cmd --reload
firewall-cmd --permanent --add-service=http; firewall-cmd --reload
-
centos各个版本服务器启动