Apache/nft: Come mostrare due contenuti web differenti in base all’IP sorgente

Ultimamente mi è stato chiesto di impostare apache per mostrare il contenuto di due diverse cartelle in base all’IP sorgente.

Avrei potuto usare una regola di rewrite, ma serviva qualcosa per simulare completamente il funzionamento di un sito di preproduzione, prima di andare effettivamente in produzione.

La cosa più semplice? Configurare ed attivare un nuovo virtualhost su una differente porta e poi creare delle regole di nat/routing per smistare il traffico da un determinato IP verso il nuovo virtual host.

Ma veniamo alla pratica.

Il nuovo virtualhost sarà configurato allo stesso modo del primo, tranne che risponderà su una differente porta (es la 442) e con una differente DocumentRoot, es:


ServerName www.nomedominio.it
DocumentRoot /var/www/sito.new
...
...

Inoltre, nel file /etc/apache2/ports.conf dovremo informare apache di mettersi in ascolto anche sulla nuova porta, aggiungendo la direttiva Listen:
Listen 442

Attiviamo il virtualhost e riavviamo apache:
a2ensite nomedominio.it.conf
service apache2 reload

A questo punto, basterà configurare il nostro /etc/nftables.conf per gestire il routing dei pacchetti arrivati dall’IP/porta indicati. In particolare dovrà essere aggiunta questa sezione:
table ip nat {
chain prerouting {
type nat hook prerouting priority 0; policy accept;
ip saddr XX.XX.XX.XX tcp dport 443 dnat :442
}
chain postrouting {
type nat hook postrouting priority 10; policy accept;
}
}

Ovviamente XX.XX.XX.XX sarà l’IP a cui vogliamo far vedere il contenuto del nuovo virtualhost.

Infine, nella chain input dovrà essere abilitata anche la nuova porta, es:
...
table inet filter {
chain input {
...
...
tcp dport { 80, 443, 442 } ct state new accept
...
...
}
}

Ricarichiamo le regole di nftables:
nft -f /etc/nftables.conf

Ora se dall’IP XX.XX.XX.XX richiameremo www.nomedominio.it, vedremo il contenuto della cartella /var/www/sito.new

enjoy!

Se hai trovato utili le informazioni su questo blog,
Fai una donazione!
Clicca sul bottone qui sotto o almeno clicca sul banner pubblicitario 🙂



Taggato su: , ,

Commenta