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