本文主要目是介绍如何提高运行在Linux或UNIX类操作系统上Nginx Web服务器安全性
Nginx默认配置文件和默认端口
◆ /usr/local/nginx/conf/ - Nginx服务器配置目录/usr/local/nginx/conf/nginx.conf 是主配置文件
◆ /usr/local/nginx/html/ - 默认文档位置
◆ /usr/local/nginx/logs/ - 默认日志文件位置
◆ Nginx HTTP默认端口:TCP 80
◆ Nginx HTTPS默认端口:TCP 443
可以使用下面命令测试Nginx配置是否正确:
# /usr/local/nginx/sbin/nginx –t
输出举例:
the configuration file /usr/local/nginx/conf/nginx.conf syntax is okconfiguration file /usr/local/nginx/conf/nginx.conf test is successful
要让修改后配置生效执行下面命令:
# /usr/local/nginx/sbin/nginx -s reload
如果要停止服务器运行:
# /usr/local/nginx/sbin/nginx -s stop
1、开启SELinux
SELinux(安全增强Linux)是个Linux内核功能它提供了个机制支持访问控制安全策略提供了巨大安全保护能力它可以防止大多数系统root级攻击请参考“如何在CentOS/Red Hat系统上开启SELinux”(http://www.cyberciti.biz/faq/rhel-fedora-redhat-selinux-protection/)
运行getsebool –a命令查看SELinux设置项:
getsebool -a | lessgetsebool -a | grep offgetsebool -a | grep o
然后使用sebool命令开启需要配置项注意:开启SELinux后在RHEL或CentOS上通常会增加2-8%系统开销
2、通过mount参数提供最低权限
为你/html/php文件创建独立分区例如创建个/dev/sda5分区挂载在/ngnix上确定/ngnix使用了noexecnodev和nouid权限挂载下面是我个挂载例子:
LABEL=/nginx /nginx ext3 defaults,nosuid,noexec,nodev 1 2
注意你需要使用fdisk和mkfs.ext3命令创建个新分区
3、通过/etc/sysctl.conf加固
可以通过/etc/sysctl.conf控制和配置Linux内核及网络设置
另外请参考:
# 避免放大攻击net.ipv4.icmp_echo_ignore_broadcasts = 1# 开启恶意icmp消息保护net.ipv4.icmp_ignore_bogus_error_responses = 1# 开启SYN洪水攻击保护net.ipv4.tcp_syncookies = 1# 开启并记录欺骗源路由和重定向包net.ipv4.conf.all.log_martians = 1net.ipv4.conf.default.log_martians = 1# 处理无源路由包net.ipv4.conf.all.accept_source_route = 0net.ipv4.conf.default.accept_source_route = 0# 开启反向路径过滤net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# 确保无人能修改路由表
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
# 不充当路由器
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
# 开启execshild
kernel.exec-shield = 1
kernel.randomize_va_space = 1
# IPv6设置
net.ipv6.conf.default.router_solicitations = 0
net.ipv6.conf.default.accept_ra_rtr_pref = 0
net.ipv6.conf.default.accept_ra_pinfo = 0
net.ipv6.conf.default.accept_ra_defrtr = 0
net.ipv6.conf.default.autoconf = 0
net.ipv6.conf.default.dad_transmits = 0
net.ipv6.conf.default.max_addresses = 1
# 优化LB使用端口
# 增加系统文件描述符限制
fs.file-max = 65535
# 允许更多PIDs (减少滚动翻转问题); may some programs 32768
kernel.pid_max = 65536
# 增加系统IP端口限制
net.ipv4.ip_local_port_range = 2000 65000
# 增加TCP最大缓冲区大小
net.ipv4.tcp_rmem = 4096 87380 8388608
net.ipv4.tcp_wmem = 4096 87380 8388608
# 增加Linux自动调整TCP缓冲区限制
# 最小默认和最大可使用字节数
# 最大值不低于4MB如果你使用非常高BDP路径可以设置得更高
# Tcp窗口等
net.core.rmem_max = 8388608
net.core.wmem_max = 8388608
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_window_scaling = 1
◆ Linux VM调优(内存)子系统(http://www.cyberciti.biz/faq/linux-kernel-tuning-virtual-memory-subsystem/)
◆ Linux网络堆栈调优(缓冲区大小)提高网络性能(http://www.cyberciti.biz/faq/linux-tcp-tuning/)
4、移除所有不需要Nginx模块
你需要最大限度地将Nginx加载模块最小化我意思是满足Web服务器需要就可以了多余模块个不留例如禁用SSI和autoindex模块命令如下:
# ./configure --without-http_autoindex_modu
最新评论