Nginx安全优化详细总结

本文详细介绍Nginx的安全配置策略,包括隐藏版本信息、限制IP访问、控制超时时间、防盗链设置、自定义错误信息等关键步骤,旨在提升Nginx服务器安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

隐藏Nginx软件版本号信息

Nginx 每个版本都有特定的漏洞,通过隐藏版本可以增加被入侵的难度

只需要在Nginx配置文件nginx.conf 的http 标签段内加入“server_tokens off; ”

当然更有效的方法就是更改源码隐藏的Nginx软件名及版本号

修改的第一个文件为/nginx-1.10.3/src/core/nginx.h 如下

[root@2kb.com]# sed -n ‘13,17p’ nginx.h
#define NGINX_VERSION “2.10.10” #此处修改版本号
#define NGINX_VER “OWS/” NGINX_VERSION #一起修改

修改第二个文件是nginx-1.13.3/src/http/ngx_http_header_filter_module.c

通过sed替换:

sed -i ‘s#Server: nginx#Server: OWS#g’ ngx_http_header_filter_module.c

修改第三个配置文件是:nginx-1.13.3/src/http/ngx_http_special_response.c

[root@2kb.com]# sed -n ‘21,31p’ ngx_http_special_response.c
static u_char ngx_http_error_full_tail[] =
"
" OWS "
" CRLF #<==将此处修改为“OWS”
“” CRLF
“” CRLF;
第二步修改完后需要重新编译

–prefix=/application/nginx-1.3.3 --user=www --group=www --with-http_stub_status_module --with-http_ssl_module

最后可以通过在命令行curl 命令查看效果

更改Nginx服务的默认用户

1.useradd nginx -s /sbin/nologin -M
#首先这里先创建一个nginx用户
2.修改配置文件nginx.conf
user nginx nginx;

Nginx日志修改

参考配置操作

(1)编辑 nginx.conf 配置文件

将 error_log 前的“#”去掉,记录错误日志

将 access_log 前的“#”去掉,记录访问日志

(2)设置 access_log,修改配置文件如下:

