Страницы

Поиск по вопросам

воскресенье, 12 января 2020 г.

Входящие соединения для приложения

#iptables


Имеется сервер на Ubuntu Linux. На сервере крутится демон с именем, например, daemon_bin.
Демон слушает сетевой порт, но этот порт в общем случае неизвестен. Можно считать,
что прослушиваемый порт открывается по запросу и имеет случайный номер.

Можно ли добавить в iptables правило, которое будет пропускать входящие соединения
только в том случае, когда они адресованы этому демону?

P.S. Предложения дать демону определённый диапазон портов и разрешить входящие для
этого диапазона не предлагать. Отключение файрвола также не вариант.
    


Ответы

Ответ 1



Если я понял, то доступа к сорцам скрипта нет. Поэтому, нужно действовать в обход. Для начала берем ltrace (или, возможно, strace) и запускаем приложение под ним. Если только там ничего не перестарались, то приложение будет дергать библиотечнык функции для открытия/закрытия сокетов. Убеждаемся, что вызовы проходят. Например, для бинда порта ожидается увидеть где то такое bind(3, 0x7ffd828bc018, 16, 8080) = 0 теперь нужно будет найти "парные вызовы". Скорее всего это будет listen/close или bind/close. Следующий этап - код. Берем любой пример, который показывает, как перехватывать вызовы к сокетам, я нашел здесь и оставляем только нужные нам вызовы. В "открывающей функции" можно подсмотреть номер порта и дескриптор сокета (это первое число). Сохраняем эту пару где нибудь себе (в хеш, в файл, в базу) и вызываем iptables, что бы он открыл нужный порт. В закрывающей функции по дескриптору находим порт и закрываем правило в iptables. В результате будет одна so'шка, которая будет подгружаться через LD_PRELOAD.

Комментариев нет:

Отправить комментарий