Как я могу убедиться, что DDCLIENT использует SSL, и если это не так, как мне его форсировать?

Я следовал этому руководству по настройке VPN на моем пи. Часть шагов состоит в том, чтобы установить и настроить динамическую службу DNS. Я создал несколько учетных записей на разных платформах. Нет Ip и dynamicdns - это два имени. Ниже приведен вывод моего файла ddclient.conf, он прекрасно подключается на обоих сайтах динамического DNS.

daemon=60                               # check every 60 seconds
syslog=yes                              # log update msgs to syslog
mail=root                               # mail all msgs to root
mail-failure=root                       # mail failed update msgs to root
pid=/var/run/ddclient.pid               # record PID in file.
ssl=yes                                 # use ssl-support.  Works with
                                        # ssl-library
use=web, web=myip.dnsdynamic.com        # get ip from server.
server=www.dnsdynamic.org               # default server
login=YOURUSERNAME                      # default login
password=YOURPASSWORD                       # default password
server=www.dnsdynamic.org,              \
protocol=dyndns2                        \
MYDOMAIN.dnsdynamic.COM

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

sudo ddclient -verbose -debug -noquiet -query 

это показывает соединение по HTTP против HTTPS или SSL для каждого сайта. Я проверил, что ssl был установлен, запустив

sudo apt-get install ssh libio-socket-ssl-perl

Любые идеи о том, если он подключается через SSL или как я могу заставить его? Я пробежал эту статью тоже. Я видел, что ddclient заявил, что будет использовать SSL, если он доступен, мне интересно, является ли это ограничением для использования бесплатного сайта dynamicdns или я что-то пропускаю. Из-за статей это выглядело так, как будто сайты, которые я использую, вроде ip и dnsdynamic не поддерживают SSL.

1 ответ

Решение

Я нашел ответ и чувствую себя очень глупо, не понимая его раньше.

daemon=60                               # check every 60 seconds
syslog=yes                              # log update msgs to syslog
mail=root                               # mail all msgs to root
mail-failure=root                       # mail failed update msgs to root
pid=/var/run/ddclient.pid               # record PID in file.
ssl=yes                                 # use ssl-support.  Works with
                                        # ssl-library
use=web, web=https://myip.dnsdynamic.org        # get ip from server.
server=www.dnsdynamic.org               # default server
login=USERNAME                          # default login
password=PASSWORD                       # default password
server=www.dnsdynamic.org,              \
protocol=dyndns2                        \
YOUR DOMAIN GOES HERE

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

Линия use=web, web=myip.dnsdynamic.com должно быть use=web, web=https://myip.dnsdynamic.org, Изменение от .com в .org останавливает сбои соединения. Добавление https:// до строки подключения позволяет подключаться через SSL.

Выход из use=web, web=myip.dnsdynamic.org показывает:

use=web, web=loopia address is IPADDRESSISHERE
CONNECT:  myip.dnsdynamic.org
CONNECTED:  using HTTP
SENDING:  GET / HTTP/1.0
SENDING:   Host: myip.dnsdynamic.org
SENDING:   User-Agent: ddclient/3.8.2
SENDING:   Connection: close

Выход из use=web, web=https://myip.dnsdynamic.org показывает:

use=web, web=loopia address is IPADDRESSISHERE
CONNECT:  myip.dnsdynamic.org

The verification of cert '/C=US/O=GeoTrust Inc./CN=RapidSSL SHA256 CA/CN=www.dnsdynamic.org'
failed against the host 'myip.dnsdynamic.org' with the default verification scheme.

   THIS MIGHT BE A MAN-IN-THE-MIDDLE ATTACK !!!!

To stop this warning you might need to set SSL_verifycn_name to
the name of the host you expect in the certificate.

CONNECTED:  using SSL
SENDING:  GET / HTTP/1.0
SENDING:   Host: myip.dnsdynamic.org
SENDING:   User-Agent: ddclient/3.8.2
SENDING:   Connection: close

Я до сих пор не уверен, зачем принуждать ssl=yes не заставляет его использовать HTTPS автоматически, но теперь он подключается через SSL, и команда, видимая @George, помогает мне убедиться, что это: sudo ddclient -verbose -debug -noquiet -query

Это только часть "получить IP". Фактическое обновление динамического DNS-сервера не отображается в ваших выходных данных. Это все еще может быть сделано через HTTP.

root@ad26e03e9704:/bin# ddclient -daemon=0 -noquiet -debug -file /config/ddclient.conf
DEBUG:    get_ip: using cmd, /config/get_ip.sh reports 10.0.0.1
DEBUG:
DEBUG:     nic_dyndns2_update -------------------
DEBUG:    proxy  =
DEBUG:    url    = http://dyndns.strato.com/nic/update?system=dyndns&hostname=bla.mydomain.com&myip=10.0.0.1
DEBUG:    server = dyndns.strato.com
SUCCESS:  updating bla.mydomain.com: good: IP address set to 10.0.0.1

Если я поставлю https перед сервером, я получу:

DEBUG:    url    = http://https://dyndns.strato.com/nic/update?system=dyndns&hostname=bla.mydomain.com&myip=10.0.0.1

Так как меня тоже смутило то, что URL в строке вывода

DEBUG:    url    = http://(...)

начинается с HTTP вместо HTTPS, хотя у меня есть ssl=yes в моем конфиге я решил заглянуть в исходный код, чтобы увидеть, что происходит. Оказывается, в функции geturl где инициируется подключение к серверу, http:// часть в любом случае удаляется из URL, так что это не указывает на фактический тип соединения. Если вы хотите убедиться, что ddclient использует SSL, просто вызовите ddclient из терминала как

sudo ddclient -verbose -force

и искать линии

CONNECTED:  using HTTP

или

CONNECTED:  using SSL

В последнем случае ddclient действительно использует SSL, и вы готовы к работе. Обратите внимание, что ssl=yes настройка не применяется к начальному поиску IP-адреса, который ddclient использует для проверки того, изменился ли ваш публичный IP-адрес (тот, который настроен use=...), так что для этого начального соединения вы все еще видите CONNECTED: using HTTP как упомянуто @Shaulinator, если вы явно не установите адрес HTTPS. Однако это не должно быть проблемой безопасности, поскольку IP-адрес, возвращаемый этим запросом, вероятно, используется только для того, чтобы избежать ненужных усилий на стороне сервера; он не отправляется на сервер в реальном запросе на обновление, поскольку сервер тривиально знает ваш IP-адрес, когда ddclient инициирует соединение SSL. Я только проверил это явно для протокола freedns, но я был бы удивлен, если бы он был другим для других протоколов.

Другие вопросы по тегам