SRV_PROXY
Co je to reverse PROXY?
Reverzní proxy server je principem velmi podobný proxy serveru. Sdružuje (resp. rozděluje) požadavky klientů, kteří jsou k němu připojeni. V praxi se nejčastěji využívá s několika připojenými servery. Všechna připojení z internetu směřující na některý ze těchto serverů jsou směrována přes tento reverzní proxy server, který buďto požadavek zpracuje sám nebo ho předá dál serverům.
Převzato z: https://cs.wikipedia.org/wiki/Reverzní_proxy
Odkazy ke studiu:
http://kselax.ru/en/set-up-apache2-nodejs-reverse-proxy-server/
Návod na instalaci
1) Založíme nový LXC container
dle tohoto návodu: https://intranet.rs-kovarik.cz/srvtemplate Místo SRV_TEMPLATE zadat jméno SRV_PROXY
2) Připojíme se k serveru přes terminál
ssh připojení k Turiisu a pak přes lxc-attach
Příkazy:
lxc-attach SRV_PROXY
3) Instalace apache2
Příkazy:
apt update
apt install apache2
3) Povolení služby apache2
Příkazy:
systemctl enable apache2
4) Port forwarding
Nastavíme si prostup z venku 80 a 443 tcp na tento server na proty 80 a 443.
Je jedno jestli napřímo z omnie, nebo 80 napřímo a 443 přes SRV_SSLH kde budeme pměrovat SSL na SRV_PROXY.
Toto není věc, která by se dala zdokumentovat copy&paste
5) Nastavení DNS záznamů u správce donény
Nastavíme A záznamy na domény, které chceme směřovat na náš server.
Ověříme, že po zadání naší domény se dostaneme po http na default stránku apache2 serveru.
6) SSL certifikáty od lets encrypt
Řídíme se dle návodu:
(pozor snapd nefunguje na turris LXC) https://certbot.eff.org/lets-encrypt/ubuntufocal-apache
Příkazy:
apt update
apt install certbot
apt install python3-certbot-apache
Zastaralý postup instalace certboot - již nefunkční:
Detailní manuál zde: https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-ubuntu-18-04
Příkazy:
apt-get install software-properties-common
add-apt-repository ppa:certbot/certbot
apt update
apt install python-certbot-apache
Dále by mělo být stejné
Konfigurace apache serveru:
Smažeme vše ze složek /etc/apache2/sites-available/* /etc/apache2/sites-enabled/*
Vytvoříme nový soubor dle naší domény.
nano /etc/apache2/sites-available/your_domain.conf
Do souboru vložit následující konfiguraci:
<VirtualHost *:80>
ServerName your_domain.top_level_domainServerAdmin your_email
DocumentRoot /var/www/htmlErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined</VirtualHost>
Povolíme naší novou konfiguraci
a2ensite your_domain
service apache2 restart
service apache2 status (mělo by být active)
Pokud máme víve domén (i třetího řádu) tak opakujeme pro jednotlivé domény ten samý postup od bodu Vytvoříme nový soubor dle naší domény)
Instalace certifikátu:
certbot --apache -d your_domain
(pokud máme více domén, tak přidáváme jen -d domain1.test -d domain2.test)
Měl by se nás zeptat zde chceme přesměrovávat. Dáme že jo:
Následný výstup pokud vše proběhne tak asi takto:
Automatická obnova:
Vyzkoušíme následující příkaz:
certbot renew --dry-run
Měl by proběhnout bez chyby.
Přidáme úlohu do cronu:
crontab -e
Vložíme následující příkaz, uložíme a zavřeme
#renew SSL certificates
0 0 1 * * sudo certbot renew --dry-run
ctrl+x uložit a enter
7) Konfigurace proxy apache serveru
Zde částečně vycházím z https://www.digitalocean.com/community/tutorials/how-to-use-apache-http-server-as-reverse-proxy-using-mod_proxy-extension a částečně z vlastních poznatků a zkušeností.
Část která nejde dělat přesně copy&paste, ale je nutné si uvědomit případné souvislosti dle toho jaký systém zpřístupňujeme přes tuto proxy!
Příkazy na povolení potřebných modulů pokud nějaký nejde, je nutné najít na google doinstalovat a upravit návod:
a2enmod ssl
a2enmod proxy
a2enmod proxy_http
a2enmod http2
a2enmod proxy_http2
a2enmod proxy_connect
a2enmod proxy_wstunnel
a2enmod lbmethod_byrequests
a2enmod proxy_html
a2enmod rewrite
Restart apache:
service apache2 restart
service apache2 status
Samotné nastavení reverse proxy se provádí v konfiguraci ssl verzí stránek v apache. Například soubor /etc/apache2/sites-available/your-doamin.le-ssl.conf Zde už musíme vědět čeho přesně chceme dosáhnout uvedu zde pouze několik příkladů, jak může konfigurace vypadat:
Příklad pro VOUCH proxy.
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName proxy.rs-kovarik.czServerAdmin info@rs-kovarik.cz
DocumentRoot /var/www/htmlSSLProxyEngine On
ProxyRequests Off
ProxyPreserveHost On
ProxyHTMLInterp OnProxyHTMLExtended On
ProxyHTMLURLMap (.*)192.168.1.32(.*) $1proxy.rs-kovarik.cz$2 [Rin]# SSLProxyCheckPeerCN on
# SSLProxyCheckPeerExpire onAlias /.well-known/acme-challenge/ "/var/www/html/.well-known/acme-challenge/"
ProxyPass /.well-known/acme-challenge !ProxyPass /portainer/api/websocket/ wss://192.168.1.32:443/portainer/api/websocket/
ProxyPassReverse /portainer/api/websocket/ wss://192.168.1.32:443/portainer/api/websocket/ProxyPass /dmz/json ws://192.168.1.153:83/dmz/json
ProxyPassReverse /dmz/json ws://192.168.1.153:83/jsonProxyPass / https://192.168.1.32:443/
ProxyPassReverse / https://192.168.1.32:443/RewriteEngine on
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warnErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combinedInclude /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/proxy.rs-kovarik.cz/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/proxy.rs-kovarik.cz/privkey.pem
</VirtualHost>
</IfModule>
Příklad pro kerberos.io a VOUCH proxy:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName cam1.proxy.rs-kovarik.czServerAdmin info@rs-kovarik.cz
DocumentRoot /var/www/html
SSLProxyEngine On
ProxyRequests Off
ProxyPreserveHost On
ProxyHTMLInterp OnProxyHTMLExtended On
ProxyHTMLURLMap (.*)192.168.1.32(.*) https://cam1.proxy.rs-kovarik.cz$2 [Rin]SSLProxyCheckPeerCN off
SSLProxyCheckPeerExpire offAlias /.well-known/acme-challenge/ "/var/www/html/.well-known/acme-challenge/"
ProxyPass /.well-known/acme-challenge !ProxyPass / https://192.168.1.32:443/
ProxyPassReverse / https://192.168.1.32:443/RewriteEngine on
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combinedSSLCertificateFile /etc/letsencrypt/live/proxy.rs-kovarik.cz/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/proxy.rs-kovarik.cz/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>Příklad pro VOUCH proxy:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName vouch.rs-kovarik.czServerAdmin info@rs-kovarik.cz
DocumentRoot /var/www/htmlAlias /.well-known/acme-challenge/ "/var/www/html/.well-known/acme-challenge/"
ProxyPass /.well-known/acme-challenge !ProxyPreserveHost on
ProxyPass / http://192.168.1.34:9090/
ProxyPassReverse / http://192.168.1.34:9090/SSLCertificateFile /etc/letsencrypt/live/proxy.rs-kovarik.cz/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/proxy.rs-kovarik.cz/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>Příklad pro nagios:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName nagios.rs-kovarik.czServerAdmin info@rs-kovarik.cz
DocumentRoot /var/www/htmlProxyPreserveHost on
Alias /.well-known/acme-challenge/ "/var/www/html/.well-known/acme-challenge/"
ProxyPass /.well-known/acme-challenge !ProxyPass / http://192.168.1.153:81/
ProxyPassReverse / http://192.168.1.153:81/SSLCertificateFile /etc/letsencrypt/live/proxy.rs-kovarik.cz/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/proxy.rs-kovarik.cz/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>Příklad pro gps:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName gps.rs-kovarik.czServerAdmin info@rs-kovarik.cz
DocumentRoot /var/www/htmlProxyRequests off
Alias /.well-known/acme-challenge/ "/var/www/html/.well-known/acme-challenge/"
ProxyPass /.well-known/acme-challenge !ProxyPass /api/socket ws://192.168.1.133:9090/api/socket
ProxyPassReverse /api/socket ws://192.168.1.133:9090/api/socketProxyPreserveHost on
ProxyPass / http://192.168.1.133:9090/
ProxyPassReverse / http://192.168.1.133:9090/SSLCertificateFile /etc/letsencrypt/live/proxy.rs-kovarik.cz/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/proxy.rs-kovarik.cz/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>


