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

в 12:12, , рубрики: CentOS, lamp, nginx, Веб-разработка, Серверная оптимизация, Серверное администрирование

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

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

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

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

Настройка DNS

Убедитесь, что и www.example.com и 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)

/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 читайте соответствующем faq.

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

Смотрите дополнительно пост «Топ-20 практик безопасности веб-сервера NGinx». Так же, в качестве доп.материалов о настройках 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
www.cyberciti.biz/faq/mysql-user-creation/
www.cyberciti.biz/tips/open-source-project-management-software.html
www.cyberciti.biz/faq/linux-demilitarized-zone-howto/
www.cyberciti.biz/faq/restart-httpd/
www.cyberciti.biz/faq/how-do-i-start-and-stop-nfs-service/
www.cyberciti.biz/faq/rhel-centos-fedora-keepalived-lvs-cluster-configuration/
www.cyberciti.biz/tips/linux-laptop.html
www.cyberciti.biz/faq/centos-fedora-rhel-iptables-open-nfs-server-ports/
www.cyberciti.biz/faq/linux-install-and-start-apache-httpd/
www.cyberciti.biz/faq/rhel-fedora-centos-linux-temporarily-switchoff-selinux/
www.cyberciti.biz/faq/linux-make-directory-command/
www.cyberciti.biz/faq/howto-disable-httpd-selinux-security-protection/
www.cyberciti.biz/tips/top-linux-monitoring-tools.html
www.php.net/isset
www.cyberciti.biz/tips/linux-iptables-examples.html
bash.cyberciti.biz/mysql/add-database-username-password-remote-host-access/
dev.mysql.com/doc/refman/5.5/en/
www.cyberciti.biz/faq/tag/etcfstab/
www.cyberciti.biz/faq/fedora-sl-centos-redhat6-enable-epel-repo/
www.cyberciti.biz/faq/tag/etcsysconfigmemcached/
www.cyberciti.biz/tips/my-10-unix-command-line-mistakes.html
www.cyberciti.biz/tips/download-email-client-for-linux-mac-osx-windows.html
www.cyberciti.biz/faq/linux-kernel-etcsysctl-conf-security-hardening/
www.cyberciti.biz/tips/how-do-i-enable-remote-access-to-mysql-database-server.html
www.cyberciti.biz/faq/linux-unix-bsd-wordpress-memcached-cache-plugin/
www.cyberciti.biz/faq/howto-install-memcached-under-rhel-fedora-centos/
www.cyberciti.biz/tips/tips-to-protect-linux-servers-physical-console-access.html
www.cyberciti.biz/faq/how-to-install-mysql-under-rhel/
www.cyberciti.biz/tips/unix-linux-bsd-pydf-command-in-colours.html
www.cyberciti.biz/faq/howto-linux-unix-setup-nginx-ssl-proxy/
www.cyberciti.biz/faq/how-to-mount-bind-partitions-filesystems-in-linux/
www.cyberciti.biz/faq/rhel-fedora-linux-install-memcached-caching-system-rpm/
www.phpmyadmin.net/home_page/index.php
www.cyberciti.biz/faq/rhel-fedorta-linux-iptables-firewall-configuration-tutorial/
www.cyberciti.biz/faq/stop-lighttpd-server/

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

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

  • Linux and H/W optimizations — Yoshinori Matsunobu web
  • MySQL and Linux Tuning — Better Together .ppt web

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

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

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

Автор: danielnewman

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js