4月18日任务
10.19 iptables规则备份和恢复
10.20 firewalld的9个zone
10.21 firewalld关于zone的操作
10.22 firewalld关于service的操作
10.23 linux任务计划cron
10.24 chkconfig工具
10.25 systemd管理服务
10.26 unit介绍
10.27 target介绍
扩展
firewalld自定义iptables规则 https://blog.51cto.com/jevic/1785162
提供一个iptables系列文章的博客 https://www.zsythink.net/archives/tag/iptables/page/2/
anacron https://www.jianshu.com/p/3009a9b7d024?from=timeline
systemd自定义启动脚本 http://www.jb51.net/article/100457.htm
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
firewall-cmd 如何添加自定义规则
Centos7 Firewalld 自定义富规则 https://blog.51cto.com/jevic/1785162
服务:
1、iptables备份和恢复
设定的防火墙规则只保存在内存中,并没有保存到某个文件中。也就是说,当系统重启后以前设定的规则就没有了,所以设定好规则后要先保存一下
service iptables save 会把规则保存到/etc/sysconfig/iptables里
iptables-save > my.ipt 把iptables规则备份到my.ipt文件中
iptables-restore < my.ipt 恢复刚才备份的规则
第一步,先清除nat表的所有规则,并查看
iptables -t nat -F
iptables -t nat -nvL
第二步,给nat表写入两条规则,并查看
iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.86.3
iptables -t nat -A PREROUTING -d 192.168.86.3 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22
第三步、用 service iptables save 保存规则,存到配置文件中,重启也生效,并查看配置文件 /etc/sysconfig/iptables 是否已经保存
第四部、使用iptables-save > my.ipt 备份配置文件
第五步,清除nat表规则,并查看
第六步、恢复备份文件,iptables-restore < my.ipt,查看,已经恢复
2、firewalld的9个zone
使用 firewalled firewalled -> Centos7及后续版本使用
之前打开了iptables,需要禁掉,打开firewalld防火墙
systemctl disable iptables
systemctl stop iptables
systemctl enable firewalld
systemctl start firewalld
firewalld默认有9个zone (zone是firewalld的单位),默认zone为public
drop 数据包不能进来,但是可以出去,最安全的
block 和drop相比,比较宽松一些,主要针对icmp
查看所有zone命令 firewall-cmd --get-zones
查看默认zone firewall-cmd --get-default-zone
3、firewalld关于zone的操作
每个zone就是一套规则集,在/usr/lib/iptables/zone,保存着zone的配置文件对于一接受到的请求具体使用哪个zone, firewalld是通过三种方法来判断的:
1) source,也就是源地址
2) interface,接收请求的网卡
3) firewalld.conf中配置的默认zone 这三个的优先级按顺序依次降低,也就是说如果按照source可以找到就不会再按interface去查找,如果前两个都找不到才会使用第三个。
针对网卡zones的一些常用命令
firewall-cmd --set-default-zone=work //设定默认zone
firewall-cmd --get-zone-of-interface=ens33 //查指定网卡的zone
firewall-cmd --zone=public --add-interface=lo //给指定网卡设置zone
firewall-cmd --zone=dmz --change-interface=lo //针对网卡更改zone
firewall-cmd --zone=dmz --remove-interface=lo //针对网卡删除zone
firewall-cmd --get-active-zones //查看系统所有网卡所在的zone
firewall-cmd --zone=dmz --add-interface=lo 给指定网卡设置zone为dmz
firewall-cmd --get-zone-of-interface=lo 查看lo网卡的zone
firewall-cmd --get-default-zone 查看默认zone
4、firewalld关于service的操作
之所以有9种zone,是因为每一个zone里面都使用了不同的service,而service就是针对一个服务(端口)做的iptables规则。zone就是一个规则集合
http操作的是80端口
https操作的是443端口
ssh操作的是22端口
firewall-cmd --get-services 查看系统中所有的servies
firewall-cmd --get-default-zone 查看系统当前默认zone
firewall-cmd --list-services //查看当前zone下有哪些service
firewall-cmd --zone=(zone名) --list-service //把指定的zone下的service列出来
firewall-cmd --zone=public --add-service=http //把http增加到public zone下面,只是暂时写入内存中
firewall-cmd --zone=public --add-service=ftp --permanent //更改配置文件,之后会在/etc/firewalld/zones/目录下面生成配置文件,目录下存放的是系统firewalld服务所用到的配置文件,把service永久的加入到指定zone下,需要使用--permanent 永久保存到配置文件,才能在配置文件中找到,每次更改后,都会把旧文件做备份:public.xml.old,.old为后缀名
ls /usr/lib/firewalld/zones/ //zone的配置文件模板(共9个)
ls /usr/lib/firewalld/services/ 服务
firewall-cmd --zone=public --remove-service=ftp 移除ftp
需求:ftp服务自定义端口1121,需要在work zone下面放行ftp,把ftp添加到work zone下即可
第一步:ftp.xml模板复制到/etc/firewalld/services/目录下
cp /usr/lib/firewalld/services/ftp.xml /etc/firewalld/services/
第二步、编辑刚刚复制过来ftp.xml文件
vi /etc/firewalld/services/ftp.xml //把21改为1121
第三步、work.xml 模板复制到/etc/firewalld/zones/目录下
cp /usr/lib/firewalld/zones/work.xml /etc/firewalld/zones/
第四步、编辑刚刚复制过来work.xml文件
vi /etc/firewalld/zones/work.xml //增加一行<service name="ftp"/>
第五步、重新加载服务
firewall-cmd --reload 重新加载服务
firewall-cmd --zone=work --list-services 把指定的work zone下的service列出来,此时ftp已经添加
5、linux任务计划cron
cat /etc/crontab,查看到的数字从左到右依次为:分、时、日、月、周和命令行
格式:分 时 日 月 周 (0-6,0或7代表周日) user(用户,如果在root用户下定义计划,默认为root) command (要执行的命令)
用 crontab -e 编写任务计划
实际上 crontab -e 是打开了/var/spool/cron/用户名
注意:不要编辑里面的文件,直接crontab -e编辑(一般备份任务计划时用到直接cp这个目录即可)
每天凌晨3点执行命令:0 3 * * * command (要执行的命令)
也可以使用范围
0 3 1-10 */2 2,5 每两个月(*/2 被2整除)的1号到10号,周二到周五,每天3点执行命令
分范围0-59,时范围0-23,日范围1-31,月范围1-12,周1-7
可用格式1-5表示一个范围1到5
可用格式1,2,3表示1或者2或者3
可用格式*/2表示被2整除的数字,比如小时,那就是每隔2小时
systemctl start crond.service 编写完成后启动服务
systemctl start crond.service 停止服务
systemctl status crond.service 使用此命令查看开启状态,绿色代表已经启动,未启动没有颜色
当命令不执行时,命令有可能并没有在cat /etc/crontab中的PATH里面,需要写绝对路径(最好写绝对路径),或者把命令的路径加入到变量中
每次写完计划任务时,要追加一个日志,正确和错误的输出日志,方便查询
crontab -l 查询计划
crontab文件位置:/var/spool/cron/root 会有对应的用户文件,以用户的名字命名的文件,需要备份的话直接cp这个目录即可
crontab -r 删除任务
crontab -u root -l //crontab -u 指定用户
-----------------------------------------------------------------------------------------
cron (crond) 是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业。
service crond start //启动服务
service crond stop //关闭服务
service crond restart //重启服务
service crond reload //重新载人配置
service crond status //查看服务状态
-----------------------------------------------------------------------------------------
6、chkconfig工具
Linux系统服务管理-chkconfig
chkconfig --list 查看服务
CentOS6用到的服务管理都是SysV,而7换成了systemd;
查看Linux所有的预设服务:ls /etc/init.d/
chkconfig network off 关闭network
chkconfig network on on打开network
回顾这里7个系统启动级别的知识,现在CnetOS7已经不再严格区分,但6之前包括6是有规定的:
chkconfig --level 3 network off 更改某个级别下的状态,把3级别关闭 (0,1,6级别不要开启)
chkconfig --level 35 network off 关闭多个级别
chkconfig --add 123 把123加入到服务列表中,需要先把脚本或文件放到/etc/init.d/目录下,只有在这个目录下才能添加到服务列表,
这两部分必须存在,才能被识别
chkconfig --del 123 从服务中删除
7、systemd管理服务
systemctl list-units --all --type=service 列出所有的服务和其他的信息
几个常用的服务相关的命令
systemctl enable crond.service //让服务开机启动
systemctl disable crond //不让开机启动
systemctl status crond //查看状态
systemctl stop crond //停止服务
systemctl start crond //启动服务
systemctl restart crond //重启服务
systemctl is-enabled crond //检查服务是否开机启动
8、unit介绍
ls /usr/lib/systemd/system //系统所有unit,分为以下类型
service 系统服务
target 多个unit组成的组
device 硬件设备
mount 文件系统挂载点
automount 自动挂载点
path 文件或路径
scope 不是由systemd启动的外部进程
slice 进程组
snapshot systemd快照
socket 进程间通信套接字
swap swap文件
timer 定时器
unit相关的命令
systemctl list-units //列出正在运行的unit
systemctl list-units --all //列出所有,包括失败的或者inactive的
systemctl list-units --all --state=inactive //列出inactive的unit
systemctl list-units --type=service //列出状态为active的service ,不加--all,将会列出 active的service
systemctl is-active crond.service //查看某个服务是否为active
9、target介绍
系统为了方便管理用target来管理unit
systemctl list-unit-files --type=target 查看当前系统的所有target
systemctl list-dependencies multi-user.target //查看指定target下面有哪些unit
systemctl get-default //查看系统默认的target
systemctl set-default multi-user.target 设置一个默认的target
一个service属于一种类型的unit
多个unit组成了一个target
一个target里面包含了多个service
cat /usr/lib/systemd/system/sshd.service //查看sshd.service属于哪个target,看[install]部分