artem
18.11.2016
7080

Настройка виртуальных хостов в Apache

Периодически возникает необходимость предоставить доступ определённым адресам и/или подсетям к определённым web-сервисам. Можно достигнуть этого с помощью директив Allow и Deny, но защита будет более надёжной, если разделить web-сервисы по виртуальным хостам, доступным по разным портам, а доступ к этим портам ограничить с помощью iptables. В этом случае, хост, для которого запрещён доступ к порту виртуального хоста, вообще не сможет установить соединение с Apache при попытке доступа к этому виртуальному хосту.

Для примера возьмём два web-сервиса, типичных для сервера телефонии на базе Asterisk — FreePBX и FOP2. Доступ к FreePBX должен быть открыт только для подсети администраторов (192.168.127.0/24), доступ к FOP2 должен быть открыт для подсети администраторов и подсети колл-центра (192.168.10.0/24).

Приведённые настройки верны для CentOS 6.

Базовая настройка виртуальных хостов
Web-директория FreePBX — /var/www/html/admin, web-директория FOP2 — /var/www/html/fop2, FreePBX будет доступен по порту 8081, FOP2 будет доступен по порту 8082. Для базовой настройки виртуальных хостов, внесите следующие настройки в какой-либо файл в директории /etc/httpd/conf.d (например /etc/httpd/conf.d.virtual_hosts.conf).

Listen 8081
<VirtualHost *:8081>
DocumentRoot /var/www/html/admin
<Directory /var/www/html/admin>
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
ExpiresActive on
ExpiresByType image/png «access plus 1 year»
ExpiresByType image/gif «access plus 1 year»
ExpiresByType image/jpg «access plus 1 year»
ExpiresByType css/text «access plus 1 year»
SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png|rar|zip|pdf)$ no-gzip dont-v
</Directory>
</VirtualHost>
Listen 8082
<VirtualHost *:8082>
DocumentRoot /var/www/html/fop2
<Directory /var/www/html/fop2>
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
ExpiresActive on
ExpiresByType image/png «access plus 1 year»
ExpiresByType image/gif «access plus 1 year»
ExpiresByType image/jpg «access plus 1 year»
ExpiresByType css/text «access plus 1 year»
SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png|rar|zip|pdf)$ no-gzip dont-v
</Directory>
</VirtualHost>

Основные директивы Apache, использованные в указанных настройках:
Listen [<адрес>:]<номер_порта> — Apache будет слушать на указанном порту, можно указывать эту директиву несколько раз, чтобы Apache слушал на нескольких портах. Также можно указать адрес вместе с портом, тогда Apache будет слушать только на указанном адресе.
<VirtualHost <адрес>[:<порт>]> — все директивы между дирекстивами <VirtualHost <адрес>[:<порт>]> и </VirtualHost> будут распространяться только на виртуальный хост, доступный по указанному адресу и порту. Если критерием является только порт, а адрес может быть любым (как в нашем случае), вместо адреса можно указать «*».
DocumentRoot — корневая директория виртуального хоста.
Все директивы, указанные для корневых директорий виртуального хоста, являются рекомендуемыми значениями и не влияют на данную схему настройки виртуальных хостов, Вы можете найти описание этих директив в официальной документации Apache.

Здесь и далее, после внесения изменений применяем настройки Apache

service httpd reload

Теперь можно разграничить доступ к виртуальным хостам с помощью iptables:

iptables -A INPUT -p tcp —dport 8081 -s 192.168.127.0/24 -j ACCEPT
iptables -A INPUT -p tcp —dport 8082 -s 192.168.127.0/24 -j ACCEPT
iptables -A INPUT -p tcp —dport 8082 -s 192.168.10.0/24 -j ACCEPT

Добавление HTTP-аутентификации к виртуальному хосту
В FreePBX периодически обнаруживаются критические уязвимости, поэтому закрытие FreePBX HTTP-аутентификацей — рекомендуемая мера по усилению безопасности сервера телефонии. Можно просто закрыть FreePBX HTTP-аутентификацией (тогда нужно будет дополнительно аутентифицироваться в FreePBX после прохождения HTTP-аутентификации), также можно заменить аутентификацию FreePBX HTTP-аутентификацией, т.к. FreePBX поддерживает аутентификацию средствами web-сервера. Для HTTP-аутентификации можно использовать учётные записи FreePBX, логины и SHA1-хэши паролей FreePBX находятся в таблице ampusers.
Для добавления HTTP-аутентификации к виртуальному хосту FreePBX, приведите его настройки к следующему виду:

