Redirezione traffico di rete con IPtables
Quando un server viene migrato e alla nuova macchina viene assegnato un nuovo indirizzo IP può capitare che alcune richieste di connessione raggiungano ancora il vecchio indirizzo a causa dei tempi necessari alla propagazione dei server DNS oppure a client che puntano all’indirizzi IP del server invece che all’fqdn (fully qualified domain name). In questi casi è possibile configurare una macchina linux con l’indirizzo del vecchio server e utilizzare iptables per redirigere chiamate verso porte specifiche al nuovo indirizzo.
Prerequisiti
Configurare un server minimale con Ubuntu 18.04. Nell’esempio seguente il server ubuntu ha indirizzo ip 172.18.3.41 e attraverso delle regole di iptables configurate in uno script vengono redirette le chiamate sulla porta RDP (3389 tcp) verso l’indirizzo 172.18.3.43 effettuando il log dei pacchetti in un file specifico.
Tutti i comandi vengono eseguiti come utente root, in caso contrario è necessario utilizzare sudo.
Configurazione iptables
Creare la directory /iptables con all’interno lo script con le regole (iptables.sh) e il file di log (iptables.log).
mkdir /iptables
touch /iptables/iptables.sh
touch /iptables/iptables.log
chmod 774 /iptables/iptables.sh
chmod 666 /iptables/iptables.log
Compilare lo script /iptables/iptables.sh nella maniera seguente:
#!/bin/bash
# Abilita IP forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
# flush tables
iptables -F
iptables -t nat -F
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT# Configurazione regole per redirezione traffico destinato alla porta tcp 3389 verso l’indirizzo 172.18.3.43.
# La prima regola imposta un prefisso aggiunto ai file di logiptables -t nat -A PREROUTING -p tcp –dport 3389 -j LOG –log-prefix “iptables: Forward RDP ”
iptables -t nat -A PREROUTING -p tcp –dport 3389 -j DNAT –to-destination 172.18.3.43
iptables -t nat -A POSTROUTING -j MASQUERADE
Per utilizzare il file di log appositamente creato creare il file /etc/rsyslog.d/10-iptables.conf
touch /etc/rsyslog.d/10-iptables.conf
chmod 644 /etc/rsyslog.d/10-iptables.conf
Modificare il file 10-iptables.conf come segue:
# Log iptables
:msg, contains, “iptables:” -/iptables/iptables.log
Per caricare lo script all’avvio del sistema aggiungere al file /etc/crontab la seguente stringa:
@reboot root /iptables/iptables.sh
Al riavvio del sistema è possibile verificare se le regole sono state applicate eseguento il comando:
iptables -t nat -L
Il risultato dovrebbe essere il seguente:
root@ipforwarder:/# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
LOG tcp — anywhere anywhere tcp dpt:3389 LOG level warning prefix “iptables: Forward RDP ”
DNAT tcp — anywhere anywhere tcp dpt:3389 to:172.18.3.43Chain INPUT (policy ACCEPT)
target prot opt source destinationChain OUTPUT (policy ACCEPT)
target prot opt source destinationChain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all — anywhere anywhere