一个专注于IT互联网运维的技术博客

LNMP之安装CentOS7之后需要做的几件事

2018.12.22

阿里云ECS中部署CentOS7操作系统之后,还需要做一些基本的优化和安全防护,比如为安全起见,创建普通用户并授予管理员权限,平时禁止使用root用户登录、配置Yum软件源加速软件的下载、安装一些常用软件包、升级CentOS内核和软件到最新的版本、配置SSHD防止系统密码被暴力破解、修改阿里云ECS主机安全组等。

密码和主机名配置

  • 阿里云ECS服务器的密码有两种,“远程连接密码”和“用户密码”。第一次使用“远程连接”连接ECS服务器的时候,会提示远程连接密码,如果遗忘或者想修改这个密码,找到指定实例,点击“更多”=》“密码/密钥”=》“修改远程连接密码”即可完成修改,修改立即生效,对ECS中的系统无任何影响。“用户密码”是CentOS7的root密码,如果创建ECS的时候没有设置root密码或者忘记root密码,可以通过点击“更多”=》“密码/密钥”=》“重置密码”完成修改,重置实例密码后,只有在控制台重启实例才能生效。
  • 如果创建ECS的时候没有设置主机名,ECS默认的主机名是实例名,CentOS7可以使用hostnamectl命令修改主机名:

    [root@ityoudao ~]# hostnamectl set-hostname ityoudao
    
  • ECS的内网IP地址是自动生成的,该IP地址的网段为所选的虚拟交换机VSW的网段。如果要修改该内网IP地址,点击“更多”=》“网络和安全组”=》“修改私有IP”即可更换为该网段其他IP地址。如果要更换网段或者虚拟交换机VSW,“修改私有IP”时更换到其他创建好的虚拟交换机即可,注意只能更换同一个VPC下的虚拟交换机。

创建管理员用户

  • 为了安全起见,平时应该禁止使用root用户进行系统管理,这里创建用户admin并加入管理员组wheel,admin用户可以使用sudo命令进行系统管理操作:

    [root@ityoudao ~]# useradd admin -G wheel
    [root@ityoudao ~]# id admin
    uid=1000(admin) gid=1000(admin) groups=1000(admin),10(wheel)
    [root@ityoudao ~]# echo "password" | passwd admin --stdin
    

配置Yum软件管理系统

安装Yum软件源EPEL

EPEL即Extra Packages for Enterprise Linux,企业版Linux附加软件包,针对红帽企业版Linux(RHEL)及其衍生发行版(比如CentOS、Scientific Linux、Oracle Enterprise Linux)的一个高质量附加软件包项目。EPEL的软件包通常不会与企业版Linux官方源中的软件包发生冲突,或者互相替换文件。EPEL项目与Fedora基本一致,包含完整的构建系统、升级管理器、镜像管理器等等。

EPEL包含一个叫做'epel-release'的包,这个包包含了EPEL源的gpg密钥和软件源信息。您可以通过yum安装到您的企业版Linux发行版上。除了epel-release源,还有一个叫做'epel-testing'的源,这个源包含最新的测试软件包,其版本很新但是安装有风险,请自行斟酌。

[admin@ityoudao ~]$ yum repolist
repo id repo name status
base/7/x86_64 CentOS-7 10,019
epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 12,746
extras/7/x86_64 CentOS-7 321
updates/7/x86_64 CentOS-7 599
repolist: 23,685

阿里云ECS的CentOS7.4系统自带了EPEL软件源,否则使用下面的命令安装:

[admin@ityoudao ~]$ sudo yum install epel-release

安装yum-fastestmirror插件

yum-fastestmirror插件在多个mirror时自动选择速度最快的mirror:

[admin@ityoudao ~]$ sudo yum install yum-fastestmirror
//配置文件:
[admin@ityoudao ~]$ rpm -qc yum-axelget
/etc/yum/pluginconf.d/axelget.conf
//更新软件包信息的本地缓存:
[admin@ityoudao ~]$ yum clean all && yum makecache

安装yum-axelget插件

