基础安全
先说一些基本安全设置,由开始发展到现在,其实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,创建证书和私钥文件
1在CA证书服务器生成自签证书 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 7月 9 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 7月 9 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 7月 9 23:22 nginx.csr 28-rw------- 1 root root 1679 7月 9 23:19 nginx.key 29[root@C712 ssl]# scp nginx.csr 192.168.1.11:/tmp/#传输到CA服务器上 30 31在CA服务器上认证 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}