第十五课预习笔记

…衆ロ難τιáo~ 提交于 2021-02-17 18:49:08

 

10.19 iptables规则备份和恢复

保存和备份iptables规则

1、service iptables save    #会把规则保存到/etc/sysconfig/iptabels中,启动时会加载。

2、把iptables规则保存在自定义的位置:iptables-save > 位置

例如:iptables-save > /tmp/my_iptables.txt

[root@liang-00 ~]# iptables-save > /tmp/my_iptables.txt
[root@liang-00 ~]# cat /tmp/my_iptables.txt 
# Generated by iptables-save v1.4.21 on Tue Nov 20 19:47:32 2018
*nat
:PREROUTING ACCEPT [12:936]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [1:76]
:POSTROUTING ACCEPT [1:76]
COMMIT
# Completed on Tue Nov 20 19:47:32 2018
# Generated by iptables-save v1.4.21 on Tue Nov 20 19:47:32 2018
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [419:35455]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Tue Nov 20 19:47:32 2018
[root@liang-00 ~]# 

恢复iptables:iptables-restore < /tmp/my_iptables.txt

10.20 firewalld的9个zone

Linux防火墙-firewalld

首先关闭netfilter,打开firewalld

[root@liang-00 ~]# systemctl disable iptables
Removed symlink /etc/systemd/system/basic.target.wants/iptables.service.
[root@liang-00 ~]# systemctl stop iptables
[root@liang-00 ~]# systemctl enable firewalld
Created symlink from /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service to /usr/lib/systemd/system/firewalld.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/firewalld.service to /usr/lib/systemd/system/firewalld.service.
[root@liang-00 ~]# systemctl start firewalld
[root@liang-00 ~]# 
  • firewalld默认有9个zone。
  • 默认zone为public

查看所有zone:firewall-cmd --get-zones

[root@liang-00 ~]# firewall-cmd --get-zones
block dmz drop external home internal public trusted work
[root@liang-00 ~]# 

查看默认zone:firewall-cmd --get-default-zone,可以看到firewall默认zone为:public

[root@liang-00 ~]# firewall-cmd --get-default-zone
public
[root@liang-00 ~]# 

关于firewall的9个zone作用:

10.21 firewalld关于zone的操作

1、设定默认zone。

firewall-cmd --set-default-zone=work    #不设置之前默认的是public

[root@liang-00 ~]# firewall-cmd --set-default-zone=work
success
[root@liang-00 ~]#

2、查看指定网卡的zone。

[root@liang-00 ~]# firewall-cmd --get-zone-of-interface=ens33
no zone
[root@liang-00 ~]# firewall-cmd --get-zone-of-interface=lo
no zone
[root@liang-00 ~]#

3、给指定网卡设置zone。

[root@liang-00 ~]# firewall-cmd --zone=public --add-interface=ens33
success
[root@liang-00 ~]# firewall-cmd --get-zone-of-interface=ens33
public
[root@liang-00 ~]# 

4、针对指定网卡更改zone。

[root@liang-00 ~]# firewall-cmd --zone=dmz --change-interface=ens33
success
[root@liang-00 ~]# firewall-cmd --get-zone-of-interface=ens33
dmz
[root@liang-00 ~]# 

5、针对指定网卡删除zone

[root@liang-00 ~]# firewall-cmd --zone=dmz --remove-interface=ens33
success
[root@liang-00 ~]# firewall-cmd --get-zone-of-interface=ens33
no zone
[root@liang-00 ~]# 

6、查看系统所有网卡所在的zone。

[root@liang-00 ~]# firewall-cmd --get-active-zones
public
  interfaces: ens33 lo

10.22 firewalld关于service的操作

firewall的service是zone下面的一个服务。

用 firewall-cmd --get-services    #查看所有service,services可以不加“s”。

