如何在節點之間進行安全通信以進行複制?
我搜尋了使用 CouchDB 在兩台伺服器之間建立複製的最佳方法,但我沒有找到任何資訊。https://docs.couchdb.org/en/stable/setup/cluster.html中的手冊沒有談到這一點。
目前,我正在使用證書在兩台伺服器之間使用 SSH 永久連接,而無需通過直通:
ssh -f -L 127.0.0.1:5985:127.0.0.1:5984 sinccouchdb@100.100.100.100 -N -i id_rsa_sinccouchdb -l sinccouchdb -o ServerAliveInterval=60
但我不確定這是否是最好的方法。任何人都可以為我指出一個更好、更安全的解決方案嗎?謝謝你。
好吧,經過一些學習和測試,我覺得我可以工作了。供未來使用者參考,我在這裡發布我的解決方案。
SSL 隧道是有效的並且執行良好,但我相信它會消耗更多來自伺服器的資源。隧道必須始終保持暢通。HTTPS 解決方案是一種“按需”解決方案。
要在 couchdb 中啟用 HTTPS,請按照這些說明進行操作。
2.1。如果您的伺服器已經在為 Apache HTTPD 使用Let’s Encrypt免費的 TLS 證書,它需要在 couchdb 中使用,因為證書和密鑰文件必須是 couchdb 使用者的所有者!也許有人可以找到解決此問題的方法。
- 縮小Erlang 隨機埠;如果您只有 1 個 couchdb 節點,請將其設置在 /opt/couchdb/etc/vm.args 中:
-kernel inet_dist_listen_min 9100 -kernel inet_dist_listen_max 9100
我也建議改變這個
-setcookie anything //default is always monster
- 現在您打開了這些埠:5984、6984、4369 和 9100。所以,世界看到這些埠,這是一個安全問題。
5)使用fail2ban和其他來防止攻擊,但在我的情況下,我阻止了2台伺服器(接收複製的主機和從機)的IP。請記住首先停止fail2ban:
service fail2ban stop
6)在主機伺服器上添加此規則:
iptables -I INPUT 1 -p tcp -s 127.0.0.1 --dport 4369 -j ACCEPT iptables -I INPUT 2 -p tcp -s 127.0.0.1 --dport 5984 -j ACCEPT iptables -I INPUT 3 -p tcp -s 127.0.0.1 --dport 6984 -j ACCEPT iptables -I INPUT 4 -p tcp -s 127.0.0.1 --dport 9100 -j ACCEPT iptables -I INPUT 5 -p tcp -s slaveserver.eu --dport 4369 -j ACCEPT iptables -I INPUT 6 -p tcp -s slaveserver.eu --dport 6984 -j ACCEPT iptables -I INPUT 7 -p tcp -s slaveserver.eu --dport 9100 -j ACCEPT iptables -I INPUT 8 -p tcp --dport 4369 -j REJECT iptables -I INPUT 9 -p tcp --dport 5984 -j REJECT iptables -I INPUT 10 -p tcp --dport 6984 -j REJECT iptables -I INPUT 11 -p tcp --dport 9100 -j REJECT iptables-save > /etc/iptables/rules.v4
- 在從伺服器上:
iptables -I INPUT 1 -p tcp -s 127.0.0.1 --dport 4369 -j ACCEPT iptables -I INPUT 2 -p tcp -s 127.0.0.1 --dport 5984 -j ACCEPT iptables -I INPUT 3 -p tcp -s 127.0.0.1 --dport 6984 -j ACCEPT iptables -I INPUT 4 -p tcp -s 127.0.0.1 --dport 9100 -j ACCEPT iptables -I INPUT 5 -p tcp -s hostserver.eu --dport 4369 -j ACCEPT iptables -I INPUT 6 -p tcp -s hostserver.eu --dport 6984 -j ACCEPT iptables -I INPUT 7 -p tcp -s hostserver.eu --dport 9100 -j ACCEPT iptables -I INPUT 8 -p tcp --dport 4369 -j REJECT iptables -I INPUT 9 -p tcp --dport 6984 -j REJECT iptables -I INPUT 10 -p tcp --dport 5984 -j REJECT iptables -I INPUT 11 -p tcp --dport 9100 -j REJECT iptables-save > /etc/iptables/rules.v4
8)在fail2ban的slave伺服器配置文件中添加主機伺服器的ip,反之亦然,並在兩個伺服器中重新啟動fail2ban:
nano /etc/fail2ban/jail.d/custom.local [DEFAULT] ignoreip = 127.0.0.1/8 62.75.143.242 62.75.186.11 62.138.1.143 service fail2ban start
對兩台伺服器的訪問是使用帶有密鑰的 SSH 完成的。按照這些說明啟用它。
使用 SSH 隧道訪問主機伺服器中的 Fauxton:
ssh -p999 -f -L 127.0.0.1:5985:127.0.0.1:5984 root@hostserver.eu -i/root/.ssh/id_rsa -N
然後打開: http: //127.0.0.1 :5985並在**_replicator**數據庫中添加如下內容:
{"_id": "1", "source": {"url": "http://127.0.0.1:5984/mydb"}, "target":{"url": "https://salveserver.eu:6984/mydb_copy"}, "create_target": false,"continuous": true, "owner": "sysdba"}
在這種情況下,mydb_copy 必須已經存在於從伺服器中。如果沒有,您必須包含身份驗證以允許主機 couchdb 在從屬伺服器中創建數據庫。