Ciao ragazzi, oggi ho un problemino dal quale non riesco a uscire.
E' molto tecnico e non ho mai dovuto affrontare una cosa simile quindi nonostante tutto non capisco dove stia l'inghippo.

Dunque....ho un Proxy con apache che mi smista il traffico sui server interni.
Il proxy ha IP privato 172.16.0.10 e intercetta tutte le richieste sulle porte 80 e 443 che arrivano da internet.
Apache è configurato come reverse proxy, quindi per esempio la richiesta al sito alfa.com va sul server 172.16.0.100, quella per beta.com va su 172.16.0.101 e via così.

Apache è configurato con cose di questo tipo
codice:
<VirtualHost *:80>
    ServerName alfa.com
    ServerAlias www.alfa.com
    ProxyPass / http://www.alfa.com/ keepalive=On retry=5
    ProxyPassReverse / http://www.alfa.com/
</VirtualHost>
<VirtualHost *:443>
    ServerName alfa.com
    ServerAlias www.alfa.com
    SSLProxyEngine On
    SSLCertificateFile /etc/letsencrypt/live/alfa.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/alfa.com/privkey.pem
    ProxyPass / h2://alfa.com/ keepalive=On retry=5
    ProxyPassReverse / h2://alfa.com/
</VirtualHost>
Ovviamente il proxy risolve, tramite Dns, gli ip interni corretti (per il proxy, alfa.com corrisponde a 172.16.0.100).
Fin qui tutto bene, funziona tutto alla perfezione (anche se ho il dubbio che prima o poi mi levo sul dover dichiarare i certificati ma amen).

Ora....vorrei che alcune richieste, da ip pubblici particolari, venissero girati su una porta specifica del proxy che poi verrà a sua volta girata verso un vhost particolare di un altro server.

Richieste da 10.10.10.10 (ip a caso, ovviamente) per l'indirizzo alfa.com, sulla porta 443, devono venire rigirate ad alfa.com sulla porta 666 (del proxy!!) che a sua volta ha una direttiva Apache come questa
codice:
<VirtualHost *:666>
    ServerName alfa.com
    ServerAlias www.alfa.com
    CustomLog ${APACHE_LOG_DIR}/access666.log vhost_combined
    SSLProxyEngine On
    SSLVerifyClient optional_no_ca
    SSLVerifyDepth 5
    SSLCertificateFile "/etc/letsencrypt/live/Certificati/alfa.com_server.pem"
    SSLCertificateKeyFile  "/etc/letsencrypt/live/Certificati/ChiavePrivataServer.key"
    SSLCertificateChainFile "/etc/letsencrypt/live/Certificati/CAAuth_prod.der"
    SSLCACertificateFile "/etc/letsencrypt/live/Certificati/CA_all.pem"
    
    ProxyPass / h2://alfa.com/ keepalive=On retry=5
    ProxyPassReverse / h2://alfa.com/
</VirtualHost>
Questo perchè per le richieste da 10.10.10.10 vogliono che sia presentato un certificato particolare che non viene riconosciuto dai browser e quindi non posso fornire a tutti un certificato non valido altrimenti gli altri vedono il classico "sito non sicuro" ecc ecc.

Quindi, chi mi manda le richieste da 10.10.10.10 vuole verificare che "io sia io" e mi ha fornito un suo certificato che non viene riconosciuto dai browser.

Ora...ho provato con una cosa del genere ma, sebbene "giri", il loro servizio continua a mandare per 4 volte la stessa richiesta perchè, credo, non riceve il mio "ok, tutto a posto" che invio dopo aver elaborato i dati.

codice:
iptables -t nat -A PREROUTING -p tcp -s 10.10.10.10/20 --dport 443 -j DNAT --to-destination 172.16.0.10:666
iptables -t nat -A POSTROUTING -p tcp -d 172.16.0.10 --dport 666 -j SNAT --to-source 172.16.0.10
Aiuuutooooo :-D