Nginx WebServer最佳安全实践

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

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
..........................................

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

net.ipv4.icmp_echo_ignore_broadcasts = 1

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

net.ipv4.icmp_ignore_bogus_error_responses = 1

要打开syncookies进行SYN Flood攻击保护,请将以下行添加到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

要优化端口,请使用LB并将以下行添加到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允许的帖子大小,请在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 WebServer以及如何保护Nginx WebServer。在我们的下一篇文章中,我们将提出更多基于Linux的技巧。继续阅读!