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

Как сделать безопасную связь между узлами для репликации?

Я искал лучший способ установить репликацию между двумя серверами с помощью 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) Чтобы включить HTTPS в couchdb, выполните следующие действия. инструкции.

2.1. Если ваш сервер уже использует Давайте зашифровать бесплатный сертификат TLS для Apache HTTPD, он хочет работать для использования в couchdb, потому что файлы сертификата и ключей должны принадлежать пользователю couchdb! Может быть, кто-нибудь найдет способ обойти это.

3) сузить Случайные порты 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

4) Теперь у вас открыты следующие порты: 5984, 6984, 4369 и 9100. Итак, мир видит эти порты, и это проблема безопасности.

5) Используйте fail2ban и другие для предотвращения атак, но в моем случае я блокирую, кроме 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

7) На подчиненном сервере:

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) Добавьте IP-адрес хост-сервера в файл конфигурации подчиненного сервера fail2ban и наоборот и снова запустите 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

9) Доступ к обоим серверам осуществляется по SSH с ключами. Следуйте этим инструкциям чтобы включить его.

10) Получите доступ к Fauxton на хост-сервере, используя SSH-туннель:

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 мог создать базу данных на подчиненном сервере.

Если couchdb не поддерживает TLS (что я считаю маловероятным, хотя я не копался в его документации), вы можете попробовать запустить трафик кластера через станнель.