怎么尽量消除Linux服务器系统安全风险,预防攻击

一个系统有很多功能,易遭攻击点也很多。原则上讲单一功能的系统比多功能的系统更安全。减少可用攻击点,典型的包括卸载不必要的软件,不必要的登录用户名,关闭或移除不必要的服务。其他的还有给kernel打补丁,重编译kernel,关闭打开的网络接口,安装侵入侦察系统,防火墙,入侵预防系统。

第一步,通过服务器的想要功能来决定安装什么服务。例如,如果要搭建web服务器你应该安装Linux, Apache, MySQL, 和 Perl/ PHP/ Python (LAMP)服务,其他的东西都不要安装,因为安装额外的软件或运行额外的服务创造了不必要的易攻击点。

你需要决定你是否需要图形用户界面。Linux管理员可以通过命令行管理网络和服务,但是一些新手管理员倾向于用GUI,GUI占用了大量系统资源,运行不必要的服务。如果要用,在用完之后可以杀掉GUI进程。

一些通用安全优化步骤:

  • 数据加密通讯
  • 避免用不安全的协议发送明文信息或密码
  • 最小化服务器中不必要的软件
  • 关闭不需要的 SUID 和 SGID 的特殊权限
  • 保持系统为最新,尤其是安全补丁
  • 使用安全扩展
  • 考虑用SELinux
  • 提要用户密码复杂度
  • 定期更改密码,避免重复使用同一个密码
  • 当用户登录错误次数太多时,锁定用户
  • 不允许使用空密码
  • SSH
  • 关闭不必要的服务
  • 提高 /tmp /var/tmp /dev/shm 目录的安全性
  • 隐藏 BIND DNS 服务版本和 apache 版本
  • 提高 sysctl.conf 安全
  • 安装 Root Kit Hunter and ChrootKit Hunter
  • 最小化开放网络端口
  • 配置系统防火墙
  • 更安全合理的分区
  • 关闭不需要的文件权限
  • 维护系统日志,把日志镜像到分离的日志服务器
  • 安装Logwatch并每天查看Logwatch emails
  • 使用侵入侦察系统
  • 安装linux Socket 监控
  • 安装Mod_security
  • 限制用户权限
  • 备份
  • 服务器物理安全

服务器物理安全

配置 BIOS,关闭从CD/DVD和外部设备启动。启用 BIOS 密码和GRUB密码防治在物理上访问你的系统。

保持系统最新

无人看管的升级

系统自动更新,你需要安装几个软件包,用root运行:

unattended-upgrades 软件的默认配置文件是 /etc/apt/apt.conf.d/50unattended-upgrades,默认配置可以很好的工作,但是你可以根据需要做些修改。

设置哪些软件包需要升级:

取消注释下面这行:

为了激活unattended-upgrades,你需要确认/etc/apt/apt.conf.d/20auto-upgrades 包含如下行:

/etc/apt/apt.conf.d/20auto-upgrades 文件可以手动创建或root执行如下命令:

最小化服务器中不必要的软件

su

确保只有在 sudo 组里的用户可以运行su

关闭root用户

出于安全原因,可以在不需要root用户操作服务器时将其关闭

关闭 Shell 用户

查看激活的用户:

关闭用户命令:

控制台(console)

在默认下,许多终端都是激活的,如下

Screen Shot 2015-11-15 at 1.26.04 PM

注释掉不需要的终端

securetty文件

确保只有root用户可以修改 /etc/securetty 文件

共享内存(Shared memory)

共享内存可以用来攻击运行的服务 如apahce2

加入行如下

重启生效

提高IP安全

在 /etc/sysctl.conf 文件中加入

关闭 Open DNS Recursion 和版本信息

终端中执行:

在Options段中加入:

重启 BIND DNS 服务

关闭IPv6

如果你不需要IPv6,建议关闭

增加或修改以下行:

重新加载配置

关闭IPv6 Bind9 监听

增加或修改以下行:

关闭IRQ平衡(Balance)

