GNU/Linux >> Znalost Linux >  >> Linux

Tipy a triky pro zabezpečení vašeho webového serveru Nginx

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.


Linux
  1. Co je webový server a jak webový server funguje?

  2. Jak nainstalovat webový server Nginx na Linux

  3. Top 8 tipů a triků příkazového řádku MySQL

  1. LAMP vs. LEMP – tipy pro výběr Apache nebo nginx pro váš webový server

  2. Linux .htaccess tipy a triky

  3. 10 tipů, jak zabezpečit webový server Apache v systému UNIX / Linux

  1. Instalace Nginx na Ubuntu 14.04 a 16.04

  2. Jak zpevnit a zabezpečit webový server NGINX v Linuxu

  3. Oblíbené rsync tipy a triky