[内容] Postfix 数据的加密 (通过 TLS 实现)

内容一:Postfix 不使用 TLS 加密数据传输的后果

1) 收发的邮件数据会被他人截取
2) 给 Gmail 等电子邮箱发送邮件时,会提示类似 “ *** 未对此邮件进行加密” 的信息

内容二:给 Postfix 设置 TLS 加密数据传输的方法

2.1 给 Postfix 的配置文件设置 TLS 机密数据传输的参数

# vim /etc/postfix/main.cf

添加以下内容:

......
smtpd_tls_security_level = may
smtp_tls_security_level = may
......


补充:
smtpd_tls_security_level 代表接收邮件的 TLS 安全等级
smtp_tls_security_level 代表发送邮件的 TLS 安全等级
TLS 的常用安全等级有 none、may 和 encrypt :
1) none 表示禁止使用 TLS 加密
2) may 表示可以接收不使用 TLS 加密的邮件,但是会提出支持 TLS 加密的通告。发送邮件时优先发送支持 TLS 加密的邮件
3) encrypt 表示强制使用 TLS 加密

2.2 重启 Postfix 服务

# systemctl restart postfix

[内容] DNS 客户端的设置 (Linux 版)

内容一:设置 DNS 客户端

1.1 直接在本地指定域名

1.1.1 直接在本地指定域名的方法
# vim /etc/hosts

添加以下内容:

......
<IP address> <domain name>

(注意:/etc/hosts 里记录的 DNS 优先级要比 /etc/resolv.conf 里的高)

1.1.2 直接在本地指定域名的案例
# vim /etc/hosts

添加以下内容:

......
192.154.240.64 eternalcenter.com

(补充:这里以将 192.154.240.64 解析为 eternalcenter.com 为例)

(注意:/etc/hosts 里记录的 DNS 优先级要比 /etc/resolv.conf 里的高)

1.2 使用远程的 DNS 服务器解析域名

1.2.1 使用远程的 DNS 服务器解析域名
1.2.1.1 使用远程的 DNS 服务器解析域名的方法
1.2.1.1.1 直接修改 /etc/resolv.conf 文件
# vim /etc/resolv.conf

添加以下内容:

......
nameserver <IP address of DNS server>

(注意:/etc/hosts 里记录的 DNS 优先级要比 /etc/resolv.conf 里的高)

1.2.1.1.2 使用 nmcli 命令
1.2.1.1.2.1 使用 nmcli 命令配置一个 DNS 服务器的 IP 地址
# nmcli connection modify <network card name> ipv4.dns <IP address of DNS server>

(补充:不将 /etc/NetworkManager/NetworkManager.conf 里的 [main] dns=none 参数修改为 none 的话,此参数会覆盖 /etc/resolv.conf 里的设置)


注意:
1) 此方法只对 CentOS8&RHEL8 适用
2) /etc/hosts 里记录的 DNS 优先级要比使用 nmcli 命令的高

1.2.1.1.2.2 使用 nmcli 命令配置多个 DNS 服务器的 IP 地址
# nmcli connection modify <network card name> ipv4.dns "<first IP address of DNS server>,<second IP address of DNS server>,<third IP address of DNS server>......"

(补充:不将 /etc/NetworkManager/NetworkManager.conf 里的 [main] dns=none 参数修改为 none 的话,此参数会覆盖 /etc/resolv.conf 里的设置)


注意:
1) 此方法只对 CentOS8&RHEL8 适用
2) /etc/hosts 里记录的 DNS 优先级要比使用 nmcli 命令的高

1.2.1.2 使用远程的 DNS 服务器解析域名的案例
1.2.1.2.1 直接修改 /etc/resolv.conf 文件
# vim /etc/resolv.conf

添加以下内容:

......
nameserver 8.8.8.8

(补充:这里以使用 8.8.8.8 DNS 服务器为例)

(注意:/etc/hosts 里记录的 DNS 优先级要比 /etc/resolv.conf 里的高)

1.2.1.2.2 使用 nmcli 命令
# nmcli connection modify eth0 ipv4.dns 8.8.8.8


