Port forwarding con rinetd, insieme ad iptables
Ci sono due modi su linux per fare port forwarding: usare iptables ed usare rinetd.
Iptables è il firewall nativo di linux, un packet manager che a gira a livello del kernel e fà moltissime altre cose.
rinetd invece si occupa di “intubare” il traffico da HOST:PORTA a ALTROHOST:ALTRAPORTA, senza fare nessun tipo di ispezione, controllo, filtraggio o quello che è.
rinetd può essere assai utile in una situazione come questa:
poniamo di avere il gateway della nostra rete così messo:
1) ip provato192.168.0.1
2) ip pubblico (fisso) 67.78.89.91
sui dns mondiali il sito www.puppa.org punta all’indirizzo publico del firewall, che fà port forwarding con un web server dentro la propria lan, web server che ha come ip privato 192.168.0.10.
Per arrivare al server web (porta 80) dall’esterno imposto iptables in questo modo.
iptables -t nat -A PREROUTING -p tcp --dport 80 -d 67.78.89.91 -j DNAT --to-destination 192.168.0.10
iptables -A FORWARD -p tcp --dport 80 -d 192.168.0.10 -j ACCEPT
iptables -A FORWARD -s 192.168.0.10 -m state --state ESTABLISHED,RELATED -j ACCEPT
In una situazione come questa se da un computer della rete 192.168.0.X provo ad aprire il si sito www.puppa.org usando l’indirizzo pubblico non potrò aprirlo.
Questo mi costringe a tenere un dns interno alla lan dove il sito www.puppa.org sarà puntato con il suo ip privato.
Detta cosi non è che la cosa sia particolarmente onerosa, in virtù del fatto che, se ho un domino windows, comunque un dns interno alla lan ce l’ho, me lo fà by design il Domain Controller.
Complichiamoci la vita: poniamo di avere un’altra sede, con una configurazione simile: un firewall con ip pubblico 45.56.67.78 e con ip privato 192.168.1.1, sulla lan all’indirizzo ip privato 192.168.1.20 trovo il mail serer aziendale, conosciuto al mondo con l’ip pubblico, e raggiungibile dall’esterno con il solito iptables sulla porte 25 e 110.
iptables -t nat -A PREROUTING -p tcp --dport 25 -d 45.56.67.78 -j DNAT --to-destination 192.168.1.2045.56.67.78
iptables -A FORWARD -p tcp --dport 25 -d 192.168.1.20 -j ACCEPT
iptables -A FORWARD -s 192.168.1.20 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 110 -d -j DNAT --to-destination 192.168.1.20
iptables -A FORWARD -p tcp --dport 110 -d 192.168.1.20 -j ACCEPT
iptables -A FORWARD -s 192.168.1.20 -m state --state ESTABLISHED,RELATED -j ACCEPT
Ovviamente le due sedi sono in VPN e tutti gli host si vedono tra di loro con gli indirizzi privati.
A questo punto sui dns delle due filiali dovrò gestire per ogni filiale gli host locali e gli host remoti separatamente.
Aggiungiamo una terza sede senza serivizi, il dns di qeusta terza sede dovrò gestire sempre gli stessi host, ma con tutti gli ip pubblici.
Tre sedi con tre configurazioni diverse, e la cosa può essere molto ma molto più complicata, fidatevi, ve lo dico per esperienza
A questo punto rinted può venire in aiuto:
1) nella sede con il web server configuro rinetd per fare il forward della porta 80 dall’ip pubblico all’ip privato, configurando, sempre sul firewall, il forwarding nel file di configurazione /etc/rinted.conf inserendo la riga
67.78.89.90 80 192.168.0.10 80
2) nella sede con il mail stessa cosa cosi
45.56.67.78 25 192.168.1.20 25
45.56.67.78 110 192.168.1.20 110
In questo modo posso:
1) gestire un solo dns dove configurare tutto e gli altri li imposto puppa.org come zona di replica dal primario
2) non gestisco alcun dns server locale, carico tutto sul dns del provider dove ho comprato i nuome (arub, tophost, register o chi per loro) e vivo felice
Della serie “tutto fà brodo”, qui trovate una lista di impostazioni da fare sulle regole di firewall di iptables e su alcuni impostazioni di sistema che possono rendere la vita un pochino più difficile agli “acher” che invece di andare a fare