Firewalld 似乎阻止連接到我的 CouchDB 2.0
我正在嘗試在我的 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
希望能幫助到你!