[root@liang-00 ~]# firewall-cmd --get-services 
RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns docker-registry dropbox-lansync elasticsearch freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master high-availability http https imap imaps ipp ipp-client ipsec iscsi-target kadmin kerberos kibana klogin kpasswd kshell ldap ldaps libvirt libvirt-tls managesieve mdns mosh mountd ms-wbt mssql mysql nfs nfs3 nrpe ntp openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius rpc-bind rsh rsyncd samba samba-client sane sip sips smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client vdsm vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server
[root@liang-00 ~]# firewall-cmd --zone=work --list-services 
ssh dhcpv6-client
[root@liang-00 ~]# 

查看当前zone下的service。

[root@liang-00 ~]# firewall-cmd --get-default-zone 
public
[root@liang-00 ~]# firewall-cmd --list-services 
ssh dhcpv6-client
[root@liang-00 ~]# 

也可以用 firewall-cmd --zone=work --list-services 查看指定zone的service。

[root@liang-00 ~]# firewall-cmd --zone=block --list-services 

[root@liang-00 ~]# 

把http服务增加到指定zone下。

[root@liang-00 ~]# firewall-cmd --zone=public --add-service=http
success
[root@liang-00 ~]# firewall-cmd --zone=public --list-services 
ssh dhcpv6-client http
[root@liang-00 ~]# 

zone和service的配置文件模板;zone和service的配置文件。

/usr/lib/firewalld/zones/ 和 /usr/lib/firewalld/services/ 保存着zone和service的配置文件模板。

[root@liang-00 ~]# ls /usr/lib/firewalld/zones/
block.xml  dmz.xml  drop.xml  external.xml  home.xml  internal.xml  public.xml  trusted.xml  work.xml
[root@liang-00 ~]# ls /usr/lib/firewalld/services/
amanda-client.xml        freeipa-replication.xml  libvirt-tls.xml           pop3.xml             snmp.xml
amanda-k5-client.xml     freeipa-trust.xml        libvirt.xml               postgresql.xml       spideroak-lansync.xml
bacula-client.xml        ftp.xml                  managesieve.xml           privoxy.xml          squid.xml
bacula.xml               ganglia-client.xml       mdns.xml                  proxy-dhcp.xml       ssh.xml
bitcoin-rpc.xml          ganglia-master.xml       mosh.xml                  ptp.xml              synergy.xml
bitcoin-testnet-rpc.xml  high-availability.xml    mountd.xml                pulseaudio.xml       syslog-tls.xml
bitcoin-testnet.xml      https.xml                mssql.xml                 puppetmaster.xml     syslog.xml
bitcoin.xml              http.xml                 ms-wbt.xml                quassel.xml          telnet.xml
ceph-mon.xml             imaps.xml                mysql.xml                 radius.xml           tftp-client.xml
ceph.xml                 imap.xml                 nfs3.xml                  RH-Satellite-6.xml   tftp.xml
cfengine.xml             ipp-client.xml           nfs.xml                   rpc-bind.xml         tinc.xml
condor-collector.xml     ipp.xml                  nrpe.xml                  rsh.xml              tor-socks.xml
ctdb.xml                 ipsec.xml                ntp.xml                   rsyncd.xml           transmission-client.xml
dhcpv6-client.xml        iscsi-target.xml         openvpn.xml               samba-client.xml     vdsm.xml
dhcpv6.xml               kadmin.xml               ovirt-imageio.xml         samba.xml            vnc-server.xml
dhcp.xml                 kerberos.xml             ovirt-storageconsole.xml  sane.xml             wbem-https.xml
dns.xml                  kibana.xml               ovirt-vmconsole.xml       sips.xml             xmpp-bosh.xml
docker-registry.xml      klogin.xml               pmcd.xml                  sip.xml              xmpp-client.xml
dropbox-lansync.xml      kpasswd.xml              pmproxy.xml               smtp-submission.xml  xmpp-local.xml
elasticsearch.xml        kshell.xml               pmwebapis.xml             smtps.xml            xmpp-server.xml
freeipa-ldaps.xml        ldaps.xml                pmwebapi.xml              smtp.xml
freeipa-ldap.xml         ldap.xml                 pop3s.xml                 snmptrap.xml
[root@liang-00 ~]# 

而zone和service的配置文件在 /etc/firewalld/zones/ 和 /etc/firewalld/services/ 目录中。

