ИМХО, нерешаемо. Дело в том, что сама ОС знает, какие программы открывают какие порты. И в пределах одного компьютера нет проблемы разрешать хождение пакетов "per app". Но когда пакеты отправляются на внешний маршрутизатор - на них уже нет никаких идентификаторов, какая программа их отправила.
Это понятно, все так.
Но ведь решение может быть двух компонентным:
- Ядро фаервала на роуте, типа сервер.
- А клиент на машине админа.
Клиент может ходить в сервер за новыми запросами на пермисшон вида IP:port --> IP:port
и уже на машине админа смотреть по крайней мере софт и порты машины админа.
А если клиент будет и на остальных машинах - будет больше охват по тому "от какого софта идёт запрос наружу".
То есть проблема совершенно точно решаема, хотя и не с наскоку.