RethinkDB удаленное подключение клиента, не открывая веб-интерфейс администратора для всех

Переосмыслить 1.6. Я пытаюсь подключиться к удаленному серверу, на котором работает rethinkdb, только с другого сервера, на котором работает клиент (ruby, python), и он работает, только если bind=all, но это предоставляет веб-администратору доступ ко всем, чего я хочу избежать.

Я пробовал с auth_key и без него и работает только с bind=all. Я также пытался указать адрес своего удаленного сервера (т.е. bind=127.0.0.1, 199.199.3.5), но он не работает (анализ) на переосмысленном сервере уровень

Спасибо


person Shreko    schedule 17.06.2013    source источник
comment
Какую ОС вы используете? линукс? если да, думали ли вы о правиле IP-таблиц, ограничивающем доступ к этому порту по IP-адресу?   -  person Nick    schedule 17.06.2013
comment
сервер убунту 12.04. Похоже, это единственный вариант на данный момент. Я не очень разбираюсь в правилах iptables, думаю, теперь мне придется учиться. Спасибо за вашу помощь   -  person Shreko    schedule 18.06.2013


Ответы (3)


замените 5.5.5.5 на IP-адрес сервера, который должен иметь доступ к веб-интерфейсу. Замените 2222 на порт, на котором работает веб-интерфейс.

#!/bin/sh

iptables -F
iptables -X

# Default rules
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

iptables -A INPUT -i lo -j ACCEPT
iptables -A FORWARD -i lo -j ACCEPT
iptables -A FORWARD -o lo -j ACCEPT

# rethinkdb
iptables -A INPUT -s 5.5.5.5 -p tcp -m tcp --dport 2222 -j ACCEPT
iptables -A OUTPUT -d 5.5.5.5 -p tcp -m tcp --sport 2222 -j ACCEPT

# We allow TCP and UDP connections already established to enter
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p udp -m state --state ESTABLISHED,RELATED -j ACCEPT

После этого сохраните конфигурацию в файл

sudo sh -c "iptables-save > /etc/iptables.rules"

Отредактируйте файл сетевых интерфейсов, чтобы правила повторно применялись при перезагрузке.

sudo vi /etc/network/interfaces

Добавьте правило pre-up, чтобы оно выглядело так, как показано ниже.

auto eth0
iface eth0 inet dhcp
  pre-up iptables-restore < /etc/iptables.rules
person Nick    schedule 17.06.2013
comment
Спасибо, Ник. Сейчас слишком много дел, но я обязательно вернусь к этому позже и попробую ваше решение. - person Shreko; 21.06.2013

Вы должны создать прокси-сервер и выставить веб-интерфейс для публики только с условиями (безопасность), в документации rethinkdb уже упоминалось, как это сделать с сервером apache, но, честно говоря, это нецелесообразно.

если вы используете node.js (expressjs или connect), вот как вы можете интегрировать rethink db web ui внутри вашего веб-приложения под настраиваемым URL-адресом через обратный прокси-сервер, например http://example.com/rethinkdb

// Configure Proxy Servers
var proxy = require('proxy-middleware');
// Server 1: rethinkdb
var rethinkdb = proxy('http://localhost:8080/');
var rethinkdb_path = "/rethinkdb";
app.use(rethinkdb_path, function (req, res, next) {
    if (req.originalUrl === rethinkdb_path) return res.redirect(301, rethinkdb_path + "/");
    // add your own security here ;)
    if (req.isAuthenticated() && req.user.email === "[email protected]") {
        return rethinkdb(req, res, next);
    }
    next();
});

конечно вам нужно установить модуль nodejs proxy-middleware через npm install proxy-middleware --save

person Fareed Alnamrouti    schedule 07.10.2016

В дополнение к использованию iptables, как описано Ником выше, вы также можете разместить обратный прокси-сервер перед веб-интерфейсом, чтобы сделать его доступным через пароль. Мы (RethinkDB) скоро напишем документ о том, как это сделать, но вы можете легко узнать, как это сделать в Google.

Приносим извинения за проблемы с аутентификацией, скоро мы это проясним.

person coffeemug    schedule 18.06.2013