Рейтинг:0

Туннелирование сервера LEMP через экземпляр оракула с помощью wireguard. Не удается получить сертификаты Nginx Certbot на сервере LEMP. Как отлаживать?

флаг mx

У меня дома есть сервер LEMP с Ubuntu 22.02 и облачный экземпляр Oracle с Ubuntu 20.04. Облачный экземпляр Oracle действует как сервер Wireguard. Домашний сервер LEMP действует как клиент Wireguard и туннелируется через сервер Oracle, чтобы получить IP-адрес, отличный от моего домашнего IP-адреса. Я настроил эту конфигурацию клиента/сервера Wireguard на этот учебник Linuxbabe.com. Клиент wireguard запущен и может успешно выполнить эхо-запрос на сервер Oracle. Сервер LEMP (клиент Wireguard) также успешно разрешается в общедоступный IP-адрес серверов Oracle. Я также установил openresolv на VPN-клиент и bind9 на VPN-сервер, чтобы использовать DNS экземпляра Oracle с сервера LEMP (клиент Wireguard). Мой регистратор доменов указывает DNS на тот же IP-адрес, что и мой сервер Oracle.Теперь я пытаюсь установить просодию на сервер LEMP и не могу получить сертификаты через плагин certbot nginx. Кажется, что что-то блокирует порт 80/443, а сам порт 80/443 не открыт. Когда я запускаю (на моем сервере LEMP) команду:

sudo certbot -v --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d chat.example.com

Я получаю следующий вывод ошибки:

Сохранение журнала отладки в /var/log/letsencrypt/letsencrypt.log
Выбранные плагины: Authenticator nginx, Installer nginx
Запрос сертификата для chat.example.com
Выполнение следующих задач:
вызов http-01 для chat.example.com
Ожидание проверки...
Не удалось выполнить вызов для домена chat.example.com
вызов http-01 для chat.example.com

Certbot не удалось аутентифицировать некоторые домены (аутентификатор: nginx). Центр сертификации сообщил об этих проблемах:
  Домен: chat.example.com
  Тип: соединение
  Подробности: 150.136.56.232: получение http://chat.example.com/.well-known/acme-challenge/GlzBhvxB_hDYefMW48qaHq3I-qc_NArj7VWml54bofM: соединение отклонено

Подсказка: Центру сертификации не удалось проверить временные изменения конфигурации nginx, внесенные Certbot. Убедитесь, что перечисленные домены указывают на этот сервер nginx и что он доступен из Интернета.

Устранение проблем
Некоторые вызовы провалены.
Обратитесь за помощью или найдите решение на https://community.letsencrypt.org. См. файл журнала /var/log/letsencrypt/letsencrypt.log или повторно запустите Certbot с параметром -v для получения дополнительных сведений.

Я использую UFW в качестве брандмауэра, и мой статус UFW на сервере LEMP (клиент VPN):

Статус: активен

     К действию от
     -- ------ ----
[ 1] 22/tcp РАЗРЕШИТЬ В my.local.lan.ip/24
[ 2] 43211/tcp РАЗРЕШИТЬ В my.local.lan.ip/24
[ 3] 5222,5269/tcp РАЗРЕШИТЬ ВХОД В любом месте
[ 4] 80 443/tcp РАЗРЕШИТЬ ВХОД В любом месте
[ 5] 5222,5269/tcp (v6) РАЗРЕШИТЬ ВХОД В любом месте (v6)
[ 6] 80 443/tcp (v6) РАЗРЕШИТЬ ВХОД В любом месте (v6)

Мой статус UFW в экземпляре Oracle Cloud:

Статус: активен

     К действию от
     -- ------ ----
[ 1] Где угодно РАЗРЕШИТЬ 10.10.10.0/24
[ 2] 22/tcp РАЗРЕШИТЬ В my.home.public.ip
[ 3] 22/tcp РАЗРЕШИТЬ В my.work.public.ip
[ 4] 5222,5269/tcp РАЗРЕШИТЬ ВХОД В любом месте
[ 5] 51820/udp РАЗРЕШИТЬ В my.home.public.ip
[ 6] 80 443/tcp РАЗРЕШИТЬ ВХОД В любом месте
[ 7] 5222,5269/tcp (v6) РАЗРЕШИТЬ ВХОД В любом месте (v6)
[ 8] 80 443/tcp (v6) РАЗРЕШИТЬ ВХОД В любом месте (v6)

Порт 51820/udp — мой порт wireguard как для экземпляра Oracle, так и для сервера Lemp. Я также перенаправил свой общедоступный IP-адрес в экземпляре Oracle клиенту VPN, чтобы клиент мог отправлять и получать данные через тот же общедоступный порт, который использует экземпляр Oracle. Ниже мой файл /etc/ufw/before.rules. Модификации переадресации портов, которые я сделал, находятся под комментариями под названием «Linuxbabe...».

