服务器安全配置指南
安全配置小记
最近接触到要配置服务器安全,所有上网查了一堆关于服务器配置的内容,收益最大的还是Wooyun的两篇关于Nginx和Apache的安全配置的文章,这里综合自己的查找的内容作了一点总结,方便自己以后配置服务器。
下面就讲述下一些相关的安全配置。
规范和对象
针对的主要是以下一些配置:
1.Apache
2.Nginx
3.PHP
4.OpenSSL
因为每台机器的功能和需求不同,所有配置需根据实际情况进行修改,如果影响设备基本功能可以酌情考虑不修改配置。
配置方法
下面讲一些配置方法,有些不详细列举。
Apache
apache的一些配置主要是通过httpd.conf来实现的,通过修改httpd.conf文件来更改配置。
版本更新
查看apache版本号:httpd –v ,一般情况下,如果版本过低,那么理论上存在的漏洞也更多。
信息隐藏
服务的一些信息是可以给攻击者提供大量的参考信息,因此适当的隐藏这些内容,能帮助保护服务器的安全。
1.隐藏Apache信息
ServerTokens OS 修改为:ServerTokens Prod (在出现错误页的时候不显示服务器操作系统的名称)
ServerSignature On 修改为:ServerSignature Off(不回显apache版本信息)
2.改变端口信息
配置httpd.conf修改修改监听端口来防止一些内部系统被扫描
这样可以防止一些直接扫描80端口的攻击者
Listen 12345(任意)
禁用项目
1.禁用Autoindex模块
Autoindex是Apache的模块,当目录中没有index文件的时候能自动生成和输出目录清单,类似于ls命令。该模块会产生目录遍历问题。
把"LoadModule autoindex_module modules/mod_autoindex.so"一行前面加上#禁止掉。
2.禁用目录浏览
将Options Indexes FollowSymLinks改为Options -Indexes FollowSymLinks
3.禁用权限
配置httpd.conf取消对上传目录的PHP执行权限
<Directory "/var/www/html/aaa(限制目录)">
<FilesMatch ".(php|php5)$">
Deny from all
</FilesMatch>
</Directory>
4.禁止访问文件夹
配置httpd.conf限制禁止访问的文件夹,例如后台目录
<Directory "/var/www/html/aaa(限制目录)">
Deny from all
</Directory>
5.禁止访问IP(可选)
配置httpd.conf限制一些特殊目录的特定ip访问,如内部接口等。
<Directory "/var/www/html/aaa">
Order Deny,Allow
Deny from all
Allow from 192.168.1.111
</Directory>
6.禁止文件访问类型(可选)
配置httpd.conf限制一些文件类型的访问,如txt的日志
<Files ~ ".txt$">
Order allow,deny Deny from all
</Files>'
7.禁止对.htaccess的支持
将 AllowOverride All 改为 AllowOverride None
PHP
隐藏信息
1.隐藏版本信息
修改/etc/php.ini expose_php 为off
2.隐藏错误信息
display_errors = Off //禁止爆出错误
3.隐藏启动错误信息
display_startup_errors =Off
禁用项目:
1.禁用高危函数(开启安全模式后无需配置)
disable_functions = phpinfo, get_cfg_var //禁止phpinfo和get_cfg_var等函数
2.禁用远程内容获取
allow_url_fopen = Off //这个关闭,就没有办法取远程内容了
allow_url_include=Off
安全配置
1.安全模式
safe_mode = On //开启安全模式
safe_mode_gid = off //
2.控制可访问文件(可选)
open_basedir = /usr/www(网站文件路径)
3.关闭注册全局变量
register_globals = Off
4.防止SQL注入
magic_quotes_gpc = on
5.Http-only开启
session.cookie_httponly = 1
6.配置打印错误内容
error_reporting = E_ALL& ~E_NOTICE
OpenSSL:
版本更新:
及时更新OpenSSL版本避免旧版本中的高危漏洞的出现。
配置修改:
修改/etc/httpd/conf.d/ssl.conf配置:
1.将SSLProtocol 设置为SSLProtocol all -SSLv2 -SSLv3
2.添加SSLHonorCipherOrder on
3.将SSLCipherSuite 设置为:ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5
功能关闭:
在 /etc/sysconfig/httpd 关闭 SSLCompression
添加该语句export OPENSSL_NO_DEFAULT_ZLIB=1即可
Ngnix:
权限配置
1.修改网站目录运行账户
修改所有者为非php-fpm运行账户,可修改所有者为root。
命令:
chown -R root:root html/
2.修改nginx及php-fpm的运行账户及组为nobody
修改nginx.conf 中user 为nobody
修改Php-fpm.conf 中user与group 为nobody
3.修改nobody权限(可选)
取消nobody对所有目录的的读取权限,然后添加对网站目录的读取权限
1.chmod o-r –R /
2.chmod o+r –R html/
4.修改执行权限(可选)
取消nobody对于/bin/sh 的执行权限
chmod 776 /bin/sh(需要确认网站目录对于nobody的权限为可读可执行,对网站文件的权限为可读)
5.对于上传目录或者写入写文件的目录添加nobody的写入权限 (可选)
6.配置nginx.conf 对于上传目录无php的执行权限
7.配置nginx.conf禁止访问的文件夹,如后台,或者限制访问ip(可选)
8.配置nginx.conf禁止访问的文件类型,如一些txt日志文件(可选)