#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.
Комментариев нет:
Отправить комментарий