6- 时间同步服务、TCP_Wrappers 和 SELinux 介绍

本贴最后更新于 1436 天前,其中的信息可能已经时异事殊

7 时间同步服务

加密和安全当前都离不开时间的同步,否则各种网络服务可能不能正常运行

范例: 时间错误导致证书应用出错
clipboard.png

7.1 计时方式

7.1.1 现代计时方式

石英晶体受到电池的电力影响时,会产生规律的振动。每秒的振动次数是 32768 次,可以设计电路来计算振动次数,当计数到 32768 次时,即计时 1 秒。1967 年,瑞士人发布了世界上首款石英表

当原子从一个相对高的“能量态”迁至低的“能量态”时,会释放出电磁波,产生共振频率。依据此原理, 拉比构想出了一种全新的计时仪器——原子钟(Atomic clock)

因为原子的共振频率是固定的。如:铯原子(Caesium133)的固有频率是 9192631770 赫兹,约合 92 亿赫兹,对铯原子钟计数 9192631770 次,即可测量出一秒钟。很多国家(包括我国和美国 NIST)的标准局,就是用铯原子钟来作为时间精度标准的。GPS 系统也是用铯原子钟来计时

2008 年诞生的锶(Strontium87)原子钟,固有频率为 429228004229873,约合 430 万亿赫兹,将精度提高到了 10 的 17 次方

2013 年镱元素(ytterbium)制成的原子钟问世,镱原子钟的固有频率约合 518 万亿赫兹,精度高达 10 的 18 次方。宇宙的年龄为 138 亿年。如果这台镱原子钟从宇宙诞生之初就开始计时,直到今天也不会发生 1 秒的误差

范例:一次性的同步

[16:16:32 root@centos8 ~]#date -s '-1 year'
Tue Jan 14 16:16:53 CST 2020
[16:16:53 root@centos8 ~]#date
Tue Jan 14 16:17:00 CST 2020
[16:17:00 root@centos8 ~]#ping ntp.aliyun.com
PING ntp.aliyun.com (203.107.6.88) 56(84) bytes of data.
64 bytes from 203.107.6.88 (203.107.6.88): icmp_seq=1 ttl=128 time=14.8 ms
64 bytes from 203.107.6.88 (203.107.6.88): icmp_seq=2 ttl=128 time=17.3 ms
64 bytes from 203.107.6.88 (203.107.6.88): icmp_seq=3 ttl=128 time=17.2 ms
[16:19:41 root@centos8 ~]#ntpdate ntp.aliyun.com

[16:19:59 root@centos8 ~]#date
Tue Jan 14 16:20:05 CST 2020
[16:20:05 root@centos8 ~]#ntpdate time.windows.com       #这个命令在Centos8当中已经停止使用
[16:20:17 root@centos8 ~]#date
Tue Jan 14 16:20:19 CST 2020

7.2 时间同步服务

clipboard.png

时间同步服务

多主机协作工作时,各个主机的时间同步很重要,时间不一致会造成很多重要应用的故障,如:加密协议,日志,集群等, 利用 NTP(Network Time Protocol) 协议使网络中的各个计算机时间达到同步。目前 NTP 协议属于运维基础架构中必备的基本服务之一

时间同步软件实现:

  • ntp
  • chrony

ntp:

将系统时钟和世界协调时 UTC 同步,精度在局域网内可达 0.1ms,在互联网上绝大多数的地方精度可以达到 1-50ms

项目官网:http://www.ntp.org

chrony:

实现 NTP 协议的的自由软件。可使系统时钟与 NTP 服务器,参考时钟(例如 GPS 接收器)以及使用手表和键盘的手动输入进行同步。还可以作为 NTPv4(RFC 5905)服务器和对等体运行,为网络中的计算机提供时间服务。设计用于在各种条件下良好运行,包括间歇性和高度拥挤的网络连接,温度变化(计算 机时钟对温度敏感),以及不能连续运行或在虚拟机上运行的系统。

通过 Internet 同步的两台机器之间的典型精度在几毫秒之内,在 LAN 上,精度通常为几十微秒。利用硬件时间戳或硬件参考时钟,可实现亚微秒的精度

7.3 chrony

chrony 的优势:

  • 更快的同步只需要数分钟而非数小时时间,从而最大程度减少了时间和频率误差,对于并非全天 24 小时运行的虚拟计算机而言非常有用
  • 能够更好地响应时钟频率的快速变化,对于具备不稳定时钟的虚拟机或导致时钟频率发生变化的节 能技术而言非常有用
  • 在初始同步后,它不会停止时钟,以防对需要系统时间保持单调的应用程序造成影响
  • 在应对临时非对称延迟时(例如,在大规模下载造成链接饱和时)提供了更好的稳定性
  • 无需对服务器进行定期轮询,因此具备间歇性网络连接的系统仍然可以快速同步时钟

chrony 官网:https://chrony.tuxfamily.org