irq balance用于优化中断分配,它会自动收集系统数据以分析使用模式,并依据系统负载状况将工作状态置于 Performance mode 或 Power-save mode。处于Performance mode 时,irqbalance 会将中断尽可能均匀地分发给各个 CPU core,以充分利用 CPU 多核,提升性能。

把ENABLED改为0

TCP Wrapper

TCP Wrapper是基于规则的访问列表,包含以下2个文件

  • /etc/hosts.allow
  • /etc/hosts.deny

两个文件的语法相似定义如下

例如,如果你想允许指定IP(或IP范围)而拒绝其他IP通过SSH访问

在 /etc/hosts.allow 文件中加入

在/etc/hosts.deny 文件中加入

注意:

  • 每个服务在hosts.allow和hosts.deny只能有一个规则
  • 在hosts.allow和hosts.deny的设置立即生效
  • 在两个文件中的最后一行必须以新的一行结束

/tmp 和 /var/tmp临时存储目录

临时存储目录/tmp, /var/tmp 和 /dev/shm 给攻击者提供了存储空间。

/tmp

给/tmp分区提供一个1G的文件系统

创建一个当前/tmp的备份

挂载/tmp分区并设置正确的访问权限

恢复备份文件 并 删除备份文件:

在fbtab文件中设置/tmp

检测fbtab

如果你想在/tmp中执行脚本或可执行文件,你会得到一个permission denied

/var/tmp

关闭autofs

阻止自动挂载可移动媒体和NFS文件系统,你可以写一条udev规则关闭autofs,首先创建/etc/udev/rules.d/85-no-automount.rules文件

写入

重启服务

设置security limits

设置进程限制防止fork炸弹攻击

例子:

关闭不需要的服务

Linux系统安装了很多服务,服务过多将导致资源耗尽。为了提高性能和安全,关闭无用服务。

查看正在运行的服务

你可以移除启动脚本来关闭服务,或者彻底移除它。大部分的服务都可以用下面的命令来关闭。

卸载命令

关闭anacron

anacron子系统设计用来为系统提供cron自动任务功能,这是非常有用的功能,但是如果你没打算用,你可以关闭此服务。

如果你想关闭anacron服务,简单的注释掉 /etc/crontab 文件的以下行

锁定Cronjobs

Cron有一个内建功能,可以允许谁可以执行任务,谁不可以。这个功能由两个文件控制/etc/cron.allow 和 /etc/cron.deny。为了禁止一个用户使用cron,在cron.deny加入此用户名。如果想禁止所有用户运行cron,在cron.deny文件中加入‘ALL’

关闭Apport

Apport是内部错误报告程序,它收集系统崩溃信息。关闭方法如下:

把enabled改为0

移除Apport

关闭atd

at命令用来定时执行命令,但是不同于cron,at任务只执行一次。如果你用cron,你也许不需要这个服务。

移除at

关闭Avahi

Avahi 是 zeroconf 协议的实现。它可以在没有 DNS 服务的局域网里发现基于 zeroconf 协议的设备和服务。它跟mDNS 一样。

移除Avahi

关闭蓝牙(Bluetooth)

第一种关闭方法

在exit 0之前加入

第二种关闭方法

设置InitiallyPowered为false

禁用Ctrl+Alt+Delete

你不想以外重启服务器,编辑control-alt-delete.conf关闭

删除或注释掉下面一行

关闭Cups

CUPS给Unix/Linux用户提供了一种可靠有效的方法来管理打印。它支持IPP,并提供了LPD,SMB(服务消息块,如配置为微软WINDOWS的打印机)、JetDirect等接口。CUPS还可以浏览网络打印机。

卸载Cups

关闭Dovecot

Dovecot 是一个开源的 IMAP 和 POP3 邮件服务器,支持 Linux/Unix 系统。 POP / IMAP 是 MUA 从邮件服务器中读取邮件时使用的协议。

关闭NFS

NFS是Unix/Linux/BSD操作系统的网络文件分享程序。无用的服务