[root@liang-00 ~]# ls /etc/firewalld/zones/
public.xml  public.xml.old
[root@liang-00 ~]# ls /etc/firewalld/services/
[root@liang-00 ~]#

案例需求:
ftp服务自定义端口1121,需要在work zone下面放行ftp。
步骤:

1) cp /usr/lib/firewalld/services/ftp.xml /etc/firewalld/services/    #拷贝ftp配置模板到service配置文件中

2)修改ftp.xml文件端口为:1121。

3)cp /usr/lib/firewalld/zones/work.xml /etc/firewalld/zones/    #拷贝work.xml模板到zone配置文件内。

4)编辑work.xml文件

5)重新加载

[root@liang-00 ~]# firewall-cmd --reload 
success
[root@liang-00 ~]# 

6)查看work中的service

[root@liang-00 ~]# firewall-cmd --zone=work --list-services 
ssh dhcpv6-client ftp
[root@liang-00 ~]# 

10.23 linux任务计划cron

crontab:在linxu中提交和管理用户的需要周期性执行的任务。

  • -e:编辑该用户的计时器设置;
  • -l:列出该用户的计时器设置;
  • -r:删除该用户的计时器设置;
  • -u<用户名称>:指定要设定计时器的用户名称。

1、任务计划配置文件。

cat /etc/crontab

[root@liang-00 ~]# 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

前三行是用来配置crond任务运行的环境变量.

  • 第一行SHELL变量指定了系统要使用哪个shell,这里是bash;
  • 第二行PATH变量指定了系统执行命令的路径;
  • 第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户;

*  *  *  *  * user-name  command to be executed 时程表的格式

  • 第一个*:minute (0 - 59) 表示分钟,可以是从0到59之间的任何整数。
  • 第二个*:hour (0 - 23) 表示小时,可以是从0到23之间的任何整数。
  • 第三个*:day of month (1 - 31) 表示日期,可以是从1到31之间的任何整数。
  • 第四个*:month (1 - 12) OR jan,feb,mar,apr ... 表示月份,可以是从1到12之间的任何整数。可以用数字或英文缩写表示。
  • 第五个*:day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat 表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。也可以用英文缩写表示。
  • user-name:执行该任务的用户。
  • command to be executed:执行的具体任务。可以是系统命令,也可以是自己编写的脚本文件。

在以上五个时间字段中,还可以使用以下特殊字符。

  • 星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
  • 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
  • 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
  • 正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

2、crontab文件配置。

用 crontab -e 命令。

需求1:在每天的3点0分执行一个shell脚本,将输出内容(包含错误的内容)重定向追加到指定文件内。 

需求2:只有每月的1到10号执行该脚本。

0 3 1-10 * * /bin/bash /usr/local/sbin/123.sh >> /tmp/123.log 2>> /tmp/123.log

需求3:只在双数月份的1-10号执行脚本。

0 3 1-10 */2 * /bin/bash /usr/local/sbin/123.sh >> /tmp/123.log 2>> /tmp/123.log

需求4:在双数月份的1-10号,并且只在周二和周五执行脚本。

0 3 1-10 */2 2,5 /bin/bash /usr/local/sbin/123.sh >> /tmp/123.log 2>> /tmp/123.log

3、crond服务开启。

systemctl start crond开启crond服务,用 ps aux |grep 'cron' 查看进程中的crond服务。

[root@liang-00 ~]# systemctl start crond
[root@liang-00 ~]# ps aux |grep 'cron'
root       751  0.0  0.1 126280  1612 ?        Ss   09:42   0:00 /usr/sbin/crond -n
root      1566  0.0  0.0 112708   972 pts/0    S+   10:25   0:00 grep --color=auto cron
[root@liang-00 ~]# 

也可以用 sytemctl status crond.service 看到 绿色active(running)表示crond服务已开启。

有时我们会遇到,自己写的任务是正确的为什么它没有执行的情况,这种情况大多是命令没有用绝对路径导致的。解决办法第一是把命令改为绝对路径,第二是把命令路径添加到配置文件的PATH中。

