Ssl

如何在節點之間進行安全通信以進行複制?

  • March 4, 2020

我搜尋了使用 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

但我不確定這是否是最好的方法。任何人都可以為我指出一個更好、更安全的解決方案嗎?謝謝你。

好吧,經過一些學習和測試,我覺得我可以工作了。供未來使用者參考,我在這裡發布我的解決方案。

  1. SSL 隧道是有效的並且執行良好,但我相信它會消耗更多來自伺服器的資源。隧道必須始終保持暢通。HTTPS 解決方案是一種“按需”解決方案。

  2. 要在 couchdb 中啟用 HTTPS,請按照這些說明進行操作。

2.1。如果您的伺服器已經在為 Apache HTTPD 使用Let’s Encrypt免費的 TLS 證書,它需要在 couchdb 中使用,因為證書和密鑰文件必須是 couchdb 使用者的所有者!也許有人可以找到解決此問題的方法。

  1. 縮小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
  1. 現在您打開了這些埠: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
  1. 在從伺服器上:
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
  1. 對兩台伺服器的訪問是使用帶有密鑰的 SSH 完成的。按照這些說明啟用它。

  2. 使用 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 在從屬伺服器中創建數據庫。

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