Nginx je open source, lehký a vysoce výkonný nejrychleji rostoucí webový server po celém světě. Nginx běží na operačních systémech Linux, Windows, Mac OS a Solaris. NGINX stále roste na popularitě, takže je třeba zajistit stále více nasazení NGINX.
V tomto tutoriálu vysvětlíme některé oblíbené bezpečnostní tipy a triky serveru Nginx.
Požadavky
- Server se systémem Ubuntu 18.04 nebo Debian 9.
- Na vašem serveru je nastaveno heslo uživatele root.
Instalovat Nginx
Nejprve budete muset nainstalovat Nginx do vašeho systému. Můžete jej nainstalovat spuštěním následujícího příkazu:
apt-get install nginx -y
Jakmile je Nginx nainstalován, můžete zkontrolovat stav Nginx pomocí následujícího příkazu:
systemctl status nginx
Měli byste vidět následující výstup:
? nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2019-03-10 02:43:14 UTC; 4min 40s ago Docs: man:nginx(8) Process: 2271 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=exited, status=0/SUCCESS) Process: 2281 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Process: 2274 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Main PID: 2285 (nginx) Tasks: 2 (limit: 1111) CGroup: /system.slice/nginx.service ??2285 nginx: master process /usr/sbin/nginx -g daemon on; master_process on; ??2290 nginx: worker process Mar 10 02:43:14 ubuntu1804 systemd[1]: Starting A high performance web server and a reverse proxy server... Mar 10 02:43:14 ubuntu1804 systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument Mar 10 02:43:14 ubuntu1804 systemd[1]: Started A high performance web server and a reverse proxy server.
Aktualizovat Nginx
Budete muset aktualizovat svůj webový server Nginx, protože se přidává mnoho vylepšení výkonu, nových funkcí a oprav zabezpečení. Většina moderních linuxových distribucí nepřijde s nejnovější verzí nginx do svých výchozích seznamů balíčků. Budete tedy muset upgradovat nejnovější verzi nginx prostřednictvím správce balíčků. Svůj webový server Nginx můžete aktualizovat pomocí následujícího příkazu:
apt-get update -y
apt-get install nginx --reinstall -y
Zabránění zveřejnění informací
Nejprve budete muset zabránit Nginxu prozradit informace o své verzi.
Ve výchozím nastavení Nginx zobrazuje svůj název a verzi v záhlaví HTTP.
Můžete to zkontrolovat pomocí následujícího příkazu:
curl -I http://localhost
Měli byste vidět následující výstup:
HTTP/1.1 200 OK Server: nginx/1.14.0 (Ubuntu) Date: Sat, 09 Mar 2019 15:28:01 GMT Content-Type: text/html Content-Length: 10918 Last-Modified: Fri, 01 Feb 2019 16:05:17 GMT Connection: keep-alive ETag: "5c546e3d-2aa6" Accept-Ranges: bytes
Ve výše uvedeném výstupu byste měli vidět verzi Nginx a operačního systému.
Tyto informace můžete skrýt úpravou souboru /etc/nginx/nginx.conf:
nano /etc/nginx/nginx.conf
Přidejte server_tokens offline do části konfigurace http:
http { ## # Basic Settings ## server_tokens off;
Po dokončení uložte a zavřete soubor. Poté restartujte webový server Nginx, abyste použili změny:
systemctl restart nginx
Nyní znovu spusťte příkaz curl:
curl -I http://localhost
Měli byste vidět následující výstup:
HTTP/1.1 200 OK Server: nginx Date: Sat, 09 Mar 2019 15:33:31 GMT Content-Type: text/html Content-Length: 10918 Last-Modified: Fri, 01 Feb 2019 16:05:17 GMT Connection: keep-alive ETag: "5c546e3d-2aa6" Accept-Ranges: bytes
Omezit přístup k IP adresám
Nginx přichází s jednoduchým modulem nazvaným ngx_http_access_module, který umožňuje nebo zakazuje konkrétní IP adresu.
Pokud chcete povolit Nginx formulář 172.16.0.0/16 a zakázat z jiných podsítí. Poté otevřete soubor /etc/nginx/sites-enabled/default:
nano /etc/nginx/sites-enabled/default
Uvnitř bloku serveru proveďte následující změny:
server { listen 80 default_server; listen [::]:80 default_server; allow 172.16.0.0/16; deny all;
Po dokončení uložte a zavřete soubor. Poté restartujte Nginx, abyste použili tyto změny:
systemctl restart nginx
Nyní zkuste přistupovat k serveru Nginx z jiného rozsahu IP adres, jako je 192.168.0.102.
Dále zkontrolujte protokol Nginx pomocí následujícího příkazu:
tail -f /var/log/nginx/error.log
Měli byste mít zakázán přístup v následujícím výstupu:
2019/03/09 16:13:01 [error] 11589#11589: *1 access forbidden by rule, client: 192.168.0.102, server: _, request: "GET /test/ HTTP/1.1", host: "172.16.0.122"
Zabezpečte Nginx pomocí TLS
TLS (Transport Layer Security) je nástupcem SSL (Secure Socket Layer). Poskytuje silnější a efektivnější HTTPS a obsahuje další vylepšení, jako je Forward Secrecy, kompatibilita s moderními šifrovacími sadami OpenSSL a HSTS. Tento návod ukazuje, jak povolit certifikát SSL s vlastním podpisem v Nginx. Pokud chcete místo toho použít certifikát let's Encrypt, podívejte se sem: https://www.howtoforge.com/tutorial/nginx-with-letsencrypt-ciphersuite/
Nejprve vytvořte adresář pro SSL pomocí následujícího příkazu:
mkdir /etc/nginx/ssl/
Dále vygenerujte klíč a certifikát pomocí následujícího příkazu:
cd /etc/nginx/ssl/
Nejprve vygenerujte klíč pomocí následujícího příkazu:
openssl genrsa -aes256 -out nginx.key 1024
Měli byste vidět následující výstup:
Generating RSA private key, 1024 bit long modulus ...++++++ .............................++++++ e is 65537 (0x010001) Enter pass phrase for nginx.key: Verifying - Enter pass phrase for nginx.key:
Dále vygenerujte csr pomocí následujícího příkazu:
openssl req -new -key nginx.key -out nginx.csr
Poskytněte všechny informace, jak je uvedeno níže:
Generating RSA private key, 1024 bit long modulus ...++++++ .............................++++++ e is 65537 (0x010001) Enter pass phrase for nginx.key: Verifying - Enter pass phrase for nginx.key: [email protected]:~# openssl req -new -key nginx.key -out nginx.csr Enter pass phrase for nginx.key: You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:IN State or Province Name (full name) [Some-State]:Gujarat Locality Name (eg, city) []:Junagadh Organization Name (eg, company) [Internet Widgits Pty Ltd]:IT Organizational Unit Name (eg, section) []:IT Common Name (e.g. server FQDN or YOUR name) []:HITESH Email Address []:[email protected] Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:admin An optional company name []:IT
Dále podepište certifikát pomocí následujícího příkazu:
openssl x509 -req -days 365 -in nginx.csr -signkey nginx.key -out nginx.crt
Měli byste vidět následující výstup:
Signature ok subject=C = IN, ST = Gujarat, L = Junagadh, O = IT, OU = IT, CN = HITESH, emailAddress = [email protected] Getting Private key Enter pass phrase for nginx.key:
Dále otevřete výchozí soubor virtuálního hostitele Nginx a definujte certifikát:
nano /etc/nginx/sites-enabled/default
Proveďte následující změny:
server { listen 192.168.0.100:443 ssl; root /var/www/html; index index.html index.htm index.nginx-debian.html; server_name _; ssl_certificate /etc/nginx/ssl/nginx.crt; ssl_certificate_key /etc/nginx/ssl/nginx.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
Po dokončení uložte a zavřete soubor. Poté restartujte server Nginx, abyste použili tyto změny:
systemctl restart nginx
Ochrana adresáře heslem
Při nastavování webového serveru Nginx můžete také chránit konkrétní adresář heslem. Můžete to udělat pomocí souboru .htpasswd.
Chcete-li tak učinit, vytvořte soubor passwd a přidejte do něj uživatele pomocí následujícího příkazu:
mkdir /etc/nginx/.htpasswd
htpasswd -c /etc/nginx/.htpasswd/passwd admin
Měli byste vidět následující výstup:
New password: Re-type new password: Adding password for user admin
Dále vytvořte testovací adresář uvnitř webového kořenového adresáře Nginx pomocí následujícího příkazu:
mkdir /var/www/html/test
Dále dejte vlastnictví uživateli www-data pomocí následujícího příkazu:
chown -R www-data:www-data /var/www/html/test
Dále otevřete výchozí soubor virtuálního hostitele Nginx pomocí následujícího příkazu:
nano /etc/nginx/sites-enabled/default
Dále chraňte testovací adresář, jak je ukázáno níže:
location /test { auth_basic "Restricted"; auth_basic_user_file /etc/nginx/.htpasswd/passwd;
Po dokončení uložte a zavřete soubor. Poté restartujte službu Nginx, abyste použili tyto změny:
systemctl restart nginx
Dále otevřete webový prohlížeč a zadejte adresu URL http://ip-vaseho-serveru/test. Budete vyzváni k zadání uživatelského jména a hesla pro přístup do testovacího adresáře, jak je znázorněno na následující stránce:
Gratulujeme! úspěšně jste zabezpečili svůj server Nginx na serveru Ubuntu 18.04. Doufám, že vám to pomůže chránit vaši aplikaci hostovanou na webovém serveru Nginx. V případě jakýchkoliv dotazů se mě neváhejte zeptat. Další informace najdete v dokumentu o zabezpečení Nginx.