Не удалось выполнить загрузку (/tmp/add-cloudflare-ips)

Привет!

Я получаю эту ошибку при попытке пересборки:

FAILED
--------------------
Pups::ExecError: /tmp/add-cloudflare-ips завершился с кодом возврата #<Process::Status: pid 1484 exit 8>
Место ошибки: /usr/local/lib/ruby/gems/2.7.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
Выполнение команды не удалось с параметрами "/tmp/add-cloudflare-ips"
9fe8337bb7b8e64abb480bd2527551585759e48df340dc74bb84c67bdf1ee6b2
** НЕ УДАЛОСЬ ЗАПУСТИТЬ ** пожалуйста, прокрутите вверх и поищите сообщения об ошибках, возникших ранее, их может быть несколько.
./discourse-doctor может помочь в диагностике проблемы.

Эта ошибка возникает, когда я включаю и выключаю прокси (оранжевое облако) в CloudFlare :frowning:

Можете прокрутить вверх и показать вывод выше, где команда /tmp/add-cloudflare-ips завершается ошибкой?

CSS скомпилировано: 2022-03-22 16:54:37 UTC
I, [2022-03-22T16:54:37.832057 #1]  INFO -- : Загрузка MaxMindDB...
Сжатие Javascript и генерация исходных карт

I, [2022-03-22T16:54:37.874506 #1]  INFO -- : Файл > /usr/local/bin/discourse  chmod: +x  chown:
I, [2022-03-22T16:54:37.880784 #1]  INFO -- : Файл > /usr/local/bin/rails  chmod: +x  chown:
I, [2022-03-22T16:54:37.887872 #1]  INFO -- : Файл > /usr/local/bin/rake  chmod: +x  chown:
I, [2022-03-22T16:54:37.894248 #1]  INFO -- : Файл > /usr/local/bin/rbtrace  chmod: +x  chown:
I, [2022-03-22T16:54:37.900136 #1]  INFO -- : Файл > /usr/local/bin/stackprof  chmod: +x  chown:
I, [2022-03-22T16:54:37.907873 #1]  INFO -- : Файл > /etc/update-motd.d/10-web  chmod: +x  chown:
I, [2022-03-22T16:54:37.912825 #1]  INFO -- : Файл > /etc/logrotate.d/rails  chmod:   chown:
I, [2022-03-22T16:54:37.917132 #1]  INFO -- : Файл > /etc/logrotate.d/nginx  chmod:   chown:
I, [2022-03-22T16:54:37.924129 #1]  INFO -- : Файл > /etc/runit/1.d/00-ensure-links  chmod: +x  chown:
I, [2022-03-22T16:54:37.930083 #1]  INFO -- : Файл > /etc/runit/1.d/01-cleanup-web-pids  chmod: +x  chown:
I, [2022-03-22T16:54:37.936780 #1]  INFO -- : Файл > /root/.bash_profile  chmod: 644  chown:
I, [2022-03-22T16:54:37.941664 #1]  INFO -- : Файл > /usr/local/etc/ImageMagick-7/policy.xml  chmod:   chown:
I, [2022-03-22T16:54:37.949303 #1]  INFO -- : Замена (?-mix:server.+{) на limit_req_zone $binary_remote_addr zone=flood:10m rate=$reqs_per_secondr/s;
limit_req_zone $binary_remote_addr zone=bot:10m rate=$reqs_per_minuter/m;
limit_req_status 429;
limit_conn_zone $binary_remote_addr zone=connperip:10m;
limit_conn_status 429;
server {
 в /etc/nginx/conf.d/discourse.conf
I, [2022-03-22T16:54:37.952599 #1]  INFO -- : Замена (?-mix:location @discourse {) на location @discourse {
  limit_conn connperip $conn_per_ip;
  limit_req zone=flood burst=$burst_per_second nodelay;
  limit_req zone=bot burst=$burst_per_minute nodelay; в /etc/nginx/conf.d/discourse.conf
I, [2022-03-22T16:54:37.960935 #1]  INFO -- : Файл > /tmp/add-cloudflare-ips  chmod: +x  chown:
I, [2022-03-22T16:54:37.961856 #1]  INFO -- : > /tmp/add-cloudflare-ips
--2022-03-22 16:54:37--  https://www.cloudflare.com/ips-v4/
Разрешение www.cloudflare.com (www.cloudflare.com)... 104.16.124.96, 104.16.123.96, 2606:4700::6810:7c60, ...
Подключение к www.cloudflare.com (www.cloudflare.com)|104.16.124.96|:443... установлено.
HTTP-запрос отправлен, ожидание ответа... 403 Forbidden
2022-03-22 16:54:38 ОШИБКА 403: Forbidden.

I, [2022-03-22T16:54:38.130543 #1]  INFO -- :
I, [2022-03-22T16:54:38.146489 #1]  INFO -- : Завершение асинхронных процессов
I, [2022-03-22T16:54:38.148916 #1]  INFO -- : Отправка INT для HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main pid: 42
2022-03-22 16:54:38.149 UTC [42] LOG:  получен запрос на быстрое завершение работы
I, [2022-03-22T16:54:38.150508 #1]  INFO -- : Отправка TERM для exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 103
103:signal-handler (1647968078) Получен SIGTERM, планирование завершения работы...
2022-03-22 16:54:38.155 UTC [42] LOG:  прерывание всех активных транзакций
2022-03-22 16:54:38.167 UTC [42] LOG:  фоновый рабочий "logical replication launcher" (PID 51) завершился с кодом выхода 1
2022-03-22 16:54:38.171 UTC [46] LOG:  завершение работы
103:M 22 Mar 2022 16:54:38.203 # Пользователь запросил завершение работы...
103:M 22 Mar 2022 16:54:38.204 * Сохранение финального снимка RDB перед выходом.
103:M 22 Mar 2022 16:54:38.213 * БД сохранена на диск
103:M 22 Mar 2022 16:54:38.214 # Redis готов к выходу, пока...
2022-03-22 16:54:38.228 UTC [42] LOG:  система баз данных завершена


НЕ УДАЛОСЬ
--------------------
Pups::ExecError: /tmp/add-cloudflare-ips завершился с ошибкой, возвращен #<Process::Status: pid 1487 exit 8>
Место ошибки: /usr/local/lib/ruby/gems/2.7.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
выполнение не удалось с параметрами "/tmp/add-cloudflare-ips"
3123cbaef859e04ff382e3194e1745b88ee6e4777de9f0f7b45cb6cf2ac6d757
** НЕ УДАЛОСЬ ЗАПУСТИТЬ ** пожалуйста, прокрутите вверх и поищите более ранние сообщения об ошибках, их может быть несколько.
./discourse-doctor может помочь диагностировать проблему.
root@app:/var/discourse#

Cloudflare заблокировал ваш IP-адрес для получения его списка IP-адресов. Вы можете попробовать снова, спросить их причину или управлять списком самостоятельно.

Чтобы решить эту проблему прямо сейчас, я бы, вероятно, получил список со своего локального компьютера и адаптировал шаблон, чтобы прописать его напрямую вместо получения от Cloudflare, а затем связался с ними.

@RyanK есть какие-нибудь предложения по этому поводу? Наш шаблон загружает списки при каждой сборке, но это не должно быть проблемой. Если бы это было так, я ожидал бы получить ошибку 429 (превышение лимита запросов), а не 403.

Извините за вопрос, я не профи :frowning: Как мне добавить IP-адреса CloudFlare, не используя этот шаблон cloudflare.template.yml? Я использую Discourse Docker на Ubuntu 20.04.

У меня та же проблема на двух разных экземплярах с разными IP-адресами. @GreenOWL, какой дата-центр вы используете?

Если Cloudflare блокирует ваш доступ, и вы не обладаете достаточными знаниями для его ручного исправления, настоятельно рекомендую убрать фронтинг Cloudflare.

Это открывает адские врата для нарушителей.

Дата-центр вашего хостинг-провайдера.

Если только вы не управляете сообществом, которое привлекает нарушителей, это не должно стать проблемой. А настроить Discourse так, чтобы ваш IP-адрес не был раскрыт, довольно сложно.

Вариант 2.

Если вы не можете помочь — перестаньте обижать пользователей.

На самом деле действие шаблона можно внедрить вручную, получив IP-адреса CF из другого IP. @Falco дал вам дельный совет.

Да, также Vultr. Думаю, стоит создать для них тикет, указав, что проблема касается всех их IP-адресов.

Проверьте в вашем YAML-файле расположение смонтированного тома.

Я пытаюсь заменить URL cloudflare.com/ips-v4/ и cloudflare.com/ips-v6/ в файле cloudflare.template.yml на IP-адреса моего сервера (при размещении списка IP).

contents: |
        #!/bin/bash -e
        # Download list of CloudFlare ips
        wget -q https://www.myserver.com/ips-v4/ -O - > /tmp/cloudflare-ips
        echo >> /tmp/cloudflare-ips
        wget -q https://www.myserver.com/ips-v6/ -O - >> /tmp/cloudflare-ips
        # Make into nginx commands and escape for inclusion into sed append command
        CONTENTS=$(</tmp/cloudflare-ips sed '/^$/d; s/^.*/set_real_ip_from &;/' | tr '\n' '\\' | sed 's/\\/\\n/g')

Получил следующий результат:

I, [2022-03-22T18:49:10.469231 #1]  INFO -- : Downloading MaxMindDB...
Compressing Javascript and Generating Source Maps

I, [2022-03-22T18:49:10.514524 #1]  INFO -- : File > /usr/local/bin/discourse  chmod: +x  chown:
I, [2022-03-22T18:49:10.521050 #1]  INFO -- : File > /usr/local/bin/rails  chmod: +x  chown:
I, [2022-03-22T18:49:10.528727 #1]  INFO -- : File > /usr/local/bin/rake  chmod: +x  chown:
I, [2022-03-22T18:49:10.534748 #1]  INFO -- : File > /usr/local/bin/rbtrace  chmod: +x  chown:
I, [2022-03-22T18:49:10.541288 #1]  INFO -- : File > /usr/local/bin/stackprof  chmod: +x  chown:
I, [2022-03-22T18:49:10.549718 #1]  INFO -- : File > /etc/update-motd.d/10-web  chmod: +x  chown:
I, [2022-03-22T18:49:10.554428 #1]  INFO -- : File > /etc/logrotate.d/rails  chmod:   chown:
I, [2022-03-22T18:49:10.558589 #1]  INFO -- : File > /etc/logrotate.d/nginx  chmod:   chown:
I, [2022-03-22T18:49:10.565929 #1]  INFO -- : File > /etc/runit/1.d/00-ensure-links  chmod: +x  chown:
I, [2022-03-22T18:49:10.571595 #1]  INFO -- : File > /etc/runit/1.d/01-cleanup-web-pids  chmod: +x  chown:
I, [2022-03-22T18:49:10.578243 #1]  INFO -- : File > /root/.bash_profile  chmod: 644  chown:
I, [2022-03-22T18:49:10.583602 #1]  INFO -- : File > /usr/local/etc/ImageMagick-7/policy.xml  chmod:   chown:
I, [2022-03-22T18:49:10.589959 #1]  INFO -- : Replacing (?-mix:server.+{) with limit_req_zone $binary_remote_addr zone=flood:10m rate=$reqs_per_secondr/s;
limit_req_zone $binary_remote_addr zone=bot:10m rate=$reqs_per_minuter/m;
limit_req_status 429;
limit_conn_zone $binary_remote_addr zone=connperip:10m;
limit_conn_status 429;
server {
 in /etc/nginx/conf.d/discourse.conf
I, [2022-03-22T18:49:10.592764 #1]  INFO -- : Replacing (?-mix:location @discourse {) with location @discourse {
  limit_conn connperip $conn_per_ip;
  limit_req zone=flood burst=$burst_per_second nodelay;
  limit_req zone=bot burst=$burst_per_minute nodelay; in /etc/nginx/conf.d/discourse.conf
I, [2022-03-22T18:49:10.601940 #1]  INFO -- : File > /tmp/add-cloudflare-ips  chmod: +x  chown:
I, [2022-03-22T18:49:10.604368 #1]  INFO -- : > /tmp/add-cloudflare-ips
I, [2022-03-22T18:49:10.791696 #1]  INFO -- :
I, [2022-03-22T18:49:10.811681 #1]  INFO -- : Terminating async processes
I, [2022-03-22T18:49:10.813970 #1]  INFO -- : Sending INT to HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main pid: 42
2022-03-22 18:49:10.815 UTC [42] LOG:  received fast shutdown request
I, [2022-03-22T18:49:10.816541 #1]  INFO -- : Sending TERM to exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 103
103:signal-handler (1647974950) Received SIGTERM scheduling shutdown...
2022-03-22 18:49:10.820 UTC [42] LOG:  aborting any active transactions
2022-03-22 18:49:10.834 UTC [42] LOG:  background worker "logical replication launcher" (PID 51) exited with exit code 1
2022-03-22 18:49:10.837 UTC [46] LOG:  shutting down
2022-03-22 18:49:10.877 UTC [42] LOG:  database system is shut down
103:M 22 Mar 2022 18:49:10.896 # User requested shutdown...
103:M 22 Mar 2022 18:49:10.897 * Saving the final RDB snapshot before exiting.
103:M 22 Mar 2022 18:49:10.923 * DB saved on disk
103:M 22 Mar 2022 18:49:10.924 # Redis is now ready to exit, bye bye...


FAILED
--------------------
Pups::ExecError: /tmp/add-cloudflare-ips завершился с ошибкой, код возврата #<Process::Status: pid 1487 exit 8>
Место возникновения ошибки: /usr/local/lib/ruby/gems/2.7.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
Ошибка выполнения с параметрами "/tmp/add-cloudflare-ips"
7b755fd1f149c4b1bfb984edccf952001a7d97621aba59a111d07784bf39dc78
** НЕ УДАЛОСЬ ЗАПУСТИТЬ ** Пожалуйста, прокрутите вверх и поищите сообщения об ошибках, возможно, их несколько.
Утилита ./discourse-doctor может помочь в диагностике проблемы.

Попробуйте скопировать существующий файл cloudflare.template.yml в cloudflare-static.template.yml и заменить верхнюю часть, чтобы она выглядела так:

run:
  - file:
      path: /tmp/add-cloudflare-ips
      chmod: +x
      contents: |
        #!/bin/bash -e
        cat <<EOF > /tmp/cloudflare-ips
        173.245.48.0/20
        103.21.244.0/22
        103.22.200.0/22
        103.31.4.0/22
        141.101.64.0/18
        108.162.192.0/18
        190.93.240.0/20
        188.114.96.0/20
        197.234.240.0/22
        198.41.128.0/17
        162.158.0.0/15
        104.16.0.0/13
        104.24.0.0/14
        172.64.0.0/13
        131.0.72.0/22
        2400:cb00::/32
        2606:4700::/32
        2803:f800::/32
        2405:b500::/32
        2405:8100::/32
        2a06:98c0::/29
        2c0f:f248::/32
        EOF
        # Преобразуем в команды nginx и экранируем для вставки в команду sed append
        CONTENTS=$(</tmp/cloudflare-ips sed '/^$/d; s/^.*/set_real_ip_from &;/' | tr '\n' '\\' | sed 's/\\/\\n/g')
        
        echo IP-адреса CloudFlare:
        echo $(echo | sed "/^/a $CONTENTS")
        # Вставляем в discourse.conf
        sed -i "/sendfile on;/a $CONTENTS\nreal_ip_header CF-Connecting-IP;" /etc/nginx/conf.d/discourse.conf
        # Очистка
        rm /tmp/cloudflare-ips

  - exec: "/tmp/add-cloudflare-ips"
  - exec: "rm /tmp/add-cloudflare-ips"

Затем измените контейнер вашего приложения так, чтобы он использовал шаблон -static вместо оригинального.

Не оставляйте это так навсегда.

Я могу исправить это в cloudflare.template.yml

Я использую GitHub для хостинга списка IP-адресов CloudFlare, и эта ошибка возникает из-за использования ссылки со символом /.

        # Скачать список IP-адресов CloudFlare
        wget https://raw.githubusercontent.com/xxx-cloud/CloudFlare-IPs/main/ips-v4/ -O - > /tmp/cloudflare-ips
        echo >> /tmp/cloudflare-ips
        wget https://raw.githubusercontent.com/xxx-cloud/CloudFlare-IPs/main/ips-v6/ -O - >> /tmp/cloudflare-ips

Нужна ссылка без /, вот так:

        # Скачать список IP-адресов CloudFlare
        wget https://raw.githubusercontent.com/xxx-cloud/CloudFlare-IPs/main/ips-v4 -O - > /tmp/cloudflare-ips
        echo >> /tmp/cloudflare-ips
        wget https://raw.githubusercontent.com/xxx-cloud/CloudFlare-IPs/main/ips-v6 -O - >> /tmp/cloudflare-ips

Это работает :slight_smile:

Я думаю, что в перспективе стоит создать зеркало для сайта с IP-адресами CloudFlare https://www.cloudflare.com/ips-v4 и https://www.cloudflare.com/ips-v6, чтобы получать актуальные списки и обходить блокировку.