Instrada dati IPv4 attraverso server DNS per bypassare le restrizioni del firewall e fornire accesso di rete occulto per i test di penetrazione.
Questo è un software che consente di incapsulare dati IPv4 attraverso un server DNS. Può essere utile in diverse situazioni in cui l'accesso a Internet è protetto da firewall, ma le query DNS sono consentite.
Per compilare iodine è necessario meson.
Eseguire i seguenti comandi per compilare all'interno della directory build:
meson setup build
cd build
ninja
Per compilare ed eseguire i test è necessaria la libreria check. Avviali
eseguendo ninja test all'interno della directory di build.
Provalo all'interno della tua LAN! Segui questi semplici passaggi:
./iodined -f 10.0.0.1 test.com.
Se utilizzi già la rete 10.0.0.0, usa un'altra rete interna come
172.16.0.0../iodine -f -r 192.168.0.1 test.com.
Sostituisci 192.168.0.1 con l'indirizzo IP del tuo server.10.0.0.2 e il server ha 10.0.0.1.Per utilizzarlo effettivamente attraverso un nameserver di relay, vedi sotto.
Nota: server e client devono parlare esattamente lo stesso protocollo. Nella maggior parte dei casi, questo significa eseguire la stessa versione di iodine. Sfortunatamente, implementare la compatibilità di protocollo all'indietro e in avanti di solito non è fattibile.
Per utilizzare questo tunnel, è necessario avere il controllo su un dominio reale (come mydomain.com),
e un server con un indirizzo IP pubblico su cui eseguire iodined. Se questo server
esegue già un programma DNS, cambia la sua porta di ascolto e poi usa l'opzione
-b di iodined per consentire a iodined di inoltrare le richieste DNS. (Nota che questa procedura
non è consigliata in ambienti di produzione, perché l'inoltro DNS di iodined
non è completamente trasparente, ad esempio i trasferimenti di zona non funzioneranno.)
In alternativa puoi inoltrare il sottodominio dal tuo server DNS a iodined
che deve quindi essere eseguito su una porta diversa (-p).
Poi, delega un sottodominio (ad esempio, t1.mydomain.com) al server iodined.
Se usi BIND per il tuo dominio, aggiungi due righe come queste al file di zona:
t1 IN NS t1ns.mydomain.com. ; note the dot!
t1ns IN A 10.15.213.99
La riga NS è tutto ciò che serve per instradare le query per il sottodominio t1
al server t1ns. Usiamo un nome breve per il sottodominio, per mantenere quanto più
spazio possibile disponibile per il traffico dati. Alla fine della riga NS
c'è il nome del tuo server iodined. Può essere qualsiasi nome, che punta ovunque,
ma in questo caso è facilmente mantenuto nello stesso file di zona. Deve essere un nome
(non un indirizzo IP), e quel nome stesso deve avere un record A
(non un CNAME).
Se il tuo server iodined ha un IP dinamico, usa un provider di DNS dinamico. Basta
puntare la riga NS ad esso, e omettere la riga A:
t1 IN NS myname.mydyndnsprovider.com. ; note the dot!
Poi ricarica o riavvia il tuo programma nameserver. Ora qualsiasi query DNS per
domini che terminano in t1.mydomain.com sarà inviata al tuo server iodined.
Infine avvia iodined sul tuo server. Il primo argomento è l'indirizzo IP
all'interno del tunnel, che può essere di qualsiasi range che non usi ancora (per
esempio 192.168.99.1), e il secondo argomento è il dominio assegnato (in questo
caso t1.mydomain.com). Usare l'opzione -f manterrà iodined in esecuzione in
primo piano, il che è utile durante i test. iodined aprirà un'interfaccia virtuale
("tun device"), e inizierà anche ad ascoltare le query DNS sulla porta UDP 53.
Inserisci una password sulla riga di comando (-P pass) oppure dopo che il server
è stato avviato. Ora tutto è pronto per il client.
Se c'è la possibilità che utilizzerai un tunnel iodine da ambienti inaspettati,
avvia iodined con l'opzione -c.
Riga di comando risultante in questa situazione di esempio:
./iodined -f -c -P secretpassword 192.168.99.1 t1.mydomain.com
Tutta la configurazione è fatta, basta avviare iodine. Richiede uno o due argomenti, il
primo è il server DNS di relay locale (opzionale) e il secondo è il dominio
che hai usato (t1.mydomain.com). Se non specifichi il primo argomento, verrà consultata
l'impostazione DNS corrente del sistema.
Se le query DNS sono consentite verso qualsiasi computer, puoi fornire direttamente l'indirizzo del server iodined come primo argomento (nell'esempio: t1ns.mydomain.com o 10.15.213.99). In tal caso, può anche accadere che qualsiasi traffico sia consentito verso la porta DNS (53 UDP) di qualsiasi computer. Iodine lo rileverà e passerà al tunneling UDP raw se possibile. Per forzare in ogni caso il tunneling DNS, usa l'opzione -r (particolarmente utile durante i test all'interno della tua rete).
L'interfaccia tunnel del client otterrà un IP vicino a quello del server (in questo caso 192.168.99.2 o .3 ecc.) e un MTU adeguato. Inserisci la stessa password del server, sia come opzione da riga di comando sia dopo l'avvio del client. Usando l'opzione -f il client iodine rimarrà in esecuzione in primo piano.
La riga di comando risultante in questa situazione di esempio, aggiungendo -r forza il tunneling DNS anche se sarebbe possibile il tunneling UDP raw:
./iodine -f -P secretpassword t1.mydomain.com
Da entrambi i lati, ora dovresti essere in grado di fare ping all'indirizzo IP all'altro capo del tunnel. In questo caso, ping 192.168.99.1 dal client iodine, e 192.168.99.2 dal server iodine.
I dati all'interno del tunnel sono solo IPv4.
Il server è in ascolto sia su IPv4 che su IPv6 per le richieste in ingresso per impostazione predefinita. Usa le opzioni -4 o -6 per ascoltare solo su un protocollo. La modalità raw verrà tentata sullo stesso protocollo usato per il login.
Il client può usare nameserver IPv4 o IPv6 per connettersi a iodined. I nameserver relay tradurranno automaticamente tra i protocolli se necessario. Usa le opzioni -4 o -6 per forzare il client a usare una specifica versione IP per le sue query DNS.
Se il tuo server è in ascolto su IPv6 ed è raggiungibile, aggiungi un record AAAA per esso nella tua configurazione DNS. Estendendo l'esempio precedente sarebbe così:
t1 IN NS t1ns.mydomain.com. ; note the dot!
t1ns IN A 10.15.213.99
t1ns IN AAAA 2001:db8::1001:99
È possibile instradare tutto il traffico attraverso il tunnel DNS. Per fare ciò, aggiungi prima una route host verso il nameserver usato da iodine sull'interfaccia wired/wireless con il gateway predefinito come gateway. Poi sostituisci il gateway predefinito con l'indirizzo IP del server iodined all'interno del tunnel DNS, e configura il server per fare NAT.
Tuttavia, nota che il traffico dati incanalato nel tunnel non è affatto cifrato, e può essere letto e modificato da terze parti con relativa facilità. Per la massima sicurezza, esegui una VPN attraverso il tunnel DNS (=doppio tunneling), oppure usa l'accesso secure shell (SSH), eventualmente con port forwarding. Quest'ultimo può essere usato anche per la navigazione web, quando esegui un proxy web (ad esempio Privoxy) sul tuo server.
Il server iodined risponde alle richieste NS inviate per i sottodomini del dominio del tunnel. Se il tuo sottodominio iodined è t1.mydomain.com, invia una richiesta NS per foo123.t1.mydomain.com per verificare se la delega funziona.
dig è un buon strumento per questo:
% dig -t NS foo123.t1.mydomain.com
ns.io.citronna.de.
Inoltre, il server iodined risponderà alle richieste che iniziano con 'z' per qualsiasi dei tipi di richiesta supportati, ad esempio:
dig -t TXT z456.t1.mydomain.com
dig -t SRV z456.t1.mydomain.com
dig -t CNAME z456.t1.mydomain.com