Вопрос или проблема
Я пытаюсь возродить свой веб-сервер Apache2 на Ubuntu 22.04 Jammy и проверил практически все, но Apache2 не принимает трафик из Интернета на порты 80 (или 443), хотя отвечает на трафик с localhost на портах 80 (и 443).
Вот два примера проблемы:
С localhost:
user@webserver:~$ telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
HEAD http://www.webserver.com/ HTTP/1.0
HTTP/1.1 200 OK
Date: Thu, 09 Jan 2025 12:38:25 GMT
Server: Apache/2.4.52 (Ubuntu)
Last-Modified: Fri, 17 Jun 2011 03:27:18 GMT
ETag: "2d-4a5dff6791e3b"
Accept-Ranges: bytes
Content-Length: 45
Connection: close
Content-Type: text/html
Connection closed by foreign host.
С другого настольного ПК в интернете:
user@desktop:~$ telnet www.webserver.com 80
Trying 1.1.1.1...
Connected to webserver.com.
Escape character is '^]'.
HEAD http://www.webserver.com/ HTTP/1.0
Connection closed by foreign host.
(Я удалил информацию о пользователе, FQDN и IP-адресах.)
Я явно подключаюсь по telnet, telnet явно соединяется (так что, похоже, нет проблем с блокировкой портов или брандмауэром), но веб-сервер просто не слушает на интернет-соединении, пока слушает на localhost.
Я могу отредактировать этот пост, чтобы включить любые соответствующие файлы конфигурации.
РЕДАКТИРОВАНИЕ 1:
Сервер подключен по Ethernet к маршрутизатору Spectrum; проводное соединение маршрутизатора помещено в DMZ. Я могу подключаться к серверу по SSH через терминал Ubuntu на настольном ПК через порт 22, подключаться к серверу по SFTP с помощью Filezilla на настольном ПК через порт 22 и подключаться к серверу по VNC с настольного ПК с помощью TigerVNC на сервере и Remmina на настольном ПК через порты 5901-5903. Возможно, Spectrum блокирует трафик на портах 80 и 443, но не на других портах?
user@webserver:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 10:78:d2:cd:4a:5a brd ff:ff:ff:ff:ff:ff
altname eno1
altname enp0s25
inet 192.168.1.15/24 brd 192.168.1.255 scope global dynamic noprefixroute eth0
valid_lft 23450sec preferred_lft 23450sec
inet6 2603:6000:b100:1d5::1760/128 scope global dynamic noprefixroute
valid_lft 585050sec preferred_lft 585050sec
inet6 2603:6000:b100:1d5:c6a5:4683:2f99:cc23/64 scope global temporary dynamic
valid_lft 585050sec preferred_lft 66588sec
inet6 2603:6000:b100:1d5:1278:d2ff:fecd:4a5a/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 604769sec preferred_lft 604769sec
inet6 fe80::1278:d2ff:fecd:4a5a/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 68:a3:c4:43:a6:b7 brd ff:ff:ff:ff:ff:ff
altname wlp2s0
4: gpd0: <POINTOPOINT,MULTICAST,NOARP> mtu 1500 qdisc noop state DOWN group default qlen 500
link/none
Любая помощь будет оценена.
РЕДАКТИРОВАНИЕ 2: Я думал, что сервер находится в DMZ, но я вошел в приложение Spectrum на своем телефоне, посмотрел настройки маршрутизатора и, о чудо, он не был в DMZ, а вместо этого имел исключения в брандмауэре для портов 22 и 5901-5605. Я добавил исключения для портов 80 и 443 и, voilà!, я могу получить доступ к веб-страницам с настольного ПК на портах 80 и (принимая самоподписанный сертификат) на порте 443.
Большое спасибо за всю вашу помощь!
Ответ или решение
Решение проблемы доступа Apache2 на Ubuntu 22.04 с интернета на порты 80 и 443
Если ваш локальный сервер Apache2 на Ubuntu 22.04 работает корректно, но недоступен через интернет на стандартных портах 80 и 443, это может быть обусловлено рядом причин. Давайте рассмотрим, как можно решить эту проблему, следуя шагам.
-
Проверка конфигурации Apache и сетевого интерфейса
Убедитесь, что Apache настроен прослушивать все сетевые интерфейсы. Для этого откройте конфигурационный файл Apache, расположенный в/etc/apache2/ports.conf
. Проверьте наличие строки:Listen 80 Listen 443
Это гарантирует, что сервер слушает на всех доступных интерфейсах.
-
Неправильные настройки файрвола на сервере или маршрутизаторе
Проверьте настройки файрвола на сервере. Используйте командуufw status
для анализа текущих правил. Убедитесь, что порты 80 и 443 разрешены:sudo ufw allow 80/tcp sudo ufw allow 443/tcp
Затем, проверьте маршрутизатор для настройки перенаправления портов или DMZ. Как видно из вашего случая, отсутствие правильных настроек в маршрутизаторе Spectrum приводило к блокировке доступа.
-
Проверка публичного адреса и маршрутизации
Убедитесь, что ваш сервер имеет корректный внешний IP-адрес и DNS-настройки. Для проверки текущего IP-адреса вы можете использовать сервисы, такие какcurl ifconfig.me
. -
Тестирование подключения
После выполнения изменений попробуйте снова соединиться с вашего компьютера в интернет-сети, используяtelnet
илиcurl
, чтобы убедиться в успешности соединения. -
Отладка через логи
Если проблема сохраняется, проверьте логи Apache для детального анализа ошибок. Логи расположены в/var/log/apache2/error.log
. Они могут дать более ясное представление о возможных проблемах с конфигурацией или доступом. -
Дополнительные меры безопасности
Для онлайн-доступа всегда следует учитывать безопасность. Убедитесь в использовании корректных SSL/HTTPS настроек и рассматривайте обновление самоподписанного сертификата на доверенный.
В заключение
Если все описанные шаги выполнены корректно, ваш сервер должен быть доступен из интернета по HTTP и HTTPS. Внимание к деталям и тщательная проверка настроек – ключевые факторы успешного решения подобных проблем. Надеюсь, данное руководство помогает в улучшении доступности вашего веб-сервера Apache.