一般而言位于互联网的Linux设备在刚安装后如果口令复杂度足够,那么在没有做任何额外的操作,开启额外的服务前也是比较安全的。但是操作系统安装后,不可能不使用,既然使用,那么就可能引发安全问题,为此在系统安装完后我们应该做一些基本的安全加固,确保正常的系统使用不容易引发安全问题。
在云计算的时代,阿里云,腾讯云等云服务提供商提供了易于获取的计算资源,分别推出了各种低廉的活动优惠,每月甚至低于10RMB,这大大促进了Linux设备的入网,另外5G影响下带来的新一波IOT浪潮,也预计会大大加大入网的设备量,在这种背景下,每台新入网的主机都是潜在的问题点,因此安装系统后第一件是应该先考虑安全加固,尤其对于阿里云,腾讯云这类云主机,一台低配的云主机也可能被攻破后植入木马,变为僵尸攻击网络中的一员。
以下加固以CentOS 7为例,理论上RetHat系都适用,Debain系在使用的包管理器,防火墙软件等方面会有些许不同,不过加固的思路是一致的。
更新系统/包
第一步,就像日常给PC打补丁一样,及时升级更新系统。
执行
yum update
或者
yum upgrade
创建日常使用的用户
第二步,创建日常使用的用户,在日常使用中拒绝使用root
用户。
创建用户
按需创建用户
adduser yourname
设置密码
为用户设置(修改)密码
passwd yourname
赋予sudo权限
为了让需要提权的操作也可以在普通用户下执行,把需要的用户赋予sudo
权限。默认情况下,Centos 7中,如果用户属于wheel
组,那么就有sudo
权限。
把用户加入sudo
组。
gpasswd -a yourname wheel
配置密钥
第三步,配置密钥登录。
对SSH使用密钥认证将会得到比密码认证更好的安全性,如果不是有明确的理由需要密码认证,应该配置密钥认证,禁用密码认证。
没有密钥的情况下需要先生成密钥,如果已有合适的密钥,则可直接在远程设备配置公钥。
本地设备生成密钥
*nix的环境
在*nix环境中,比如Linux,BSD,Mac这类系统,可以通过以下命令进行密钥生成。
ssh-keygen
–t rsa
如果入网的设备不位于本地,需要远程登陆,那么不推荐直接在入网设备上生成密钥。
Windows环境
Windows环境下可以使用密钥生成工具生成密钥,一些支持SSH登陆的终端程序都附带有此类工具。比如Puttygen, MobaXterm。
远程设备上配置公钥
这里所说的密钥,分为公钥和私钥,公钥可以公开,私钥顾名思义是私有的,不公开的,是否知晓私钥决定是否能访问相应的设备。有了密钥后,需要把公钥内容配置到服务器上。
*nix的环境
在*nix环境中,比如Linux,BSD,Mac这类系统,可以通过以下命令进行直接完成公钥的配置。
ssh-copy-id yourname@yourserver
如果该程序未安装,可以通过相应系统的包管理器安装。
手工配置公钥
本地设备为Windows,或者决定不使用ssh-copy-id
的情况下,可以手工配置公钥。
在远端设备上切换到需要配置密钥认证的用户
su - yourname
在该用户的用户目录下创建需要的目录与文件后,把公钥内容写入文件.ssh/authorized_keys
中,最后调整权限最小化。
mkdir .ssh
# 写公钥内容到 .ssh/authorized_keys
# 如authorized_keys不存在,可自行创建
chmod 700 .ssh
chmod 600 .ssh/authorized_keys
禁用密码登录以及禁止root账号登录
第四步,禁用密码登录以及禁止root
账号登登录。
执行禁止root
登录和禁用密码登录配置后,请确保之前配置的用户可以正常登录系统再退出已有的SSH会话。
编辑文件
/etc/ssh/sshd_config
修改配置项PermitRootLogin
禁止root登录
PermitRootLogin no
修改配置项PasswordAuthentication
禁用密码登录
PasswordAuthentication no
使配置生效
systemctl reload sshd
此外也可以根据需要考虑是否修改SSH的默认端口22为其他端口,避开批量的端口扫描。
Port yourport
防火墙配置
第五步,开启防火墙。
如果远端设备不对外启用任何的服务,那么防火墙有无似乎影响不大,但正如之前所述,系统在使用过程中可能会运行许多不同的服务,有些服务可能使用者本身都未意识到有这些服务的存在,如果这些服务本身对整个互联网开放连接,并且没有相应的安全认证机制,那么就可能被攻击者利用。对于这类网络方案的安全,防火墙提供了最基础但有效的保护。防火墙的功能,Linux中都可以通过iptables
直接完成,在CentOS 中可以通过firewalld
,以更简单友好的方式配置网络规则。
安装firewalld
根据安装镜像的不同,如已默认安装,则跳过这步。
yum install firewalld
启动防火墙
启动防火墙不会中断已有的连接
sytemctl start firewalld
开机启动
设置开机自启动
sytemctl enable firewalld
允许SSH通过防火墙
配置SSH规则,部分镜像安装的系统,该规则可能已经默认添加
firewall-cmd --permanent --add-service=ssh
类似ssh
,还有其他许多的规则可以以服务的方式进行配置,比如http
可以通过以下命令进行查看
firewall-cmd --get-services
通过端口和协议配置规则
除了通过服务名称的方式配置防火墙,也可以直接通过端口和协议配置规则。
比如如果SSH在之前的配置中修改过默认端口,则可以执行下面的命令配置相应的规则。
firewall-cmd --permanent --remove-service=ssh
firewall-cmd --permanent --add-port=yourport/protocol
查看已有的配置规则
在使配置生效前,查看规则确认规则配置无误
firewall-cmd --permanent --list-all
使配置生效
配置生效后,在确认可以和远程设备建立新的SSH会话前不要退出当前的会话。
firewall-cmd --reload
最后,没有绝对的安全,系统安全的前提是合规,合理的使用,以上提及的安装Linux后进行的安全加固操作也只是一种技术手段,安全与否更多决定于日后系统被如何使用。