补充:
1) 这里以给 eth0 网卡添加 8.8.8.8 DNS 服务器为例
2) 不将 /etc/NetworkManager/NetworkManager.conf 里的 [main] dns=none 参数修改为 none 的话,此参数会覆盖 /etc/resolv.conf 里的设置

(注意:/etc/hosts 里记录的 DNS 优先级要比使用 nmcli 命令的高)

1.2.2 显示正在使用远程的 DNS 服务器解析的域名
# nmcli connection show | grep -i ipv4.dns

内容二:检查 DNS 域名解析

2.1 使用 ping 命令解析域名

2.1.1 使用 ping 命令解析域名的格式
# ping <domain name>
2.1.2 使用 ping 命令解析域名的案例
# ping eternalcenter.com
PING eternalcenter.com (192.154.240.64) 56(84) bytes of data.
64 bytes from v144-48-142.ap-east.sugarhosts.net (192.154.240.64): icmp_seq=1 ttl=50 time=144 ms
64 bytes from v144-48-142.ap-east.sugarhosts.net (192.154.240.64): icmp_seq=3 ttl=50 time=70.8 ms
64 bytes from v144-48-142.ap-east.sugarhosts.net (192.154.240.64): icmp_seq=4 ttl=50 time=81.3 ms
64 bytes from v144-48-142.ap-east.sugarhosts.net (192.154.240.64): icmp_seq=5 ttl=50 time=103 ms
......

2.2 使用 host 命令解析域名

2.2.1 使用 host 命令解析域名的格式
# host <domain name>
2.2.2 使用 host 命令解析域名的案例
# host eternalcenter.com
eternalcenter.com has address 192.154.240.64

(补充:这里以解析 etenalcenter.com 域名为例)

2.3 使用 nslookup 命令解析域名

2.3.1 使用 nslookup 命令解析域名的格式
# nslookup <domain name>
2.3.2 使用 nslookup 命令解析域名的案例
# nslookup eternalcenter.com
Server:		8.8.8.8
Address:	8.8.8.8#53

Non-authoritative answer:
Name:	eternalcenter.com
Address: 192.154.240.64

(补充:这里以解析 etenalcenter.com 域名为例)

[实验] Chrony 客户端的设置 (时间同步)

注意:

从 CentOS 7.2&RHEL 7.0 开始实现时间同步的程序默认从 NTP 换成了 Chrony 。 NTP 也可以继续使用,但是需要单独安装 NTP 的安装包

正文:

步骤一:系统环境要求

1) 服务器的系统是 CentOS 8 版本
2) 服务器系统配置好可用的软件源

步骤二:确保 Chrony 已经安装


# yum -y install chrony

步骤三:确保系统会使用 Chrony 或 NTP 的时间同步

# timedatectl set-ntp true
# timedatectl
               Local time: Fri 2020-06-12 09:52:30 EDT
           Universal time: Fri 2020-06-12 13:52:30 UTC
                 RTC time: Fri 2020-06-12 13:51:52
                Time zone: America/New_York (EDT, -0400)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

(补充:此时 NTP service 的状态可能还不是 active 状态)

步骤四:修改配置文件

# vim /etc/chrony.conf

将部分内容修改如下:

......
pool 2.centos.pool.ntp.org iburst

(说明:在配置文件的开头添加要进行时间同步的服务器)

步骤五:重启客户端的 Chrony 服务

# systemctl restart chronyd
# systemctl status chronyd

步骤六:显示客户端时间同步的状态

6.1 通过 Chrony 命令显示

# chronyc sources -v
210 Number of sources = 4

  .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
 / .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| /   '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
||                                                 .- xxxx [ yyyy ] +/- zzzz
||      Reachability register (octal) -.           |  xxxx = adjusted offset,
||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
||                                \     |          |  zzzz = estimated error.
||                                 |    |           \
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^* time.rdg.uk.as44574.net       3   8   373   153    +73ms[  +68ms] +/-  233ms

(补充:当出现 ^* 时则代表时间同步成功)

或者:

# chronyc tracking

6.2 通过 timedatectl 命令显示

# timedatectl
               Local time: Fri 2020-06-12 09:52:30 EDT
           Universal time: Fri 2020-06-12 13:52:30 UTC
                 RTC time: Fri 2020-06-12 13:51:52
                Time zone: America/New_York (EDT, -0400)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

