安全配置小记

最近接触到要配置服务器安全,所有上网查了一堆关于服务器配置的内容,收益最大的还是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日志文件(可选)