- PVSM.RU - https://www.pvsm.ru -

Повышаем безопасность стека web-приложений (виртуализация LAMP, шаг 6/6)

Настройка и использование NGinx

Мы завершаем перевод цикла статей сайта cyberciti.biz [1], посвященного виртуализации LAMP-стэка [2]. Речь в заключительном материале пойдет об установке и настройке реверс-прокси nginx.

NGinx — open-source продукт, использующийся не только в качестве веб-сервера или реверс-прокси сервер. За его легковесность и бережное отношение к ресурсам его используют и в качестве балансировщика нагрузки (от тупого round-ribbon, до более осмысленного, но тут все туманно [3] прим.пер.) и/или в качестве прокси-решения для организации доступа к службам виртуальной сети, установленной в предыдущих статьях цикла, через один внешний хост-адреса, например через IP 202.54.1.1 (как это было рассмотренное в примерах прежде).

В этой статье мы разберемся, как установить NGinx в качестве обратного прокси-сервера для Apache+php5 сервера с доменным именем www.example.com [4] и сервера статики Lighttpd, который, в нашем примере, именуется static.example.com. Все настройки мы будем производить исключительно на виртуальном сервере vm00 с IP-адресом 192.168.1.1.

Настройка DNS

Убедитесь, что и www.example.com [4] и static.example.com указывают на IP-адрес 192.168.1.1.

Установка NGinx-сервера

Введите следующие команды консоли, что бы установить NGinx:

$ cd /tmp
$ wget http://nginx.org/packages/rhel/6/noarch/RPMS/nginx-release-rhel-6-0.el6.ngx.noarch.rpm
# rpm -iv nginx-release-rhel-6-0.el6.ngx.noarch.rpm
# yum install nginx

Пример ответа в консоли сервера:

Loaded plugins: rhnplugin
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package nginx.x86_64 0:1.2.1-1.el6.ngx will be installed
--> Finished Dependency Resolution
Dependencies Resolved
=========================================================================
 Package      Arch          Version                   Repository    Size
=========================================================================
Installing:
 nginx        x86_64        1.2.1-1.el6.ngx           nginx        331 k
Transaction Summary
=========================================================================
Install       1 Package(s)
Total download size: 331 k
Installed size: 730 k
Is this ok [y/N]: y
Downloading Packages:
nginx-1.2.1-1.el6.ngx.x86_64.rpm                  | 331 kB     00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Warning: RPMDB altered outside of yum.
  Installing : nginx-1.2.1-1.el6.ngx.x86_64                          1/1
----------------------------------------------------------------------
Thanks for using NGINX!
Check out our community web site:
* http://nginx.org/en/support.html
If you have questions about commercial support for NGINX please visit:
* http://www.nginx.com/support.html
----------------------------------------------------------------------
  Verifying  : nginx-1.2.1-1.el6.ngx.x86_64                          1/1
Installed:
  nginx.x86_64 0:1.2.1-1.el6.ngx
Complete!

Настройка сервера web-сервера NGinx как реверс-прокси

Отредактируйте файл /etc/nginx/conf.d/default.conf:

# vi /etc/nginx/conf.d/default.conf

Добавив к нему, или изменим существующие строки:

## Основной реверс-прокси сервер ##
## Apache (vm02) скрипт-сервер для www.example.com ##
upstream apachephp  {
      server 192.168.1.11:80; #Apache1
}
 
## Lighttpd (vm01) сервер статики для static.example.com ##
upstream lighttpd  {
      server 192.168.1.10:80; #Lighttpd1
}
 
## Начало настроек www.example.com ##
server {
    listen       202.54.1.1:80;
    server_name  www.example.com;
 
    access_log  /var/log/nginx/log/www.example.access.log  main;
    error_log  /var/log/nginx/log/www.example.error.log;
    root   /usr/share/nginx/html;
    index  index.html index.htm;
 
    ## перенаправляем запросы apache1 ##
    location / {
     proxy_pass  http://apachephp;
     proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
     proxy_redirect off;
     proxy_buffering off;
     proxy_set_header        Host            $host;
     proxy_set_header        X-Real-IP       $remote_addr;
     proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
   }
}
## Конец настроек www.example.com ##
 