(补充:如果 Chrony 时间同步正常,则此时 Chrony service 的状态肯定是 active 状态)

[实验] VNC 远程桌面服务的搭建

纪念:站主于 2020 年 1 月完成了此开源实验,并将过程中的所有命令经过整理和注释以后,形成以下教程

软件准备:

在 RealVNC 官网上下载使用 VNC 服务所需软件 VNC View:

https://www.realvnc.com/en/

正文:

步骤一:规划拓扑

1.1 服务器列表

服务端 192.168.100.10
客户端 192.168.100.11

1.2 服务器列表简介

1) 服务器提供 VNC 服务让其他设备可以远程自己的桌面
2) 客户端通过 VNC 服务远程服务器的桌面

步骤二:系统环境要求

1) 所有服务器的系统都需要是 CentOS 7 版本
2) 所有服务器都要关闭防火墙
3) 所有服务器都要关闭 SELinux
4) 所有服务器系统都要配置好可用的软件源
5) 需要按照拓扑图给对应的服务器配置好 IP 地址和主机名
6) 所有服务器都要可以相互 ping 通自己和对方的 IP 地址和主机名

步骤三:服务端安装 VNC 服务

3.1 服务端 VNC 环境准备

3.1.1 在服务端上安装桌面

(只在服务端上执行以下步骤)

# yum -y groupinstall "Server with GUI"
# yum -y groupinstall "GNOME Desktop"
3.1.2 在服务端上创建用于使用 VNC 的用户
3.1.2.1 创建用户

(只在服务端上执行以下步骤)

# useradd zhumingyu
3.1.2.2 修改用户密码

(只在服务端上执行以下步骤)

# passwd zhumingyu

3.2 服务端安装 VNC 服务

(只在服务端上执行以下步骤)

# yum -y install tigervnc tigervnc-server

步骤四:配置 VNC 服务

4.1 创建 VNC 服务进程文件

(只在服务端上执行以下步骤)

# cp /lib/systemd/system/vncserver\@.service /lib/systemd/system/vncserver\@:1.service

4.2 编辑 VNC 服务进程文件

(只在服务端上执行以下步骤)

# vi /lib/systemd/system/vncserver\@:1.service

将其中的:

......
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target

[Service]
Type=forking

# Clean any existing files in /tmp/.X11-unix environment
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/usr/sbin/runuser -l <USER> -c "/usr/bin/vncserver %i"
PIDFile=/home/<USER>/.vnc/%H%i.pid
ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'

[Install]
WantedBy=multi-user.target

修改为:

......
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target

[Service]
Type=forking

# Clean any existing files in /tmp/.X11-unix environment
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/usr/sbin/runuser -l zhumingyu -c "/usr/bin/vncserver %i"
PIDFile=/home/zhumingyu/.vnc/%H%i.pid
ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'

[Install]
WantedBy=multi-user.target

步骤五:开机自启 VNC 服务

5.1 刷新所有服务进程文件

(只在服务端上执行以下步骤)

# systemctl daemon-reload

5.2 开机自启 VNC 服务

(只在服务端上执行以下步骤)

# systemctl enable vncserver@:1.service
Created symlink from /etc/systemd/system/multi-user.target.wants/vncserver@:1.service to /usr/lib/systemd/system/vncserver@:1.service.

步骤六:启动 VNC 服务

6.1 切换到使用 VNC 的用户

(只在服务端上执行以下步骤)

# su - zhumingyu

6.2 开启 VNC 服务

(只在服务端上执行以下步骤)

$ vncserver :1

You will require a password to access your desktops.

Password:
Verify:
Would you like to enter a view-only password (y/n)? y
Password:
Verify:

New 'vnc:1 (zhumingyu)' desktop is vnc:1

Creating default startup script /home/zhumingyu/.vnc/xstartup
Creating default config /home/zhumingyu/.vnc/config
Starting applications specified in /home/zhumingyu/.vnc/xstartup
Log file is /home/zhumingyu/.vnc/vnc:1.log

6.3 补充:修改 VNC 登录密码的方法

# su - zhumingyu
$ vncpasswd

