当前位置: 首页 > 编程笔记 >

Nginx WebServer最佳安全实践

欧阳楚
2023-03-14
本文向大家介绍Nginx WebServer最佳安全实践,包括了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的技巧。继续阅读!

 类似资料:
  • 下面,我们将会回顾常见的安全原则,并介绍在使用 Yii 开发应用程序时,如何避免潜在安全威胁。 大多数这些原则并非您独有,而是适用于网站或软件开发, 因此,您还可以找到有关这些背后的一般概念的进一步阅读的链接。 基本准则 无论是开发何种应用程序,我们都有两条基本的安全准则: 过滤输入 转义输出 过滤输入 过滤输入的意思是,用户输入不应该认为是安全的,你需要总是验证你获得的输入值是在允许范围内。 比

  • Overview The term “production” refers to the stage in the software lifecycle when an application or API is generally available to its end-users or consumers. In contrast, in the “development” stage, y

  • 本篇文档的目的在于如何让系统管理员或开发者用尽可能少的时间部署一个安全的 web 站点或应用,即 SSL 和 TLS 部署最佳实践。

  • 我目前正在做一个使用Django API服务器和运行React的NodeJS服务器的项目。在开发中,我们在8000端口上运行Django,在8080端口上运行NodeJS,目前React负责渲染页面并与Django API交互,Django API为React提供数据。为了让React调用Django API,我们在Django中启用了CORS,因为它们位于不同的端口上。 我的问题如下: > 允许

  • 问题内容: 在研究JSON与XML的问题时,我遇到了这个问题。现在,选择JSON的原因之一是Java的易于转换,即使用。现在,从安全角度来看,这立即使我感到潜在的问题。 因此,我开始对JSON的安全性方面进行研究,并在此博客文章中就JSON的安全性不如人们认为的那样进行了研究。这部分突出: 更新: 如果您正确地执行JSON 100%,那么您只会在顶层拥有对象。数组,字符串,数字等都将被包装。然后,

  • 本文是对Kubernetes集群安全性管理的最佳实践。 端口 请注意管理好以下端口。 端口 进程 描述 4149/TCP kubelet 用于查询容器监控指标的cAdvisor端口 10250/TCP kubelet 访问节点的API端口 10255/TCP kubelet 未认证的只读端口,允许访问节点状态 10256/TCP kube-proxy kube-proxy的健康检查服务端口 909