Как включить Linux firewall (ufw) для пользовательской программы, работающей на случайном порте - PullRequest
1 голос
/ 18 февраля 2020

Написанная программа на python, которая выбирает произвольный порт, доступный для связи по TCP и UDP. Если я включу Linux firewall (ufw), запустив sudo ufw enable. где мы можем разрешить любой порт, указав sudo ufw allow port_number. Так как программа может использовать любой произвольный порт при запуске, поэтому не может указать ufw разрешить какой-либо конкретный порт. Есть ли способ сказать ufw, чтобы позволить prog получить доступ к любому случайному порту, указав имя программы для ufw, как в windows. В брандмауэре windows мы можем предоставить следующую команду, чтобы разрешить доступ ко всем портам для myprog

netsh advfirewall firewall add rule name=rule_name_udp dir=in action=allow protocol=UDP localport=any program=path/myprog.exe

. Есть ли способ разрешить ufw моей пользовательской программе доступ к связи udp / tcp с включением ufw ?

Спасибо всем заранее.

1 Ответ

1 голос
/ 18 февраля 2020

Вы можете заключить ваше приложение в службу systemd и использовать перехват после запуска для вызова дополнительного bash скрипта, который пробивает дыры в брандмауэре.

/ path / to / python / app / assistant- ufw-hole-puncher

#!/bin/bash

#extra sleep for prespawn script
sleep 2

#punch holes for TCP ports
ports=`sudo netstat -ntlp 2>&1 |grep yourapp | sed -r 's/(.*:)([0-9]*)(\s.*)/\2/'|sort|uniq`
for port in $ports ; do
  sudo ufw allow $port
done

#punch holes for UDP ports
ports=`sudo netstat -nulp 2>&1 |grep yourapp | sed -r 's/(.*:)([0-9]*)(\s.*)/\2/'|sort|uniq`
for port in $ports ; do
  sudo ufw allow $port
done

Также вы можете запустить этот скрипт перед запуском скрипта, но вам нужно будет добавить дополнительный сон, чтобы дождаться запуска скрипта python.

#!/bin/bash

/path/to/python/app/assistant-ufw-hole-puncher &
python ./your-app.py
...