步骤七:确认 VNC 服务是否启动成功

(只在服务端上执行以下步骤)

$ ss -ntulap | grep 5901
tcp    LISTEN     0      5         *:5901                  *:*                   users:(("Xvnc",pid=1152,fd=9))
tcp    LISTEN     0      5      [::]:5901               [::]:*                   users:(("Xvnc",pid=1152,fd=10))

步骤八:客户端使用 VNC 服务

8.1 客户端使用 VNC 服务的前期工作

8.1.1 在客户端上安装桌面

(只在客户端上执行以下步骤)

# yum -y groupinstall "Server with GUI"
# yum -y groupinstall "GNOME Desktop"
8.1.2 客户端安装 VNC 服务的客户端

(只在客户端上执行以下步骤)

# yum -y localinstall VNC-Viewer-6.19.1115-Linux-x64.rpm

(补充:这里以安装 VNC-Viewer-6.19.1115-Linux-x64.rpm 为例)

8.1.3 客户端启动桌面

(只在客户端上执行以下步骤)

# startx
(图:1)

8.2 客户端使用 VNC 服务

8.2.1 客户端启动 VNC 服务的客户端

(只在客户端上执行以下步骤)

(图:2)
(图:3)
(图:4)
8.2.2 连接服务端的 VNC IP 地址和端口号

(只在客户端上执行以下步骤)

(图:5)
(图:6)
8.2.3 输入服务端 VNC 用户的 VNC 密码

(只在客户端上执行以下步骤)

(图:7)
8.2.4 VNC 服务成功

(只在客户端上执行以下步骤)

(图:8)

[工具] Shell 批量检测域名的 DNS 解析是否正确

介绍

基本信息

作者:朱明宇
名称:批量检测域名的 DNS 解析是否正确
作用:批量检测域名的 DNS 解析是否正确

使用方法

1. 在此脚本的分割线内写入相应的内容
2. 给此脚本添加执行权限
3. 执行此脚本

脚本分割线里的变量

1. main_domain=eternalcenter.com #此处填写网站的“主域名”,网站一般会有几个域名,其中“主域名”直接指向 ip 地址,其他的域名都指向主域名
2. ip=192.154.240.64 #域名指向的 ip 地址
3. nginx=1.16.0 #web 程序的对应版本的版本
4. content1=”eteranlcenter” # 随即填写一个具有代表性的网站首页的内容
5. content2=”Mingyu” # 随即填写一个具有代表性的网站首页的内容,但是要和前面的 content1 在同一行
6. domain=”eternalcenter.com eternalcentre.com zhumingyu.com mingyuzhu.com eternalcenter.org eternalcentre.org” #需要检测的域名

脚本

#!/bin/bash

####################### Separator ########################

main_domain=eternalcenter.com
ip=144.48.142.148
nginx=1.16.0
content1="eternalcenter"
content2="Mingyu"
domain="eternalcenter.com eternalcentre.com zhumingyu.com mingyuzhu.com eternalcenter.org eternalcentre.org"

####################### Separator ########################

check_domain_name(){
if [ $1 == $main_domain ];then
	
	ping -c4 -i0.4 $1 | grep $ip &> /dev/null
	if [ $? -ne 0 ];then
		echo -e "\033[31m $1 is error !!!!! ip is error !!!!! \033[0m"
	else
		curl $1 | grep $nginx &> /dev/null
		if [ $? -ne 0 ];then
			echo -e "\033[31m $1 is error !!!!! software is error !!!!! \033[0m"
		else	
			elinks $1 | grep "$content1" | grep "$content2" &> /dev/null
			if [ $? -ne 0 ];then
				echo -e "\033[31m $1 is error !!!!! web is error !!!!! \033[0m"
			else
				echo -e "\033[32m $1 is ok \033[0m"
			fi
		fi
		
	fi
else
	elinks $1 | grep "$content1" | grep "$content2" &> /dev/null
	if [ $? -ne 0 ];then
		echo -e "\033[31m $1 is error !!!!! web is error !!!!! \033[0m"
	else
		echo -e "\033[32m $1 is ok \033[0m"
	fi


fi
}

for i in $domain
do
	check_domain_name $i
done