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 log

iptables -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.43

Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all — anywhere anywhere

 

 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Dimostra che sei un umano. *