Обертка для предотвращения доступа программы к нелокальным соединениям

Рассмотрим server программ, который связывается с '*' и прослушивает входящие соединения. Я подключаюсь только к server с localhost, и я не хочу, чтобы внешние пользователи могли подключиться к нему. Тем не менее, программа server плохо написана и не предоставляет параметр конфигурации или флаг для привязки только к localhost. Кроме того, мне неудобно взломать исходный код server чтобы исправить это.

Следовательно, я бы искал оболочку для запуска server но привязывал его к localhost, а не к '*'. (Например, может быть, трюк, основанный на LD_PRELOAD, мог бы выполнить эту работу, например, tsocks чтобы принудительно использовать прокси SOCKS в сторонней программе.) Существует ли что-то подобное? Я нахожусь на машине, если это помогает.

Я знаю, что другое решение будет состоять в том, чтобы использовать iptables для этого, но эти правила не сохраняются при перезагрузках, чтобы они могли тихо сломаться. Кроме того, они являются «глобальными» и могут быть изменены другими пользователями сервера или запутать их. Напротив, при запуске серверной программы в качестве wrapper server я бы более уверен, что установка не будет ломаться по какой-либо другой причине.

One Solution collect form web for “Обертка для предотвращения доступа программы к нелокальным соединениям”

Вот как это сделать, используя пространства имен ip (требуется привилегии root, следующее должно выполняться как root).

Создайте пространство имен для сервера:

ip netns add myserverns

Назначьте IP-адрес loopback в пространстве имен и включите его (source: this post ):

ip netns exec myserverns ifconfig lo 127.0.0.1 up

Запустить server в пространстве имен (где «serveruser» – это пользователь, который должен запускать сервер)

ip netns exec myserverns sudo -u serveruser server

Предположим, что сервер прослушивает порт 4242 . Теперь используйте socat для привязки loopback к пространству имен (обратите внимание на использование bind=127.0.0.1 которое является целым) (source: this answer ):

socat tcp-listen:4242,bind=127.0.0.1,fork,reuseaddr exec:'ip netns exec myserverns socat STDIO tcp-connect\:127.0.0.1\:4242',nofork

Это достигает моей намеченной цели: даже если server пытается привязываться к «*» (или к разным портам вообще), когда мы запускаем его таким образом, мы уверены, что его можно найти только на локальной машине с портом 4242 .

  • Что означает TCPRcvCoalesce, TCPAutoCorking и TCPHystartTrainCwnd в netstat?
  • Как настроить OpenVPN для ожидания медленных прокси SOCKS?
  • Переносить TCP-соединение из одного окна Linux в другое за NAT?
  • Какой процесс отправляет TCP SYN на Solaris 10?
  • Как слушать все порты (UDP и TCP) или сделать их все открытыми в Debian
  • Socat открывает TCP только при открытии PTY
  • Доступна реализация TCP Westwood?
  • IPv6 через TCP или TCP6
  • Каковы другие алгоритмы управления перегрузками, специально разработанные для беспроводных сетей с потерями, таких как LTE и WiMax?
  • Какие порты будут использовать ssh-демон?
  • configure allowed_tcp_congestion_control через конфигурационные файлы в ядре linux
  • Interesting Posts

    GNU находит и маскирует {} для некоторых оболочек – что?

    Измените выход (приемник) с помощью терминала

    начать процесс из ssh и иметь возможность закрыть соединение

    Broadcom brcmfmac (BCM43143) Проблемы с MAC-адресом

    Как использовать Super-L вместо Alt в XFCE для изменения размера / перемещения окон?

    Вывод `java -version` не соответствует grep или awk

    Есть ли основной учебник для grep, awk и sed?

    Почему утилита uniq дает мне неожиданные результаты?

    синхронизировать файлы с разным расширением в MacOS

    лучший способ получить memfree из / proc и преобразовать в десятичный

    Как обрабатывать удаленный txt-файл как поток?

    Дублировать и отправлять исходящие UDP-пакеты через два интерфейса, ориентированные на Интернет.

    Разрешить ftp через iptables

    Как узнать, какие устройства требуют ручной установки определенного драйвера?

    почему ss (8) понимает прослушивание портов UDP по-другому, чем netstat (8)?

    Linux и Unix - лучшая ОС в мире.