默认的yum是单线程下载的,yum-axelget插件是调用系统中的axel下载软件,增加下载线程从而提高速度。这个方法更有效,更快捷,而且会根据软件包的大小自动设定线程数,基本避免了因为线程数过多而导致服务器拒绝下载的问题。其基本原理是在实际进行yum下载前使用插件通过多线程下载工具axel来实现预下载,等到yum下载的时候发现该下载的东西都已经存在了,就会直接使用axel下载的软件包。使用下面的命令安装yum-axelget插件:

[admin@ityoudao ~]$ sudo yum install yum-axelget
//配置文件:
[admin@ityoudao ~]$ rpm -qc yum-axelget
/etc/yum/pluginconf.d/axelget.conf
  • 安装该插件的同时会安装另一个软件axel。axel是一个并行下载工具,在下载http、ftp等简单协议的文件时非常好用。

升级系统到最新版

目前CentOS7.6.1810已经发布,但是阿里云公共镜像中的CentOS只有7.4版本,使用下面的命令升级系统版本:

[admin@ityoudao ~]$ sudo yum update -y

升级完成之后的版本: CentOS7.6系统信息

安装常用软件包

阿里云ECS的CentOS7.4是最小化安装,需要安装一些常用的软件包,比如 + bash-completion:bash命令补全工具 + tree:以树的形式列出来目录下的文件。 + lsof:lsof命令查看打开的文件或端口。 + net-tools:基本网络管理的工具,提供netstat、ifconfig、route等程序。 + nmap-ncat:用于从TCP/UDP连接中读取或发送网络数据。

[admin@ityoudao ~]$ sudo yum install bash-completion tree lsof net-tools nmap-ncat

配置sshd服务器

为了防止嗅探ssh口令,建议更改sshd监听端口:

[admin@ityoudao ~]$ sudo vi /etc/ssh/sshd_config 
Port 666 # 将sshd监听端口改为666
GSSAPIAuthentication no # 关闭浪费时间、没有意义而且会失败的gssapi-with-mic认证方式。
UseDNS no # 如果UseDNS选项打开的话,服务器会先根据客户端的IP地址进行DNS PTR反向查询出客户端的主机名,然后根据查询出的客户端主机名进行DNS正向A记录查询,并验证是否与原始IP地址一致,通过此种措施来防止客户端欺骗。平时我们都是动态IP不会有PTR记录,所以打开此选项也没有太多作用。我们可以通过关闭此功能来提高连接OpenSSH服务器的速度。
...

更严格的话可以禁止密码登录,只允许密钥登录,首先在客户端生成SSH密钥并拷贝到ECS,Windows上可以使用SSH软件生成密钥并手动复制粘贴到ECS的~/.ssh/authorized_keys文件,Linux/MacOS操作步骤如下:

ityoudao:~ admin$ ssh-keygen -t rsa
ityoudao:~ wxy$ ssh-copy-id -i ~/.ssh/id_rsa.pub -p 22 admin@ecs_external_ip

然后修改ECS的sshd_config文件并重启SSHD服务器:

[admin@ityoudao ~]$ sudo vi /etc/ssh/sshd_config 
...
RSAAuthentication yes # 启用RSA认证
PubkeyAuthentication yes # 启用公钥认证
AuthorizedKeysFile .ssh/authorized_keys # 密钥认证文件
PermitRootLogin no # 禁止root用户登录
PasswordAuthentication no #禁用密码认证
//重启sshd服务
[admin@ityoudao ~]$ sudo systemctl restart sshd
[admin@ityoudao ~]$ sudo systemctl status sshd

修改SSHD服务端口之后还必须修改ECS的安全组,放行tpc/666端口: 阿里云 ECS 安全组配置

最后在本地使用如下命令登录云服务器:

ityoudao:~ admin$ ssh -p 666 -l admin ecs_external_ip

配置SMTP服务器

SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)是在Internet传输email的标准。配置SMTP之后就可以在Linux上使用mail命令发送邮件。这里使用QQ邮箱为例。

在QQ邮箱中开启SMTP

邮箱设置=》帐户=》“POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务”,开启“POP3/SMTP服务”,授权码“qowcnkmrfvkwbgia”

修改/etc/mail.rc文件

QQ邮箱SMTP服务器:smtp.qq.com 端口:465或587