chrony 官方文档:https://chrony.tuxfamily.org/documentation.html

7.3.1 chrony 文件组成

包:chrony

两个主要程序:chronyd 和 chronyc

  • chronyd:后台运行的守护进程,用于调整内核中运行的系统时钟和时钟服务器同步。它确定计算机 增 减 时 间 的 比 率 , 并 对 此 进 行 补 偿
  • chronyc:命令行用户工具,用于监控性能并进行多样化的配置。它可以在 chronyd 实例控制的计算机上工作,也可在一台不同的远程计算机上工作

服务 unit 文件: /usr/lib/systemd/system/chronyd.service

监听端口: 服务端: 123/udp,客户端: 323/udp

配置文件: /etc/chrony.conf

7.3.2 配置文件 chrony.conf

官方文档: https://chrony.tuxfamily.org/doc/3.5/chrony.conf.html

server  #可用于时钟服务器,iburst 选项当服务器可达时,发送一个八个数据包而不是通常的一个数据包。 包间隔通常为2秒,可加快初始同步速度
pool     #该指令的语法与server 指令的语法相似,不同之处在于它用于指定NTP服务器池而不是单个
NTP服务器。池名称应解析为随时间可能会变化的多个地址
driftfile  #根据实际时间计算出计算机增减时间的比率,将它记录到一个文件中,会在重启后为系统时钟作出补偿
rtcsync  #启用内核模式,系统时间每11分钟会拷贝到实时时钟(RTC)
allow / deny #指定一台主机、子网,或者网络以允许或拒绝访问本服务器
cmdallow / cmddeny #可以指定哪台主机可以通过chronyd使用控制命令
bindcmdaddress #允许chronyd监听哪个接口来接收由chronyc执行的命令
makestep # 通常chronyd将根据需求通过减慢或加速时钟,使得系统逐步纠正所有时间偏差。在某些特定情况下,系统时钟可能会漂移过快,导致该调整过程消耗很长的时间来纠正系统时钟。该指令强制chronyd在  调整期大于某个阀值时调整系统时钟
local stratum 10  #即使server指令中时间服务器不可用,也允许将本地时间作为标准时间授时给其它 客户端

7.3.3 ntp 客户端工具

chronyc 可以运行在交互式和非交互式两种方式,支持以下子命令

accheck           检查是否对特定主机可访问当前服务器
activity          显示有多少NTP源在线/离线
sources [-v]      显示当前时间源的同步信息
sourcestats [-v]  显示当前时间源的同步统计信息
add server        手动添加一台新的NTP服务器
clients           报告已访问本服务器的客户端列表
delete            手动移除NTP服务器或对等服务器
settime           手动设置守护进程时间
tracking         显示系统时间信息

范例:设置 chronyd 客户端与服务端

[09:40:54 root@centos8 ~]#vim /etc/chrony.conf
server ntp.aliyun.com iburst         #设置本台主机的ntp服务器端
allow 192.168.10.0/24                #如果要当成服务端的话需要设置这项,表示允许那个网段的主机连接
local stratum 10                     #服务端建议开启,表示如果本台主机的服务端断开的话是否还能给其他主机提供服务
其余选项默认,如果只当服务端的话只设置server就可以了可以写域名或者IP地址
也可以写pool地址池

范例:Centos6 ntp 客户端同步检查

[16:29:47 root@centos6 ~]#ntpq -p

7.3.4 公共 NTP 服务

  • pool.ntp.org:项目是一个提供可靠易用的 NTP 服务的虚拟集群 cn.pool.ntp.org,0- 3.cn.pool.ntp.org

  • 阿里云公共 NTP 服务器

    • Unix/linux 类:ntp.aliyun.com,ntp1-7.aliyun.com
    • windows 类: time.pool.aliyun.com
  • 腾讯公共 NTP

    • time1-5.cloud.tencent.com
  • 大学 ntp 服务

    • s1a.time.edu.cn 北京邮电大学
    • s1b.time.edu.cn 清华大学
    • s1c.time.edu.cn 北京大学
  • 国家授时中心服务器:210.72.145.44

7.3.5 时间工具

  • timedatectl 时间和时区管理
#查看日期时间、时区及NTP状态: timedatectl

#查看时区列表:
timedatectl list-timezones

#修改时区:
timedatectl set-timezone Asia/Shanghai

#修改日期时间:
timedatectl set-time "2017-01-23 10:30:00"
#开启NTP:
timedatectl set-ntp true/false
  • ntpdate 时间同步命令
  • system-config-date:图形化配置 chrony 服务的工具

8 TCP Wrapper

8.1 TCP_Wrappers 介绍

作者:Wieste Venema,IBM,Google,工作在第四层(传输层)的 TCP 协议,对有状态连接的特定服务进行安全检测并实现访问控制,以库文件形式实现

