Duas maneiras de fazer isso vêm à mente:
- Execute o aplicativo sob o controle de
strace
, que registra todas as chamadas do sistema, incluindo as tentativas de conexão.
Digamos que você queira executar firefox
e ver com o que se conecta:
# Start the process under the control of strace, logging only network-related calls:
strace -e trace=network -o network_calls -f firefox
# After finishing working with firefox, print the IPs it tried to communicate with:
grep -o -P '(\d+\.){3}\d+' network_calls | sort -u
Isso pode ser roteirizado, para que a strace seja executada constantemente e o arquivo de log seja alternado periodicamente, etc., mas o método abaixo é mais adequado se você quiser deixar o aplicativo em execução por mais tempo e evitar a necessidade de gravar scripts.
- Execute o aplicativo como um usuário diferente e adicione regras de iptables que correspondam com base no UID do proprietário do processo e aja de acordo.
Exemplo descartando o tráfego de rede de um usuário com o UID 5555:
iptables -A OUTPUT -m owner --uid-owner 5555 -j DROP
Você pode substituir DROP por LOG, fazer o que quiser, como conexões de aceleração, portas selecionadas que deseja negar, etc.
Adicione um comentário se você quiser que eu expanda uma abordagem específica e eu devo atualizar minha resposta.