4、crontab -l 查看已存在的计划任务。

[root@liang-00 ~]# crontab -l
0 4 1-10 * * /usr/bin/find /tmp -type f -mtime +100 |xargs rm -f 
[root@liang-00 ~]# 

crontab的配置文件路径为: /var/spool/cron/root 文件是以执行该任务的用户的用户名来命名的。

5、crontab -u  指定用户;

     crontab -r 删除计划任务。

10.24 chkconfig工具

chkconfig命令 检查、设置系统的各种服务。centos7版本不在使用此工具。

查看使用chkconfig的服务。

1、chkconfig --list

[root@liang-00 ~]# chkconfig --list

Note: This output shows SysV services only and does not include native
      systemd services. SysV configuration data might be overridden by native
      systemd configuration.

      If you want to list systemd services use 'systemctl list-unit-files'.
      To see services enabled on particular target use
      'systemctl list-dependencies [target]'.

netconsole         0:off    1:off    2:off    3:off    4:off    5:off    6:off
network            0:off    1:off    2:on    3:on    4:on    5:on    6:off
[root@liang-00 ~]# 

服务的脚本存在于 /etc/init.d/ 目录下面。

chkconfig --list 显示的是服务在 0-6 启动级别下的状态。

2、用 chkconfig network off 关闭 network的所有启动级别下状态。

[root@liang-00 ~]# chkconfig network off
[root@liang-00 ~]# chkconfig --list

Note: This output shows SysV services only and does not include native
      systemd services. SysV configuration data might be overridden by native
      systemd configuration.

      If you want to list systemd services use 'systemctl list-unit-files'.
      To see services enabled on particular target use
      'systemctl list-dependencies [target]'.

netconsole         0:off    1:off    2:off    3:off    4:off    5:off    6:off
network            0:off    1:off    2:off    3:off    4:off    5:off    6:off
[root@liang-00 ~]# 

指定运行级别,来对服务进行操作。

chkconfig --level 3 network on    #打开3级别下的network服务。

[root@liang-00 ~]# 
[root@liang-00 ~]# chkconfig --level 3 network on
[root@liang-00 ~]# chkconfig --list

Note: This output shows SysV services only and does not include native
      systemd services. SysV configuration data might be overridden by native
      systemd configuration.

      If you want to list systemd services use 'systemctl list-unit-files'.
      To see services enabled on particular target use
      'systemctl list-dependencies [target]'.

netconsole         0:off    1:off    2:off    3:off    4:off    5:off    6:off
network            0:off    1:off    2:off    3:on    4:off    5:off    6:off
[root@liang-00 ~]# 

chkconfig --level 345 network on    #打开345级别下的network服务。

3、增加一个服务。

1)首先我们拷贝一个123服务器到 /etc/init.d/ 目录下。

2)chkconfig --add 123    #添加到服务列表中去。

[root@liang-00 ~]# cp /etc/init.d/network /etc/init.d/123
[root@liang-00 ~]# ls /etc/init.d/
123  functions  netconsole  network  README
[root@liang-00 ~]# chkconfig --add 123
[root@liang-00 ~]# chkconfig --list

Note: This output shows SysV services only and does not include native
      systemd services. SysV configuration data might be overridden by native
      systemd configuration.

      If you want to list systemd services use 'systemctl list-unit-files'.
      To see services enabled on particular target use
      'systemctl list-dependencies [target]'.

123                0:off    1:off    2:on    3:on    4:on    5:on    6:off
netconsole         0:off    1:off    2:off    3:off    4:off    5:off    6:off
network            0:off    1:off    2:on    3:on    4:on    5:on    6:off
[root@liang-00 ~]# 

添加的服务文件名字没有要求,但是文件内容有要求。

vim /etc/init.d/123

4、删除服务。

chkconfig --del 123

[root@liang-00 ~]# chkconfig --del 123
[root@liang-00 ~]# chkconfig --list

Note: This output shows SysV services only and does not include native
      systemd services. SysV configuration data might be overridden by native
      systemd configuration.

      If you want to list systemd services use 'systemctl list-unit-files'.
      To see services enabled on particular target use
      'systemctl list-dependencies [target]'.

