课前预习
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介绍
10.19 iptables规则备份和恢复
- 我们设定防火墙规则只是保存在内存中,并没有保存到某一个文件中,也就是说,当系统重新启动后以前设定的规则就没有了,所以设定好规则后要先保存一下:
[root@hongwei ~]# service iptables save iptables: Saving firewall rules to /etc/sysconfig/iptables:[ 确定 ]
上面的例子会提示防火墙规则保存在/etc/sysconfig/iptables文件内,这个文件就是iptables的配置文件。以后遇到备份防火墙规则的任务,只要复制一份这个文件的副本即可。
- 停用防火墙命令
[root@hongwei ~]# service stop iptables
这样防火墙就失效了,但是一旦重新设定规则,防火墙服务就自动开启。
- 备份防火墙规则的命令
iptables save > myipt.rule
- 恢复这些规则命令
[root@hongwei local]# iptables-restore < myipt.rule
10.20 firewalld的9个zone
- 上面例子中,我们打开了iptables规则,现在要关闭它,打开firewalld
[root@hongwei local]# systemctl disable iptables rm '/etc/systemd/system/basic.target.wants/iptables.service' [root@hongwei local]# systemctl stop ip iprdump.service iprinit.service iprupdate.service iptables.service [root@hongwei local]# systemctl stop iptables [root@hongwei local]# systemctl enable firewalld ln -s '/usr/lib/systemd/system/firewalld.service' '/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service' ln -s '/usr/lib/systemd/system/firewalld.service' '/etc/systemd/system/basic.target.wants/firewalld.service' [root@hongwei local]# systemctl start firewalld
- firewalld有二个概念,分别是zone和service,每一个zone里面有不同的iptables规则,默认一种有9个zone,但是在centos7默认的zone为public,获取系统所有的zone,命令如下:
[root@hongwei local]# firewall-cmd --get-zones block dmz drop external home internal public trusted work
- 查看系统默认的zone命令如下:
[root@hongwei local]# firewall-cmd --get-default-zone public
下面介绍9个zone:
10.21 firewalld关于zone的操作
介绍关于9个zone的命令:
[root@hongwei local]# firewall-cmd --set-default-zone=work 设定默认的zone为work success [root@hongwei local]# firewall-cmd --get-zone-of-interface=eno16777736 查看指定网卡的zone work [root@hongwei local]# firewall-cmd --zone=public --add-interface=lo 給指定网卡设置zone success [root@hongwei local]# firewall-cmd --zone=dmz --change-interface=lo 针对网卡更改zone success [root@hongwei local]# firewall-cmd --zone=dmz --remove-interface=lo 针对网卡删除zone success [root@hongwei local]# firewall-cmd --get-active-zones 查看系统所有网卡的zone work interfaces: eno16777736
10.22 firewalld关于service的操作
之所以有9个zone,是因为每一个zone里面都是用了不同的service,而service就是针对一个服务(端口)做的iptables规则
- 列出当前系统所有的service
[root@hongwei local]# firewall-cmd --get-service amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns ftp high-availability http https imaps ipp ipp-client ipsec kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind samba samba-client smtp ssh telnet tftp tftp-client transmission-client vnc-server wbem-https
这些service都是由一个个配置文件定义的,配置文件的模板在/usr/lib/firewall/service/目录下,真正生效的配置在/etc/firewall/services目录下面(默认为空),ls看一下:
[root@hongwei local]# ls /usr/lib/firewalld/services/ amanda-client.xml ftp.xml ipsec.xml mdns.xml pmcd.xml radius.xml tftp-client.xml bacula-client.xml high-availability.xml kerberos.xml mountd.xml pmproxy.xml rpc-bind.xml tftp.xml bacula.xml https.xml kpasswd.xml ms-wbt.xml pmwebapis.xml samba-client.xml transmission-client.xml dhcpv6-client.xml http.xml ldaps.xml mysql.xml pmwebapi.xml samba.xml vnc-server.xml dhcpv6.xml imaps.xml ldap.xml nfs.xml pop3s.xml smtp.xml wbem-https.xml dhcp.xml ipp-client.xml libvirt-tls.xml ntp.xml postgresql.xml ssh.xml dns.xml ipp.xml libvirt.xml openvpn.xml proxy-dhcp.xml telnet.xml
- 查看当前zone有那些service
[root@hongwei local]# firewall-cmd --list-services dhcpv6-client ssh
- 查看指定zone有哪些service
[root@hongwei local]# firewall-cmd --zone=public --list-services dhcpv6-client ssh
- 一个zone下面有某个service,意味着这个service是被信任的,比如,当前zone下面有shh,那么shh服务(也就是22端口)是放行的,我们可以给一个zone添加一个service
[root@hongwei local]# firewall-cmd --zone=public --add-service=http success [root@hongwei local]# firewall-cmd --list-services dhcpv6-client http ssh
- 每个zone来说,都有自己的配置文件,可以查看目录/usr/lib/firewall/zones/下面对应的文件,这些就是zone的配置文件
[root@hongwei local]# ls /usr/lib/firewalld/zones/ block.xml dmz.xml drop.xml external.xml home.xml internal.xml public.xml trusted.xml work.xml
- 我们可以在一个zone下添加一个service,但这种方法仅仅在内存中生效,并没有修改配置文件,想要修改位置文件,需要加一个选项
[root@hongwei local]# firewall-cmd --zone=public --add-service=http --permanent success
- 举例理解zone和service二个概念,需求:假如服务器上配置了一个FTP服务,但端口并非默认的21,而是1121,并且需要在work zone下面放行FTP,做法如下:
[root@hongwei local]# cp /usr/lib/firewalld/services/ftp.xml /etc/firewalld/services/ [root@hongwei local]# vi /etc/firewalld/services/ftp.xml <?xml version="1.0" encoding="utf-8"?> <service> <short>FTP</short> <description>FTP is a protocol used for remote file transfer. If you plan to make your FTP server publicly available, enable this option. You need the vsftpd package installed for this option to be useful.</description> <port protocol="tcp" port="1121"/> 把里面的21改为1121 <module name="nf_conntrack_ftp"/> </service> ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ -- INSERT -- [root@hongwei local]# cp /usr/lib/firewalld/zones/work.xml /etc/firewalld/zones/ [root@hongwei local]# vi /etc/firewalld/zones/work.xml <?xml version="1.0" encoding="utf-8"?> <zone> <short>Work</short> <description>For use in work areas. You mostly trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description> <service name="ssh"/> <service name="ftp"/> 增加一行 <service name="ipp-client"/> <service name="dhcpv6-client"/> </zone> ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ -- INSERT -- [root@hongwei local]# firewall-cmd --reload 然后重新加载 success
我们在来验证一下work zone里面的service是否有FTP:
[root@hongwei local]# firewall-cmd --zone=work --list-services dhcpv6-client ftp ipp-client ssh
10.23 linux任务计划cron
- 命令crontab
linux任务计划功能的操作都是通过crontab命令来完成的,常用的选项如下:
-u:表示指定某个用户,不加-u选项则为当前用户
-e:表示制定计划
-l:表示列出计划任务
-r:表示删除计划任务
我们cat 一下/etc/crontab文件
[root@hongwei local]# cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # For details see man 4 crontabs # 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
最下面的* 从左至右依次是:分、时、日、月、周和命令行:
- 写命令的时候,比如每周二 周五可以写成2,5。*/2表示被2整除的月份
- 命令crontab -e实际上就是打开了/var/spool/cron/username文件。但是打开这个文件的时候一定要用vim打开否则会报错。
- 删除任务计划的时候,这个删除选项最好还是少用,因为它一下子把全部计划都删除掉。
- 启动crontab服务命令
systemctl start crond
- 查看crond的状态使用命令
systemctl status crond
10.24 chkconfig工具
- centos6上的服务管理工具为chkconfig,linux系统所有的预设服务都可以通过查看/etc/init.d目录得到如下:
[root@hongwei local]# ls /etc/init.d/ functions iprdump iprinit iprupdate netconsole network README
- 我们使用命令 chkconfig --list列出所有的服务及其每个级别的开启状态:
[root@hongwei local]# chkconfig --list 注意:该输出结果只显示 SysV 服务,并不包含原生 systemd 服务。SysV 配置数据可能被原生 systemd 配置覆盖。 如果您想列出 systemd 服务,请执行 'systemctl list-unit-files'。 欲查看对特定 target 启用的服务请执行 'systemctl list-dependencies [target]'。 iprdump 0:关 1:关 2:开 3:开 4:开 5:开 6:关 iprinit 0:关 1:关 2:开 3:开 4:开 5:开 6:关 iprupdate 0:关 1:关 2:开 3:开 4:开 5:开 6:关 netconsole 0:关 1:关 2:关 3:关 4:关 5:关 6:关 network 0:关 1:关 2:开 3:开 4:开 5:开 6:关
上面的例子中,有7个系统级别他们分别表示:
- 等级0表示:表示关机
- 等级1表示:单用户模式
- 等级2表示:多用户模式,少nfs服务
- 等级3表示:多用户模式,不带图形
- 等级4表示:是一种保留的级别
- 等级5表示:带图形界面的多用户模式
- 等级6表示:重新启动
- 使用--level 指定级别,后面跟服务名,然后是off或者on。表示更改级别的开启状态:
[root@hongwei local]# chkconfig --level 3 network off [root@hongwei local]# chkconfig --list 注意:该输出结果只显示 SysV 服务,并不包含原生 systemd 服务。SysV 配置数据可能被原生 systemd 配置覆盖。 如果您想列出 systemd 服务,请执行 'systemctl list-unit-files'。 欲查看对特定 target 启用的服务请执行 'systemctl list-dependencies [target]'。 iprdump 0:关 1:关 2:开 3:开 4:开 5:开 6:关 iprinit 0:关 1:关 2:开 3:开 4:开 5:开 6:关 iprupdate 0:关 1:关 2:开 3:开 4:开 5:开 6:关 netconsole 0:关 1:关 2:关 3:关 4:关 5:关 6:关 network 0:关 1:关 2:开 3:关 4:开 5:开 6:关 [root@hongwei local]#
我们还可以指定多个级别:
[root@hongwei local]# chkconfig --level 345 network off [root@hongwei local]# chkconfig --list 注意:该输出结果只显示 SysV 服务,并不包含原生 systemd 服务。SysV 配置数据可能被原生 systemd 配置覆盖。 如果您想列出 systemd 服务,请执行 'systemctl list-unit-files'。 欲查看对特定 target 启用的服务请执行 'systemctl list-dependencies [target]'。 iprdump 0:关 1:关 2:开 3:开 4:开 5:开 6:关 iprinit 0:关 1:关 2:开 3:开 4:开 5:开 6:关 iprupdate 0:关 1:关 2:开 3:开 4:开 5:开 6:关 netconsole 0:关 1:关 2:关 3:关 4:关 5:关 6:关 network 0:关 1:关 2:开 3:关 4:关 5:关 6:关 [root@hongwei local]#
chkconfig还有一个功能,就是可以把某个服务加入系统或者删除,即可以使用chkconfig --add 或者chkconfig --del服务名 这样的形式,举例:
[root@hongwei local]# chkconfig --del network [root@hongwei local]# chkconfig --list 注意:该输出结果只显示 SysV 服务,并不包含原生 systemd 服务。SysV 配置数据可能被原生 systemd 配置覆盖。 如果您想列出 systemd 服务,请执行 'systemctl list-unit-files'。 欲查看对特定 target 启用的服务请执行 'systemctl list-dependencies [target]'。 iprdump 0:关 1:关 2:开 3:开 4:开 5:开 6:关 iprinit 0:关 1:关 2:开 3:开 4:开 5:开 6:关 iprupdate 0:关 1:关 2:开 3:开 4:开 5:开 6:关 netconsole 0:关 1:关 2:关 3:关 4:关 5:关 6:关 [root@hongwei local]# chkconfig --add network [root@hongwei local]# chkconfig --list 注意:该输出结果只显示 SysV 服务,并不包含原生 systemd 服务。SysV 配置数据可能被原生 systemd 配置覆盖。 如果您想列出 systemd 服务,请执行 'systemctl list-unit-files'。 欲查看对特定 target 启用的服务请执行 'systemctl list-dependencies [target]'。 iprdump 0:关 1:关 2:开 3:开 4:开 5:开 6:关 iprinit 0:关 1:关 2:开 3:开 4:开 5:开 6:关 iprupdate 0:关 1:关 2:开 3:开 4:开 5:开 6:关 netconsole 0:关 1:关 2:关 3:关 4:关 5:关 6:关 network 0:关 1:关 2:开 3:开 4:开 5:开 6:关 [root@hongwei local]#
10.25 systemd管理服务
首先列出系统所有的服务,如下所示:
[root@hongwei ~]# systemctl list-units --all --type=service UNIT LOAD ACTIVE SUB DESCRIPTION auditd.service loaded active running Security Auditing Service avahi-daemon.service loaded active running Avahi mDNS/DNS-SD Stack brandbot.service loaded inactive dead Flexible Branding Service cpupower.service loaded inactive dead Configure CPU power related settings crond.service loaded active running Command Scheduler dbus.service loaded active running D-Bus System Message Bus display-manager.service not-found inactive dead display-manager.service dm-event.service loaded inactive dead Device-mapper event daemon dracut-shutdown.service loaded inactive dead Restore /run/initramfs ebtables.service loaded inactive dead Ethernet Bridge Filtering tables emergency.service loaded inactive dead Emergency Shell exim.service not-found inactive dead exim.service firewalld.service loaded active running firewalld - dynamic firewall daemon getty@tty1.service loaded active running Getty on tty1 ip6tables.service loaded inactive dead IPv6 firewall with ip6tables iprdump.service loaded active running LSB: Start the ipr dump daemon iprinit.service loaded active running LSB: Start the ipr init daemon iprupdate.service loaded active running LSB: Start the iprupdate utility iptables.service loaded inactive dead IPv4 firewall with iptables irqbalance.service loaded inactive dead irqbalance daemon kdump.service loaded failed failed Crash recovery kernel arming kmod-static-nodes.service loaded active exited Create list of required static device nodes f libvirtd.service not-found inactive dead libvirtd.service lvm2-activation.service not-found inactive dead lvm2-activation.service lvm2-lvmetad.service loaded active running LVM2 metadata daemon lvm2-lvmpolld.service loaded inactive dead LVM2 poll daemon lvm2-monitor.service loaded active exited Monitoring of LVM2 mirrors, snapshots etc. us microcode.service loaded inactive dead Load CPU microcode update netconsole.service loaded inactive dead SYSV: Initializes network console logging network.service loaded active exited LSB: Bring up/down networking NetworkManager-wait-online.service loaded inactive dead Network Manager Wait Online NetworkManager.service loaded active running Network Manager plymouth-quit-wait.service loaded inactive dead Wait for Plymouth Boot Screen to Quit plymouth-quit.service loaded inactive dead Terminate Plymouth Boot Screen plymouth-read-write.service loaded inactive dead Tell Plymouth To Write Out Runtime Data plymouth-start.service loaded inactive dead Show Plymouth Boot Screen polkit.service loaded active running Authorization Manager postfix.service loaded active running Postfix Mail Transport Agent rc-local.service loaded inactive dead /etc/rc.d/rc.local Compatibility rescue.service loaded inactive dead Rescue Shell rhel-autorelabel-mark.service loaded inactive dead Mark the need to relabel after reboot rhel-autorelabel.service loaded inactive dead Relabel all filesystems, if necessary rhel-configure.service loaded inactive dead Reconfigure the system on administrator reque rhel-dmesg.service loaded active exited Dump dmesg to /var/log/dmesg rhel-import-state.service loaded active exited Import network configuration from initramfs rhel-loadmodules.service loaded inactive dead Load legacy module configuration rhel-readonly.service loaded active exited Configure read-only root support rsyslog.service loaded active running System Logging Service sendmail.service not-found inactive dead sendmail.service sshd.service loaded active running OpenSSH server daemon syslog.service not-found inactive dead syslog.service sysstat.service loaded active exited Resets System Activity Logs systemd-ask-password-console.service loaded inactive dead Dispatch Password Requests to Console systemd-ask-password-plymouth.service loaded inactive dead Forward Password Requests to Plymouth
这些服务启动的脚本文件如下文件里:
[root@hongwei ~]# ls /usr/lib/systemd/system/ arp-ethers.service lvm2-lvmpolld.socket sshd.service auditd.service lvm2-monitor.service sshd@.service autovt@.service lvm2-pvscan@.service sshd.socket avahi-daemon.service machine.slice suspend.target avahi-daemon.socket messagebus.service swap.target basic.target microcode.service sys-fs-fuse-connections.mount basic.target.wants multi-user.target sysinit.target blk-availability.service multi-user.target.wants sysinit.target.wants bluetooth.target NetworkManager-dispatcher.service sys-kernel-config.mount brandbot.path NetworkManager.service sys-kernel-debug.mount brandbot.service NetworkManager-wait-online.service syslog.socket console-getty.service network-online.target syslog.target.wants console-shell.service network-online.target.wants sysstat.service cpupower.service network.target systemd-ask-password-console.path crond.service nginx.service systemd-ask-password-console.service cryptsetup.target nss-lookup.target systemd-ask-password-plymouth.path ctrl-alt-del.target nss-user-lookup.target systemd-ask-password-plymouth.service dbus-org.freedesktop.hostname1.service ntpdate.service systemd-ask-password-wall.path dbus-org.freedesktop.locale1.service paths.target systemd-ask-password-wall.service dbus-org.freedesktop.login1.service plymouth-halt.service systemd-backlight@.service dbus-org.freedesktop.machine1.service plymouth-kexec.service systemd-binfmt.service dbus-org.freedesktop.timedate1.service plymouth-poweroff.service systemd-fsck-root.service dbus.service plymouth-quit.service systemd-fsck@.service dbus.socket plymouth-quit-wait.service systemd-halt.service dbus.target.wants plymouth-read-write.service systemd-hibernate.service debug-shell.service plymouth-reboot.service systemd-hostnamed.service default.target plymouth-start.service systemd-hybrid-sleep.service
下面列出常用的systemd的命令:
- systemctl enable crond.service 让某个服务开机启动
- systemctl disable crond.service 不让开机启动
- systemctl status crond.service 查看服务状态
- systemctl start crond.service 启动某个服务
- systemctl stop crond.service 停止某个服务
- systemctl restart crond.service 重启某个服务、
- systemctl is-enabled crond 查看某个服务是否开机启动
10.26 unit介绍
- ls /usr/lib/systemd/system/,我们把这个命令文件下面的很多文件,归类为下面这几大类:
service:系统服务
target:多个unit组成的服务
device:硬件设备
mount:文件系统的挂载点
antomount:自动挂载点
path:文件或路径
scope:不是由systemd启动的外部进程
slice:进程组
socket:进程间通信的套接字
swap:swap文件
timer:定时器
- 以上每种类型的文件都为一个unit,正是这些unit才组成了系统的各个资源,下面介绍几个和unit相关的命令:
systemctl list-units 列出正在运行的unit
systemctl list-units --all 列出所有的unit
systemctl list-units --all --state=inactive 列出所有inactive的unit
systemctl list-units --all --type=service 列出所有状态的service
systemctl list-units --type=service 列出状态为active的service
systemctl is-active crond.service 查看某个unit是否active
10.27 target介绍
target类似于centos6里面的启动级别,但target支持多个target同时启动,target其实是多个unit的组合,系统启动说白了就是启动多个unit,为了方便管理,就使用target来管理这些unit,查看当前系统的所有target:
[root@hongwei ~]# systemctl list-unit-files --type=target UNIT FILE STATE basic.target static bluetooth.target static cryptsetup.target static ctrl-alt-del.target disabled default.target enabled emergency.target static final.target static getty.target static graphical.target disabled halt.target disabled hibernate.target static hybrid-sleep.target static initrd-fs.target static initrd-root-fs.target static initrd-switch-root.target static initrd.target static kexec.target disabled local-fs-pre.target static local-fs.target static multi-user.target enabled
- 查看一个target包含的所有的unit,如下:
[root@hongwei ~]# systemctl list-dependencies multi-user.target multi-user.target ├─auditd.service ├─avahi-daemon.service ├─brandbot.path ├─crond.service ├─dbus.service ├─iprdump.service ├─iprinit.service ├─iprupdate.service ├─irqbalance.service ├─kdump.service ├─network.service ├─NetworkManager.service ├─plymouth-quit-wait.service ├─plymouth-quit.service ├─postfix.service ├─rsyslog.service ├─sshd.service ├─sysstat.service ├─systemd-ask-password-wall.path ├─systemd-logind.service ├─systemd-readahead-collect.service ├─systemd-readahead-replay.service ├─systemd-update-utmp-runlevel.service ├─systemd-user-sessions.service ├─tuned.service ├─basic.target │ ├─firewalld.service │ ├─microcode.service │ ├─rhel-autorelabel-mark.service │ ├─rhel-autorelabel.service │ ├─rhel-configure.service │ ├─rhel-dmesg.service │ ├─rhel-loadmodules.service │ ├─paths.target │ ├─slices.target │ │ ├─-.slice │ │ └─system.slice │ ├─sockets.target │ │ ├─avahi-daemon.socket │ │ ├─dbus.socket │ │ ├─dm-event.socket
- 还有几个关于target的命令,如下:
查看系统默认的target
[root@hongwei ~]# systemctl get-default multi-user.target
设置默认的target:
[root@hongwei ~]# systemctl get-default multi-user.target Too many arguments.
总结:service unit和target之间的关系
- 一个service属于一种unit
- 多个unit一起组成了一个target
- 一个target里面包含了多个service,