安装CentOS 7后必做的安全加固

刚装好的CentOS 7系统存在很大风险,需要立刻进行安全加固。

1. 用root账号通过SSH登录服务器

通常使用SSH远程登录服务器进行日常维护。在windows系统下可以用PuTTY软件,Linux和MAC系统内置SSH客户端功能直接在终端(terminal)输入相关指令。

SSH首次登录服务器,会提示是否接受该服务器的加密公钥,请选择“是”(yes)。

2. 修改root账号的密码(可选)

如果root的密码是安装时自动生成无法确认安全,则必须立刻修改root密码。指令如下:

passwd root

系统会提示输入新的密码,需要输入两次相同的新密码。

服务器上所有账号的密码都要采用毫无关联的强密码,密码为不少于16位的大小写字母数字特殊符号的组合。推荐采用专门的密码管理软件,比如KeePass。

3. 新增一个普通账号并设定密码

该账号主要用于SSH登录服务器进行管理,root账号通常禁止远程SSH登录。指令如下:

useradd ifshow

ifshow就是普通账号的名称,根据实际情况来取名。随后给该账号设定密码:

passwd ifshow

4. 修改SSH配置文件(改默认端口、禁止root账号登录、指定允许登录账号)

用vi文本编辑器修改SSH配置文件,指令如下:

vi /etc/ssh/sshd_config

打开配置文件后,查找

#Port 22

修改为

Port 2345

2345是更改后的端口号,可以是 1024 ~ 65535 之间的任意数字,不要和系统其他服务端口冲突即可。

查找

#PermitRootLogin yes

修改为

PermitRootLogin no
AllowUsers ifshow

第一行是禁止root账号通过SSH登录;
第二行是指定允许通过SSH登录的账号ifshow,可以输入多个账号用空格隔开。

然后检查配置文件中,以下字段是否设置为no,字段最前面有#的删除#

PermitEmptyPasswords no
UsePAM no
X11Forwarding no
UseDNS no

再检查配置文件中,以下字段设置,字段最前面有#的删除#

Protocol 2
MaxAuthTries 3
MaxSessions 2

修改完成,保存配置文件退出编辑器。重启SSH服务,使得配置文件生效。

systemctl restart sshd.service

为防止失误,保持当前窗口连接,新建SSH连接2345端口测试ifshow能否登录系统。

用ifshow账号登录系统后执行su指令切换到root账号,系统会提示输入root账号的密码;
或者在命令前加上sudo空格,可临时以root权限执行,系统会提示输入root账号的密码。
本文后续内容均需root权限执行,下文不重复说明。
对安全有更高要求的还可以使用SSH证书登录

4. 启用firewalld防火墙

CentOS 7默认采用firewalld防火墙,firewalld的使用说明请点这里
因为更改过SSH默认端口,所以先修改firewall中SSH服务配置文件。执行如下指令:

cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/
vi /etc/firewalld/services/ssh.xml

查找

<port protocol="tcp" port="22"/>

修改为

<port protocol="tcp" port="2345"/>

启动firewalld并设为开机自启,执行如下指令:

systemctl start firewalld.service
systemctl enable firewalld.service

在fierwalld中开放ssh服务端口:

firewall-cmd --permanent --add-service=ssh
firewall-cmd --reload

为防止失误,保持当前窗口连接,新建SSH连接2345端口测试ifshow能否登录系统。

5. 让系统自动更新

查询当前系统版本

cat /etc/*release*

安装EPEL源(可选)

yum -y install epel-release.noarch

手动进行系统更新,安装所需软件cron和yum-cron,执行如下指令:

yum -y update
yum -y install cronie
yum -y install yum-cron

修改yum-cron配置文件

vi /etc/yum/yum-cron.conf

查找

apply_updates = no

修改为

apply_updates = yes

再检查配置文件中,以下字段是否设置为yes

update_messages = yes
download_updates = yes
apply_updates = yes

修改完成,保存配置文件退出编辑器。启动cron和yum-cron并设为开机自启。

systemctl start crond.service
systemctl enable crond.service
systemctl start yum-cron.service
systemctl enable yum-cron.service

如果需要系统定时重启(可选),可添加crontab定时执行任务:

crontab -e

添加一行(每天凌晨5点重启)后保存退出。

0 5 * * * reboot

查看当前的定时执行任务列表:

crontab -l

6. 开启SELinux(可选)

编辑SELinux配置文件

vi /etc/selinux/config

修改SELINUX的值(enforcing为开启,disabled为关闭)

SELINUX=enforcing

注意:别错误修改SELINUXTYPE的值为disabled,误改会导致系统无法启动。

7. 增加swap分区(已有swap分区的跳过)

查看当前分区情况

free -m

增加 swap分区,容量为1GB

dd if=/dev/zero of=/var/swap bs=1024 count=1024000

设置交换文件

mkswap /var/swap

立即激活启用交换分区

swapon /var/swap

添加系统引导时自启动运行

vi /etc/fstab

添加一行

/var/swap swap swap defaults 0 0

如果不需要了,收回 swap 空间

swapoff /var/swap

从文件系统中回收

rm /var/swap

 

8. 必做的安全加固已经完成,还可以安装fail2ban防止暴力破解密码

点击这里查看《CentOS 7安装Fail2ban防御暴力破解密码(配合FirewallD)》

安装CentOS 7后必做的安全加固》上有6条评论

  1. 这个步骤:

    再检查配置文件中,以下字段设置,字段最前面有#的删除#
    Protocol 2
    MaxAuthTries 3
    MaxSessions 2

    中的Protocol 2 好像不在/etc/ssh/sshd_config文件里,我只能在/etc/ssh/ssh_config找到 原本是在哪里呢?

    • 没有就自己写,服务器端设置sshd_config。
      ssh_config和sshd_config都是ssh服务器的配置文件,二者区别在于,前者是针对客户端的配置文件,后者则是针对服务端的配置文件。

    • 估计是防火墙拦截了

      为防止失误,保持当前窗口连接,新建SSH连接XXXX端口测试XXX能否登录系统。

  2. 我在第四步的时候全都按照说明创建了用户,然后AllowUsers
    我用的是SecureCRT,改完之后每个用户都登不进去,允许Root登陆后Root也进不去,端口什么的都是对的,这是怎么个情况

    • 估计是防火墙拦截了

      为防止失误,保持当前窗口连接,新建SSH连接XXXX端口测试XXX能否登录系统。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.