centos7 服务器安全加固
增强服务器安全性 有很多步骤
通过保护系统免受黑客破解者和攻击者的侵害
帮助防止外部攻击CentOS 服务器加固
MyR00tPassW0rd
1 安全的远程访问
OpenSSH 选项是文件
vi /etc/ssh/sshd_config
禁用 SSH 密码验证方法 并启用公钥验证方法
重要的是禁用密码远程登录方法并启用身份验证公钥
将ChallengeResponseAuthentication和PasswordAuthentication更改为no 以停用密码方法
PasswordAuthentication no
ChallengeResponseAuthentication no
授权公钥认证
RSAAuthentication yes
PubkeyAuthentication yes
1.查看 sshd 服务是否启动: 看到上述信息就可以确定是启动了。
2.如果没有启动,则需要启动该服务
systemctl start sshd.service
3.重启 sshd 服务
systemctl restart sshd.service
4.设置服务开启自启
systemctl enable sshd.service
现在生成新的密钥对
# ssh-keygen -t rsa
ssh-keygen 身份验证密钥的生成
管理和转换
输密码麻烦
可以用密钥登录保护虚拟机不好被破解密码
PuTTY全家桶里面有个puttygen打开
点击Generate生成密钥对
密钥对生成后
点击Saveprivate key 保存到桌面
方便找到将导入虚拟机
后期再放到比较安全私密的地方再将公钥部分复制

切换centos创建/root/.ssh目录
再更改该目录的权限
chmod 700 /root/.ssh
将刚才复制的公钥粘贴到文件
/root/.ssh/authorized_keys
保存退出

Selinux的主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)
查看seLinux是否开启
#sestatus
SELinux status: disabled

要永久禁用 SELinux
修改 /etc/selinux/config
并将 SELINUX=disabled
对 /etc/selinux/config
进行任何更后重新启动服务器
最后reboot重启系统
重启系统后打开PuTTY
点Connection
点SSH
点Auth
点Browse去桌面找到保存的Saveprivate key
最后再回到Session输入ip选择机
点击Save按钮
最后点击Open打开
//www.facesoho.com/linux/linux-remote-login.html

