Назад | Перейти на главную страницу

Firewalld, похоже, блокирует подключение к моему CouchDB 2.0

Я пытаюсь настроить экземпляр CouchDB 2.0 на моем сервере CentOS 7. У меня он установлен и запущен как служба systemd, и он отвечает своим дружелюбным приветственным сообщением, когда я получаю к нему доступ с сервера, используя 127.0.0.1 или 0.0.0.0

$ curl 127.0.0.1:5984
{"couchdb":"Welcome","version":"2.0.0","vendor":{"name":"The Apache 
Software Foundation"}}
$ curl 0.0.0.0:5984
{"couchdb":"Welcome","version":"2.0.0","vendor":{"name":"The Apache 
Software Foundation"}}

в моем файле local.ini я настроил bind_address на 0.0.0.0

[httpd]
bind_address = 0.0.0.0

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

Я использую firewalld для своего брандмауэра, и я настроил его на открытие порта 5984. Эта конфигурация подтверждается перечислением конфигурации публичной зоны:

$ sudo firewall-cmd --zone=public --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  services: couchdb2 dhcpv6-client http https ssh
  ports: 443/tcp 5984/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  sourceports: 
  icmp-blocks: 
  rich rules:

Я также создал службу под названием couchdb2 в /etc/firewalld/services/couchdb2.xml с XML:

<service>
  <short>couchdb2</short>
  <description>CouchDB 2.0 Instance</description>
  <port protocol="tcp" port="5984"/>
</service>

Из того, что я знаю о firewalld, теперь я могу получить соединение на 5984

но когда я скручиваюсь с ноутбука, мое соединение отклоняется:

$ curl my-server:5984 --verbose
* Rebuilt URL to: my-server:5984/
*   Trying <my-ip>...
* connect to <my-ip> port 5984 failed: Connection refused
* Failed to connect to my-server port 5984: Connection refused
* Closing connection 0

Когда я подключаюсь к экземпляру couchdb локально через 127.0.0.1 или 0.0.0.0, я вижу ответ 200 в моем журнале couchdb:

$ sudo journalctl -u couchdb2
...
[notice] 2017-06-06T00:35:01.159244Z couchdb@localhost <0.3328.0> 
222d655c69 0.0.0.0:5984 127.0.0.1 undefined GET / 200 ok 28
[notice] 2017-06-06T00:37:21.819298Z couchdb@localhost <0.5598.0> 
2f8986d14b 127.0.0.1:5984 127.0.0.1 undefined GET / 200 ok 1

Но когда я свернулся со своего ноутбука, в журнале couchdb ничего не обнаружилось для ошибки отказа в подключении. Это наводит на мысль, что проблема может быть в брандмауэре, а не в CouchDB, но я не уверен в этом. Всегда ли в соединении отказывается брандмауэр? Могу ли я получить другую ошибку, если здесь возникнет проблема с экземпляром CouchDB?

Я сам попытался ответить на этот вопрос, посмотрев журналы firewalld. Я включил ведение журнала, отредактировав FIREWALLD_ARGS в / etc / sysconfig / firewalld

FIREWALLD_ARGS=--debug=10

Я перезапускаю firewalld и подтверждаю его работу на уровне отладки 10:

$ sudo systemctl status firewalld
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; 
vendor preset: enabled)
   Active: active (running) since Tue 2017-06-13 16:41:26 EDT; 28min ago
     Docs: man:firewalld(1)
 Main PID: 25209 (firewalld)
   CGroup: /system.slice/firewalld.service
           └─25209 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid --debug=10

Затем я снова скручиваюсь с ноутбука, получаю сообщение об отказе в соединении и смотрю журналы:

$ tail -n 64 /var/log/firewalld
2017-06-13 16:41:26 DEBUG1: config.ZoneAdded('trusted')
2017-06-13 16:41:26 DEBUG1: 
config.zone.8.GetAll('org.fedoraproject.FirewallD1.config.zone')
2017-06-13 16:41:26 DEBUG1: config.ZoneAdded('work')
2017-06-13 16:41:26 
DEBUG1:config.GetAll('org.fedoraproject.FirewallD1.config')

Это конфигурационные сообщения после перезапуска firewalld. Об отказе в соединении ничего не регистрируется. Я не уверен, будет ли firewalld регистрировать соединение, которое прошло через CouchDB на 5984, или нет. Может быть, он попал в CouchDB, и это проблема CouchDB?

Насколько мне известно, и CouchDB, и firewalld настроены правильно, но не работают так, как я ожидал. Любая помощь будет принята с благодарностью, независимо от того, знаете ли вы о проблеме или можете ли вы просто помочь мне определить, связана ли проблема с CouchDB или firewalld.

Оказалось, что это проблема CouchDB 2.0. Проблема была действительно в документации: http://docs.couchdb.org/en/2.0.0/config/http.html описывает, как открыть CouchDB для всех хостов. Вы настраиваете:

[httpd]
bind_address = 0.0.0.0

Проблема в том, что документы не обновлялись с CouchDB 1.6.1, и они не ошибаются. Соответствующая конфигурация теперь:

[chttpd]
bind_address = 0.0.0.0

(Это должно лучше подходить как комментарий, но мне все еще не разрешено комментировать)

Я никогда не использовал файлы в /etc/firewalld/services/ как вы это делаете, но я считаю, что вам нужно сделать firewalld core, чтобы их действительно использовать.

На основе этот сценарий установкиэти команды firewalld должны постоянно включать порты. Вы можете попробовать это?

    # get a list of active zones.. you might have more.
    firewall-cmd --get-active-zones

    # firewalld command to allow this port open to dmz
    firewall-cmd --zone=public --add-port=5984/tcp   --permanent

    # Restart the firewalld service
    firewall-cmd --reload

а затем {повторно} запустите демон couchdb, например

    /usr/local/etc/rc.d/couchdb start

Надеюсь, поможет!