Наш ассоциированный член www.Bikinika.com.ua

Захистіть свій кластер

  1. Через проксі SOCKS
  2. Через зворотний проксі
  3. Використання SSH тунелювання

Найкращий спосіб захистити кластер RethinkDB - запустити його в захищеній мережі, що не дозволяє доступу ззовні

Найкращий спосіб захистити кластер RethinkDB - запустити його в захищеній мережі, що не дозволяє доступу ззовні. Однак це не завжди можливо. Наприклад, розгортання в хмарі часто вимагає доступу з широкосмугових мереж.

Існує два основних методу, що забезпечують RethinkDB для захисту кластера: TLS шифрування для підключень і зв'язування портів, які сервер використовує для конкретних IP-адрес, для обмеження зовнішніх з'єднань.

Починаючи з версії 2.3, RethinkDB надає можливість захищати з'єднання між серверами, між серверами та клієнтами, а також веб-інтерфейс за допомогою TLS шифрування (наступник SSL). Захист RethinkDB таким чином схожий на захист веб-сайту на самостійно підписаний сертифікат SSL : створити приватний ключ і сертифікат, а потім повідомляти серверу про їх використання.

Найпростіший спосіб зробити це з інструментом командного рядка openssl. (У Linux і OS X це вже встановлено; для Windows можна знайти його скомпільовані двійкові файли зі списку на вікі OpenSSL.)

Спочатку створіть 2048-бітовий ключ і збережіть його в key.pem:

opensl genrsa -out key.pem 2048

Потім створіть сертифікат cert.pem з цього ключа:

openssl req -new -x509-ключ key.pem -out cert.pem -денні 3650

OpenSSL попросить ввести інформацію для сертифіката. Хоча деякі з цих питань можна залишити за замовчуванням, "Загальне ім'я" має відповідати доменному імені вашого сервера. Для цілей локального тестування можна використовувати localhost, але не у виробництві.

Назва країни (код з 2 літер) [AU]: назва штату або провінції США (прізвище, ім'я та прізвище) [Деякі держави]: Назва місцевості Каліфорнії (наприклад, місто) []: Назва організації гори (наприклад, компанія) Ltd]: ім'я організаційної одиниці RethinkDB (наприклад, розділ) []: загальне ім'я (наприклад, FQDN сервера або ВАШЕ ім'я) []: example.com Email Address []:

Сертифікати та ключі також можуть бути вказані Параметри командного рядка або як ключі в a файлу конфігурації . Щоб запустити RethinkDB і повідомити йому про захист інтерфейсу веб-адміністрування, можна запустити сервер з такими параметрами:

rethinkdb --http-tls-ключ key.pem --http-tls-cert cert.pem

Потрібні обидва варіанти. У конфігураційному файлі потрібно вказати ключ і сертифікат так:

http-tls-key = key.pem http-tls-cert = cert.pem

Щоб використовувати з'єднання TLS із драйверами клієнта, вкажіть:

rethinkdb --driver-tls-ключ key.pem --driver-tls-cert cert.pem

Якщо ви використовуєте цей параметр на сервері, клієнт також повинен використовувати захищене з'єднання. Передати інформацію про сертифікат у параметр ssl команді Connect ReQL; прочитати документацію API для підключення докладніше про конкретний синтаксис вашої мови.

Щоб використовувати з'єднання TLS між серверами кластера:

rethinkdb - кластер-tls-ключ key.pem --cluster-tls-cert cert.pem - cluster-tls-ca cert.pem

Зауважте, що в останньому випадку вам також потрібно надати сертифікат ЦС. Це сертифікат, який використовується для підписання інших сертифікатів. У цьому випадку ми використовуємо один і той же сертифікат для обох, але ми могли б підписати наш cert.pem з іншим сертифікатом CA і вказати обидва з них. Сервери можуть підключатися до кластера, лише якщо сертифікати, вказані значенням їх кластера-tls-cert, підписуються сертифікатом ЦС, визначеним кластером-tls-ca.

Під OS X, версії системи Python і Ruby посилаються на старі версії OpenSSL, які не підтримують значення за замовчуванням RethinkDB для TLS. Щоб використовувати ці драйвери під OS X, сервер повинен вказати:

  • tls-min-протокол TLSv1
  • шифри EECDH + AESGCM: EDH + AESGCM: AES256 + EECDH: AES256 + EDH: AES256-SHA

Вони можуть бути вказані як параметри запуску rethinkdb або у конфігураційному файлі.

Усі сервери RethinkDB мають обліковий запис адміністратора з повним доступом до кластера, і за умовчанням цей обліковий запис не має пароля. (Докладніше про цю тему читайте Дозволи та облікові записи користувачів .) Однією з перших речей, які потрібно зробити, щоб захистити кластер, є призначення пароля адміністратору. Це можна зробити, коли перший сервер запускається за допомогою пароля --initial-password параметр командного рядка або шляхом оновлення адміністративного запису новим паролем для користувача системна таблиця .

Коли нові сервери (включаючи проксі) приєднуються до існуючого кластера, вони синхронізуються з усіма відомостями облікового запису користувача, включаючи паролі, з цього кластера. Це включає обліковий запис адміністратора. Однак сервер без набору паролів адміністратора не може приєднатися до існуючого кластера, який має встановлений пароль. В іншому випадку, зловмисник зможе підключитися до цього сервера як адміністратор і виконати довільні запити в часі між запуском сервера та обліковими записами, які синхронізуються з рештою кластера.