log_format formatname ‘$remote_addr - r e m o t e u s e r [ remote_user [ remoteuser[time_local] ’
’ “$request” $status b o d y b y t e s s e n t &quot; body_bytes_sent &quot; bodybytessent"http_referer" ’
’ “ h t t p u s e r a g e n t &quot; &quot; http_user_agent&quot; &quot; httpuseragent""http_x_forwarded_for”’; access_log
logs/access.log formantname; #formatname 设置配置文件格式的名称

注意

查看 nginx.conf 配置文件中,error_log、access_log 前的“#”是否去掉

限制 IP 访问

对网站或敏感目录的访问 IP 进行限制

参考配置操作

(1)修改配置文件

#vi /usr/local/nginx/conf/nginx.conf

具体设置如下:

location / {
deny 192.168.1.1; #拒绝 IP
allow 192.168.1.0/24; #允许 IP
allow 10.1.1.0/16; #允许 IP
deny all; #拒绝其他所有 IP

重新启动 nginx 服务

控制超时时间
修改配置文件

#vi /usr/local/nginx/conf/nginx.conf

具体设置如下:

client_body_timeout 10; #设置客户端请求主体读取超时时间
client_header_timeout 10; #设置客户端请求头读取超时时间
keepalive_timeout 5 5; #第一个参数指定客户端连接保持活动的超时时间,第二个参数是可选的,它指定了消息头保持活动的有效时间
send_timeout 10; #指定响应客户端的超时时间
防盗链设置
修改配置文件

#vi /usr/local/nginx/conf/nginx.conf
具体设置如下:

location ~* ^.+.(gif|jpg|png|swf|flv|rar|zip)$ {
valid_referers none blocked server_names *.2kb.com
http://localhost 2kb.com;
if ($invalid_referer) {
rewrite ^/ [img]http://www.2kb.com/images/default/logo.gif[/img];
# return 403;
}
}

自定义错误信息
修改 src/http/ngx_http_special_response.c,自定义错误信息

## messages with just a carriage return.
static char ngx_http_error_400_page[] = CRLF;
static char ngx_http_error_404_page[] = CRLF;
static char ngx_http_error_413_page[] = CRLF;
static char ngx_http_error_502_page[] = CRLF;
static char ngx_http_error_504_page[] = CRLF;

防止缓存溢出

[root@2kb.com]# vim /usr/local/nginx/conf/nginx.conf
http {
client_body_buffer_size 8K; #主体缓存空间
client_max_body_size 16k; #主体最大缓存
client_header_buffer_size 1k; #默认请求包头信息的缓存
large_client_header_buffers 4 4k; #大请求包头信息的缓存个数,每个 缓存的容量
…}
拒绝非POST或者GET的请求
[root@2kb.com]# vim /usr/local/nginx/conf/nginx.conf
server {

if ( r e q u e s t m e t h o d !   ( G E T ∣ P O S T ) request_method !~ ^(GET|POST) requestmethod! (GETPOST) ) {return 404;} #访问类型不是 GET或乾POST 时,返回 404错误
}
预防SSRF漏洞
SSRF(服务端请求伪造)漏洞常出现在反向代理的配置中,反向代理如下:

proxy_pass http ://www.2kb.com

如果攻击者可以操控IP, 将其修改成内网IP地址即可造成SSRF漏洞。

设置alias目录的别名

location /2kbfile {
alias /2kbcom/;
}

使用HTTPS认证
HTTP认证默认使用crypt,哈希不安全,此处省略500字

减少使用"if"语句
"if"是重写模块的一部分,尽量不要使用。
“if”声明重写模块评估指令强制性的部分。也就是说,Nginx的配置一般来说是声明式的。

在某些情况下,由于用户的需求,他们试图在一些非重写指令内使用“if”,这导致我们现在遇到的情况。大多数情况下都能正常工作。

所以如果可以不用"if"就完全不用

对Nginx后台限制IP访问

使用域名限制访问

如果机器人只是随机扫描服务器的所有域名,那拒绝这个请求。你必须允许配置的虚拟域或反向代理请求。你不必使用IP地址来拒绝。

if ( h o s t !   ( 2 k b . c o m ∣ w w w . 2 k b . c o m ∣ i m a g e s . 2 k b . c o m ) host !~ ^(2kb.com|www.2kb.com|images.2kb.com) host! (2kb.comwww.2kb.comimages.2kb.com) ) {
return 404; #尽量返回404,让攻击者更难猜测错误
}

限制User-Agents访问

通过User-Agents,限制扫描器,机器人,垃圾蜘蛛,垃圾邮件发送者等

Block download agents

if ($http_user_agent ~* LWP::Simple|BBBike|wget) {
return 403;
}
如果业务在国内,国外流量带来不了客户,可以参考www.2kb.com的配置,阻止国外的蜘蛛Scrapy,MJ12bot访问

if ($http_user_agent ~* Scrapy|MJ12bot) {
return 403;
}

Nginx目录限制

可以限制访问目录/admin/:

location /admin/ {
deny all;
}

Nginx与PHP的安全配置

如下编辑/etc/php.ini文件:

# Disallow dangerous functions
disable_functions = phpinfo, system, mail, exec
## Try to limit resources ##
# Maximum execution time of each script, in seconds
max_execution_time = 30
# Maximum amount of time each script may spend parsing request data
max_input_time = 60
# Maximum amount of memory a script may consume (8MB)
memory_limit = 8M
# Maximum size of POST data that PHP will accept.
post_max_size = 8M
# Whether to allow HTTP file uploads.
file_uploads = Off
# Maximum allowed size for uploaded files.
upload_max_filesize = 2M
# Do not expose PHP error messages to external users
display_errors = Off
# Turn on safe mode
safe_mode = On
# Only allow access to executables in isolated directory
safe_mode_exec_dir = php-required-executables-path
# Limit external access to PHP environment
safe_mode_allowed_env_vars = PHP_
# Restrict PHP information leakage
expose_php = Off
# Log all errors
log_errors = On
# Do not register globals for input data
register_globals = Off
# Minimize allowable PHP post size
post_max_size = 1K
# Ensure PHP redirects appropriately
cgi.force_redirect = 0
# Disallow uploading unless necessary
# Enable SQL safe mode
sql.safe_mode = On
# Avoid Opening remote files
allow_url_fopen = Off

此处省略说明…

限制相同IP的并发数

同一用户正常操作下,很少会产生大量的并发,相同用户产生大量并发,基本上是异常

使用Nginx HttpLimitZone模块来限制指定的会话或者一个IP地址的特殊情况下的并发连接。

配置nginx.conf:

Directive describes the zone, in which the session states are stored i.e. store in slimits.

1m can handle 32000 sessions with 32 bytes/session, set to 5m x 32000 session

limit_zone slimits $binary_remote_addr 5m;

Control maximum number of simultaneous connections for one session i.e.

restricts the amount of connections from a single ip address

limit_conn slimits 6;

先到这里,后台继续更新,有问题可以留言帮你解决。

原文出处:[ 2KB.COM ]
原文地址:http://www.2kb.com/news/txtlist_i4822v.html
版权声明:转载请附上原文链接!

靶场,是指为信息安全人员提供实战演练、渗透测试和攻防对抗等训练环境的虚拟或实体场地。在不同的领域中,靶场扮演着重要的角色,尤其是在网络安全领域,靶场成为培养和提高安全专业人员技能的重要平台。 首先,靶场为安全从业者提供了一个模拟真实网络环境的平台。通过构建类似实际网络的拓扑结构、部署各种安全设备和应用,靶场可以模拟出多样化的网络攻防场景。这使得安全人员能够在安全的环境中进行实际操作,全面提升其实战能力。 其次,靶场是渗透测试和漏洞攻防演练的理想场所。在靶场中,安全专业人员可以模拟攻击者的行为,发现系统和应用的漏洞,并进行渗透测试,从而及时修复和改进防御机制。同时,这也为防御方提供了锻炼机会,通过对抗攻击提高防御能力。 靶场的搭建还促进了团队协作与沟通。在攻防对抗中,往往需要多人协同作战,团队成员之间需要密切配合,共同制定攻击和防御策略。这有助于培养团队合作意识,提高协同作战的效率。 此外,靶场为学习者提供了一个安全的学习环境。在靶场中,学生可以通过实际操作掌握安全知识,了解攻击技术和防御策略。这样的学习方式比传统的理论课程更加生动直观,有助于深化对安全领域的理解。 最后,靶场也是安全社区交流的平台。在靶场中,安全从业者可以分享攻防经验,交流最新的安全威胁情报,共同探讨解决方案。这有助于建立更广泛的安全社区,推动整个行业的发展。 总体而言,靶场在信息安全领域具有重要地位,为安全专业人员提供了实战演练的机会,促进了团队协作与沟通,为学习者提供了安全的学习环境,同时也是安全社区交流的重要平台。通过靶场的实践操作,安全从业者能够更好地应对不断演变的网络威胁,提高整体的安全水平。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值