Listen 8081
<VirtualHost *:8081>
DocumentRoot /var/www/html/admin
<Directory /var/www/html/admin>
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
AuthType Basic
AuthName ‘Who goes there’
AuthMySQLEnable On
AuthMySQLHost localhost
AuthMySQLDB asterisk
AuthMySQLUserTable ampusers
AuthMySQLUser freepbxuser
AuthMySQLPassword freepbx_db_password
AuthMySQLNameField username
AuthMySQLPasswordField password_sha1
AuthMySQLAuthoritative On
AuthMySQLPwEncryption sha1
Require valid-user
Satisfy all
ExpiresActive on
ExpiresByType image/png «access plus 1 year»
ExpiresByType image/gif «access plus 1 year»
ExpiresByType image/jpg «access plus 1 year»
ExpiresByType css/text «access plus 1 year»
SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png|rar|zip|pdf)$ no-gzip dont-v
</Directory>
</VirtualHost>

AuthMySQLDB — имя базы данных FreePBX
AuthMySQLUser — имя пользователя для доступа к БД FreePBX
AuthMySQLPassword — пароль для доступа к БД FreePBX (имя пользователя и пароль для доступа к БД FreePBX можно взять из файла /etc/freepbx.conf или из файла /etc/amportal.conf)
Для того, чтобы FreePBX использовал аутентификацию web-сервера и не запрашивал сам дополнительную аутентификацию, нужно указать значение webserver для параметра AUTHTYPE в файле /etc/amportal.conf и в таблице freepbx_settings (по умолчанию в обоих местах стоит значение database). Запрос к БД для изменения типа аутентификации FreePBX будет выглядеть так:
UPDATE ‘freepbx_settings’ SET ‘value’=’database’ WHERE ‘keyword’=’AUTHTYPE’;

Добавление SSL к виртуальному хосту
В завершение статьи, зашифруем подключение к web-интерфейсу FreePBX, чтобы пароли, передаваемые в открытом виде, нельзя было получить сниффером (Digest-аутентификация — тема для отдельной статьи).
Добавляем настройки SSL к виртуальному хосту:

Listen 8081
<VirtualHost *:8081>
ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
LogLevel warn
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:!aNULL:!eNULL:!LOW:RC4+RSA:+HIGH:+MEDIUM
SSLCertificateFile /etc/pki/tls/certs/pbx.example.com.pem
SSLCertificateKeyFile /etc/pki/tls/private/pbx.example.com.key
SSLCertificateChainFile /etc/pki/tls/certs/pbx.example.com_ca.pem
<Files ~ «.(cgi|shtml|phtml|php3?)$»>
SSLOptions +StdEnvVars
</Files>
<Directory «/var/www/cgi-bin»>
SSLOptions +StdEnvVars
</Directory>
SetEnvIf User-Agent «.*MSIE.*»
nokeepalive ssl-unclean-shutdown
downgrade-1.0 force-response-1.0
CustomLog logs/ssl_request_log
«%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x «%r» %b»
DocumentRoot /var/www/html/admin
<Directory /var/www/html/admin>
Options FollowSymLinks
AllowOverride None
SSLOptions +StrictRequire
SSLRequireSSL
Order allow,deny
Allow from all
AuthType Basic
AuthName ‘Who goes there’
AuthMySQLEnable On
AuthMySQLHost localhost
AuthMySQLDB asterisk
AuthMySQLUserTable ampusers
AuthMySQLUser freepbxuser
AuthMySQLPassword freepbx_db_password
AuthMySQLNameField username
AuthMySQLPasswordField password_sha1
AuthMySQLAuthoritative On
AuthMySQLPwEncryption sha1
Require valid-user
Satisfy all
ExpiresActive on
ExpiresByType image/png «access plus 1 year»
ExpiresByType image/gif «access plus 1 year»
ExpiresByType image/jpg «access plus 1 year»
ExpiresByType css/text «access plus 1 year»
SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png|rar|zip|pdf)$ no-gzip dont-v
</Directory>
</VirtualHost>

Большая часть настроек SSL взята из файла /etc/httpd/conf.d/ssl.conf, файл входит в состав пакета mod_ssl.
SSLCertificateFile, SSLCertificateKeyFile, SSLCertificateChainFile — укажите в этих параметрах пути к сертификату, закрытому ключу и сертификату центра сертификации.
В корень виртуального хоста добавлены опции «SSLOptions +StrictRequire» и «SSLRequireSSL», эти опции запрещают подключение без использования SSL.

Телефонная книга CallMetrix
Корпоративный телефонный справочник для удобной связи между сотрудниками организации
Скачать описание CallMetrix
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

Остались вопросы?

Я - Кондрашин Игорь, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

VoIP оборудование


ближайшие курсы

10 доводов в пользу Asterisk

Распространяется бесплатно.

Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.

Безопасен в использовании.

Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.

Надежен в эксплуатации.

Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.

Гибкий в настройке.

Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.

Имеет огромный функционал.

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

Интегрируется с любыми системами.

То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.

Позволяет телефонизировать офис за считанные часы.

В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.

Отличная масштабируемость.

Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.

Повышает управляемость бизнеса.

Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.

Снижает расходы на связь.

Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.