Якщо ви налаштовуєте кластер у захищеному середовищі (наприклад, весь кластер знаходиться в локальній мережі за брандмауером), ви можете просто запустити сервери в кластері без пароля адміністратора, а потім оновити обліковий запис адміністратора в таблиця користувачів з новим паролем. Однак, якщо ви приєднуєте новий сервер до кластера, який вже захищений паролем, найкращим способом це - вказати автоматичну опцію --initial-password.

Цей параметр створює випадковий пароль для облікового запису адміністратора цього сервера. Після того, як сервер синхронізується з кластером, випадковий пароль буде перезаписаний паролем адміністратора, що запобігає експлуатації, описаній вище.

rethinkdb --initial-password auto - приєднати кластер

Прив'язка порту веб-інтерфейсу може перешкодити доступу до неї безпосередньо з віддаленого комп'ютера. Ви можете прив'язати його до певної IP-адреси за допомогою --bind-http параметр командного рядка ; найбезпечніший спосіб - прив'язати його до локальної машини (localhost), а потім з'єднати через проксі.

rethinkdb --bind-http localhost

(Можна також вказати bind-http = у файлу конфігурації .)

Тепер скористайтеся одним із наступних двох способів, щоб увімкнути безпечний доступ.

Через проксі SOCKS

Як тільки ви заблокуєте порт веб-інтерфейсу на наведеному вище етапі, найпростіший спосіб отримати доступ до нього - використовувати ssh для налаштування проксі SOCKS. Запустіть таку команду на локальному сервері (не той, що запускає RethinkDB):

ssh -D 3000 USERNAME @ HOST

Де,

  • HOST - це ip будь-якого сервера на вашому кластері RethinkDB.
  • 3000 можна змінити на будь-який порт, доступний на локальному сервері.

Потім відкрийте веб-переглядач:

  • Якщо ви використовуєте Chrome , перейдіть у меню Налаштування> Додаткові налаштування> Мережа> Змінити налаштування проксі-сервера та встановіть для параметра " Мережний проксі " ручний режим із такими параметрами:
    • Хост: localhost
    • Порт: 3000
    • Проігноровано хост: (видалити все)
  • Якщо ви використовуєте Firefox , перейдіть до Edit> Preferences . Потім натисніть кнопку Додатково> Мережа> Налаштування та створіть ручну конфігурацію проксі з такими параметрами:
    • Носки хост: localhost
    • Порт: 3000
    • Перевірте шкарпетки v5
    • Немає проксі для: (видалити все)

Тепер ви можете відвідати localhost: 8080, щоб побачити веб-адміністратора RethinkDB.

Через зворотний проксі

Ви можете використовувати зворотний HTTP-проксі, щоб дозволити доступ до веб-інтерфейсу з інших серверів. Більшість веб-серверів (таких як Apache або Nginx) підтримують цю функцію. У наступному прикладі ми використовуємо Apache для налаштування зворотного проксі.

Вам знадобляться наступні модулі, встановлені для Apache:

Залежно від операційної системи, вам може знадобитися встановити бібліотеку, наприклад libapache2-mod-proxy-html.

Створити новий віртуальний хост:

<VirtualHost *: 80> ServerName domain.net ProxyRequests Вимкнути <Проксі *> Заборонити заборонити, дозволити Дозволити з усіх AuthType Basic AuthName "Потрібно ввести пароль" / http: // localhost: 8080 / ProxyPassReverse / rethinkdb_admin / http: // localhost: 8080 / </VirtualHost>

Створіть файл паролів у / etc / apache2 /:

Ім'я користувача htpasswd.exe -c password.file

Майже зроблено. Зараз потрібно лише створити файл group.file з таким вмістом:

Тепер ви можете отримати доступ до веб-інтерфейсу за допомогою URL-адреси: http: // HOST / rethinkdb_admin.

Клієнти можуть вказувати значення користувача та пароля в підключення команду. Для отримання додаткових відомостей про створення та керування обліковими записами та правами користувачів читайте Дозволи та облікові записи користувачів .

Зауважте, що паролі надсилатимуться у відкритому тексті, якщо ви не використовуєте шифрування TLS. Замість (або на додаток до) TLS можна прив'язати порт драйвера і використовувати туннелювання SSH, як описано нижче.

Примітка . Система аутентифікації впливає на драйвери клієнта, а не на веб-інтерфейс. Щоб захистити веб-інтерфейс, дотримуйтеся вказівок вище.

Використання SSH тунелювання

По-перше, захистіть порт драйвера так, щоб його не можна було отримати ззовні. Використовуйте драйвер -bind-driver параметр командного рядка або відповідний файлу конфігурації для прив'язки до localhost.

rethinkdb --bind-driver localhost

Тепер створіть на сервері тунель SSH, який має доступ до віддаленого порту драйвера RethinkDB:

ssh -L <local_port>: localhost: <driver_port> <ip_of_rethinkdb_server>

Де,

  • local_port - це порт, який ви хочете вказати у драйвері - це може бути будь-який доступний порт на вашому сервері.
  • driver_port - це драйвер RethinkDB (за замовчуванням - 28015).
  • ip_of_rethinkdb_server - це IP-адреса сервера, який запускає сервер RethinkDB.

Тепер ви можете підключитися до примірника RethinkDB, підключившись до хоста localhost і порта local_port:

r. connect ({host: 'localhost', порт: <local_port>}, функція (помилка, з'єднання) {...})

Щоб захистити порт кластера, прив'яжіть його до певної IP-адреси за допомогою кластера --bind-cluster параметр командного рядка або відповідний файлу конфігурації . Прив'яжіть його до IP-адреси, доступної лише з локальної мережі.

rethinkdb --bind-cluster 192.168.0.100

Порт intracluster буде доступний з локальної мережі, де ви запускаєте вузли RethinkDB, але не будуть доступні з зовнішнього світу.

Новости