Linux Apache: порты и HTTPS
Всех категорически приветствую!
Сегодня назначаем Apache порты для прослушки, создаем защищенные хосты (HTTPS) и перенаправляем запросы с HTTP на HTTPS.
Краткий обзор по настройке Apache был в предыдущей статье (в ней разбирались виртуальные хосты).
Порты в Apache.
Иногда возникают ситуации, когда необходимо, чтобы различные сайты висели на разных портах. Например, хочется, чтобы основной сайт открывался на порту 80, а какая-нибудь web-морда управления системой умного дома – на порту 48080. По умолчанию Apache принимает соединения на порты 80 (http) и 443 (https) (слушает эти порты), поэтому для первого случая ничего делать не нужно, а вот со вторым сейчас разберемся.
Чтобы заставить Apache слушать дополнительные порты, а виртуальные хосты принимать соединения с этих портов, требуется подправить два конфига.
1) Открываем и правим файлик «/etc/apache2/ports.conf», добавив в него строку «Listen 48080», тем самым разрешив Apache слушать дополнительный порт:
2) Открываем и правим конфиг виртуального хоста «/etc/apache2/sites-available/имя_конфига.conf», изменив в нем номер порта, с которого нужно принимать соединения:
Перезапускаем конфиги Apacche:
Что и требовалось получить.
Поскольку у нашего сервера всего один IP-адрес, то обратиться к этому сайту можно с любого доменного имени, привязанного к данному IP, указав в конце номер порта после двоеточия.
Если мы деактивируем виртуальный хост с назначенным портом 48080, то при попытке обращения к нему будем отправлены на дефолтный сайт web-сервера.
HTTPS (SSL/TLS)
HTTPS – тот же гипертекстовый протокол, но использующий защищенную схему передачи данных между сервером и клиентом (браузером, к примеру).
Если у вас есть сайт, на котором просто имеется какая-то шир.потребная информация и пара фоток красивых берёзок, то вам будет достаточно обычного HTTP, поскольку «угонять» у вас особо нечего. Но, как только в игру вступает обмен какими-либо ценными данными (логины, пароли, данные банковских карт, документы, интимные фотки и т.д.), то тут уже пригодится HTTPS.
Смысл HTTPS в том, что он использует для установления сессии протокол SSL/TLS (SSL уже подустарел), а последний, в свою очередь, использует сертификаты и ключи (как самозаверенные, так и заверенные в глобальных центрах сертификации) для шифрования данных. Зашифрованные с использованием ключей данные достаточно сложно раскрыть, даже если они и будут перехвачены в великой глобальной сетке (время и сложность расшифровки будет зависеть от битности ключа – выше битность – сложнее сломать, но и тяжелее переваривать самой системе).
Что касается сертификатов. Как я уже сказал, есть самозаверенные (или самоподписанные) «самопалы» и сертификаты, заверенные в доверенных центрах сертификации (так скажем, «официальные» сертификаты). Чем они отличаются друг от друга?
Первое отличие в том, что «самопал» (созданный вами и подписанный самостоятельно на сервере, например) не будет являться доверенным, поскольку отсутствует в базах данных браузеров и сертификационных центров, а это значит, что никто не может гарантировать его подлинность. Иными словами, встает вопрос верификации. «Самопалы» проверить нигде невозможно, и поэтому существует гипотетическая возможность напороться на MITM-атаку. Посему, такие сертификаты лучше использовать только в личных целях без привлечения широкой аудитории, использующей на сайте персональные данные.
Что касаемо центров сертификации, то оные являются третьей доверенной стороной, у которой можно независимо верифицировать сертификат и удостовериться в безопасности обмена данными.
Используя «самопал» в браузере вы получите вот такую картину:
Соединение будет условно защищенным и браузер не будет ему доверять несмотря на наличие сертификата, поскольку уровень защиты «самопалов» на порядок ниже.
Нет, параноить не стоит, поскольку визит на такой сайт не означает, что вас тут же «нахлобучат», но нужно иметь ввиду, что защита тут не на высшем уровне, и анализировать, что, куда и для чего вводите.
С сертификатами, полученными в доверенном центре безопасности, таких проблем нет. Они имеются в сертификационных базах данных и вопросов не вызывают.
Но, в обоих случаях соединения будут считаться защищенными, о чем свидетельствует закрытый замок в адресной строке браузера:
Второе отличие самозаверенных сертификатов от «официальных» в том, что последние стоят денег. На момент написания статьи самый простой «официальный» SSL-сертификат для физ.лица стоил порядка 1100 рублей за год.
Если вы пользуетесь услугами хостеров, то имейте ввиду, что иногда они раздают простенькие сертификаты в качестве бонусов.
HTTPS в Apache
Итак, ближе к нашей песочнице.
Базовый пакет Apache уже содержит в себе джентльменский набор для работы с HTTPS, нужно только довести его до ума и заточить под свои нужды.
Генерация самоподписных сертификатов и ключей – тема отдельная и ее мы рассмотрим позже. Сейчас будем использовать пока то, что «из коробки» дает нам Apache.
- Сайт с доменным именем test-site2.ru
- Получить рабочий https ://test-site2.ru
Первым делом нужно активировать модуль поддержки SSL в Apache и полностью его (apache) рестартануть:
Далее копируем файл дефолтного SSL-конфига хоста, обозвав его понятным нам образом:
#> cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/site2ru-ssl.conf
Теперь подкрутим этот конфиг («/etc/apache2/sites-available/site2ru-ssl.conf») под себя:
(посмотреть листинг рабочего файла конфига можно на моем сайте: site2ru-ssl.conf )
- Прописываем алиасы, путь к корневой директории хоста и директорию (тоже корневую, в моем случае), к которой будут применяться дополнительные правила (.htaccess):
Как поменять порт WEB-сервера Apache
Apache (сейчас Apache 2) до сих пор является WEB-сервером по умолчанию и большинство хостингов ставит его единственным HTTP-сервером. Однако, с появлением NGiNX ситуация поменялась, и на 80-м порту предполагается наличие более шустрого NGiNX тогда, как более навороченный Apache ставится уже за ним с тем, чтобы обрабатывать сложные запросы по сборке динамических страниц «на лету». А вся статика (типа картинок, JavaScript и CSS-файлов) отдаётся быстро и сразу NGiNX’ом. Так как порт 80 для всех браузеров до сих пор остался портом для http-запросов, то на этом порту на сервере должен стоять NGiNX, а Apache, как правило, вешается на дополнительный для http порт 8080. В этой статье рассмотрим, как поменять настройки Apache на сервере так, чтобы он отвечал с порта 8080, освободив 80-й порт для NGiNX.
ports.conf — основной файл конфигурации портов WEB-сервера Apache
В предыдущей статье было подробно разобрано, как найти директорию на сервере с файлами конфигурации Apache на удалённом сервере. В этой же директории должен располагаться файл ports.conf , в котором прописаны порты, с которыми работает Apache.
Содержимое файла ports.conf по умолчанию
Файл ports.conf имеет следующее содержимое сразу после установки Apache на сервер:
Как видим, Апач действительно слушает 80-й порт при http-запросе, а при https-запросе — порт 443.
Меняем http-порт 80 Apache на 8080
Для того, чтобы Apache перестал занимать 80-й порт, а стал отвечать с 8080-порта,
- в файле ports.conf нужно
- поменять строку Listen 80
- на строку Listen 8080
- перезапустить Apache командой
- apachectl -k restart
Проверяем смену http-порта Apache на 8080
Если раньше сайт отвечал на запрос в браузере:
то после описанных выше манипуляций, сайт по этому запросу становится недоступным. Для того, чтобы увидеть сайт, нужно обратиться к порту 8080 на сервере, указав это в явном виде в строке запроса браузера:
Резюме
Таким образом можно освободить 80-й порт, перепрописав его для Apache на порт 8080.
Если на сервере несколько сайтов, то для каждого виртуального хоста в папке /etc/apache2/sites-available нужно прописать порт 8080 вместо 80:
И, конечно, перезагрузить Апач.
Если NGiNX ещё не установлен, остановим Apache командой
Перед перезагрузкой Апача полезно проверять на косячность правок его конфигов командой apachectl stop . Включим после того, как установим NGiNX.
Так должна выглядеть проверка синтаксиса конфигурации Apache.
После этого можно перезагрузить NGiNX и убедиться в правильности работы обоих серверов на портах 80 и 8080 (читать по → этой ссылке).
Как изменить порт Apache
HTTP сервер Apache – один из наиболее часто используемых веб-серверов в интернете на сегодняшний день. По своим характеристикам и многофункциональности он превосходит своих конкурентов (таких, как Nginx).
Одной из наиболее значимых функций Apache является возможность загружать и запускать различные типы модулей и конфигураций, не останавливая работу веб-сервера. Кроме того, не нужно каждый раз перекомпилировать сервер, добавляя в него новые модули. Важную роль играют .htaccess файлы, которые могут изменять конфигурации веб-сервера в определенных каталогах. В этой статье мы рассмотрим как изменить порт apache в Ubuntu и CentOS.
Как изменить порт Apache
Сервер Apache по умолчанию настроен на ожидание входящих соединений через порт 80. Если настроить протокол TLS, сервер будет слушать соединения через порт 443. Для использования других портов, необходимо подправить конфигурационный файл Apache.
В системе Debian/Ubuntu, требуется изменить файл конфигурации /etc/apache2/ports.conf, а в дистрибутивах на основе RHEL/CentOS — /etc/httpd/conf/httpd.conf. В зависимости от дистрибутива системы, откройте нужный файл с помощью текстового редактора и добавьте новый порт следующим образом:
sudo nano /etc/apache2/ports.conf
sudo nano /etc/httpd/conf/httpd.conf
В этом примере мы настроим HTTP сервер Apache для ожидания подключений на порту 8081. Убедитесь, что после директивы Listen 80, дающей указание серверу прослушивать порт 80, была добавлена следующая строка:
После того, как вы добавили приведенную выше строку, вам нужно создать или изменить виртуальные хосты Apache, чтобы привязать хост к нужному порту. В приведенном ниже примере мы изменим порт Apache для стандартного виртуального хоста веб-сервера с 80 на 8081.
Нужно открыть и отредактировать файл /etc/apache2/sites-enabled/000-default.conf, указав порт 8081, как показано на картинке ниже.
sudo nano /etc/apache2/sites-enabled/000-default.conf
Чтобы применить изменения и новые порты Apache стали доступны, перезапустите сервис. После перезапуска порт 8081 должен отображаться в выводе утилиты ss или netstat. Команды для Ubuntu:
sudo systemctl restart apache2
sudo netstat -tlpn | grep apache
sudo ss -tlpn | grep apache
sudo systemctl restart httpd
sudo netstat -tlpn | grep httpd
sudo ss -tlpn | grep httpd
Настройка портов apache завершена. Теперь вы можете открыть браузер и зайти на веб-сервер, введя доменное имя или IP-адрес и порт 8081. Страница Apache должна отобразиться в браузере. Однако, если вы не можете просмотреть веб-страницу, вернитесь на консоль сервера и убедитесь, что правила брандмауэра установлены верно для разрешения сетевого трафика по данному порту:
Если у вас включен SELinux в CentOS или RHEL установите пакет policycoreutils, чтобы добавить необходимые правила. А потом перезапустите Apache для применения изменений.
sudo yum install policycoreutils
Чтобы открыть порт Apache 8081 добавьте правила SELinux.
sudo semanage port -a -t http_port_t -p tcp 8081
sudo semanage port -m -t http_port_t -p tcp 8081
sudo systemctl restart httpd
Откройте браузер и попытайтесь перейти на ваш сервер по IP-адресу или доменному имени через порт 8081. Убедитесь в работоспособности порта. В браузере должна отобразиться страница Apache.
Если вы вcё ещё не можете получить доступ к данному адресу убедитесь, что этот порт разрешен в брандмауэре вашего сервера.