线上Linux服务器的优化设置、系统安全与网络安全策略
一、Linux服务器的优化设置
序号 | 基础优化配置内容 | 说明 |
1 | 最小化安装系统 | 【仅安装需要的,按需安装、不用不装】,必须安装的有基本开发环境、基本网络包、基本应用包。 |
2 | ssh登录策略优化 | Linux服务器上的ssh服务端配置文件是【/etc/ssh/sshd_config】,在修改该文件前,必须备份此文件,以防配置出错或误删。备份命令是【cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.bak】 《1》修改SSH的默认连接22端口(将端口修改在1万以上的端口号,可有效避免扫描和攻击)【Port 22222】。; 《2》不使用DNS解析客户端主机名,可提高SSH的连接速度【UseDNS no】。 《3》关闭GSSAPI验证,可提高ssh连接速度【GSSAPIAuthentication no】。 《4》禁止root账号登陆【PermitRootLogin no】。 《5》限制身份验证的最大尝试次数【MaxAuthTries 3】。 《6》显示最后一次登录的日期和时间【PrintLastLog yes】。 《7》禁用空密码【PermitEmptyPasswords no】。 《8》禁用基于受信任主机的无密码登录【IgnoreRhosts yes】。 《9》禁用基于已知主机的访问(即每次连接都需要用户和密码)【IgnoreUserKnownHosts yes】。 《10》设置所有普通用户可使用密码【PasswordAuthentication yes】(如禁用则改为no) |
3 | 禁用SELinux | SELinux的配置文件路径是【/etc/selinux/config】;SELinux有三种状态: 《1》enforcing 开启状态; 《2》permissive 提醒的状态; 《3》disabled 关闭禁用状态; |
4 | 更换yum源为国内源 | 阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区 华为开源镜像站_软件开发服务_华为云 腾讯软件源 Linux系统的常用操作命令——文件远程传输、文件编辑、软件安装的四种方式 |
5 | 自动更新服务器时间 | 一、在Centos7版本设置NTP服务器 二、在Centos8及其更高版本设置NTP服务器 |
6 | 重要文件加锁 | Linux中需要加锁的四个重要文件进行加锁 |
7 | 系统资源参数优化 | |
二、Linux系统安全与网络安全策略
常见的攻击类型有:口令暴力破解攻击、拒绝服务攻击(DDOS)、应用程序漏洞攻击(挂马、SQL注入)。
2.1、Linux系统登录安全——复杂密码+普通用户SSH远程登录
Linux系统必学的基础操作命令——快速上手Linux(下)https://coffeemilk.blog.csdn.net/article/details/149037758
在使用useradd创建用户后,再使用passwd命令设置用户密码时,需要设置复杂密码(即:密码数目大于等于8,且至少有字母数字混合)【为了保证能够创建复杂的密码我们需要对Linux系统中配置密码复杂度的配置文件进行配置】。
注意:在对密码复杂度配置文件、密码有效期配置文件修改前需要先备份一下!!!
#备份密码复杂度配置文件
cp -p /etc/security/pwquality.conf /etc/security/pwquality.conf.bak#备份密码有效期配置文件
cp -p /etc/login.defs //etc/login.defs.bak
Linux系统中的密码复杂度配置文件是【/etc/security/pwquality.conf】 | ||
序号 | 密码复杂度配置内容 | 说明 |
1 | minclass=3 | 用户密码必须包含大写字母、小写字母、数字、特殊字符中的任意3类 【建议设置为3或4】 |
2 | minlen = 8 | 用户密码长度(这里表示密码长度至少为8位) 【建议设置8及其以上的位数】 |
Linux系统中的密码有效期配置文件是【/etc/login.defs】 | ||
1 | PASS_MAX_DAYS 90 | 用户密码的最长有效期(这里表示用户密码最长的有效期是90天,用户每隔90天就必须更改一次密码) 【建议设置为90】 |
2 | PASS_MIN_DAYS 7 | 用户密码修改的最小间隔(这里表示用户密码每7天才能修改一次) 【建议设置为7】 |
3 | PASS_WARN_AGE 7 | 用户密码过期提前警告天数(这里表示用户密码过期前7天开始警告用户) 【建议设置为7】 |
用户登录系统的日志文件是【/var/log/secure】 |
2.2、Linux系统登录安全——密钥认证方式远程SSH登录
2.2.1、设置root用户只能以密钥方式远程登录操作步骤
#1-将sshd的配置文件【/etc/ssh/sshd_config】端口设置为22222、设置root用户必须使用密钥登录不能用密码登录
Port 22222
PermitRootLogin prohibit-password
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys#2-还需要将sshd的另外一个文件【/etc/ssh/sshd_config.d/01-permitrootlogin.conf】允许root登录的配置注释(如下的配置表示可以让root用户使用密码登录且会覆盖/etc/ssh/sshd_config中的配置)
PermitRootLogin yes#3-在Linux服务器上生成公私钥文件(生成一对4096位的RSA密码且带注释coffeemilk@192.168.1.9和密码短语ck)
ssh-keygen -t rsa -b 4096 -C "coffeemilk@192.168.1.9" -N "ck"#4-进入生成的公私钥路径查看
cd /root/.ssh#5-复制一份公钥并重命名为【authorized_keys】
cp -p id_rsa.pub authorized_keys#6-给复制的公钥【authorized_keys】修改权限为只有创建者可读写,其他人都没有任何权限
chmod 600 authorized_keys#7-将生成的私钥【id_rsa】下载到本机(注意:若没有sz命令需要先安装lrzsz命令)
yum install lrzsz -y
sz id_rsa#8-删除生成的初始公私钥密钥对(只在服务器上保留公钥【authorized_keys】)
rm -rf id*#9-重启sshd服务
systemctl restart sshd
序号 | keygen常用选项 | 说明 |
1 | -b | 指定密钥的位大小(如:2048、3072、4096、...) |
2 | -t | 指定密钥的类型(优先使用ed25519、否则就是rsa);共有如下四种: 《1》dsa 不安全,已经不再使用; 《2》rsa 目前兼容性最好,且使用广泛,默认生成的就是2048位的rsa密钥对;建议生成rsa时设置最好是大于等于3072位。 《3》ecdsa 政治与技术原因不推荐使用。 《4》ed25519 目前最安全,加解密速度最快的密钥类型,且key的长度比rsa小很多,优先推荐使用;唯一的缺点就是旧版本的ssh可能不支持。 |
3 | -C | 给密钥添加一个注释说明信息(通常用于判断密钥的用途或所属用户) |
4 | -f | 指定生成的密钥文件的文件名称 |
5 | -N | 为密钥设置密码短语,提高密钥的安全性 |
6 | -p | 更改私钥的密码短语 |
7 | -q | 安静模式,不输出任何信息 |
8 | -m | 指定私钥导出格式 |
9 | -i | 读取未加密的ssh-v2兼容的私钥/公钥文件,然后在标准输出设备上显示openssh兼容的私钥/公钥 |
| ||
注意事项: 《1》密钥安全性:密钥对的安全性非常高,但如果你的私钥泄露到其他人手中,其他人就可以作为你的身份登录到任何使用该密钥的系统(请保护好你的私钥,并为其设置一个强密码短语)。 《2》权限:确保【/root/.ssh】目录的权限是(只有所有者拥有读写执行700权限)、该目录下的私钥和公钥权限都是(只有所有者拥有读写权限600);且私钥下载到本地后,服务器上的私钥必须删除。 《3》密钥类型和长度:建议优先使用ed25519密钥类型(因为它更短更安全);否则就选择支持和使用最广泛的rsa密钥类型(但是密rsa密钥的长度必须大于等于3072,最好是4096)。 《4》密钥备份:备份好你的密钥对,并做好备注说明。 《5》定期更换密钥对:定期更换密钥对可以提高安全性(特别是自己的SSH密钥对可能被泄露的情况下,应该立即生成新的密钥对,并更新所有使用该旧密钥对的服务器)。 |
2.2.2、设置普通用户只能以密钥方式远程登录操作步骤
《1》如果需要给普通用户设置密钥对登录则切换到普通用户(或直接使用普通用户登录到服务器)执行【ssh-keygen】命令生成密钥,并把公钥名称修改为【authorized_keys】且该公钥的权限设置为只有所有者可读写600【chmod 600 authorized_keys 】,然后将生成的私钥下载到本地保存,私钥在本地保存后必须将服务器上的私钥删除;
#1-切换到普通用户(比如切换到coffeemilk用户)
su - coffeemilk#2-生成一个类型为ed25519类型的密钥
ssh-keygen -t ed25519 -C "ck@192.168.1.9"#3-进入普通用户密钥对的路径(每个用户的路径是/home目录下的用户名称文件夹下)
cd /home/coffeemilk/.ssh/#4-修改公钥名称为【authorized_keys】
mv id_ed25519.pub authorized_keys#5-将公钥文件【authorized_keys】的权限修改为只有所有者具备读写权限600
chmod 600 authorized_keys #6-将私钥文件【id_ed25519】下载到本机保存(注意:若没有sz命令需要先安装lrzsz命令)
yum install lrzsz -y
sz id_ed25519#7-私钥文件保存到本地后删除服务器上生成的私钥文件【id_ed25519】
rm -rf id_ed25519
《2》若需要强制让所有用户都使用密钥登录不能使用密码登录,则使用root用户登录服务器修改sshd的配置文件(/etc/ssh/sshd_config)将【PasswordAuthentication内容的值设置为no】且保存。注意:在任何时候修改sshd配置文件的时候都需要先对该文件备份!!!
#1-使用root用户修改sshd的配置文件(将PasswordAuthentication设置为no)
vi /etc/ssh/sshd_config#2-修改完成保存后退出查看sshd的配置文件信息
cat /etc/ssh/sshd_config#3-确认修改的sshd配置无误后重启sshd服务
systemctl restart sshd
《3》在服务器上重启sshd服务【systemctl restart sshd】。
2.3、Linux网络安全——端口与服务安全
在Linux系统中,一共定义了65536个可用的端口,这些端口又分为两个部分,以1024作为分割点:
《1》【只有root用户才能启用的端口】(0-1023端口都需要以root身份才能启用)如:20、21端口是预留给ftp服务的;23端口是预留给telnet服务的;25端口是预留给mail服务的;80、443端口是预留给www服务的。
《2》【客户端可使用的端口】(1024-65535端口可供客户端使用)这些端口都是软件随机分配的,这些大于等于1024的端口启用不受root用户控制;如:mysql服务默认使用3306端口这个端口就由mysql用户启用、sqlserver数据库默认监听端口是1433这个端口就由sqlserver用户启用、redis默认使用6379端口这个端口就由redis用户启用。
Linux中关于端口的默认使用与服务对应的列表文件是【/etc/services】。
#查看Linux中默认的端口与服务对应列表
more /etc/services#查看Linux中指定的端口对应的服务列表
cat /etc/services | grep 3306
cat /etc/services | grep 1433
cat /etc/services | grep 6379
注意:Linux系统中的端口启用后,一般不用给外部放开访问(特别是涉及到数据库的端口);而常见开放给外部访问的端口有(【25对应的mail服务端口】、【80、443对应的www服务端口】)开放端口给外部访问是可以通过Linux自带的防火墙或者硬件防火墙操作。
三、Linux系统自身的常用安全策略
类型 | 操作 | 说明 |
软件安全 | yum update glibc | 定期对Linux服务器上的软件升级 |
yum update openssl | ||
禁止ping操作 | 注意:Linux系统设置禁用ping操作后该服务器就无法ping通了。 | |
云主机开启 安全组 | 安全组是云主机的网络安全防护工具,建议开启,只开启必要的端口和服务(如:80、443端口,但是如22这类敏感端口建议设置白名单防护) (云主机的安全主默认是关闭的) |
最后就是对于各个应用或网站需要重点排查SQL注入漏洞和日志审查防止被挂马。