Nginx系列之2:安全

基础安全

先说一些基本安全设置,由开始发展到现在,其实nginx的安全做得比以前已经好不少,不过有些还是要强调一下。

Nginx默认是不允许列出整个目录的,不过,我们为了安全,最好还是确认这个真的关闭了,不然代码被拉走了就悲剧了。

1http { 2autoindex off; 3} 4 5nginx默认是会在返回的数据包中显示版本号,原本这个并不是大问题,但是被别有用心的人专门攻击这个版本的话,那就不好了,所以,我们还是隐藏好一点。 6 7http { 8server_tokens off; 9}

IP安全

白名单高度安全配置(适用于授权IP较少的情况,其余全部deny封锁),可配置在http、server、location中

1location / { 2allow 192.168.1.1; 3deny all; 4}

黑名单配置(适用于授权IP较多的情况,allow其余),可配置在http、server、location中

1location / { 2deny 192.168.1.1; 3allow all; 4}

连接安全


设置https连接的模块
1. ssl on | off;
是否开启ssl连接
2. ssl_certificate file;
当前虚拟主机使用PEM格式的证书文件;
3. ssl_certificate_key file;
当前虚拟主机上与其证书匹配的私钥文件;
4. ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];
支持ssl协议版本,默认为后三个;
5. ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
builtin[:size]:使用OpenSSL内建的缓存,此缓存为每worker进程私有;
[shared:name:size]:在各worker之间使用一个共享的缓存;
6. ssl_session_timeout time;
客户端一侧的连接可以复用ssl session cache中缓存 的ssl参数的有效时长;

先自建一个CA,创建证书和私钥文件

1CA证书服务器生成自签证书 2[root@C711 ~]# cd /etc/pki/CA/ 3[root@C711 CA]# ls 4certs crl newcerts private 5[root@C711 CA]# (umask 077;openssl genrsa -out private/cakey.pem 2048) 6Generating RSA private key, 2048 bit long modulus 7...........+++ 8......+++ 9e is 65537 (0x10001) 10[root@C711 CA]# ll private 11总用量 4 12-rw------- 1 root root 1675 79 23:02 cakey.pem 13[root@C711 CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pm 14[root@C711 CA]# touch index.txt 15[root@C711 CA]# echo 01 > serial 16 17在nginx服务器上: 18[root@C712 ~]# mkdir /etc/nginx/ssl #创建ssl目录 19[root@C712 ~]# cd /etc/nginx/ssl 20[root@C712 ssl]# (umask 077; openssl genrsa -out nginx.key 2048) #创建秘钥 21[root@C712 ssl]# ll #查询 22总用量 4 23-rw------- 1 root root 1679 79 23:19 nginx.key 24[root@C712 ssl]# openssl req -new -key nginx.key -out nginx.csr #创建私钥 25[root@C712 ssl]# ll #查询 26总用量 8 27-rw-r--r-- 1 root root 989 79 23:22 nginx.csr 28-rw------- 1 root root 1679 79 23:19 nginx.key 29[root@C712 ssl]# scp nginx.csr 192.168.1.11:/tmp/#传输到CA服务器上 30 31CA服务器上认证 32[root@C711 CA]# openssl ca -in /tmp/nginx.csr -out /etc/pki/CA/certs/nginx.crt -days 365 33[root@C711 CA]#scp certs/nginx.crt 192.168.1.12:/etc/nginx/ssl #传送回nginx服务器 34 35回到nginx服务器上 36[root@C712 ~]# cd /etc/nginx 37[root@C712 nginx]# cp conf.d/vhost1.conf conf.d/vhost1_ssl.conf 38[root@C712 nginx]# vim conf.d/vhost1_ssl.conf 39 40server{ 41listen 443 ssl; #修改监听端口 42server_name www.ilinux.io; 43root /data/nginx/vhost1; 44access_log /var/log/nginx/vhost1_ssl_access.log main; 45 46ssl on; #开启ssl 47ssl_certificate /etc/nginx/ssl/nginx.crt; 48ssl_certificate_key /etc/nginx/ssl/nginx.key; 49ssl_protocols sslv3 tlsv1 tlsv1.1 tlsv1.2;#支持哪些协议 50ssl_session_cache shared:sslcache:20m;#指明缓存大小,1M能够缓存4000个会话 51 52location ~* ^/(admin|login){ 53auth_basic "admin area or login url"; 54auth_basic_user_file /etc/nginx/.ngxpasswd; 55} 56} 57[root@C712 ~]# nginx -s reload

