以下说明假定您使用的是CentOS / RHEL或基于Ubuntu / Debian的Linux发行版。
#1:加密数据通信
所有通过网络传输的数据都可以进行监控。尽可能使用密码或使用密钥/证书加密传输的数据。
使用scp,ssh,rsync或sftp进行文件传输。您还可以使用特殊的sshfs和保险丝工具来挂载远程服务器文件系统或您自己的主目录。
GnuPG允许加密和签名您的数据和通信,具有多功能密钥管理系统以及各种公共密钥目录的访问模块。
OpenVPN是一款经济高效,轻量级的SSL VPN。另一个选择是尝试使用隧道和加密的tinc在Internet上的主机或私有的不安全LAN上创建安全的专用网络。
Lighttpd SSL(安全服务器层)https配置和安装
Apache SSL(安全服务器层)Https(mod_ssl)配置和安装
如何免费配置Nginx让我们在Debian或Ubuntu Linux上加密SSL证书
#2:避免使用FTP,Telnet和Rlogin / Rsh服务
在大多数网络配置下,用户名,密码,FTP / telnet / rsh命令和传输的文件可以被同一网络上的任何人使用数据包嗅探器捕获。解决此问题的常见方法是使用OpenSSH,SFTP或FTPS(FTP over SSL),它向FTP添加SSL或TLS加密。输入以下yum命令删除NIS,rsh和其他过时的服务:
# yum erase xinetd ypserv tftp-server telnet-server rsh-server
如果您使用的是基于Debian / Ubuntu Linux的服务器,请尝试使用apt-get命令 / apt命令删除不安全的服务:
$ sudo apt-get --purge remove xinetd nis yp-tools tftpd atftpd tftpd-hpa telnetd rsh-server rsh-redone-server
#3:尽量减少软件以减少漏洞
你真的需要安装各种网络服务吗?避免安装不必要的软件以避免软件中的漏洞。使用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 / MariaDB / PGSql,电子邮件服务器等。了解更多信息,请参阅如何安装虚拟化软件:
在CentOS Linux 5上安装和设置XEN虚拟化软件
如何在RHEL / CentOS Linux下安装OpenVZ
#5:保持Linux内核和软件最新
应用安全补丁是维护Linux服务器的重要部分。Linux提供了所有必要的工具来保持系统更新,并且可以轻松升级版本。应尽快审查和应用所有安全更新。再次使用RPM软件包管理器(例如yum和/或apt-get和/或dpkg)来应用所有安全更新。
# yum update
或者
# apt-get update && apt-get upgrade
您可以配置Red Hat / CentOS / Fedora Linux 通过电子邮件发送yum软件包更新通知。另一种选择是通过cron作业应用所有安全更新。在Debian / Ubuntu Linux下,您可以使用apticron发送安全通知。也是可以使用apt-get命令 / apt命令配置Debian / Ubuntu Linux服务器的无人值守升级:
$ sudo apt-get install unattended-upgrades apt-listchanges bsd-mailx
#6:使用Linux安全扩展
Linux附带了各种安全补丁,可用于防止错误配置或妥协的程序。如果可能,请使用SELinux和其他Linux安全扩展来强制限制网络和其他程序。例如,SELinux为Linux内核提供了各种安全策略。
#7:SELinux
我强烈建议使用SELinux,它提供了一个灵活的强制访问控制(MAC)。在标准Linux自主访问控制(DAC)下,作为用户(UID或SUID)运行的应用程序或进程具有用户对诸如文件,套接字和其他进程的对象的权限。运行MAC内核可保护系统免受恶意或有缺陷的应用程序的破坏或破坏系统。请参阅说明SELinux配置的官方Redhat文档。
#8:用户帐户和强密码策略
使用useradd / usermod命令来创建和维护用户帐户。确保你有一个好的和强大的密码政策。例如,一个好的密码至少包含8个字符,并且包含字母,数字,特殊字符,上下字母等。最重要的是选择一个您可以记住的密码。使用诸如“ John the ripper ”之类的工具来查找服务器上的弱用户密码。配置pam_cracklib.so以强制执行密码策略。
#9:密码老化
该CHAGE命令更改的天密码更改和上次更改密码的日期之间的数字。系统使用此信息来确定用户何时必须更改其密码。所述/etc/login.defs中文件定义了阴影密码套件,包括密码老化配置特定于站点的配置。要禁用密码老化,请输入:
# chage -M 99999 userName
要获取密码过期信息,请输入:
# chage -l userName
最后,还可以在以下字段中编辑/ etc / shadow文件:
{用户名}:{密码}:{lastpasswdchanged}:{MINIMUM_DAYS}:{Maximum_days}:{警告}:{无效}:{过期}:
哪里,
Minimum_days:密码更改之间所需的最少天数,即允许用户更改其密码之前剩余的天数。
Maximum_days:密码有效的最大天数(在该用户被强制更改其密码之后)。
警告:密码到期前的天数警告用户必须更改其密码。
有效期:1970年1月1日以来该帐户被禁用的天数,即绝对日期,指定登录可能不再使用的日期。
我推荐chage命令而不是手工编辑/ etc / shadow文件:
# chage -M 60 -m 7 -W 7 userName
推荐阅读:
Linux:强制用户在首次登录时更改其密码
Linux打开/关闭密码过期/老化
锁定用户密码
搜索没有密码的所有帐户并锁定它们
使用Linux组来增强安全性
#10:限制使用以前的密码
您可以防止所有用户在Linux下使用或重复使用相同的旧密码。该pam_unix模块中的参数记可以用来配置不能再用以前的密码的数量。
#11:登录失败后锁定用户帐户
在Linux下,您可以使用faillog命令显示faillog记录或设置登录失败限制。faillog从/ var / log / 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:确保没有非根帐户将UID设置为0
只有root帐户具有UID 0,具有访问系统的完全权限。键入以下命令以显示UID设置为0的所有帐户:
# awk -F: '($3 == "0") {print}' /etc/passwd
您应该只看到一行,如下所示:
根:X:0:0:根:/根:/斌/庆典
如果您看到其他行,请删除它们或确保其他帐户由您授权使用UID 0。
#14:禁用root登录
永远不要以root用户身份登录。您应该在需要时使用sudo执行根级命令。sudo确实可以大大增强系统的安全性,而不会与其他用户和管理员共享root密码。sudo也提供简单的审计和跟踪功能。
#15:物理服务器安全
您必须保护Linux服务器物理控制台访问。配置BIOS并禁用从外部设备(如DVD / CD / USB笔)启动。设置BIOS和grub 启动加载器密码以保护这些设置。所有生产箱必须锁定在IDC(互联网数据中心)中,并且所有人员在访问您的服务器之前都必须通过某种安全检查。也可以看看:
保护Linux服务器物理控制台访问的9个提示。
#16:禁用不需要的服务
禁用所有不必要的服务和守护进程(在后台运行的服务)。您需要从系统启动中删除所有不需要的服务。键入以下命令以列出在运行级别#3中引导时启动的所有服务:
# chkconfig --list | grep '3:on'
要禁用服务,请输入:
# service serviceName stop
# chkconfig serviceName off
#17:查找侦听网络端口
使用以下命令列出所有打开的端口和关联的程序:
netstat -tulpn
或按以下方式使用ss命令:
$ ss -tulpn
或
nmap -sT -O localhost
nmap -sT -O server.example.com
系统/网络管理员提供32个Nmap命令示例以获取更多信息。使用iptables关闭开放端口或使用上述服务和chkconfig命令停止所有不需要的网络服务。
在Redhat Enterprise / CentOS Linux上使用update-rc.d命令。
Ubuntu / Debian Linux:用于启动/停止系统服务的服务配置工具。
使用netstat命令获取有关特定IP地址连接的详细信息。
#18:删除X Windows
X服务器上的Windows不是必需的。没有理由在专用邮件和Apache Web服务器上运行X Windows。您可以禁用和删除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:配置Iptables和TCPWrappers
Iptables是一个用户空间应用程序,允许您配置Linux内核提供的防火墙(Netfilter)。使用防火墙过滤流量并只允许必要的流量。还可以使用基于主机的网络ACL系统TCPWrappers过滤网络对Internet的访问。借助Iptables,您可以防止许多拒绝服务攻击:
如何在Ubuntu 16.04 LTS服务器上设置UFW防火墙
Linux:20个Iptables示例用于新系统管理员
CentOS / Redhat Iptables防火墙配置教程
Lighttpd流量调整:每个IP的油门连接(速率限制)
如何:Linux Iptables阻止常见攻击。
psad:Linux实时检测并阻止端口扫描攻击。
在CentOS / RHEL或基于Ubuntu / Debian Linux的服务器上使用shorewall来保护您的系统。
#20:Linux Kernel /etc/sysctl.conf强化
/etc/sysctl.conf文件用于在运行时配置内核参数。Linux在启动时从/etc/sysctl.conf读取并应用设置。示例/etc/sysctl.conf:
#打开execshield
kernel.exec屏蔽= 1
kernel.randomize_va_space = 1
#启用IP欺骗保护
net.ipv4.conf.all.rp_filter = 1
#禁止IP源路由
net.ipv4.conf.all.accept_source_route = 0
#忽略广播请求
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_messages = 1
#确保欺骗数据包被记录
net.ipv4.conf.all.log_martians = 1
#21:分离磁盘分区
从用户文件中分离操作系统文件可能会导致更好和更安全的系统。确保以下文件系统安装在单独的分区上:
在/ usr
/家
/ var和/ var / tmp
/ tmp目录
为Apache和FTP服务器根目录创建单独的分区。编辑/ etc / fstab文件并确保添加以下配置选项:
noexec - 不要在该分区上设置任何二进制文件的执行(防止执行二进制文件,但允许脚本)。
nodev - 不允许此分区上的字符或特殊设备(防止使用设备文件,如零,sda等)。
nosuid - 不要在此分区上设置SUID / SGID访问权限(防止setuid位)。
将/ etc / fstab条目示例以限制/ dev / sda5(ftp服务器根目录)上的用户访问权限:
/ dev / sda5 / ftpdata ext3默认值,nosuid,nodev,noexec 1 2
#22:磁盘配额
确保为所有用户启用磁盘配额。要实施磁盘配额,请使用以下步骤:
通过修改/ etc / fstab文件来启用每个文件系统的配额。
重新安装文件系统。
创建配额数据库文件并生成磁盘使用情况表。
分配配额策略。
有关详细信息,请参阅实施磁盘配额教程。
#23:关闭IPv6
Internet协议版本6(IPv6)提供了替代Internet协议版本4(IPv4)的TCP / IP协议套件的新Internet层,并提供了许多优点。如果您不使用IPv6,则禁用它:
RedHat / Centos禁用IPv6网络。
Debian / Ubuntu和其他Linux发行版禁用IPv6网络。
Linux IPv6 Howto - 第19章。安全性。
Linux的IPv6的防火墙的配置和脚本,并可以在这里找到。
#24:禁用不需要的SUID和SGID二进制文件
当SUID / SGID可执行文件存在安全问题或错误时,所有SUID / SGID位启用文件都可能被滥用。所有本地或远程用户都可以使用此文件。找到所有这样的文件是个好主意。使用find命令如下:您需要调查每个报告的文件。请参阅报告的文件手册页获取更多详细信
#See all set user id files:
find / -perm +4000
# See all group id files
find / -perm +2000
# Or combine both in a single command
find / \( -perm -4000 -o -perm -2000 \) -print
find / -path -prune -o -type f -perm +6000 -ls
#25:世界可写入的文件
任何人都可以修改导致安全问题的世界可写文件。使用以下命令来查找所有世界可写和粘滞位设置文件:
find /dir -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print
您需要调查每个报告的文件,并设置正确的用户和组权限或将其删除。
#26:Noowner文件
不属于任何用户或组的文件可能会造成安全问题。只需使用以下不属于有效用户和有效组的命令查找它们
find /dir -xdev \( -nouser -o -nogroup \) -print
您需要调查每个报告的文件,并将其分配给适当的用户和组,或将其删除。
#27:使用集中认证服务
如果没有集中的身份验证系统,用户身份验证数据就会变得不一致,这可能会导致过时的凭证和被遗忘的账户,这些账户应该首先被删除。集中式身份验证服务允许您维护对Linux / UNIX帐户和身份验证数据的集中控制。您可以保持服务器之间的身份验证数据同步。不要使用NIS服务进行集中身份验证。使用OpenLDAP作为客户端和服务器。
#28:Kerberos
在假设可以读取,修改和插入沿不安全网络传输的数据包的情况下,Kerberos通过使用加密共享机密来执行身份验证,作为受信任的第三方身份验证服务。Kerberos基于对称密钥加密技术,需要密钥分发中心。您可以使用Kerberos进行远程登录,远程复制,安全跨系统文件复制和其他高风险任务,从而更安全,更可控。因此,当用户使用Kerberos对网络服务进行身份验证时,试图通过监控网络流量收集密码的未经授权的用户将受到有效阻止。了解如何设置和使用Kerberos。
#29:记录和审计
您需要配置日志记录和审计来收集所有黑客攻击和破解尝试。默认情况下,syslog将数据存储在/ var / log /目录中。这对于发现软件配置错误也很有用,这可能会使您的系统受到各种攻击。请参阅以下与日志相关的文章:
Linux日志文件位置。
如何将日志发送到远程日志主机。
我如何旋转日志文件?。
man页面syslogd,syslog.conf和logrotate。
#30:使用Logwatch / Logcheck监控可疑日志消息
使用logwatch命令(logcheck)读取日志。这些工具使您的日志阅读生活更轻松。您可以通过电子邮件获得系统日志中异常项目的详细报告。示例系统日志报告:
################### Logwatch 7.3(03/24/06)####################
处理启动:周五10月30日04:02:03 2009
处理日期范围:昨天
(2009年10月29日)
时间是一天。
详细输出级别:0
输出类型:无格式
主机的日志文件:www-52.nixcraft.net.in
################################################## ################
---------------------命名开始------------------------
**无与伦比的参赛作品**
一般:信息:区域XXXXXX.com/IN:传送开始。:3时间(s)
一般:信息:区XXXXXX.com/IN:刷新:超过主ttttttttttttttttttt#53的重试限制(源::#0):3时间(s)
一般:信息:区域XXXXXX.com/IN:开始转移。:4时间(s)
一般:信息:区XXXXXX.com/IN:刷新:超过主ttttttttttttttttttt#53的重试限制(来源::#0):4时间(s)
----------------------命名结束-------------------------
--------------------- iptables防火墙开始------------------------
在接口eth0上记录了87个数据包
从58.y.xxx.tw - 1数据包到tcp(8080)
从59.www.zzz.yyy - 1包到tcp(22)
从60.32.nnn.yyy - 2个数据包到tcp(45633)
从222.xxx.ttt.zz - 5个数据包到tcp(8000,8080,8800)
---------------------- iptables防火墙结束-------------------------
--------------------- SSHD开始------------------------
通过sshd登录的用户:
根:
123.xxx.ttt.zzz:6次
---------------------- SSHD结束-------------------------
---------------------磁盘空间开始------------------------
使用的文件系统大小可用使用%
/ dev / sda3 450G 185G 241G 44%/
/ dev / sda1 99M 35M 60M 37%/ boot
----------------------磁盘空间结束-------------------------
###################### Logwatch End #########################
#31:系统会计与审计
审计是为系统审计提供的。它负责将审计记录写入磁盘。在启动过程中,这个守护进程读取/etc/audit.rules中的规则。您可以打开/etc/audit.rules文件并进行更改,如安装审核文件日志位置和其他选项。通过auditd,您可以回答以下问题:
系统启动和关闭事件(重新启动/暂停)。
活动的日期和时间。
用户可以重新定位事件(例如试图访问/path/to/topsecret.dat文件)。
事件类型(编辑,访问,删除,写入,更新文件和命令)。
事件的成功或失败。
记录修改日期和时间的事件。
了解谁进行了更改以修改系统的网络设置。
记录修改用户/组信息的事件。
查看谁对文件进行了更改等。
请参阅我们的快速教程,其中介绍了如何启用和使用auditd服务。
#32:保护OpenSSH服务器
建议使用SSH协议进行远程登录和远程文件传输。但是,ssh对许多攻击都是开放的。了解如何保护OpenSSH服务器:
前20名OpenSSH服务器最佳安全实践。
使用双因素Google身份验证程序保护您的Linux桌面和SSH登录。
#33:安装和使用入侵检测系统
网络入侵检测系统(NIDS)是一种入侵检测系统,它试图检测诸如拒绝服务攻击,端口扫描等恶意活动,甚至通过监视网络流量来破解计算机。
在系统在生产环境中联机之前部署任何完整性检查软件是一种很好的做法。如果可能,请在系统连接到任何网络之前安装AIDE软件。AIDE是一个基于主机的入侵检测系统(HIDS),它可以监控和分析计算系统的内部结构。我建议您也安装并使用rkhunter root工具包检测软件。
#34:禁用USB / firewire / thunderbolt设备
输入以下命令以禁用Linux系统上的USB设备:
# echo 'install usb-storage /bin/true' >> /etc/modprobe.d/disable-usb-storage.conf
您可以使用相同的方法禁用Firewire和Thunderbolt模块:完成后,用户无法将敏感数据快速复制到USB设备,或者在基于Linux的系统上安装恶意软件/病毒或后门程序。
# echo "blacklist firewire-core" >> /etc/modprobe.d/firewire.conf
# echo "blacklist thunderbolt" >> /etc/modprobe.d/thunderbolt.conf
#35:禁用未使用的服务
您可以使用service command / systemctl命令禁用未使用的服务:例如,如果您暂时不打算使用Nginx服务禁用它:
$ sudo systemctl stop service
$ sudo systemctl disable service
$ sudo systemctl stop nginx
$ sudo systemctl disable nginx
#36:使用fail2ban / denyhost作为IDS(安装入侵检测系统)
Fail2ban或denyhost会扫描日志文件以查找太多失败的登录尝试,并阻止显示恶意标志的IP地址。了解如何安装和使用Linux的denyhost。可以轻松安装fail2ban:
$ sudo apt-get install fail2ban
或
$ sudo yum install fail2ban
根据需要编辑配置文件:
$ sudo vi /etc/fail2ban/jail.conf
重新启动服务:
$ sudo systemctl restart fail2ban.service
Debian / Ubuntu Linux安装高级入侵检测环境(AIDE)软件
psad:Linux实时检测并阻止端口扫描攻击
#37:安全的Apache / PHP / Nginx服务器
编辑httpd.conf文件并添加以下内容:
ServerTokens Prod
服务器签名关闭
TraceEnable关闭
选项全部 - 索引
标题始终未设置X-Powered-By
在Linux上重新启动httpd / apache2服务器,运行:
$ sudo systemctl restart apache2.service
或者
$ sudo systemctl restart httpd.service
您必须在RHEL / CentOS服务器上安装并启用mod_security。它建议您修改php.ini并保证过它。
前25名Nginx Web服务器最佳安全实践
如何分析Nginx配置文件在Linux或Unix上的安全配置错误
#38:保护文件,目录和电子邮件
Linux为未经授权的数据访问提供了出色的保护。文件 权限和MAC防止未经授权的访问访问数据。但是,如果攻击者能够物理访问计算机,并且只需将计算机的硬盘驱动器移动到其他系统以复制和分析敏感数据,则Linux设置的权限就无关紧要。您可以使用以下工具轻松保护Linux下的文件和部分:
要使用密码加密和解密文件,请使用gpg命令。
Linux或UNIX密码使用openssl和其他工具保护文件。
全盘加密是保护数据的必备条件,并且受到大多数Linux发行版的支持。了解如何使用Linux上的LUKS加密硬盘。确保交换也被加密。需要密码才能编辑引导加载程序。
确保将根邮件转发到您检查的帐户。
Howto:Linux移动设备中的磁盘和分区加密。
Linux使用SSL配置保护Dovecot IMAPS / POP3S服务器。
Linux Postfix SMTP(邮件服务器)SSL证书安装和配置。
快递IMAP SSL服务器证书安装和配置。
配置Sendmail SSL加密以发送和接收电子邮件。
#39。备份
对于对Linux系统进行备份是非常重要的。正确的非现场备份允许您从破解的服务器中恢复,即入侵。传统的UNIX备份程序也是推荐的转储和恢复。您必须将加密备份设置为NAS服务器或FreeNAS服务器等外部存储或使用AWS等云计算服务:
Debian / Ubuntu Linux使用rsnapshot增量备份实用程序安装和配置远程文件系统快照
如何设置红帽/ CentOS Linux远程备份/快照服务器
如何备份Web服务器
如何在Linux下使用rsync命令备份目录
#40。其他建议:
如何在基于Linux的服务器上查找Rootkits。
如何在基于Linux的服务器上启用ExecShield缓冲区溢出保护。
EUD安全指导:Ubuntu 16.04 LTS
保护RHEL的指南7
SELINUX的基本和高级配置
订阅Redhat或Debian Linux安全邮件列表或RSS提要。