Skip to content

Commit af3cb75

Browse files
committed
敏感文件
1 parent 0f42dfa commit af3cb75

File tree

10 files changed

+166
-33
lines changed

10 files changed

+166
-33
lines changed

README.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,17 @@
3030
- 调优列表
3131
- [x] [worker数量](book/03配置调优/01worker数量调优.md)
3232
- [ ] [使用HTTP2](book/03配置调优/02使用HTTP2.md)
33-
- [ ] [SSL会话缓存](book/03配置调优/03SSL会话缓存.md)
33+
- [ ] [https加固](book/03配置调优/03SSL加固.md)
3434
- [ ] [使用server_name代替if指令判断domain](book/03配置调优/04使用server_name代替if指令判断domain.md)
3535
- [ ] [使用$request_uri代替正则](book/03配置调优/05使用$request_uri代替正则.md)
3636
- [ ] [使用try_files指令来确保文件存在](book/03配置调优/06使用try_files指令来确保文件存在.md)
3737
- [ ] [使用return代替rewrite做重定向](book/03配置调优/07使用return代替rewrite做重定向.md)
3838
- [ ] [pcre开启JIT调优](book/03配置调优/08启用PCRE-JIT以加速正则表达式的处理.md)
3939
- [ ] [upstream开启keepalive](book/03配置调优/09upstream开启keepalive.md)
4040
- [ ] [尽可能精准配置location](book/03配置调优/10尽可能精准配置location.md)
41+
- 加固列表
42+
- [x] 安装最新版nginx
43+
- [x] [使用非特权用户运行nginx](book/04安全加固/02使用非特权用户运行nginx.md)
4144

4245
### 构建介质
4346

book/03配置调优/03SSL会话缓存.md

Lines changed: 0 additions & 30 deletions
This file was deleted.