netconsole         0:off    1:off    2:off    3:off    4:off    5:off    6:off
network            0:off    1:off    2:on    3:on    4:on    5:on    6:off
[root@liang-00 ~]# 

10.25 systemd管理服务

systemd系统服务管理。

1、systemctl list-units --all --type=service 查看所有启动的service。

--all 表示显示所有状态,不加只显示active状态的。

2、启动和关闭服务。

• systemctl enable crond.service //让服务开机启动

[root@liang-00 ~]# systemctl enable crond.service
Created symlink from /etc/systemd/system/multi-user.target.wants/crond.service to /usr/lib/systemd/system/crond.service.
[root@liang-00 ~]#

从内容中我们可以获得服务的配置文件 /etc/systemd/system/multi-user.target.wants/crond.service,它实际上是一个软链接。

[root@liang-00 ~]# cat /etc/systemd/system/multi-user.target.wants/crond.service
[Unit]
Description=Command Scheduler
After=auditd.service systemd-user-sessions.service time-sync.target

[Service]
EnvironmentFile=/etc/sysconfig/crond
ExecStart=/usr/sbin/crond -n $CRONDARGS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process

[Install]
WantedBy=multi-user.target
[root@liang-00 ~]# ll /etc/systemd/system/multi-user.target.wants/crond.service
lrwxrwxrwx 1 root root 37 Nov 21 11:37 /etc/systemd/system/multi-user.target.wants/crond.service -> /usr/lib/systemd/system/crond.service
[root@liang-00 ~]# 

我们disable后软连接就会失效。

[root@liang-00 ~]# ll /etc/systemd/system/multi-user.target.wants/crond.service
ls: cannot access /etc/systemd/system/multi-user.target.wants/crond.service: No such file or directory
[root@liang-00 ~]# 

• systemctl disable crond //不让开机启动
• systemctl status crond //查看状态
• systemctl stop crond //停止服务
• systemctl start crond //启动服务
• systemctl restart crond //重启服务
• systemctl is-enabled crond //检查服务是否开机启动

[root@liang-00 ~]# systemctl is-enabled crond.service 
enabled
[root@liang-00 ~]# 

10.26 unit介绍

ls /usr/lib/systemd/system    #系统所有unit

系统所有unit类型。

 service 系统服务,crond服务就是一个service。
 target 多个unit组成的组,runlevel
 device 硬件设备
 mount 文件系统挂载点
 automount 自动挂载点
 path 文件或路径
 scope 不是由systemd启动的外部进程
 slice 进程组
 snapshot systemd快照
 socket 进程间通信套接字
 swap  swap文件
 timer 定时器

unit相关命令。

systemctl list-units --all    #列出正在运行的unit。

systemctl list-units --all    #列出所有,包括失败的或者inactive的

systemctl list-units --all --state=inactive    #列出inactive的unit

systemctl list-units --type=service    #列出状态为active的service

systemctl is-active crond.service    #查看某个服务是否为active

10.27 target介绍

系统为了方便管理用target来管理unit。

systemctl list-unit-files --type=target    #列出系统所有target。

systemctl list-dependencies multi-user.target    #查看指定target下有哪些unit。查看multi-user.target 下的unit

target下面也可与有target。

查看系统默认target

systemctl get-default

[root@liang-00 system]# systemctl get-default 
multi-user.target
[root@liang-00 system]# 

设置默认target

systemctl set-default multi-user.target
[root@liang-00 system]# systemctl set-default multi-user.target
Removed symlink /etc/systemd/system/default.target.
Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/multi-user.target.
[root@liang-00 system]# 
 
 一个service属于一种类型的unit
 多个unit组成了一个target
 一个target里面包含了多个service
 
 查看一个unit属于哪个target: cat /usr/lib/systemd/system/sshd.service     #看[Install]部分
[root@liang-00 system]# cat /usr/lib/systemd/system/sshd.service
[Unit]
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.service
Wants=sshd-keygen.service

[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target
[root@liang-00 system]# 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!