从内核到网络,40个Linux服务器安全加固小技巧(上)
大多数人认为Linux是安全的,其实这是一个错误的假设。想象一下,你的笔记本电脑在没有安全加固的情况下被盗。小偷可能会认为你的用户名是“root”而你的密码是“toor”,因为这是Kali设置的默认密码,很多人一直使用从未修改。
每个Linux系统都将受益于更高的安全性,特别是如果它包含敏感数据。下面跟大家分享40个实用的Linux服务器安全加固的小技巧,希望可以帮助大家更好的保护咱们的Linux服务器安全。
1. 加密Linux服务器的数据通信
通过网络传输的所有数据都可以被监控到。尽可能使用密码或使用密钥/证书加密传输数据。
- 使用scp,ssh,rsync或sftp进行文件传输。你还可以使用一些特殊的工具如:sshfs和fuse,安装远程服务器文件系统或自己的主目录。
- GnuPG支持对数据、通信进行加密和签名,具有通用密钥管理系统以及各种公钥目录的访问模块。
- 使用OpenVPN,经济高效的轻量级SSL VPN。
- 配置和安装 Lighttpd SSL(安全服务器层)Https。
- 配置和安装Apache SSL(安全服务器层)Https(mod_ssl)。
2.避免在Linux上使用FTP、Telnet和Rlogin / Rsh服务
在大多数网络配置下,使用数据包嗅探器的同一网络上的任何人都可以捕获用户名,密码,FTP / telnet / rsh命令和传输的文件。
常见解决方案:
使用OpenSSH,SFTP或FTPS(FTP over SSL),将FTP或TLS加密添加到FTP。输入以下yum命令删除NIS、rsh和其他过时服务:
# yum erase xinetd ypserv tftp-server telnet-server rsh-server
3.最小化程序包达到减少Linux中的漏洞
避免安装不必要的软件从而避免软件漏洞。使用RPM包管理器(如yum或apt-get和/或dpkg)查看系统上所有已安装的软件包集。删除所有不需要的包。
# yum list installed # yum list packageName # yum remove packageName # dpkg --list # dpkg --info packageName # apt-get remove packageName
4.保证每个系统或VM实例单独一个网络服务
在单独的服务器或VM实例上运行不同的网络服务。这限制了可能受到危害的其他服务的数量。例如:如果黑客能够成功利用Apache等软件流,他将获得对整个服务器的访问权限,包括其他服务,如MySQL、PgSQL、电子邮件服务器等。
5.保持使的Linux内核和软件是最新的
应用安全补丁是维护Linux服务器的重要部分。在补丁发布后尽快完成安全的更新。
使用RPM包管理器(如yum和/或apt-get和/或dpkg)来启动所有安全更新。
# yum update 或者 # apt-get update && apt-get upgrade
6.使用Linux安全扩展
Linux附带了各种各样的安全补丁,用于防止错误配置或受损程序。条件允许,可以使用SELinux或者其他Linux安全扩展来强制限制网络和其他程序。
7.SELinux
SELinux提供灵活的强制访问控制(MAC),运行MAC内核可保护系统免受可能损坏或破坏系统的恶意应用程序的影响。
8.Linux root 帐户使用强密码策略
使用useradd / usermod命令可以创建和维护root 帐户。确保拥有强密码策略。例如:一个强密码包括至少8个字符长,以及字母,数字,特殊字符,上下字母等混合。
9.为Linux用户设置密码的时效以提高安全性
chage命令显示密码到期详细信息以及上次密码更改日期。系统使用这些详细信息来确定用户何时必须更改其密码。
禁用密码时效
# chage -M 99999 userName
获取密码到期信息
# chage -l userName
更改任何用户的密码时效
#chage -M 60 -m 7 -W 7 userName
10.限制在Linux上使用旧密码
你可以阻止所有用户在Linux下使用或重复使用相同的旧密码。在pam_unix模块中的参数可以记录不能再用的旧密码的数量。
11.登录失败后锁定root帐户
在Linux下,可以使用faillog命令显示faillog记录、设置登录失败限制,可用于维护故障计数器和限制。
查看失败的登录
faillog
在登录失败后解锁帐户
faillog -r -u userName
注意:可以使用passwd命令锁定和解锁帐户:
# lock account passwd -l userName # unlocak account passwd -u userName
12.验证帐户是否存在空密码
输入以下命令
# awk -F: '($2 == "") {print}' /etc/shadow
锁定所有空密码帐户:
# passwd -l accountName
13.确认除ROOT 之外的用户,UID值 为0
确保只有root帐户具有UID 0且具有访问系统的完全权限。
输入以下命令以显示UID设置为0的所有帐户:
# awk -F: '($3 == "0") {print}' /etc/passwd
14.禁用root登录
不要直接以root用户身份登录。在需要时使用sudo执行根级别命令。sudo极大地增强了系统的安全性,同时提供简单的审计和跟踪功能。
15.物理服务器安全性
保护Linux服务器物理控制台访问。配置BIOS并禁用从外部设备(如DVD / CD / USB笔)启动。设置BIOS和grub 引导加载程序密码来保护这些设置。
16.禁用不需要的Linux服务
禁用所有不必要的服务和守护程序。从系统启动中删除所有不需要的服务。
输入以下命令以列出在运行级别#3启动时启动的所有服务:
# chkconfig --list | grep '3:on'
禁用服务,输入:
# service serviceName stop # chkconfig serviceName off
17.查找侦听网络端口
使用netstat命令列出所有打开的端口和关联的程序:
netstat -tulpn
使用chkconfig命令停止所有不需要的网络服务。
18.删除X Window系统(X11)
不要在基于Linux的专用邮件和Apache / Nginx Web服务器上运行X11。可以禁用和删除X Windows以提高服务器安全性和性能。
编辑/ etc / inittab 并将运行级别设置为3。最后,删除X Windows系统,输入:
在CentOS 7 / RHEL 7服务器上使用以下命令
# yum groupremove "X Window System" # yum group remove "GNOME Desktop" # yum group remove "KDE Plasma Workspaces" # yum group remove "Server with GUI" # yum group remove "MATE Desktop"
19.在Linux上配置基于防火墙的Iptables和TCPWrappers
强烈建议启用Linux内核防火墙以保护对服务器的未授权访问,过滤流量并仅允许必要的流量。使用TCPWrappers,基于主机的网络ACL系统来过滤对Internet的网络访问。
20.Linux内核/etc/sysctl.conf优化
/etc/sysctl.conf文件用于配置在运行时的内核参数,在Linux启动时从/etc/sysctl.conf读取并应用设置。
示例/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
内容译自:https://www.cyberciti.biz/tips/linux-security.html
后20条请见下期详解~