book/03配置调优/03SSL加固.md

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
### SSL会话缓存
2+
3+
默认情况下,`内置`会话缓存功能是不合理的,因为该缓存只能被一个`worker`进程使用,并且可能导致内存碎片化。
4+
5+
> 使用`ssl_session_cache`指令处理会话缓存可以降低`NGINX`服务器的`CPU`开销。
6+
7+
从客户端角度来看,通过对`ssl`会话缓存可以提高系统性能。其原理主要是:消除了每次发出请求时都需要进行新的(且耗时的)`SSL`握手的需要。
8+
9+
> `ssl_session_cache`值该怎么设?
10+
11+
当启用`ssl_session_cache`时,通过`SSL`保持的连接,性能会大大提高。
12+
13+
建议`ssl_session_cache`值设为`10M`(`1MB`共享缓存可以容纳大约`4000`个会话)。
14+
共享的缓存在所有`worker`进程之间共享(同名的缓存可以在多个虚拟服务器中使用,但不跨主机因为基于宿主机内存)。
15+
16+
> `ssl_session_timeout`参数设置
17+
18+
对于`TLSv1.2`,会话的缓存时间不应超过24小时(这是最大时间)。
19+
20+
通常,`TLS`会话不应该被恢复,除非客户端和服务器都同意,并且如果任何一方怀疑会话可能已被泄露,或者证书可能已过期或已被吊销,则应该强制执行完全握手。
21+
22+
但是一段时间以前,我发现`ssl_session_timeout`设置较短的时间(例如15分钟)可以防止被广告商滥用,如谷歌和`Facebook`,针对这这种情况是有意义的。
23+
24+
建议值设置为
25+
```nginx configuration
26+
ssl_session_timeout 4h;
27+
```
28+
29+
> `ssl_buffer_size`参数设置
30+
31+
32+
### 开启OCSP Stapling
33+
34+
[Enable OCSP Stapling](https://github.com/trimstray/nginx-admins-handbook/blob/master/doc/RULES.md#rationale-23)
35+
36+
`OCSP`不同,在`OCSP Stapling`机制中,用户的浏览器不会直接访问证书的颁发者进行证书校验,而是由应用服务器定期访问颁发者进行证书校验。
37+
38+
`OCSP Stapling`扩展配置是为了更好的性能(旨在减少OCSP验证的成本;提高浏览器与应用服务器的通信性能,
39+
并允许在访问应用程序时检索有关证书有效性的信息),用户隐私仍然得到维护。`OCSP Stapling`只是一种优化,即使他不起作用,也不会中断程序。
40+
41+
在没有实现`OCSP Stapling`扩展的情况下使用`OCSP`,会增加丢失用户隐私的风险,
42+
以及由于无法验证证书的有效性而对应用程序的可用性造成负面影响的风险。
43+
44+
`OCSP Stapling``TLS`证书状态请求(RFC 6066 -证书状态请求)扩展(`Stapling`)中定义了`OCSP`响应。
45+
在这种情况下,服务器发送`OCSP`响应作为`TLS`扩展的一部分,因此客户端不需要在`OCSP URL`上检查它(为客户端节省了撤销检查时间)。
46+
47+
`nginx`提供了几个需要记住的选项。
48+
例如:它从`ssl_trusted_certificate`所指向的证书文件生成列表(这些证书的列表将不会发送到客户端)。
49+
您需要发送这个列表或关闭`ssl_verify_client`
50+
`ssl_certificate`语句已经提供了完整的证书链(只有中级证书,没有根CA,而且必须不包括站点证书)时,
51+
此步骤是可选的。如果只使用证书(而不是`CA`的部分),则需要`ssl_trusted_certificate`
52+
53+
54+

book/03配置调优/10尽可能精准配置location.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
### location尽可能的精确
22

3+
[原文地址](https://github.com/trimstray/nginx-admins-handbook/blob/master/doc/RULES.md#rationale-32)
4+
- [更多nginx文档](https://weiliang-ms.github.io/nginx/)
5+
- [更多linux相关文档](https://weiliang-ms.github.io/wl-awesome/)
6+
37
> 解释说明
48
59
精确的`location`匹配通常被用来加快选择过程,匹配通过后立即结束算法的执行。
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
### 开启limit_conn限制下载速度
2+
3+
[原文地址](https://github.com/trimstray/nginx-admins-handbook/blob/master/doc/RULES.md#rationale-32)
4+
- [更多nginx文档](https://weiliang-ms.github.io/nginx/)
5+
- [更多linux相关文档](https://weiliang-ms.github.io/wl-awesome/)
6+
7+
`nginx`提供了两个指令限制下载速度:
8+
- `limit_rate_after`: 设置`limit_rate`指令生效前(未限速前)可传输的数据量
9+
- `limit_rate`: 允许您限制单个客户端连接的传输速率(超过`limit_rate_after`)
10+
11+
以上两个指令限制了`nginx`每次连接的下载速度,所以,如果一个用户打开`x`个视频文件,它将能够下载`x *`他连接到视频文件的个数。
12+
13+
> 使用样例
14+
15+
```nginx configuration
16+
# Create limit connection zone:
17+
limit_conn_zone $binary_remote_addr zone=conn_for_remote_addr:1m;
18+
19+
# Add rules to limiting the download speed:
20+
limit_rate_after 1m; # run at maximum speed for the first 1 megabyte
21+
limit_rate 250k; # and set rate limit after 1 megabyte
22+
23+
# Enable queue:
24+
location /videos {
25+
26+
# Max amount of data by one client: 10 megabytes (limit_rate_after * 10)
27+
limit_conn conn_for_remote_addr 10;
28+
...
29+
}
30+
```
31+
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
### 使用最新版的nginx
2+
3+
使用最新版的`nginx``nginx`本身向后兼容。
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
### 使用非特权用户运行nginx
2+
[原文地址](https://github.com/trimstray/nginx-admins-handbook/blob/master/doc/RULES.md#rationale-35)
3+
- [更多nginx文档](https://weiliang-ms.github.io/nginx/)
4+
- [更多linux相关文档](https://weiliang-ms.github.io/wl-awesome/)
5+
6+
`linux`下一个很重要的通用原则: 程序只应拥有完成其工作所需的最小权限。这样,如果程序坏了,它对系统的损害是有限的。
7+
8+
仅仅通过更改进程所有者名称,在安全性方面并没有真正的区别。
9+
而在安全方面,最小特权原则规定:进程实体在给定系统中实现其目标所必需的权限之外,不应该被授予更多的权限。这样,只有`master`进程作为`root`进程运行。
10+
11+
```shell
12+
[root@localhost ~]# ps -ef|grep nginx
13+
root 1049 1 0 00:02 ? 00:00:00 nginx: master process /usr/sbin/nginx
14+
nginx 1051 1049 0 00:02 ? 00:00:00 nginx: worker process
15+
nginx 1052 1049 0 00:02 ? 00:00:00 nginx: cache manager process
16+
nginx 1053 1049 0 00:02 ? 00:00:00 nginx: cache loader process
17+
root 1317 1297 0 00:03 pts/0 00:00:00 grep --color=auto nginx
18+
```
19+
20+
如果您使用这个仓库:[nginx](https://github.com/weiliang-ms/nginx) 的安装包进行安装,关于最小权限的配置已配置完毕:
21+
22+
- `master`进程运行`user`: `root`
23+
- `worker`进程运行`user`: `nginx`
24+
- 目录权限
25+
- `/var/log/nginx`: 日志目录(nginx:nginx)
26+
- `/var/cache/nginx`: 缓存目录(nginx:nginx)
27+
- `/var/dump/nginx`: `dump`目录(nginx:nginx)
28+
- `/etc/nginx`: 配置目录(nginx:nginx)
29+
- `/usr/share/nginx`: 静态文件目录(nginx:nginx)
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
### 保护敏感资源
2+
[原文地址](https://github.com/trimstray/nginx-admins-handbook/blob/master/doc/RULES.md#rationale-37)
3+
- [更多nginx文档](https://weiliang-ms.github.io/nginx/)
4+
- [更多linux相关文档](https://weiliang-ms.github.io/wl-awesome/)
5+
6+
7+
隐藏的目录和文件永远不应该被`web`访问-有时关键数据会在应用程序部署期间发布。
8+
如果你使用的是版本控制系统,发布程序时应该明确地禁止对关键隐藏目录/文件的访问(通过向攻击者提供更少的信息),比如`.git``.svn`
9+
以防止暴露应用程序的源代码。
10+
11+
> 使用方式
12+
13+
`server`块添加`include /etc/nginx/conf/conf.d/deny.location;`配置
14+
15+
```nginx configuration
16+
server {
17+
listen 8080;
18+
include /etc/nginx/conf/conf.d/deny.location;
19+
location / {
20+
root /usr/share/nginx/ddd;
21+
}
22+
...
23+
other config
24+
...
25+
}
26+
```
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
location ~* ^.*(\.(?:git|svn|hg|bak|bckp|save|old|orig|original|test|conf|cfg|dist|in[ci]|log|sql|mdb|sw[op]|htaccess|php#|php~|php_bak|aspx?|tpl|sh|bash|bin|exe|dll|jsp|out|cache|))$ {
2+
3+
# Use also rate limiting:
4+
# in server context: limit_req_zone $binary_remote_addr zone=per_ip_5r_s:5m rate=5r/s;
5+
limit_req zone=per_ip_5r_s;
6+
7+
deny all;
8+
access_log /var/log/nginx/restricted-files-access.log main;
9+
access_log /var/log/nginx/restricted-files-error.log main;
10+
11+
}

rpmbuild/SPECS/nginx-el7.spec

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -168,10 +168,12 @@ iconv -f koi8-r CHANGES.ru > c && %__mv -f c CHANGES.ru
168168
groupadd nginx
169169
useradd nginx -g nginx -s /sbin/nologin -M
170170

171-
mkdir -p /var/log/nginx /var/cache/nginx /var/dump/nginx
171+
mkdir -p /var/log/nginx /var/cache/nginx /var/dump/nginx /usr/share/nginx
172172
chown nginx:nginx -R /var/log/nginx
173173
chown nginx:nginx -R /var/cache/nginx
174174
chown nginx:nginx -R /var/dump/nginx
175+
chown nginx:nginx -R /usr/share/nginx
176+
chown nginx:nginx -R /etc/nginx
175177

176178
echo "nginx soft nofile 65535" >> /etc/security/limits.conf
177179
echo "nginx hard nofile 65535" >> /etc/security/limits.conf
@@ -206,7 +208,7 @@ if [ -f /var/run/nginx.pid ];then
206208
fi
207209

208210
rm -rf /etc/nginx/
209-
rm -rf /var/log/nginx /var/cache/nginx /var/dump/nginx
211+
rm -rf /var/log/nginx /var/cache/nginx /var/dump/nginx /usr/share/nginx
210212
userdel nginx
211213
sed -i "/nginx soft nofile 655350/d" /etc/security/limits.conf
212214
sed -i "/nginx hard nofile 655350/d" /etc/security/limits.conf

0 commit comments

Comments
 (0)