b 禁用直接root登录
允许 root 直接登录服务器是一种风险安全措施
相反应该以您的帐户登录系统
然后执行su -以 root 身份登录
因此需要将PermitRootLogin yes更改为 PermitRootLogin no
PermitRootLogin no
c 更改默认 SSH 监听端口22( 如 8500)
不建议使用默认端口 因为它是全世界都知道的并且存在安全风险
port 8500
2 独立服务器用 grub 密码保护引导加载程序
通过保护引导加载程序 可以防止访问以 root 身份自动登录的单用户模式
这是通过GRUB 通过设置默认以纯文本形式存储的密码来完成的
# grub-mkpasswd-pbkdf2
对于 Centos
# grub2-mkpasswd-pbkdf2
3.监听网络端口
配置网络服务后
重要的是要注意哪些端口实际上正在侦听系统的网络接口
任何开放的端口都可能是入侵的证据
要列出所有打开的端口和相关程序,请使用以下命令
# netstat -tulpn
4 缩小权限
缩小系统文件和文件夹的权限以限制风险。
# chmod 700 /root
# chmod 700 /var/log/audit
# chmod 740 /etc/rc.d/init.d/iptables
# chmod 740 /sbin/iptables
# chmod -R 700 /etc/skel
# chmod 600 /etc/rsyslog.conf
# chmod 640 /etc/security/access.conf
# chmod 600 /etc/sysctl.conf
5.检查空密码的帐户
任何密码为空的帐户都意味着它被打开以供网络上的任何人未经授权访问
且是 Linux 服务器中安全性的一部分
要检查密码为空的帐户用命令
# cat /etc/shadow | awk -F: '($2==""){print $1}'
为了安全起见最好锁定所有空密码帐户
# passwd -l centos
6.调整内核参数
Sysctl 是一个用于在 Linux 操作系统中检查和动态更改参数的接口
编辑/etc/sysctl.conf  文件以优化内核参数
sysctl 是用于在运行时修改内核参数的命令。
# sysctl -a
# sysctl -A
# sysctl net.ipv4.conf.all.rp_filter
To load settings, enter:
# sysctl -p
将以下内容复制粘贴到/etc/sysctl.conf
# Turn on execshield
kernel.exec-shield=1
kernel.randomize_va_space=1
# Enable IP spoofing protection
net.ipv4.conf.all.rp_filter=1
# Disable IP source routing
net.ipv4.conf.all.accept_source_route=0
# Ignoring broadcasts request
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.icmp_ignore_bogus_error_messages=1
# Make sure spoofed packets get logged
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1
# Disable ICMP routing redirects
sysctl -w net.ipv4.conf.all.accept_redirects=0
sysctl -w net.ipv6.conf.all.accept_redirects=0
sysctl -w net.ipv4.conf.all.send_redirects=0
sysctl -w net.ipv6.conf.all.send_redirects=0
# Disables the magic-sysrq key
kernel.sysrq = 0
# Turn off the tcp_sack
net.ipv4.tcp_sack = 0
# Turn off the tcp_timestamps
net.ipv4.tcp_timestamps = 0
# Enable TCP SYN Cookie Protection
net.ipv4.tcp_syncookies = 1
# Enable bad error message Protection
net.ipv4.icmp_ignore_bogus_error_responses = 1
7.禁用不需要的服务
删除所有不需要的服务和守护程序(在后台运行的服务)这些服务和守护程序在启动时以运行级别 3启动
# chkconfig --list | grep '3:on'
要禁用服务请输入
# systemctl stop servieName
# systemctl disable serviceName
8 单用户模式需要认证
进入单用户模式时要求输入root密码
打开/etc/sysconfig/init 文件并添加以下行
SINGLE=/sbin/sulogin
9 安全增强型 Linux (SELinux)
SELinux 是一组安全规则
用于确定哪个进程可以访问哪个文件、目录、端口等
每个文件、进程、目录和端口都有一个特殊的安全标签,称为 SELinux 上下文
上下文只是 SELinux 策略用来确定进程是否可以访问文件
目录或端口的名称
默认情况下 该策略不允许任何交互 因此显式规则授予访问权限
如果没有允许规则,则不允许访问。
getenforce 命令告诉我们 SELinux 处于什么模式。
通过更改来将 SELinux 模式更改为强制SELINUX=enforcing执行/etc/sysconfig/selinux
该文件中有三个指令,如下所述。
Enforcing:  SELinux 安全策略被强制执行
Permissive:  SELinux 打印警告而不是强制执行
Disabled:  SELinux 完全禁用
用以下命令检查 SELinux 的状态
# sestatus
SELinux status: disabled
已被禁用
要启用用
# setenforce enforcing
10 使用 iptables 设置防火墙
iptables 是一个用户空间应用程序,允许系统管理员配置 Linux 内核防火墙提供的表及其存储的链和规则。
a关闭所有不需要的端口
iptables -A INPUT -p tcp --dport PORT_NUMBER -j DROP
b阻止IP
iptables -A INPUT -s IP_ADDRESS -j DROP
c阻止与网络接口的连接
要阻止从特定 IP 地址到特定网络接口的连接,请使用命令
# iptables -A INPUT -i ens0 -s 6.6.6.6 -j DROP
d列出 iptables 规则
查看所有 iptables 规则
iptables -L -n -v
11 验证文件系统
SUID/SGID 可执行文件存在安全问题时,所有启用 SUID/SGID 位的文件都可用于恶意活动。所有本地或远程用户都可以使用此类文件。
a识别不需要的 SUID 和 SGID 二进制文件
find / −perm−4000−o−perm−2000
-print
find / -path -prune -o -type f -perm +6000 -ls
b识别世界可写文件
find /dir -xdev -type d −perm−0002−a!−perm−1000
-print
c识别孤立的文件和文件夹
find /dir -xdev −nouser−o−nogroup
-print
12 保持 /boot 为只读
Linux 内核及其相关文件在 /boot 目录下,默认为可读写。将其更改为只读可降低未经授权修改关键引导文件的风险。我们需要编辑/etc/fstab文件并在下面插入行<
LABEL=/boot     /boot     ext2     defaults,ro     1 2
13 拒绝所有 TCP Wrappers
TCP 包装器可以提供一种快速简便的方法来控制对链接到它们的应用程序的访问。因此建议屏蔽所有未使用的应用程序,然后只授权将要使用的应用程序。
例将阻止所有应用程序,但仅授权 ssh
echo "ALL:ALL" >> /etc/hosts.deny
echo "sshd:ALL" >> /etc/hosts.allow

14 为未经授权的用户锁定 cronjobs
Cron 用于在特定时间自动执行作业
可以指定谁可以或不可以运行作业
通过使用名为/etc/cron.allow和的文件来控制的/etc/cron.deny
要使用 cron 锁定用户 只需在 cron.deny 中添加用户名并允许用户在 cron.allow 文件中运行 cron 添加。
# echo ALL >>/etc/cron.deny
15 保护服务器免受缓冲区溢出
当程序或进程尝试将更多数据写入固定长度的内存块或缓冲区时,会发生缓冲区溢出,而不是分配给缓冲区的内容。再次保护您的服务器很重要
启用 ExecShield
缓冲区溢出漏洞会覆盖返回地址,以便函数返回攻击者选择的地址。您需要在当前内核上启用
sysctl -w kernel.exec-shield=1
还可以将下面的行添加到/etc/sysctl.conf
kernel.exec-shield = 1
b检查/启用 ASLR
地址空间布局随机化是一种防御功能,可以使缓冲区溢出更加困难。ASLR 使攻击者难以找到要跳转的地址。您需要通过为kernel.randomize_va_space设置运行时来启用随机虚拟内存区域放置
sysctl -q -n -w kernel.randomize_va_space=2
/etc/sysctl.conf如果它不存在,则添加下面的行
kernel.randomize_va_space = 2
结论
服务器的新用户的一些基本注意事项