Nginx Web服务器最佳安全实践


NGINX 是一款免费的、开源的、高性能的 HTTP 服务器和反向代理,也称为 IMAP/POP3 代理服务器。NGINX 以其高性能、稳定性、丰富的功能集、简单的配置和低资源消耗而闻名。在本文中,我们将解释“Nginx Web服务器最佳安全实践”。

sysctl.conf 是一个简单的文件,包含由 sysctl 读取和设置的 sysctl 值。要打开 sysctl.conf,请使用以下命令:

$ sudo vim /etc/sysctl.conf

示例输出应如下所示:

## /etc/sysctl.conf - Configuration file for setting system variables
# See /etc/sysctl.d/ for additional system variables.
# See sysctl.conf (5) for information.
#

#kernel.domainname = example.com

# Uncomment the following to stop low-level messages on console
#kernel.printk = 3 4 1 3

##############################################################3
# Functions previously found in netbase
#

# Uncomment the next two lines to enable Spoof protection (reverse-path filter)
# Turn on Source Address Verification in all interfaces to
# prevent some spoofing attacks
#net.ipv4.conf.default.rp_filter=1
..........................................

为防止 Smurf 攻击,请将以下行添加到 sysctl.conf 文件中。

net.ipv4.icmp_echo_ignore_broadcasts = 1

要打开对错误 ICMP 消息的保护,请将以下行添加到 sysctl.conf 文件中。

net.ipv4.icmp_ignore_bogus_error_responses = 1

要打开 SYN cookies 以保护 SYN 泛洪攻击,请将以下行添加到 sysctl.conf 文件中。

net.ipv4.tcp_syncookies = 1

要打开并记录伪造的、源路由的和重定向的数据包,请将以下行添加到 sysctl.conf 文件中。

net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1

要取消源路由数据包,请将以下行添加到 sysctl.conf 文件中。

net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0

要打开反向路径过滤,请将以下行添加到 sysctl.conf 文件中。

net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

要识别更改路由表,请将以下行添加到 sysctl.conf 文件中。

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

要打开 execshild,请将以下行添加到 sysctl.conf 文件中。

kernel.exec-shield = 1
kernel.randomize_va_space = 1

要调整 IPv6,请将以下行添加到 sysctl.conf 文件中。

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

要优化端口,请使用 LBs 并将以下行添加到 sysctl.conf 文件中。

fs.file-max = 65535

要允许更多 PID,请将以下行添加到 sysctl.conf 文件中。

kernel.pid_max = 65536

要增加系统 IP 端口限制,请将以下行添加到 sysctl.conf 文件中。

net.ipv4.ip_local_port_range = 2000 65000

要增加 TCP 最大缓冲区大小,请使用 setsockopt() 设置表,并将以下行添加到 sysctl.conf 文件中。

net.ipv4.tcp_rmem = 4096 87380 8388608
net.ipv4.tcp_wmem = 4096 87380 8388608

要保存并重新加载上述文件,请使用以下命令:

# sysctl -p

要关闭显示的 nginx 版本号,请将以下行添加到 /etc/nginx/conf.d/default.conf 文件中。

server_tokens off

要控制缓冲区溢出攻击,请将以下命令添加到 /etc/nginx/nginx.conf 文件中。

## Start: Size Limits & Buffer Overflows ##
client_body_buffer_size 1K;
client_header_buffer_size 1k;
client_max_body_size 1k;
large_client_header_buffers 2 1k;
## END: Size Limits & Buffer Overflows ##
  • client_body_buffer_size 1k - 此指令指定客户端请求正文缓冲区大小。

  • client_header_buffer_size 1k - 此指令设置来自客户端的请求标头的标头缓冲区大小。

  • client_max_body_size 1k - 它由标头请求中的 Content-Length 行指示。

  • large_client_header_buffers 2 1k - 此指令分配读取客户端请求的大标头的最大缓冲区数量和大小。

Nginx 和 PHP 安全提示

要在 php 中添加安全提示,它需要一个名为 php.ini 的文件。php.ini 文件的示例应如下所示:

[PHP]
;;;;;;;;;;;;;;;;;;;
; About php.ini ;
;;;;;;;;;;;;;;;;;;;
; PHP's initialization file, generally called php.ini, is responsible for
; configuring many of the aspects of PHP's behavior.

; PHP attempts to find and load this configuration from a number of locations.
; The following is a summary of its search order:
; 1. SAPI module specific location.
; 2. The PHPRC environment variable. (As of PHP 5.2.0)
; 3. A number of predefined registry keys on Windows (As of PHP 5.2.0)
; 4. Current working directory (except CLI)
; 5. The web server's directory (for SAPI modules), or directory of PHP
; (otherwise in Windows)
; 6. The directory from the --with-config-file-path compile time option, or the
; Windows directory (C:\windows or C:\winnt)
; See the PHP docs for more specific information.

要禁止 PHP 中的危险函数,请将以下命令添加到 php.ini 文件中。

disable_functions = phpinfo, system, mail, exec

要设置每个脚本的最大执行时间,请将以下命令添加到 php.ini 文件中。

max_execution_time = 30

要设置每个脚本可以花费解析请求数据的时间上限,请将以下命令添加到 php.ini 文件中。

max_input_time = 60

要设置脚本可以消耗的最大内存量,请将以下命令添加到 php.ini 文件中。

memory_limit = 8M

要设置 PHP 将接受的 POST 数据的最大大小,请将以下命令添加到 php.ini 文件中。

post_max_size = 8M

要设置上传文件的最大允许大小,请将以下命令添加到 php.ini 文件中。

upload_max_filesize = 2M

不要将 PHP 错误消息暴露给外部用户,请将以下命令添加到 php.ini 文件中。

display_errors = Off

要打开安全模式,请将以下命令添加到 php.ini 文件中。

safe_mode = On

要限制对 PHP 环境的外部访问,请将以下命令添加到 php.ini 文件中。

safe_mode_allowed_env_vars = PHP_

要查看所有日志错误,请将以下命令添加到 php.ini 文件中。

log_errors = On

要设置最小允许的 PHP post 大小,请将以下命令添加到 php.ini 文件中。

post_max_size = 1K

要启用 SQL 安全模式,请将以下命令添加到 php.ini 文件中。

sql.safe_mode = On

要避免打开远程文件,请将以下命令添加到 php.ini 文件中。

allow_url_fopen = Off

要升级 Nginx,请使用以下命令:

$ sudo apt-get upgrade nginx

示例输出应如下所示:

Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages were automatically installed and are no longer required:
libhdb9-heimdal libkdc2-heimdal libntdb1 python-ntdb
Use 'apt-get autoremove' to remove them.
The following NEW packages will be installed:
nginx nginx-common nginx-core
0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
Need to get 349 kB of archives.
After this operation, 1,297 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
.....................................................................

阅读本文后,您将能够了解什么是 Nginx Web 服务器以及如何保护 Nginx Web 服务器。在我们的下一篇文章中,我们将提供更多基于 Linux 的技巧和提示。继续阅读!

更新于:2020年1月17日

302 次浏览

开启您的职业生涯

完成课程后获得认证

开始
广告