某进程是否接受 libwrap 的控制取决于发起此进程的程序在编译时是否针对 libwrap 进行编译的判断服务程序是否能够由 tcp_wrapper 进行访问控制的方法:

ldd  /PATH/TO/PROGRAM|grep libwrap.so

范例:

[10:06:45 root@centos7 ~]#ldd `which sshd` | grep libwra
libwrap.so.0 => /lib64/libwrap.so.0 (0x00007fb1bd9fa000)
[10:07:08 root@centos8 ~]#ldd `which sshd` | grep libwra
centos8已经不在使用

8.2 TCP_Wrappers 的使用

配置文件:/etc/hosts.allow, /etc/hosts.deny

帮助参考:man 5 hosts_access,man 5 hosts_options

检查顺序:hosts.allow,hosts.deny(默认允许), 注意:一旦前面规则匹配,直接生效,将不再继续

配置基本语法:

daemon_list@host: client_list  [ :options :option… ]

Daemon_list@host 格式

单个应用程序的二进制文件名,而非服务名,例如vsftpd
以逗号或空格分隔的应用程序文件名列表,如:sshd,vsftpd
ALL表示所有接受tcp_wrapper控制的服务程序
主机有多个IP,可用@hostIP来实现控制,如:in.telnetd@192.168.0.254

客户端 Client_list 格式

以逗号或空格分隔的客户端列表
基于IP地址:192.168.10.1    192.168.1.
基于主机名:www.magedu.com   .magedu.com 较少用
基于网络/掩码:192.168.0.0/255.255.255.0
基于net/prefixlen: 192.168.1.0/24(CentOS7)
基于网络组(NIS 域):@mynetwork
内置ACL:ALL,LOCAL,KNOWN,UNKNOWN,PARANOID
EXCEPT   排除相关地址

范例:EXCEPT 用法

vsftpd: 172.16. EXCEPT 172.16.100.0/24 EXCEPT 172.16.100.1

范例:只允许 192.168.1.0/24 的主机访问 sshd

/etc/hosts.allow
sshd: 192.168.1.
/etc/hosts.deny
sshd :ALL

范例:只允许 192.168.1.0/24 的主机访问 telnet 和 vsftpd 服务

/etc/hosts.allow
vsftpd,in.telnetd: 192.168.1.
/etc/host.deny
vsftpd,in.telnetd:  ALL

[:options]选项格式:帮助:man 5 hosts_options

  • deny 主要用在/etc/hosts.allow 定义“拒绝”规则,如:vsftpd: 172.16. :deny
  • allow 主要用在/etc/hosts.deny 定义“允许”规则,如:vsftpd:172.16. :allow
  • spawn 启动一个外部程序完成执行的操作
  • twist 实际动作是拒绝访问,使用指定操作替换当前服务,标准输出和 ERROR 发送到客户端,默认至/dev/null

范例:拒绝登录

[10:07:18 root@centos7 ~]#vim /etc/hosts.allow
sshd:ALL:deny echo
[10:28:48 root@centos8 ~]#ssh 192.168.10.71
kex_exchange_identification: read: Connection reset by peer

说明:
在/etc/hosts.allow中添加,允许登录,并记录日志在/etc/hosts.deny中添加,拒绝登录,并记录日志
%c 客户端信息
%s 服务器端信息
%d 服务名
%p 守护进程的PID
%% 表示%

范例:登陆时执行外部程序

[10:31:43 root@centos7 ~]#cat /etc/hosts.allow 
sshd: ALL :spawn echo "$(date +%%F) login attempt form %c to %s,%d" >>/var/log/sshd.log

8.3 测试工具 tcpdmatch

tcpdmatch [-d] daemon[@host] client

选项:

  • -d 测试当前目录下的 hosts.allow 和 hosts.deny

范例:

[10:30:21 root@centos7 ~]#vim /etc/hosts.allow
sshd: ALL :deny echo "$(date +%%F) login attempt form %c to %s,%d" >>/var/log/sshd.log

9 SELinux

国内基本大多数公司不使用 SELinux,Centos 安装之后默认会安装,ubunte 没有

9.1 启用和禁用 SELinux

SELinux 的状态:

  • enforcing:强制,每个受限的进程都必然受限
  • permissive:允许,每个受限的进程违规操作不会被禁止,但会被记录于审计日志
  • disabled:禁用

相关命令:

  • getenforce: 获取 selinux 当前状态
  • sestatus :查看 selinux 状态
  • setenforce 0|1 0: 设置为 permissive 1: 设置为 enforcing

配置文件:

/boot/grub/grub.conf 在kernel行使用selinux=0禁用SELinux
/boot/grub2/grub.cfg 在linux16行使用selinux=0禁用SELinux
/etc/selinux/config 或 /etc/sysconfig/selinux 中 SELINUX=
{disabled|enforcing|permissive}
  • 安全

    安全永远都不是一个小问题。

    200 引用 • 816 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...