当前位置: 首页 > 科技观察

为NginxWeb服务器保驾护航的几个要点

时间:2023-03-12 08:40:13 科技观察

【.com快译】Nginx是全球最强大的开源轻量级高性能Web服务器系统。Nginx可在Linux、Windows、MacOS和Solaris等操作系统上运行。Nginx继续流行,这意味着越来越多的Nginx部署需要保??护。我们将在本教程中介绍几个常见的Nginx服务器安全点。要求一台运行Ubuntu18.04或Debian9的服务器你在你的服务器上设置了root密码1.安装Nginx首先,在你的系统上安装Nginx。运行以下命令进行安装:apt-getinstallnginx-y安装Nginx后,您可以使用以下命令检查Nginx的状态:systemctlstatusnginx您应该看到以下输出:?nginx.service-AhighperformancewebserverandareverseproxyserverLoaded:loaded(/lib/systemd/system/nginx.service;enabled;vendorpreset:enabled)Active:active(running)sinceSun2019-03-1002:43:14UTC;4min40sagoDocs:man:nginx(8)进程:2271ExecStop=/sbin/start-stop-daemon--quiet--stop--retryQUIT/5--pidfile/run/nginx.pid(code=exited,status=0/SUCCESS)Process:2281ExecStart=/usr/sbin/nginx-gdaemon;master_processon;(code=exited,status=0/SUCCESS)Process:2274ExecStartPre=/usr/sbin/nginx-t-q-gdaemon;master_processon;(code=exited,status=0/SUCCESS)MainPID:2285(nginx)Tasks:2(limit:1111)CGroup:/system.slice/nginx.service??2285nginx:masterprocess/usr/sbin/nginx-gdaemon;master_processon;??2290nginx:workerprocessMar1002:43:14ubuntu1804systemd[1]:StartingAhighperformancewebserverandareverseproxy...Mar1002:43:14ubuntu1804systemd[1]:nginx.service:FailedtoparsePIDfromfile/run/nginx.pid:InvalidargumentMar1002:43:14ubuntu1804systemd[1]:StartedAhighperformancewebserverandreverseproxyserver.2.UpdateNginx您需要更新NginxWeb服务器系统,因为许多性能改进、新功能和安全补丁不断添加到大多数现代Linux该发行版不随默认包列表中的较新版本的Nginx一起提供。所以需要通过包管理器更新新版本的Nginx。您可以使用以下命令更新NginxWeb服务器系统:apt-getupdate-yapt-getinstallnginx--reinstall-y3。为了防止信息泄露,首先需要防止Nginx泄露其版本信息。默认情况下,Nginx在HTTP标头中显示其名称和版本。您可以使用以下命令进行检查:curl-Ihttp://localhost您应该会看到以下输出:HTTP/1.1200OKServer:nginx/1.14.0(Ubuntu)Date:Sat,09Mar201915:28:01GMTContent-Type:text/htmlContent-Length:10918Last-Modified:Fri,01Feb201916:05:17GMTConnection:keep-aliveETag:"5c546e3d-2aa6"Accept-Ranges:bytes在上面的输出中,您应该看到Nginx的版本和操作系统。您可以编辑/etc/nginx/nginx.conf文件以隐藏这部分信息:nano/etc/nginx/nginx.conf在http配置部分添加server_tokensoff行:http{###BasicSettings##server_tokensoff;完成后保存并关闭文件。然后重新启动NginxWeb服务器系统以使更改生效:systemctlrestartnginx现在再次运行curl命令:curl-Ihttp://localhost你应该看到以下输出:HTTP/1.1200OKServer:nginxDate:Sat,09Mar201915:33:31GMTContent-Type:text/htmlContent-Length:10918Last-Modified:Fri,01Feb201916:05:17GMTConnection:keep-aliveETag:"5c546e3d-2aa6"Accept-Ranges:bytes4。限制IP访问Nginx自带一个简单的模块,叫做ngx_http_access_module,允许或拒绝某个特定的IP地址。如果你想允许172.16.0.0/16访问Nginx,但拒绝其他子网访问,那么打开/etc/nginx/sites-enabled/default文件:nano/etc/nginx/sites-enabled/defaultserverblock里面做如下改动:server{listen80default_server;listen[::]:80default_server;allow172.16.0.0/16;denyall;完成后保存并关闭文件。然后重新启动Nginx以使这些更改生效:systemctlrestartnginx现在尝试从另一个IP地址范围(如192.168.0.102)访问Nginx服务器。接下来,使用以下命令检查Nginx日志:tail-f/var/log/nginx/error.log您应该在以下输出中看到AccessForbidden:2019/03/0916:13:01[error]11589#11589:*1accessforbiddenbyrule,client:192.168.0.102,server:_,request:"GET/test/HTTP/1.1",host:"172.16.0.122"5.ProtectNginxwithTLSTransportLayerSecurity(TLS)是一个安全套接字层(SSL)后续技术。它提供了更强大、更高效的HTTPS,并进行了更多改进,例如ForwardSecrecy、现代OpenSSL密码套件和HSTS。本教程介绍如何在Nginx中启用自签名SSL证书。如果您想改用let'sEncrypt证书,请参阅:https://www.howtoforge.com/tutorial/nginx-with-letsencrypt-ciphersuite/。首先使用以下命令为SSL创建一个目录:mkdir/etc/nginx/ssl/接下来,使用以下命令创建密钥和证书:cd/etc/nginx/ssl/首先使用以下命令创建密钥:opensslgenrsa-aes256-outnginx.key1024你会看到如下输出:GeneratingRSAprivatekey,1024bitlongmodulus...++++++......................................++++++eis65537(0x010001)Enterpassphrasefornginx.key:Verifying-Enterpassphrasefornginx.key:接下来使用以下命令创建csr:opensslreq-new-keynginx。key-outnginx.csr提供所有信息如下:GeneratingRSAprivatekey,1024bitlongmodulus...++++++...............................................++++++eis65537(0x010001)Enterpassphrasefornginx。key:Verifying-Enterpassphrasefornginx.key:root@ubuntu1804:~#opensslreq-new-keynginx.key-outnginx.csrEnterpassphrasefornginx.key:Youareabouttobeaskedtoenterinformationthatwillbeincorporatedintoyourcertificaterequest.WhatyouareabouttoenteriswhatiscalledaDistinguishedNameoraDN.TherearequiteafewfieldsbutyoucanleavesomeblankForsomefieldstherewillbeadefaultvalue,Ifyouenter'.',thefieldwillbeleftblank.-----CountryName(2lettercode)[AU]:INStateorProvinceName(全名)[Some-State]:GujaratLocalityName(eg,city)[]:JunagadhOrganizationName(eg,company)[InternetWidgitsPtyLtd]:ITOrganizationalUnitName(eg,section)[]:ITCommonName(eg.serverFQDNorYOURname)[]:HITESHEmailAddress[]:admin@example.com请输入以下'extra'attributetobesentwithyourcertificaterequestAchallengepassword[]:adminAnoptionalcompanyname[]:IT接下来使用以下命令签署证书:opensslx509-req-days365-innginx.csr-signkeynginx.key-outnginx.crt您应该看到以下输出:Signatureoksubject=C=IN,ST=Gujarat,L=Junagadh,O=IT,OU=IT,CN=HITESH,emailAddress=admin@example.comGettingPrivatekeyEnterpassphrasefornginx.key:接下来打开Nginx默认虚拟主机文件,定义证书:nano/etc/nginx/sites-enabled/default进行以下更改:server{listen192.168.0.100:443ssl;root/var/www/html;indexindex.htmlindex.htmindex.nginx-debian.html;server_name_;ssl_certificate/etc/nginx/ssl/nginx.crt;ssl_certificate_key/etc/nginx/ssl/nginx.key;ssl_protocolsTLSv1TLSv1.1TLSv1.2;完成后保存关闭文件,重启Nginx服务器使这些修改生效:systemctlrestartnginx6。在创建带有密码保护目录的NginxWeb服务器时,您还可以使用密码来保护它的特定目录。这可以使用.htpasswd文件来完成。为此,请创建passwd文件并将用户添加到其中:mkdir/etc/nginx/.htpasswdhtpasswd-c/etc/nginx/.htpasswd/passwdadmin您应该会看到以下输出:Newpassword:Re-typenewpassword:AddingpasswordforuseradminNext创建一个使用以下命令在NginxWeb根目录中测试目录。mkdir/var/www/html/test接下来使用以下命令将所有权授予www-data用户:chown-Rwww-data:www-data/var/www/html/test接下来打开Nginx默认虚拟主机文件以下命令:nano/etc/nginx/sites-enabled/default接下来保护测试目录如下:location/test{auth_basic"Restricted";auth_basic_user_file/etc/nginx/.htpasswd/passwd;完成后保存并关闭文件。然后重新启动Nginx服务以使这些更改生效:systemctlrestartnginx接下来,打开Web浏览器并输入URLhttp://your-server-ip/test。系统将提示您输入用户名和密码以访问测试目录,如下所示:恭喜!您已成功保护Ubuntu18.04服务器上的Nginx服务器系统。希望本文能保护您在NginxWeb服务器上的应用程序。有关详细信息,请查看Nginx安全文档(https://docs.nginx.com/nginx/admin-guide/security-controls/)。原文作者:HiteshJethva【翻译稿件,合作网站转载请注明原译者及出处.com】