本篇文章详细的讲诉了nginx服务器中的安全配置,具体如下:
一、关闭SELinux
安全增强型Linux(SELinux)的是一个Linux内核的功能,它提供支持访问控制的安全政策保护机制。
但是,SELinux带来的附加安全性和使用复杂性上不成比例,性价比不高
二、通过分区挂载允许最少特权
服务器上 nginx 目录单独分区。例如,新建一个分区/dev/sda5(第一逻辑分区),并且挂载在/nginx。确保 /nginx是以noexec, nodev and nosetuid的权限挂载
以下是我的/etc/fstab的挂载/nginx的信息:LABEL=/nginx /nginx ext3 defaults,nosuid,noexec,nodev 1 2
注意:你需要使用fdisk和mkfs.ext3命令创建一个新分区。
三、配置/etc/sysctl.conf强化Linux安全
你可以通过编辑/etc/sysctl.conf来控制和配置Linux内核、网络设置
四、删除所有不需要的Nginx模块
你需要直接通过编译Nginx源代码使模块数量最少化。通过限制只允许web服务器访问模块把风险降到最低。你可以只配置安装nginx你所需要的模块。例如,禁用SSL和autoindex模块你可以执行以下命令:
更改nginx版本名称、编辑文件/http/ngx_http_header_filter_module.c:
关闭nginx版本号的显示
五、基于Iptables防火墙的限制
下面的防火墙脚本阻止任何除了允许:
来自HTTP(TCP端口80)的请求 来自ICMP ping的请求 ntp(端口123)的请求输出 smtp(TCP端口25)的请求输出六、控制缓冲区溢出攻击
编辑和设置所有客户端缓冲区的大小限制如下:
你还需要控制超时来提高服务器性能并与客户端断开连接。按照如下编辑:
七、控制并发连接
你可以使用NginxHttpLimitZone模块来限制指定的会话或者一个IP地址的特殊情况下的并发连接。编辑nginx.conf:
上面表示限制每个远程IP地址的客户端同时打开连接不能超过5个。
八、只允许我们的域名的访问
如果机器人只是随机扫描服务器的所有域名,那拒绝这个请求。你必须允许配置的虚拟域或反向代理请求。你不必使用IP地址来拒绝。
九、限制可用的请求方法
GET和POST是互联网上最常用的方法。 Web服务器的方法被定义在RFC 2616。如果Web服务器不要求启用所有可用的方法,它们应该被禁用。下面的指令将过滤只允许GET,HEAD和POST方法:
更多关于HTTP方法的介绍
GET方法是用来请求,如文件http://www.moqifei.com/index.php。 HEAD方法是一样的,除非该服务器的GET请求无法返回消息体。 POST方法可能涉及到很多东西,如储存或更新数据,或订购产品,或通过提交表单发送电子邮件。这通常是使用服务器端处理,如PHP,Perl和Python等脚本。如果你要上传的文件和在服务器处理数据,你必须使用这个方法。十、如何拒绝一些User-Agents?
你可以很容易地阻止User-Agents,如扫描器,机器人以及滥用你服务器的垃圾邮件发送者。
阻止Soso和有道的机器人:
十一、防止图片盗链
图片或HTML盗链的意思是有人直接用你网站的图片地址来显示在他的网站上。最终的结果,你需要支付额外的宽带费用。这通常是在论坛和博客。我强烈建议您封锁,并阻止盗链行为。
例如:重定向并显示指定图片
十二、目录限制
你可以对指定的目录设置访问权限。所有的网站目录应该一一的配置,只允许必须的目录访问权限。
通过IP地址限制访问
你可以通过IP地址来限制访问目录/admin/:
通过密码保护目录,首先创建密码文件并增加“user”用户
编辑nginx.conf,加入需要保护的目录
一旦密码文件已经生成,你也可以用以下的命令来增加允许访问的用户
十三、Nginx SSL配置
HTTP是一个纯文本协议,它是开放的被动监测。你应该使用SSL来加密你的用户内容。
创建SSL证书,执行以下命令:编辑nginx.conf并按如下来更新:
十四、Nginx与PHP安全建议 PHP是流行的服务器端脚本语言之一。如下编辑/etc/php.ini文件:
十五、如果可能让Nginx运行在一个chroot监狱
把nginx放在一个chroot监狱以减小潜在的非法进入其它目录。你可以使用传统的与nginx一起安装的chroot。如果可能,那使用FreeBSD jails,Xen,OpenVZ虚拟化的容器概念。
十六、在防火墙级限制每个IP的连接数
网络服务器必须监视连接和每秒连接限制。PF和Iptales都能够在进入你的nginx服务器之前阻止最终用户的访问。
Linux Iptables:限制每次Nginx连接数下面的例子会阻止来自一个IP的60秒钟内超过15个连接端口80的连接数。
请根据你的具体情况来设置限制的连接数。
十七、配置操作系统保护Web服务器
像以上介绍的启动SELinux.正确设置/nginx文档根目录的权限。Nginx以用户nginx运行。但是根目录(/nginx或者/usr /local/nginx/html)不应该设置属于用户nginx或对用户nginx可写。找出错误权限的文件可以使用如下命令:
确保你更所有权为root或其它用户,一个典型的权限设置 /usr/local/nginx/html/
示例输出:
你必须删除由vi或其它文本编辑器创建的备份文件:
通过find命令的-delete选项来删除这些文件。
十八、限制Nginx连接传出
黑客会使用工具如wget下载你服务器本地的文件。使用Iptables从nginx用户来阻止传出连接。ipt_owner模块试图匹配本地产生的数据包的创建者。下面的例子中只允许user用户在外面使用80连接。
通过以上的配置,你的nginx服务器已经非常安全了并可以发布网页。可是,你还应该根据你网站程序查找更多的安全设置资料。例如,wordpress或者第三方程序。