## Начало настроек static.example.com ##
server {
   listen      202.54.1.1:80;
   server_name static.example.com;
   access_log  /var/log/nginx/log/static.example.com.access.log  main;
   error_log   /var/log/nginx/log/static.example.com.error.log;
   root        /usr/local/nginx/html;
   index       index.html;
 
   location / {
        proxy_pass  http://lighttpd;
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        proxy_redirect off;
        proxy_buffering off;
        proxy_set_header        Host            static.example.com;
        proxy_set_header        X-Real-IP       $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
## Конец настроек static.example.com  ##

Включаем NGinx

Введите следующие команды:

# chkconfig nginx on
# service nginx start

Настраиваем брандмауэр

Установите следующие настройки брандмауэра:

  • Запрет всех ВХОДЯЩИХ/ИСХОДЯЩИХ соединений по умолчанию (Drop all INPUT/OUTPUT by default)
  • Открываем только tcp-порты 80 и 443 (202.54.1.1:80 и/или 443 для eth0)
  • Устанавливаем eth1 в качестве единственного доверенного устройства в коммуникациях  между реверс-прокси nginx и Apache/Lighttpd серврами

Для установки этих параметров произведем следующие действия:

# system-config-firewall-tui

Вы можете отредактировать /etc/sysconfig/iptables вручную и, также, настроить брандмауэр (читайте дополнительно  в статье на сайте cyberciti.biz [5])

/etc/sysctl.conf

Отредактируем /etc/sysctl.conf следующим образом:

# Execshild
kernel.exec-shield = 1
kernel.randomize_va_space = 1
 
# IPv4 settings
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
 
# Increase system file descriptor limit to
fs.file-max = 50000
 
# Increase system IP port limits
net.ipv4.ip_local_port_range = 2000 65000
 
# Ipv6
net.ipv6.conf.default.router_solicitations = 0
net.ipv6.conf.default.accept_ra_rtr_pref = 0
net.ipv6.conf.default.accept_ra_pinfo = 0
net.ipv6.conf.default.accept_ra_defrtr = 0
net.ipv6.conf.default.autoconf = 0
net.ipv6.conf.default.dad_transmits = 0
net.ipv6.conf.default.max_addresses = 1

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

# sysctl -p

Для детальной информации об указанных директивах настройки ядра Linux [6] читайте соответствующем faq.

Безопасность сервера NGinx

Смотрите дополнительно пост «Топ-20 практик безопасности веб-сервера NGinx [7]». Так же, в качестве доп.материалов о настройках NGinx, реверс-прокси и SSL смотрите в материалах уроков:

Топ-практики безопасности LAMP-стека

  1. Шифрование коммуникаций: используйте ssh и vpns во время настройки ваших виртуальных амшин. Используйте scp/sftp-клиента для загрузки файлов на сервер;
  2. Вам действительно нужен весь хлам, установленный на web-сервер? Избегайте установки излишнее ПО и сбережетесь от компрометации. Используйте менеджеры пакетов RPM, такие как yum, apt-get и/или dpkg что бы отслеживать установленное ПО;
  3. Установка обновлений безопасности — важная часть в поддержке работоспособности Linux-сервера. Linux предоставляет всё необходимое программное обеспечение для целей поддержания системы в актуальном состоянии, а процедура перехода от версии к версии ПО сделана самым удобным способом. Все обновления связанные с безопасностью должны отслеживаться и устанавливаться как можно раньше;
  4. Выдавайте наименьшие из необходимых привилегий пользовательским учетным записям. Не разбрасывайтесь ssh-доступом к вашему серверу направо и налево;
  5. Прочитайте так же статьи о лучших практиках в безопасности LAMP-стека на сайте cyberciti.biz:

Заключение

Надеюсь, данное руководство послужит хорошим подспорьем при настройке виртуальных машин, а информация окажется, в достаточной мере, полезной, что бы вы смогли начать настройку собственного web-стека на вашем CentOS /RHEL сервере самостоятельно.

От переводчика:
В цикле статей присутствует порядка 50 внешних ссылок на материалы сайта cyberciti. С моей стороны было бы не очень честно оставить читателей один на один с анлийским текстом (иначе, стали бы мы читать переводы). Предложение такое: вот топ ссылок, которые упоминаются наиболее часто в переведенном материале:

И еще 36 ссылок, упоминавшихся более 0 раз:

www.php.net/array [29]
www.cyberciti.biz/faq/mysql-user-creation/ [30]
www.cyberciti.biz/tips/open-source-project-management-software.html [31]
www.cyberciti.biz/faq/linux-demilitarized-zone-howto/ [32]
www.cyberciti.biz/faq/restart-httpd/ [33]
www.cyberciti.biz/faq/how-do-i-start-and-stop-nfs-service/ [34]
www.cyberciti.biz/faq/rhel-centos-fedora-keepalived-lvs-cluster-configuration/ [8]
www.cyberciti.biz/tips/linux-laptop.html [35]
www.cyberciti.biz/faq/centos-fedora-rhel-iptables-open-nfs-server-ports/ [36]
www.cyberciti.biz/faq/linux-install-and-start-apache-httpd/ [37]
www.cyberciti.biz/faq/rhel-fedora-centos-linux-temporarily-switchoff-selinux/ [38]
www.cyberciti.biz/faq/linux-make-directory-command/ [39]
www.cyberciti.biz/faq/howto-disable-httpd-selinux-security-protection/ [40]
www.cyberciti.biz/tips/top-linux-monitoring-tools.html [41]
www.php.net/isset [42]
www.cyberciti.biz/tips/linux-iptables-examples.html [43]
bash.cyberciti.biz/mysql/add-database-username-password-remote-host-access/ [44]
dev.mysql.com/doc/refman/5.5/en/ [45]
www.cyberciti.biz/faq/tag/etcfstab/ [46]
www.cyberciti.biz/faq/fedora-sl-centos-redhat6-enable-epel-repo/ [47]
www.cyberciti.biz/faq/tag/etcsysconfigmemcached/ [48]
www.cyberciti.biz/tips/my-10-unix-command-line-mistakes.html [49]
www.cyberciti.biz/tips/download-email-client-for-linux-mac-osx-windows.html [50]
www.cyberciti.biz/faq/linux-kernel-etcsysctl-conf-security-hardening/ [6]
www.cyberciti.biz/tips/how-do-i-enable-remote-access-to-mysql-database-server.html [51]
www.cyberciti.biz/faq/linux-unix-bsd-wordpress-memcached-cache-plugin/ [52]
www.cyberciti.biz/faq/howto-install-memcached-under-rhel-fedora-centos/ [53]
www.cyberciti.biz/tips/tips-to-protect-linux-servers-physical-console-access.html [13]
www.cyberciti.biz/faq/how-to-install-mysql-under-rhel/ [54]
www.cyberciti.biz/tips/unix-linux-bsd-pydf-command-in-colours.html [55]
www.cyberciti.biz/faq/howto-linux-unix-setup-nginx-ssl-proxy/ [9]
www.cyberciti.biz/faq/how-to-mount-bind-partitions-filesystems-in-linux/ [56]
www.cyberciti.biz/faq/rhel-fedora-linux-install-memcached-caching-system-rpm/ [57]
www.phpmyadmin.net/home_page/index.php [58]
www.cyberciti.biz/faq/rhel-fedorta-linux-iptables-firewall-configuration-tutorial/ [5]
www.cyberciti.biz/faq/stop-lighttpd-server/ [59]

Что мне самому сейчас интересно, т.е. что я планирую перевести в самые ближайшие дни — в нижнем списке. Если есть что-то, что требует перевода или дубляжа и имеет такую запредельную ценность, как доклады Yoshinori Matsunobu — предлагайте, будем читать/переводить.

O'Reilly MySQL Conference & Expo Is a Wrap // 2011 web [60]

  • Linux and H/W optimizations — Yoshinori Matsunobu web [61]
  • MySQL and Linux Tuning — Better Together .ppt [62] web [63]

Круг интересов: серверное администрирование, оптимизация и мониторинг LAMP-стэка. Виртуализация, IaaS, KVM, xfs, NFS. Так же интересно: hPHP (hip-hop PHP), WordPress.

От вас — ссылка на материал, от меня — перевод и поклон.

Если знаете конференции, помимо (O’Reilly Velocity, NJ-LOPSA PICC, Tech Ed, LinuxCon), публикующие материалы/презентации/видео — буду выбирать темы на свой вкус и предлагать на ваш выбор.

Автор: danielnewman


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/nginx/12294

Ссылки в тексте:

[1] cyberciti.biz: http://cyberciti.biz/

[2] виртуализации LAMP-стэка: http://www.cyberciti.biz/tips/run-different-network-services-on-separate-vm-systems.html

[3] все туманно: http://habrahabr.ru/qa/22072/

[4] www.example.com: http://www.example.com

[5] в статье на сайте cyberciti.biz: http://www.cyberciti.biz/faq/rhel-fedorta-linux-iptables-firewall-configuration-tutorial/

[6] директивах настройки ядра Linux: http://www.cyberciti.biz/faq/linux-kernel-etcsysctl-conf-security-hardening/

[7] Топ-20 практик безопасности веб-сервера NGinx: http://www.cyberciti.biz/tips/linux-unix-bsd-nginx-webserver-security.html

[8] CentOS / Redhat Linux: установка Keepalive для обеспечения отказоустойчивости web-кластера: http://www.cyberciti.biz/faq/rhel-centos-fedora-keepalived-lvs-cluster-configuration/

[9] nginx: Установка сбалансированного SSL реверс-прокси (Load Balanced SSL Proxy): http://www.cyberciti.biz/faq/howto-linux-unix-setup-nginx-ssl-proxy/

[10] 20 приемов повышения безопасности на Linux-серверах: http://www.cyberciti.biz/tips/linux-security.html

[11] 25 лучших практик настройки безопасности PHP для сис.админов: http://www.cyberciti.biz/tips/php-security-best-practices-tutorial.html

[12] Top-20 лучших практик безопасности OpenSSH-сервера: http://www.cyberciti.biz/tips/linux-unix-bsd-openssh-server-best-practices.html

[13] Советы по защите физического доступа к консоли Linux-сервера: http://www.cyberciti.biz/tips/tips-to-protect-linux-servers-physical-console-access.html

[14] Вводная часть: http://habrahabr.ru/post/147864/

[15] Шаг №1: Настройка / Установка: NFS файловый сервер: http://habrahabr.ru/post/148004/

[16] Шаг №2: Настройка / установка: сервер баз данных MySQL: http://habrahabr.ru/post/148077/

[17] Шаг №3: Настройка / Установка: Memcached сервера кэширования: http://habrahabr.ru/post/148488/

[18] Шаг №4: Настройка / Установка: Apache + php5 приложение веб-сервера: http://habrahabr.ru/post/148489/

[19] Шаг №5: Настройка / Установка: веб-сервер Lighttpd для статических активов: http://habrahabr.ru/post/148490/

[20] Шаг №6: Настройка / Установка: Nginx обратный (reverse) прокси-сервер: http://habrahabr.ru/post/148491/

[21] о запуске iptables: http://www.cyberciti.biz/faq/howto-start-iptables-under-rhel-centos-linux/

[22] Установка nfsv4 сервера на CentOS/RHEL: http://www.cyberciti.biz/faq/centos-fedora-rhel-nfs-v4-configuration/

[23] yum-менеджер пакетов: http://www.cyberciti.biz/faq/rhel-centos-fedora-linux-yum-command-howto/

[24] Создание учетной записи нового пользователя в linux: http://www.cyberciti.biz/faq/howto-add-new-linux-user-account/

[25] об изменении sysctl-параметров ядра: http://www.cyberciti.biz/faq/making-changes-to-proc-filesystem-permanently/

[26] о расширении диапозона доступных IP-портов: http://www.cyberciti.biz/tips/linux-increase-outgoing-network-sockets-range.html

[27] NGinx в качестве реверс-прокси: http://www.cyberciti.biz/tips/using-nginx-as-reverse-proxy.html

[28] О методах увеличении максимального числа файловых дескриптеров (FD): http://www.cyberciti.biz/faq/linux-increase-the-maximum-number-of-open-files/

[29] www.php.net/array: http://www.php.net/array

[30] www.cyberciti.biz/faq/mysql-user-creation/: http://www.cyberciti.biz/faq/mysql-user-creation/

[31] www.cyberciti.biz/tips/open-source-project-management-software.html: http://www.cyberciti.biz/tips/open-source-project-management-software.html

[32] www.cyberciti.biz/faq/linux-demilitarized-zone-howto/: http://www.cyberciti.biz/faq/linux-demilitarized-zone-howto/

[33] www.cyberciti.biz/faq/restart-httpd/: http://www.cyberciti.biz/faq/restart-httpd/

[34] www.cyberciti.biz/faq/how-do-i-start-and-stop-nfs-service/: http://www.cyberciti.biz/faq/how-do-i-start-and-stop-nfs-service/

[35] www.cyberciti.biz/tips/linux-laptop.html: http://www.cyberciti.biz/tips/linux-laptop.html

[36] www.cyberciti.biz/faq/centos-fedora-rhel-iptables-open-nfs-server-ports/: http://www.cyberciti.biz/faq/centos-fedora-rhel-iptables-open-nfs-server-ports/

[37] www.cyberciti.biz/faq/linux-install-and-start-apache-httpd/: http://www.cyberciti.biz/faq/linux-install-and-start-apache-httpd/

[38] www.cyberciti.biz/faq/rhel-fedora-centos-linux-temporarily-switchoff-selinux/: http://www.cyberciti.biz/faq/rhel-fedora-centos-linux-temporarily-switchoff-selinux/

[39] www.cyberciti.biz/faq/linux-make-directory-command/: http://www.cyberciti.biz/faq/linux-make-directory-command/

[40] www.cyberciti.biz/faq/howto-disable-httpd-selinux-security-protection/: http://www.cyberciti.biz/faq/howto-disable-httpd-selinux-security-protection/

[41] www.cyberciti.biz/tips/top-linux-monitoring-tools.html: http://www.cyberciti.biz/tips/top-linux-monitoring-tools.html

[42] www.php.net/isset: http://www.php.net/isset

[43] www.cyberciti.biz/tips/linux-iptables-examples.html: http://www.cyberciti.biz/tips/linux-iptables-examples.html

[44] bash.cyberciti.biz/mysql/add-database-username-password-remote-host-access/: http://bash.cyberciti.biz/mysql/add-database-username-password-remote-host-access/

[45] dev.mysql.com/doc/refman/5.5/en/: http://dev.mysql.com/doc/refman/5.5/en/

[46] www.cyberciti.biz/faq/tag/etcfstab/: http://www.cyberciti.biz/faq/tag/etcfstab/

[47] www.cyberciti.biz/faq/fedora-sl-centos-redhat6-enable-epel-repo/: http://www.cyberciti.biz/faq/fedora-sl-centos-redhat6-enable-epel-repo/

[48] www.cyberciti.biz/faq/tag/etcsysconfigmemcached/: http://www.cyberciti.biz/faq/tag/etcsysconfigmemcached/

[49] www.cyberciti.biz/tips/my-10-unix-command-line-mistakes.html: http://www.cyberciti.biz/tips/my-10-unix-command-line-mistakes.html

[50] www.cyberciti.biz/tips/download-email-client-for-linux-mac-osx-windows.html: http://www.cyberciti.biz/tips/download-email-client-for-linux-mac-osx-windows.html

[51] www.cyberciti.biz/tips/how-do-i-enable-remote-access-to-mysql-database-server.html: http://www.cyberciti.biz/tips/how-do-i-enable-remote-access-to-mysql-database-server.html

[52] www.cyberciti.biz/faq/linux-unix-bsd-wordpress-memcached-cache-plugin/: http://www.cyberciti.biz/faq/linux-unix-bsd-wordpress-memcached-cache-plugin/

[53] www.cyberciti.biz/faq/howto-install-memcached-under-rhel-fedora-centos/: http://www.cyberciti.biz/faq/howto-install-memcached-under-rhel-fedora-centos/

[54] www.cyberciti.biz/faq/how-to-install-mysql-under-rhel/: http://www.cyberciti.biz/faq/how-to-install-mysql-under-rhel/

[55] www.cyberciti.biz/tips/unix-linux-bsd-pydf-command-in-colours.html: http://www.cyberciti.biz/tips/unix-linux-bsd-pydf-command-in-colours.html

[56] www.cyberciti.biz/faq/how-to-mount-bind-partitions-filesystems-in-linux/: http://www.cyberciti.biz/faq/how-to-mount-bind-partitions-filesystems-in-linux/

[57] www.cyberciti.biz/faq/rhel-fedora-linux-install-memcached-caching-system-rpm/: http://www.cyberciti.biz/faq/rhel-fedora-linux-install-memcached-caching-system-rpm/

[58] www.phpmyadmin.net/home_page/index.php: http://www.phpmyadmin.net/home_page/index.php

[59] www.cyberciti.biz/faq/stop-lighttpd-server/: http://www.cyberciti.biz/faq/stop-lighttpd-server/

[60] web: http://en.oreilly.com/mysql2011/public/schedule/proceedings

[61] web: http://www.scribd.com/doc/53197944/3/bit-Linux-large-web-BBWC

[62] .ppt: http://assets.en.oreilly.com/1/event/56/MySQL%20and%20Linux%20tuning%20-%20better%20together%20Presentation.ppt

[63] web: http://en.oreilly.com/mysql2011/public/schedule/detail/17160