Reverse proxy on erittäin hyödyllinen jos palvelimia on paljon, mutta sinulla on vain 1 tai rajattu määrä ip-osoitteita. Tässä ohjeessa minulla on 1 ip-osoite, sekä 3 muuta palvelinta jotka haluan internettiin. Tässä tilanteessa tarvitaan 1 kone ohjaamaan kaiken liikenteen julkisesta ip-osoitteesta ja siirtämällä clientin palvelimelle jota hän on kutsunut.
Jos taas et ole jo luonut alidomainin palvelimia, voit katsoa alla olevat linkit niiden tekoon.
Ensin asennetaan www-palvelin joka hoitaa uudelleenohjauksen eri palvelimiin. Myös tarvittavat moduulit jotka proxyn tekemiseen tarvitaan.
apt-get install apache
systemctl enable apache2
systemctl start apache2
Nyt asennetaan palomuuri koneelle, sillä avataan portit 80 (webpalvelin) ja 443 (ssl-salattu liikenne)
apt-get install ufw
systemctl enable ufw
systemctl start ufw
ufw allow 80
ufw allow 443
Vielä pieni ohjelma jolla estetään ylimääräisiä kirjautumisia varsinkin jos ssh yhteys on otettu käyttöön.
apt-get install fail2ban
systemctl enable fail2ban
Sitten vielä lopuksi apachen proxy moduulit käyttöön
a2enmod proxy
a2enmod proxy_http
a2enmod proxy_balancer
a2enmod lbmethod_byrequests
Ensin nimetään oletus konfigurointi tiedosto uuteen.
cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/reverseproxy.conf
Otetaan uusi tiedostot voimaan ja poistetaan vanha käytöstä.
a2ensite reverseproxy.conf
a2dissite 000-default.conf
Lopuksi vielä käynnistetään Apache uudelleen ja tarkistetaan sen tila.
systemctl restart apache2
systemctl status apache2
Tehdään vielä symlink jotta samaa tiedostoa voidaan muokata useammasta eri polusta. Tässä tilanteessa /sites-available ja /sites-enabled
ln -s /etc/apache2/sites-available/reverseproxy.conf /etc/apache2/sites-enabled/reverseproxy.conf
Lisätään isäntätiedostoon vielä alidomainit joita halutaan käyttää.
nano /etc/hosts
178.55.172.151 lassinsivut.eu cloud.lassinsivut posti.lassinsivut.eu
Jos sinulla ei ole kiinteää ip-osoitetta, tee tässä muodossa:
192.168.101.133 lassinsivut.eu
192.168.101.134 cloud.lassinsivut.eu
192.168.101.135 posti.lassinsivut.eu
Asennetaan vielä php. Tätä ei ole pakko asentaa, mutta sille on monesti tulevaisuudessa tarvetta.
apt install apt-transport-https lsb-release ca-certificates
apt install wget
apt-get install gnupg
apt install software-properties-common ca-certificates lsb-release apt-transport-https
sh -c ’echo ”deb https://packages.sury.org/php/ $(lsb_release -sc) main” > /etc/apt/sources.list.d/php.list’
wget https://packages.sury.org/php/apt.gpg
apt-key add apt.gpg
apt-get update
SUOSITTELEN KÄYTTÄMÄÄN UUSINTA PHP VERSIOTA. (Ohjeen tekohetkellä 8.2)
apt install apache2 php7.4 libapache2-mod-php7.4 php7.4-common php7.4-mbstring php7.4-xmlrpc php7.4-soap php7.4-gd php7.4-xml php7.4-intl php7.4-mysql php7.4-cli php7.4-ldap php7.4-zip php7.4-curl
Nähdään php versio sekä onko asennus onnistunut.
php-v
Muokataan aikaisemmin luotua proxy konfigurointi tiedostoa ja tehdään alidomainien konfigurointi sinne.
/etc/apache2/sites-enabled/reverseproxy.conf
Seuraavaksi lisätään alidomainien niinsanotut ”blockit”. Niihin määritellään että kyseessä on reverse proxy, mikä paikallinen ip-osoite ohjataan siihen, mikä alidomain sekä tarvittaessa uudelleenohjaus www tai ilman https ssl suohaukseen. Ssl suojaus määritellään alempana.
<VirtualHost *:80>
ProxyPreserveHost On
ProxyPass / http://192.168.101.133:80/
ProxyPassReverse / http://192.168.101.133:80/
ServerName lassinsivut.eu
ServerAlias www.lassinsivut.eu
RewriteEngine on
Redirect permanent / https://lassinsivut.eu
RewriteCond %{SERVER_NAME} =lassinsivut.eu [OR]RewriteCond %{SERVER_NAME} =www.lassinsivut.eu
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]</VirtualHost>
<VirtualHost *:80>
ProxyPreserveHost On
ProxyPass / http://192.168.101.134:80/
ProxyPassReverse / http://192.168.101.134:80/
ServerName cloud.lassinsivut.eu
ServerAlias www.cloud.lassinsivut.eu
RewriteEngine on
Redirect permanent / http://cloud.lassinsivut.eu
RewriteCond %{SERVER_NAME} =cloud.lassinsivut.eu [OR]RewriteCond %{SERVER_NAME} =www.cloud.lassinsivut.eu
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]</VirtualHost>
Kirjoita nyt selaimeesi domainisi sekä valitut alidomainit, ne ohjaavat
Nyt kirjoitetaan selaimeen omat domainit ja huomataan että sielä tulee oikeat palvelimet vastaa, mutta ongelmana on että yhteys ei ole suojattu ja salattu. Tarvitaan siis ssl sertifikaatti asennettua.
Asennetaan ssl tämä suojaa sekä salaa kaiken liikenteen sinun ja palvelimen välillä. Mahdollista myös luoda ssl wildfire, siinä sinulla on vain yksi sertifikaatti jokaisen alidomainin sijasta. Tämä voi tulla hyödylliseksi etenkin kuin eri domaineja sekä alidomaineja alkaa olemaan erittäin paljon. Tässä kuitenkin asennan normaalin sertifikaatin jokaiselle alidomainille jotta yksinkertaisyys pysyy.
apt install python3-certbot-apache
certbot -d www.lassinsivut.eu -d lassinsivut.eu
Täytetään tiedot joita certbot kysyy.
certbot -d www.cloud.lassinsivut.eu -d cloud.lassinsivut.eu
Tarvittaessa sertifikaatin voi uusia:
certbot –force-renewal
Annetaan listasta domainit jotka haluat uusia. Lopuski Käynnistetään apache uudestaan
systemctl restart apache2
Jotta reverse proxyssa saadaan cert botti toimimaan, töytyy meidän muuttaa taaas apachen virtualhost fileä.
nano /etc/apache2/sites-enabled/reverseproxy.conf
Viimeisenä automatisoidaan sertifikaatin uusiminen, normaalisti se täytyy uusi aina 30 päivän välein. Tämä onnistuu kuitenkin helposti Linuxin cron ohjelmalla.
crontab -e
Lisätään loppuun seuraava määritys jossa certbot uusii kaikki sertifikaatit ja käynnistää apachen viikon välein maanantaina n.klo 5am.
0 5 * * 1 certbot renew –force-renewal && systemctl restart apache2
<VirtualHost *:443>
ServerName lassinsivut.eu
ServerAlias www.lassinsivut.eu
SSLEngine On
SSLProxyEngine On
Redirect / https://lassinsivut.eu
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://192.168.101.133:80/
ProxyPassReverse / http://192.168.101.133:80/
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/www.lassinsivut.eu/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.lassinsivut.eu/privkey.pem
</VirtualHost>
<VirtualHost *:443>
ServerName cloud.lassinsivut.eu
ServerAlias www.cloud.lassinsivut.eu
SSLEngine On
SSLProxyEngine On
Redirect / https://cloud.lassinsivut.eu
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://192.168.101.134:80/
ProxyPassReverse / http://192.168.101.134:80/
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/www.cloud.lassinsivut.eu/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.cloud.lassinsivut.eu/privkey.pem
</VirtualHost>
Olen huomannut että tietyt php sovellukset eivät toimi tuon proxy konfiguraation kanssa. Tämä konfiguraatio on minulla toiminut ja korjannut asian jos tuo yllä mainittu ei toimi.
<VirtualHost *:80>
ServerName lassinsivut.eu
ServerAlias www.lassinsivut.eu
RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
RewriteRule .* – [F]
Redirect / https://lassinsivut.eu/
</VirtualHost>
<VirtualHost *:443>
ServerName lassinsivut.eu
ServerAlias www.lassinsivut.eu
SSLEngine On
SSLProxyEngine On
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerExpire off
SSLCertificateFile /etc/letsencrypt/live/lassinsivut.eu/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/lassinsivut.eu/privkey.pem
ProxyPreserveHost On
ProxyPass / https://192.168.101.133:443/
ProxyPassReverse / https://192.168.101.133:443/
</VirtualHost>