La risposta breve è: no di design , ed ecco un esempio di cosa dovrebbe succedere se fosse possibile:
- netcat apre il socket sulla porta X chiamando il relativo syscall (come
listen
)
- il kernel intercetta syscall, esegue il codice di rete (in questo caso, apre la porta)
Il kernel - parla al modulo
iptables
relativo (supponendo che sia disponibile e caricato) e apre un buco nel firewall per consentire al traffico di passare alla porta appena aperta.
Ciò aprirebbe un potenziale buco di sicurezza: come potrebbe il kernel sapere che il programma è legittimo, cioè non è un trojan che vuole aprire una shell remota? Ecco alcune risposte:
- Perché il programma è in whitelist da qualche parte; ma questo sposterebbe la sicurezza in un'altra serie di problemi:
- come fai a sapere che il programma non è stato compromesso? Potresti usare qualcosa come tripwire, ma questo apre un'altra domanda di sicurezza: come puoi garantire che l'elenco principale non sia compromesso?
- come gestisci gli aggiornamenti? Per esempio. la versione Z di
ssh
può perforare il firewall; il tuo sistema si auto-aggiorna, ora l'hash di ssh
è cambiato e sei bloccato.
- Poiché l'utente che lo avvia appartiene a un gruppo privilegiato: come gestisci i binari SUID? Dai un'occhiata alle autorizzazioni del programma
ping
, ad esempio.
Un'altra possibilità di worm ^ W ^ W ^ W set di potenziali problemi sarebbe l'interfaccia tra iptables (a livello di kernel) e syscalls; ogni piccola modifica in iptables richiederebbe una potenziale riscrittura del codice sottostante alle syscalls, introducendo bug, ecc.
In breve, stai descrivendo il problema che i firewall delle applicazioni affrontano (pensa ai firewall Windows o Mac). È fattibile, ma non è semplice.
A livello di rete si potrebbe voler dare un'occhiata a UPnP la cui funzione era quella di consentire ai servizi di eseguire fori attraverso il firewall di un gateway. Con le ovvie conseguenze sulla sicurezza.
Oppure potresti usare uno script invece:)