[admin@ityoudao ~]$ sudo vi /etc/mail.rc
set smtp=smtps://smtp.qq.com:465
set smtp-auth=login
set smtp-auth-user=postmaster@ityoudao.cn # QQ邮箱帐号,这里使用的是域名邮箱,其他QQ邮箱也一样
set smtp-auth-password=qowcnkmrfvkwbgia  # QQ邮箱SMTP密码
set from=postmaster@ityoudao.cn # 邮件发件人
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/

通过smtp发送邮件

[admin@ityoudao ~]$ date|mail -v -s "Test Mail" postmaster@ityoudao.cn

QQ 邮箱 SMTP 配置

调试smtp发送邮件

如果遇到问题,发送邮件时可以使用mail命令的-v选项输出调试信息,使用mailq命令可以检查发送邮件队列。

[admin@ityoudao ~]$ date|mail -v -s "Test Mail" postmaster@ityoudao.cn
Resolving host smtp.qq.com . . . done.
Connecting to 14.17.57.241:465 . . . connected.
Error in certificate: Peer's certificate issuer is not recognized.
Comparing DNS name: "pop.qq.com"
Comparing DNS name: "dav.qq.com"
Comparing DNS name: "ex.qq.com"
Comparing DNS name: "smtp.qq.com"
SSL parameters: cipher=AES-128, keysize=128, secretkeysize=128,
issuer=CN=GeoTrust RSA CA 2018,OU=www.digicert.com,O=DigiCert Inc,C=US
subject=CN=pop.qq.com,OU=R&D,O=Tencent Technology (Shenzhen) Company Limited,L=Shenzhen,ST=Guangdong,C=CN
220 smtp.qq.com Esmtp QQ Mail Server
>>> EHLO ityoudao
250-smtp.qq.com
250-PIPELINING
250-SIZE 73400320
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN
250-MAILCOMPRESS
250 8BITMIME
>>> AUTH LOGIN
334 VXNldm5ucWU6
>>> bGjcgvdWghb8hr6R9ZdGBpDHdddz4==
334 RnQ6dFnd8c3g
>>> cz6r2mb6Ypd95ZWcGjPldQ==
235 Authentication successful
>>> MAIL FROM:<postmaster@ityoudao.cn>
250 Ok
>>> RCPT TO:<postmaster@ityoudao.cn>
250 Ok
>>> DATA
354 End data with <CR><LF>.<CR><LF>
>>> .
250 Ok: queued as 
>>> QUIT
221 Bye
[admin@ityoudao ~]$ mailq
Mail queue is empty

配置postfix邮件服务器

配置ELK时发现阿里云ECS上的CentOS的maillog文件存在大量的“fatal: parameter inet_interfaces: no local interface found for ::1”报错,如下:

[admin@ityoudao ~]$ sudo tail /var/log/maillog
...
Dec 15 20:14:01 ityoudao postfix/sendmail[26439]: fatal: parameter inet_interfaces: no local interface found for ::1

错误信息来自“postfix/sendmail”,查看postfix配置文件:

[admin@ityoudao ~]$ sudo vi /etc/postfix/main.cf
inet_interfaces = localhost 	# 允许从所有localhost网卡接收邮件
inet_protocols = all		# IPv4和IPv6
...
[admin@ityoudao ~]$ cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

main.cf文件中设置可以从所有localhost网卡接收邮件,通过hosts文件可知,localhost对应IP地址为127.0.0.1(IPv4)和::1(IPv6),也就是说会通过“127.0.0.1”和“::1”这两个IP地址接收邮件,但是查看网卡信息发现:

[admin@ityoudao ~]$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:16:3e:07:54:67 brd ff:ff:ff:ff:ff:ff
    inet 172.17.66.66/24 brd 172.17.66.255 scope global dynamic eth0
       valid_lft 315226543sec preferred_lft 315226543sec

阿里云ECS上的lo网卡没有开启IPv6,没有地址为“::1”的网卡,故报“parameter inet_interfaces: no local interface found for ::1”错误。解决办法有两种:

a)将inet_interfaces改为127.0.0.1或者all,这样就不会通过未知的“::1”网卡接收邮件:

inet_interfaces = 127.0.0.1
inet_protocols = all

b)将inet_protocols改为ipv4

inet_interfaces = localhost
inet_protocols = ipv4

然后重启postfix服务:

[admin@ityoudao ~]$ sudo systemctl restart postfix.service 
发表评论