NFS服务包含如下几个包:

  • nfs-kernel-server
  • nfs-common
  • portmap
  • rpcbind
  • autofs

关闭SNMP服务

简单网络管理协议(SNMP),由一组网络管理的标准组成,包含一个应用层协议(application layer protocol)、数据库模型(database schema)和一组资源对象。该协议能够支持网络管理系统。如果你不需要这个服务,你可以移除它:

关闭Telnet

Telnet默认没有安装,最好不要安装。

关闭Whoopsie

Whoopsie这个服务使用来发送崩溃log到ubuntu。为了关闭它,编辑文件:

把report_crashes参数改为false

卸载Whoopsie

关闭Wireless

现在主流的主板都集成了Wireless适配器,在服务器环境中是没有用的。

加入下面一行

关闭 Zeitgeist

Zeitgeist 是 Ubuntu 上用来记录用户行为和事件的服务,包括文件打开、网站访问、对话等等,其他应用程序可访问这些记录下来的信息。

禁用编译器

编译器可以被攻击者用来编译攻击你服务器的恶意软件。生产环境通常不需要它。

如果你需要使用编译器,执行:

实现IP检测

如果有人hack进入到你的账户,确保你可以得到通知信息,并得到黑客的地址。

为了实现这个,简单的编辑.bash_profile 或 .profile:

加入以下文本:

安装Fail2Ban

带有最基本的SSH配置是不安全的。Fail2Ban提供了一个方法自动检测和保护服务器被攻击者攻击。这个程序通过扫描log文件并对不信任的行为作出反应,想登录尝试失败。

安装Fail2Ban

创建config配置文件

Fail2Ban运行需要正确的配置文件,默认配置文件在/etc/fail2ban/jail.conf,但是这个文件并不是你需要的。你应该自己创建 .local文件。

Fail2Ban SSH 配置

邮件通知

重启Fail2Ban

检查状态

检查iptables规则

安装PSAD

端口扫描攻击检测(psad)是一个很好的可以检测很多扫描攻击的软件。它分析iptables log信息检测端口扫描和其他可疑流量。

安装PSAD

编辑配置文件

在你做任何改变之前,确保HOSTNAME参数设置正确。然后更新下面参数:

  • EMAIL_ADDRESSES: 你的email地址
  • HOSTNAME: 你的hostname
  • ENABLE_AUTO_IDS:改成Y,如果你想让PSAD自己做决定
  • ENABLE_AUTO_IDS_EMAILS:Y,接收邮件

加入iptables规则

重启psad

查看psad状态

Postfix

确保Postfix以非root用户运行

改变权限和所有者

配置更新

修改myhostname

配置Postfix接口监听地址

配置网络

配合SMTP服务

限制拒绝服务攻击 Limit Denial of Service Attacks:

关闭 SMTP VRFY 命令

限制 Postfix SMTP 服务申请 RCPT TO 命令

设置错误睡眠时间,软硬错误限制

Forward emails

一行中两个email地址

email1@domain.com的所有邮件转到email2@domain.com

重启Postfix

Apache

用户和组

编辑 etc/apache2/envvars

限制本地访问

限制目录访问

增加

重启apache

关闭目录清单

XSS 保护

重启Apache

点击劫持攻击

点击劫持是一种视觉上的欺骗手段。攻击者使用一个透明的、不可见的iframe,覆盖在一个网页上,然后诱使用户在该网页上进行操作,此时用户将在不知情 的情况下点击透明的iframe页面。通过调整iframe页面的位置,可以诱使用户恰好点击在iframe页面的一些功能性按钮上。

关闭 Etag

Etag 允许远程攻击者获取敏感信息

关闭老协议

关闭SSI

SSI是英文Server Side Includes的缩写,翻译成中文就是服务器端包含的意思。从技术角度上说,SSI就是在HTML文件中,可以通过注释行调用的命令或指针。SSI允许攻击者远程注入恶意脚本。

关闭CGI