#
# правила.перед
#
# Правила, которые должны выполняться перед добавлением правил командной строки ufw. Обычай
# правила должны быть добавлены в одну из этих цепочек:
# ufw-до-ввода
# ufw-перед-выводом
# ufw-до-вперед
#

# Не удаляйте эти обязательные строки, иначе будут ошибки
*фильтр
:ufw-до-ввода - [0:0]
:ufw-до-вывода - [0:0]
:ufw-до-вперед - [0:0]
:ufw-не-местный - [0:0]
# Конец обязательных строк


# разрешить все на петле
-A ufw-перед-вводом -i lo -j ПРИНЯТЬ
-A ufw-перед-выводом -o lo -j ПРИНЯТЬ

# быстро обрабатывать пакеты, для которых у нас уже есть соединение
-A ufw-before-input -m conntrack --ctstate СВЯЗАННО, УСТАНОВЛЕНО -j ПРИНЯТЬ
-A ufw-before-output -m conntrack --ctstate СВЯЗАННО, УСТАНОВЛЕНО -j ПРИНЯТЬ
-A ufw-before-forward -m conntrack --ctstate СВЯЗАННО, УСТАНОВЛЕНО -j ПРИНЯТЬ

# отбрасывать НЕДЕЙСТВИТЕЛЬНЫЕ пакеты (регистрирует их в лог-уровне от среднего и выше)
-A ufw-before-input -m conntrack --ctstate INVALID -j ufw-logging-deny
-A ufw-before-input -m conntrack --ctstate INVALID -j DROP

# ок icmp коды для ВВОДА
-A ufw-перед-вводом -p icmp --icmp-type назначение-недоступно -j ПРИНЯТЬ
-A ufw-перед-вводом -p icmp --icmp-type время-превышено -j ПРИНЯТЬ
-A ufw-перед-вводом -p icmp --icmp-тип проблема-параметра -j ПРИНЯТЬ
-A ufw-before-input -p icmp --icmp-type echo-request -j ПРИНЯТЬ

# ok icmp код для FORWARD
-A ufw-before-forward -p icmp --icmp-type назначение-недоступно -j ПРИНЯТЬ
-A ufw-before-forward -p icmp --icmp-type время-превышено -j ПРИНЯТЬ
-A ufw-before-forward -p icmp --icmp-тип проблема-параметра -j ПРИНЯТЬ
-A ufw-before-forward -p icmp --icmp-type echo-request -j ПРИНЯТЬ

## Учебник по Linuxbabe
# разрешить переадресацию для доверенной сети
-A ufw-before-forward -s 10.10.10.0/24 -j ПРИНЯТЬ
-A ufw-before-forward -d 10.10.10.0/24 -j ПРИНЯТЬ

# разрешить работу dhcp-клиента
-A ufw-перед-вводом -p udp --sport 67 --dport 68 -j ПРИНЯТЬ

#
# ufw-не-локальный
#
-A ufw-перед вводом -j ufw-не-локальный

# если ЛОКАЛЬНЫЙ, ВОЗВРАТ
-A ufw-not-local -m тип_адреса --dst-type МЕСТНЫЙ -j ВОЗВРАТ

# если МНОГОКАСТОВЫЙ, ВОЗВРАТ
-A ufw-not-local -m тип_адреса --dst-type МНОГОКАСТОВЫЙ -j ВОЗВРАТ

# если ТРАНСЛЯЦИЯ, ВОЗВРАТ
-A ufw-not-local -m тип_адреса --dst-type РАССЫЛКА -j ВОЗВРАТ

# все остальные нелокальные пакеты отбрасываются
-A ufw-not-local -m limit --limit 3/мин --limit-burst 10 -j ufw-logging-deny
-A ufw-не-местный -j DROP

# разрешить MULTICAST mDNS для обнаружения службы (убедитесь, что строка MULTICAST выше
# раскомментировано)
-A ufw-перед-вводом -p udp -d 224.0.0.251 --dport 5353 -j ПРИНЯТЬ

# разрешить MULTICAST UPnP для обнаружения службы (убедитесь, что строка MULTICAST выше
# раскомментировано)
-A ufw-до-ввода -p udp -d 239.255.255.250 --dport 1900 -j ПРИНЯТЬ

# не удаляйте строку 'COMMIT', иначе эти правила не будут обработаны
СОВЕРШИТЬ

### Linuxbabe - Учебник UFW
## Правила таблицы NAT
*натуральный
# Предварительная маршрутизация NAT
: ПРЕДВАРИТЕЛЬНОЕ ПРИНЯТИЕ [0:0]
# !http! Перенаправить oracle.server.public.ip (общедоступный IP-адрес сервера) TCP-порт 80 на 10.10.10.2:80 (IP-адрес клиента VPN)
-A PREROUTING -i ens3 -d oracle.server.public.ip -p tcp --dport 80 -j DNAT --назначение 10.10.10.2:80

