🔓 Советы и рекомендации по обеспечению безопасности вашего веб-сервера Nginx — Information Security Squad

🔓 Советы и рекомендации по обеспечению безопасности вашего веб-сервера Nginx

Nginx — это легкий, высокопроизводительный и быстро развивающийся веб-сервер с открытым исходным кодом во всем мире.

Nginx работает в операционных системах Linux, Windows, Mac OS и Solaris.

Популярность NGINX продолжает расти, что означает, что необходимо обеспечить все больше и больше методов защиты NGINX.

В этом руководстве мы расскажем о некоторых популярных советах и рекомендациях по безопасности сервера Nginx.

Требования

  • Сервер под управлением Ubuntu 18.04 или Debian 9.
  • Пароль root установлен на вашем сервере.

Установить Nginx

Во-первых, вам нужно будет установить Nginx в вашу систему.

Вы можете установить его, выполнив следующую команду:

apt-get install nginx -y

После установки Nginx вы можете проверить состояние Nginx с помощью следующей команды:

systemctl status nginx

Вы должны увидеть следующий вывод:

? 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.

Обновление Nginx

Вам нужно будет обновить веб-сервер Nginx, так как есть много улучшений производительности, добавляются новые функции и исправления безопасности.

Большинство современных дистрибутивов Linux не включают последнюю версию nginx в списки пакетов по умолчанию.

Поэтому вам необходимо обновить последнюю версию nginx через менеджер пакетов.

Вы можете обновить свой веб-сервер Nginx с помощью следующей команды:

apt-get update -y
apt-get install nginx --reinstall -y

Предотвратить раскрытие информации

Во-первых, вам нужно будет запретить Nginx раскрывать информацию о своей версии.

По умолчанию Nginx показывает свое имя и версию в заголовках HTTP.

Вы можете проверить это с помощью следующей команды:

curl -I http://localhost

Вы должны увидеть следующий вывод:

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

В приведенном выше выводе вы должны увидеть версию Nginx и операционной системы.

Вы можете скрыть эту информацию, отредактировав файл /etc/nginx/nginx.conf:

nano /etc/nginx/nginx.conf

Добавьте server_tokens off внутри части конфигурации http:

http {

        ##
        # Basic Settings
        ##
        server_tokens off;

Сохраните и закройте файл, когда вы закончите.

Затем перезапустите веб-сервер Nginx, чтобы применить изменения:

systemctl restart nginx

Теперь снова запустите команду curl:

curl -I http://localhost

Вы должны увидеть следующий вывод:

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

Ограничить IP-адреса

Nginx поставляется с простым модулем, который называется ngx_http_access_module, чтобы разрешить или запретить определенный IP-адрес.

Если вы хотите разрешить доступ к Nginx с 172.16.0.0/16 и запретить из других подсетей.

Затем откройте файл /etc/nginx/sites-enabled/default:

server {
        listen 80 default_server;
        listen [::]:80 default_server;

	allow 172.16.0.0/16;
    	deny  all;

Сохраните и закройте файл, когда вы закончите.

Затем перезапустите Nginx, чтобы применить эти изменения:

systemctl restart nginx

Теперь попробуйте получить доступ к вашему серверу Nginx с другого диапазона IP-адресов, например 192.168.0.102.

Затем проверьте журнал Nginx с помощью следующей команды:

tail -f /var/log/nginx/error.log

Вы должны получить сообщения о запрещенном доступе в следующем выводе:

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"

Безопасный Nginx с TLS

TLS (Transport Layer Security) является преемником SSL (Secure Socket Layer).

Он обеспечивает более сильный и эффективный протокл HTTPS и содержит больше усовершенствований, таких как прямая секретность, совместимость с современными наборами шифров OpenSSL и HSTS.

В этом руководстве показано, как включить самоподписанный SSL-сертификат в Nginx.

Если вы хотите использовать вместо этого сертификат Let’s Encrypt, посмотрите Как легко включить TLS 1.3 в Nginx на Ubuntu 18.10, 18.04, 16.04, 14.04

Сначала создайте каталог для SSL с помощью следующей команды:

mkdir /etc/nginx/ssl/

Затем сгенерируйте ключ и сертификат с помощью следующей команды:

cd /etc/nginx/ssl/

Сначала сгенерируйте ключ с помощью следующей команды:

openssl genrsa -aes256 -out nginx.key 1024

Вы должны увидеть следующий вывод:

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:

Затем сгенерируйте csr с помощью следующей команды:

openssl req -new -key nginx.key -out nginx.csr

Предоставьте всю информацию, как показано ниже:

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:
root@ubuntu1804:~# 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 []:admin@example.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:admin
An optional company name []:IT

Затем подпишите сертификат с помощью следующей команды:

openssl x509 -req -days 365 -in nginx.csr -signkey nginx.key -out nginx.crt

Вы должны увидеть следующий вывод:

Signature ok
subject=C = IN, ST = Gujarat, L = Junagadh, O = IT, OU = IT, CN = HITESH, emailAddress = admin@example.com
Getting Private key
Enter pass phrase for nginx.key:

Затем откройте файл виртуального хоста Nginx по умолчанию и определите сертификат:

nano /etc/nginx/sites-enabled/default

Сделайте следующие изменения:

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;

Сохраните и закройте файл, когда вы закончите.

Затем перезапустите сервер Nginx, чтобы применить эти изменения:

systemctl restart nginx

Защита паролем каталога

При настройке веб-сервера Nginx вы также можете защитить определенный каталог паролем.

Вы можете сделать это с помощью файла .htpasswd.

Для этого создайте файл с passwd и добавьте в него пользователя с помощью следующей команды:

mkdir /etc/nginx/.htpasswd
htpasswd -c /etc/nginx/.htpasswd/passwd admin

Вы должны увидеть следующий вывод:

New password: 
Re-type new password: 
Adding password for user admin

Затем создайте тестовый каталог внутри  Nginx с помощью следующей команды:

mkdir /var/www/html/test

Затем передайте права владения пользователю www-data с помощью следующей команды:

chown -R www-data:www-data /var/www/html/test

Затем откройте файл виртуального хоста Nginx по умолчанию с помощью следующей команды:

nano /etc/nginx/sites-enabled/default

Nest, защитите тестовый каталог, как показано ниже:

        location /test {

	auth_basic  "Restricted";
	auth_basic_user_file   /etc/nginx/.htpasswd/passwd;

Сохраните и закройте файл, когда вы закончите.

Затем перезапустите службу Nginx, чтобы применить эти изменения:

systemctl restart nginx

Затем откройте веб-браузер и введите URL-адрес http://your-server-ip/test.

Вам будет предложено ввести имя пользователя и пароль для доступа к тестовой директории, как показано на следующей странице:

Поздравляем! Вы успешно защитили свой сервер Nginx на сервере Ubuntu 18.04.

Я надеюсь, что это поможет вам защитить ваше приложение, размещенное на веб-сервере Nginx.

Не стесняйтесь спрашивать меня, если у вас есть какие-либо вопросы.

Для получения дополнительной информации вы можете обратиться к документу по безопасности Nginx.

 

cryptoparty

Cryptography is typically bypassed, not penetrated.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

5e7fa976b0640d40