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 的技巧和提示。继续阅读!