Loading

Lassi's homepage

Debian reverse proxyn teko

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.

Pakettien ja moduulien asennus

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

Konfiguroidaan reverse proxy

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

Luodaan proxy

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.

Certbot ssl

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>

Ongelma php kanssa

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>

Shopping Basket
en_USEnglish