Firewalld

Firewalld 似乎阻止連接到我的 CouchDB 2.0

  • July 4, 2017

我正在嘗試在我的 CentOS 7 伺服器上設置一個 CouchDB 2.0 實例。我已經將它安裝並作為 systemd 服務執行,當我使用 127.0.0.1 或 0.0.0.0 從伺服器訪問它時,它會以友好的 hello world 消息進行響應

$ 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

我的理解是,如果我有這個綁定地址,我可以從防火牆中打開的任何 IP 地址連接到埠 5984

我正在為我的防火牆使用 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:

我還使用 XML 在 /etc/firewalld/services/couchdb2.xml 創建了一個名為 couchdb2 的服務:

<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

當我通過 127.0.0.1 或 0.0.0.0 在本地連接到 couchdb 實例時,我可以在我的 couchdb 日誌中看到 200 響應:

$ 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 日誌中沒有顯示 Connection Refused 錯誤這向我表明問題可能是防火牆而不是 CouchDB,但我不確定。拒絕連接總是防火牆嗎?如果 CouchDB 實例出現問題,我會收到其他錯誤嗎?

我試圖通過查看 firewalld 日誌自己回答這個問題。我通過在 /etc/sysconfig/firewalld 編輯 FIREWALLD_ARGS 打開了日誌記錄

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 是否會記錄在 5984 上通過 CouchDB 的連接。也許它通過了 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核心才能真正使用它們。

基於此設置腳本,這些 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

希望能幫助到你!

引用自:https://serverfault.com/questions/855160