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.
Esegui 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 usare questo tunnel, hai bisogno del controllo su un dominio reale (come mydomain.com),
e di 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 lasciare che iodined inoltri 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. ; nota il punto!
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. Semplicemente
punta la riga NS ad esso, e ometti la riga A:
t1 IN NS myname.mydyndnsprovider.com. ; nota il punto!
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 aiuta 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) o dopo che il server è
stato avviato. Ora tutto è pronto per il client.
Se c'è la possibilità che userai 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. Accetta 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 dare direttamente l'indirizzo
del server iodined come primo argomento (nell'esempio: t1ns.mydomain.com o
10.15.213.99). In quel 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 il tunneling DNS in ogni caso, usa
l'opzione -r (particolarmente utile quando si testa all'interno della propria rete).
L'interfaccia del tunnel del client otterrà un IP vicino a quello del server (in questo
caso 192.168.99.2 o .3 ecc.) e una MTU adeguata. Inserisci la stessa password del
server, sia come opzione da riga di comando che dopo che il client è stato avviato.
Usare l'opzione -f manterrà il client iodine in esecuzione in primo piano.
Riga di comando risultante in questa situazione di esempio, aggiungendo -r forza il tunneling DNS anche se il tunneling UDP raw sarebbe possibile:
./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 ascolta sia IPv4 che 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
di relay tradurranno automaticamente tra i protocolli se necessario. Usa
le opzioni -4 o -6 per forzare il client a usare una versione IP specifica per le sue query
DNS.
Se il tuo server è in ascolto su IPv6 ed è raggiungibile, aggiungi un record AAAA per esso alla tua configurazione DNS. Estendendo l'esempio sopra apparirebbe così:
t1 IN NS t1ns.mydomain.com. ; nota il punto!
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 questo, prima aggiungi una route host verso il nameserver usato da iodine attraverso l'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 incapsulato non è affatto cifrato, e può essere letto e modificato da parti esterne relativamente facilmente. Per la massima sicurezza, esegui una VPN attraverso il tunnel DNS (=doppio tunneling), o usa l'accesso secure shell (SSH), possibilmente con port forwarding. Quest'ultimo può anche essere usato per la navigazione web, quando esegui un proxy web (per 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 vedere 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, per esempio:
dig -t TXT z456.t1.mydomain.com
dig -t SRV z456.t1.mydomain.com
dig -t CNAME z456.t1.mydomain.com