关闭追踪HTTP请求

关闭不需要的模块

列出所有打开的模块命令

关闭模块可以用 a2dismod 命令,打开用a2enmod命令

关闭apache的符号链接

如果你想在特定的网站打开符号链接,在网站的.htaccess写入:

限制http请求大小

apache没有限制http请求大小,这就是说,无限大的数据可以发送给apache服务器。hacker可以用这个实现拒绝服务攻击。

配置超时时间(Timeout)

默认300秒,可以适当减少

隐藏Apache信息

重启apache

HTTP请求方法

例如:

重启;

HTTPOnly Cookie

重启;

屏蔽IP地址

ModSecurity

ModSecurity是一个开源的网络应用防火墙。它可以嵌入到web服务或做为独立的网络应用工作,检测并阻止攻击者攻击web服务。

在安装 ModSecurity 之前,先要安装依赖:

32位:

64位:

配置 ModSecurity 规则

激活默认规则:

你可以根据需要配置规则,ModSecurity的规则目录在/etc/modsecurity/。

下载安装 OWASP Core Rule Set

检查 ModSecurity 是否开启并重启apache

安装ModEvasive

为 mod_evasive 创建log目录

改目录权限

配置ModEvasive

修复Mod-Evasive 邮件bug

检查ModEvasive状态

重启apache

Ubuntu 防火墙

安装UFW:

允许SSH和HTTP服务

打开防火墙

查看防火墙状态

查看iptable设置

配置UFW:

在 *filter 下加入

COMMIT之前加入

防止Ping Flood 攻击,在COMMIT之前加入

关闭IPv6

重新加载ufw配置

IP Spoofing

IP Spoofing技术是指一种获取对计算机未经许可的访问的技术,即攻击者通过伪 IP 地址向计算机发送信息,并显示该信息来自于真实主机。

为防止IP Spoofing,编辑

增加

PHP

安全模式

如果你想限制可执行文件的目录,加入

关闭Globals

隐藏PHP信息

隐藏PHP的所有错误信息

关闭Functionalities:

关闭远程文件包含

限制文件上传

如果你需要这个上传功能,你应该限制文件大小和上传目录

资源控制

控制POST大小

保护Sessions

magic_quotes_gpc

重启apache

Suhosin

Suhosin是php的保护系统。

安装suhosin

配置suhosin

打开suhosin

关闭session加密

日志所有错误

最大traversal,设置最深路径

关闭eval

关闭 /e modifier

sql错误静音

过滤选项

iptables

限制SSH的接入连接

下面这个例子忽略22端口在60秒内尝试超过5次连接

使用端口碰撞

阻止端口扫描

试图进行端口扫描的锁定一天

把扫描者加入扫描列表并log

强制SYN包检查

drop空包

drop ping

屏蔽IP

备份规则

修复规则

获取(D)D0S更多信息

加固SSH

SSH加固是服务器安全重要一步,所有配置都在 /etc/ssh/sshd_config

限制用户访问

关闭root登录

在系统中所有空密码的用户禁止登录

不允许用户设置环境变量

隐藏最后一次登录

指定Ip可以用SSH访问

只用协议2

更改默认端口

关闭UseDNS

设置空闲超时时间

关闭 .rhosts 文件

关闭Host-Based Authentication

LoginGraceTime

MaxStartups,防止暴力脚本攻击

关闭Forwarding

严厉模式

使用TCP Wrappers

查看logs:一些重要的日志信息

  • /var/log/messages  系统主日志
  • /var/log/auth.log   验证日志
  • /var/log/kern.log  内核日志
  • /var/log/cron.log  计划任务日志
  • /var/log/maillog   邮件服务日志
  • /var/log/boot.log  系统启动日志
  • /var/log/mysqld.log   mysql数据库服务日志
  • /var/log/secure     验证日志
  • /var/log/ufw.log   防火墙日志
  • /var/log/utmp 或 /var/log/wtmp   登录记录文件

用 LogWatch 分析日志

查看报告

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注