HTTPS SSL

1 server { 2 listen 6003; 3 server_name localhost; 4 5 client_max_body_size 2000m; 6 7 ssl on; 8 9 ssl_certificate /usr/local/nginx/conf/cert/server.crt; 10 ssl_certificate_key /usr/local/nginx/conf/cert/server.key; 11 ssl_client_certificate /usr/local/nginx/conf/cert/ca.crt; 12 13 ssl_verify_client on; 14 ssl_session_cache shared:SSL8:1m; 15 ssl_session_timeout 2h; 16 17 ssl_ciphers HIGH:!aNULL:!MD5; 18 ssl_prefer_server_ciphers on; 19 20 21 location / { 22 proxy_pass http://11.8.130.167; 23 proxy_redirect default; 24 } 25   location /xmpptalk { 26 proxy_pass http://11.8.130.168:8080/xmpptalk; 27 proxy_redirect default; 28 } 29 30 }

如果是建立类似xmpp之类的双向ssl,可以参考客户端配置:

https://www.cnblogs.com/starcrm/p/9705276.html

TCP SSL

相关的nginx服务器反向代理设置为tcp结点,对xmpp的5222端口进行ssl反向代理。

1tcp { 2timeout 1d; 3proxy_read_timeout 10d; 4proxy_send_timeout 10d; 5proxy_connect_timeout 30; 6upstream nytalk_im { 7server 11.8.130.166:5222; 8check interval=3000 rise=2 fall=5 timeout=1000; 9} 10server { 11listen 6001; 12so_keepalive on; 13proxy_pass nytalk_im; 14tcp_nodelay on; 15#ssl on; 16 17ssl_certificate /usr/local/nginx/conf/cert/server.crt; 18ssl_certificate_key /usr/local/nginx/conf/cert/server.key; 19ssl_client_certificate /usr/local/nginx/conf/cert/ca.crt; 20 21ssl_verify_client on; 22ssl_session_cache shared:SSL2:1m; 23ssl_session_timeout 5m; 24 25ssl_ciphers HIGH:!aNULL:!MD5; 26ssl_prefer_server_ciphers on; 27} 28 29upstream nytalk_file { 30server 11.8.130.167:80; 31check interval=3000 rise=2 fall=5 timeout=1000; 32} 33server { 34listen 6002; 35so_keepalive on; 36proxy_pass nytalk_file; 37ssl on; 38 39ssl_certificate /usr/local/nginx/conf/cert/server.crt; 40ssl_certificate_key /usr/local/nginx/conf/cert/server.key; 41ssl_client_certificate /usr/local/nginx/conf/cert/ca.crt; 42 43ssl_verify_client on; 44ssl_session_cache shared:SSL2:1m; 45ssl_session_timeout 5m; 46 47ssl_ciphers HIGH:!aNULL:!MD5; 48ssl_prefer_server_ciphers on; 49} 50 51upstream nytalk_ssl { 52server 11.8.130.166:5223; 53check interval=3000 rise=2 fall=5 timeout=1000; 54}
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

4. Nginx模块

Nginx官方模块1.ngx\_http\_stub\_status\_modulehttp://nginx.org/en/docs/http/ngx\_http\_stub\_status\_module.html。(https://www.oschina.net/action/GoToLink?urlhttp%3A%2

Nginx系列之2:安全 - HelloWorld