# !HTTPS! Перенаправить oracle.server.public.ip (общедоступный IP-адрес сервера) TCP-порт 443 на 10.10.10.2:443 (IP-адрес клиента VPN)
-A PREROUTING -i ens3 -d oracle.server.public.ip -p tcp --dport 443 -j DNAT --назначение 10.10.10.2:443

# !ПРОСОДИЯ-5222! Перенаправить oracle.server.public.ip (общедоступный IP-адрес сервера) TCP-порт 5222 на 10.10.10.2:5222 (IP-адрес клиента VPN)
-A ПРЕДВАРИТЕЛЬНАЯ МАРШРУТИЗАЦИЯ -i ens3 -d oracle.server.public.ip -p tcp --dport 5222 -j DNAT --к месту назначения 10.10.10.2:5222

# !ПРОСОДИЯ-5269! Перенаправить oracle.server.public.ip (общедоступный IP-адрес сервера) TCP-порт 5269 на 10.10.10.2:5269 (IP-адрес VPN-клиента)
-A ПРЕДВАРИТЕЛЬНАЯ МАРШРУТИЗАЦИЯ -i ens3 -d oracle.server.public.ip -p tcp --dport 5269 -j DNAT --к месту назначения 10.10.10.2:5269

# !ПРОСОДЫ-БОШ-5280! Перенаправить oracle.server.public.ip (общедоступный IP-адрес сервера) TCP-порт 5280 на 10.10.10.2:5280 (IP-адрес VPN-клиента)
-A ПРЕДВАРИТЕЛЬНАЯ МАРШРУТИЗАЦИЯ -i ens3 -d oracle.server.public.ip -p tcp --dport 5280 -j DNAT --к месту назначения 10.10.10.2:5280

# !ПРОСОДЫ-БОШ-5281! Перенаправить oracle.server.public.ip (общедоступный IP-адрес сервера) TCP-порт 5281 на 10.10.10.2:5281 (IP-адрес VPN-клиента)
-A ПРЕДВАРИТЕЛЬНАЯ МАРШРУТИЗАЦИЯ -i ens3 -d oracle.server.public.ip -p tcp --dport 5281 -j DNAT --к месту назначения 10.10.10.2:5281
СОВЕРШИТЬ

### Linuxbabe - Учебное пособие по Wireguard
# Нат Постмаршрутизация
*натуральный
:ОТПРАВКА ПРИНЯТИЯ [0:0]
-A POSTROUTING -s 10.10.10.0/24 -o ens3 -j MASQUERADE

# Заканчивайте каждую таблицу строкой 'COMMIT', иначе эти правила не будут обработаны
СОВЕРШИТЬ

Мой /etc/nginx/nginx.conf файл на сервере LEMP (клиент wireguard) выглядит так:

#пользователь nginx;
www-данные пользователя;
рабочие_процессы авто;

error_log /var/log/nginx/error.log уведомление;
pid /var/run/nginx.pid;


События {
    worker_connections 1024;
}


http {
    включить /etc/nginx/mime.types;
    default_type application/octet-stream;

    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                      '$статус $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    журнал_доступа /var/log/nginx/access.log основной;

    отправить файл включен;
    #tcp_npush включен;

    keepalive_timeout 65;

    #gzip включен;

    включить /etc/nginx/conf.d/*.conf;
}

Мой /etc/nginx/conf.d/prosody.conf файл на сервере LEMP (VPN-клиент) выглядит так:

сервер {
      слушать 80;
      слушать [::]:80;
      имя_сервера chat.example.com;

      корень /var/www/просодия/;

      местоположение ~ /.well-known/acme-challenge {
         позволять все;
      }
}

Наконец, я включил IP-переадресацию на сервере Oracle, раскомментировав строку net.ipv4.ip_forward = 1 в /etc/sysctl.conf.

После всего этого мой сервер LEMP, похоже, успешно использует туннель VPN-сервера экземпляра Oracle, ОДНАКО, он все еще не может получить сертификаты от cerbot с помощью файла конфигурации prosody.conf nginx. Насколько я могу судить, со всеми исследованиями, которые я провел, эта настройка (наиболее важно правила переадресации VPN в before.rules) должна успешно позволить моему серверу LEMP получать сертификаты с использованием IP-адреса экземпляра Oracle. НО ТАК НЕ ДЕЛАЕТ!

Итак, мой вопрос: что я должен сделать, чтобы отладить это, что блокирует порт 80/443 моих серверов LEMP, и что я должен сделать, чтобы успешно получить сертификаты certbot для просодии, используя общедоступный IP-адрес моего экземпляра Oracle?

Ответить или комментировать

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