Брандмауэр на основе SSH-туннелирования
У меня есть веб-сервер, который подключается к стороннему серверу баз данных и получает разрешение на это с помощью правила брандмауэра на сервере баз данных.
Когда я работаю локально на своем ноутбуке, я использую туннель SSH для подключения к серверу базы данных через веб-сервер.
ssh web.server.com -L 5678:database.server.com:1234
То, что я хотел бы сделать, если это вообще возможно, это настроить правило брандмауэра на веб-сервере, которое, по существу, постоянно выполняет одно и то же.
Поэтому при подключении к web.server.com:5678 мое соединение перенаправляется на database.server.com:1234, и сервер базы данных разрешает подключение, исходящее с веб-сервера.
Проблема в том, что я не совсем уверен, с чего мне начать искать способы сделать это.
Я запускаю Shorewall 3.2.6 на веб-сервере для настройки брандмауэра.
Нужно ли начинать с VPN или это может быть достигнуто без него?
3 ответа
Используя Shorewall, вы ищете правило DNAT ( онлайн-документация великолепна, перейдите по ссылке). Вы закончите с чем-то вроде
DNAT net loc:192.168.1.3:1234 tcp 5678
в вашем файле правил, где 192.168.1.3 - IP-адрес вашего сервера базы данных. Возможно, вам придется включить routeback
опция, если ваше входящее соединение и соединение вашего веб-сервера с сервером базы данных находятся на одной сетевой плате.
Тем не менее, я очень настоятельно призываю вас не делать этого! Это открывает ваш сервер базы данных буквально любому, явно предоставляя им доступ к маскировке под себя как ваш веб-сервер и сводя на нет любые возможности сервера базы данных самостоятельно устанавливать брандмауэр. Кроме того, все, что вы делаете по этому соединению, будет незашифровано, включая имя пользователя и пароль сервера базы данных! Так что не делай этого! Ваш SSH-туннель обеспечивает аутентификацию и шифрование, чего не делает эта переадресация портов.
Кроме того, почему вы используете такую старую версию Shorewall? Я использую Shorewall в течение многих лет, и когда я начинал, версия 3 была устаревшей! Вы должны быть по крайней мере на 4.0 к настоящему времени, или еще лучше на 4.2 или 4.4. Постоянное обновление программного обеспечения безопасности абсолютно необходимо!
Если вы не хотите хранить туннель ssh, вы можете настроить автоматическое шифрование VPN, например openvpn, чтобы сделать то же самое. Это сделает ваш сервер более защищенным.
Я думаю, что вы можете достичь того, что вы хотите, с помощью чего-то подобного (не проверено, только из памяти и, вероятно, не будет работать, но может дать вам несколько советов для начала). В веб-сервере попробуйте:
iptables -t nat -I PREROUTING -p tcp --dport 5678 -j REDIRECT --to-port 1234
iptables -t nat -A PREROUTING -p tcp --dport 1234 -j DNAT --to-destination database.server.com
Если у вас нет сервера базы данных, напрямую недоступного с вашего маршрутизатора, вы можете сделать то же самое, просто сопоставив соответствующие порты непосредственно на вашем маршрутизаторе.
Однако, по моему мнению, вы все равно должны использовать ваш ssh-туннель, потому что его преимущества:
1) соединение требует аутентификации, что хорошо 2) трафик зашифрован 3) вы можете настроить соединение в любое время с помощью ssh (добавив сжатие, добавив больше портов в туннель, добавив привязки socks5 и т. Д...