Zoeken op website

Hoe u een standalone Apache-server kunt instellen met op naam gebaseerde virtuele hosting met SSL-certificaat - Deel 4


Een LFCE (afkorting van Linux Foundation Certified Engineer) is een getrainde professional die de expertise heeft om netwerkservices in Linux-systemen te installeren, beheren en problemen op te lossen, en die verantwoordelijk is voor het ontwerp, de implementatie en het voortdurende onderhoud van de systeemarchitectuur.

In dit artikel laten we u zien hoe u Apache configureert om webinhoud weer te geven, en hoe u op naam gebaseerde virtuele hosts en SSL instelt, inclusief een zelfondertekend certificaat.

Introductie van het Linux Foundation Certification Program (LFCE).

Opmerking: dit artikel is niet bedoeld als een uitgebreide gids over Apache, maar eerder als een startpunt voor zelfstudie over dit onderwerp voor de LFCE examen. Om die reden behandelen we in deze tutorial ook geen taakverdeling met Apache.

Mogelijk kent u al andere manieren om dezelfde taken uit te voeren, en dat is OK, aangezien de Linux Foundation-certificering strikt op prestaties is gebaseerd. Zolang je ‘de klus klopt’, heb je dus goede kansen om voor het examen te slagen.

Vereisten

Raadpleeg Deel 1 van de huidige serie ("Netwerkservices installeren en automatisch opstarten bij opstarten configureren") voor instructies over het installeren en starten van Apache.

Inmiddels zou de Apache-webserver geïnstalleerd en actief moeten zijn. U kunt dit verifiëren met het volgende commando.

ps -ef | grep -Ei '(apache|httpd)' | grep -v grep

Opmerking: dat het bovenstaande commando controleert op de aanwezigheid van apache of httpd (de meest voorkomende namen voor de webdaemon) in de lijst met actieve processen. Als Apache actief is, krijgt u een uitvoer die er ongeveer als volgt uitziet.

De ultieme methode om de Apache-installatie te testen en te controleren of deze actief is, is door een webbrowser te starten en naar het IP-adres van de server te verwijzen. We zouden het volgende scherm moeten zien of op zijn minst een bericht waarin wordt bevestigd dat Apache werkt.

Apache configureren

Het hoofdconfiguratiebestand voor Apache kan zich in verschillende mappen bevinden, afhankelijk van uw distributie.

/etc/apache2/apache2.conf 		[For Ubuntu]
/etc/httpd/conf/httpd.conf		[For CentOS]
/etc/apache2/httpd.conf 		[For openSUSE]

Gelukkig voor ons zijn de configuratierichtlijnen buitengewoon goed gedocumenteerd op de Apache-projectwebsite. We zullen er in dit artikel naar enkele verwijzen.

Pagina's weergeven op een standalone server met Apache

Het meest elementaire gebruik van Apache is het weergeven van webpagina's op een zelfstandige server waarop nog geen virtuele hosts zijn geconfigureerd. De DocumentRoot richtlijn specificeert de map van waaruit Apache webpagina'sdocumenten zal aanbieden.

Houd er rekening mee dat standaard alle verzoeken uit deze directory worden gehaald, maar u kunt ook symbolische links en/of aliassen gebruiken om naar andere locaties te verwijzen.

Tenzij dit overeenkomt met de Alias-richtlijn (waarmee documenten kunnen worden opgeslagen in het lokale bestandssysteem in plaats van onder de map die is opgegeven door DocumentRoot), voegt de server het pad van de gevraagde URL toe. naar de hoofdmap van het document om het pad naar het document te maken.

Gegeven bijvoorbeeld de volgende DocumentRoot:

Wanneer de webbrowser naar [Server IP of hostnaam]/lfce/tecmint.html verwijst, wordt de server /var/ geopend www/html/lfce/tecmint.html (ervan uitgaande dat een dergelijk bestand bestaat) en sla de gebeurtenis op in het toegangslogboek met een 200 (OK) antwoord.

Het toegangslogboek bevindt zich doorgaans in /var/log onder een representatieve naam, zoals access.log of access_log. Mogelijk vindt u dit logboek (en ook het foutenlogboek) in een submap (bijvoorbeeld /var/log/httpd in CentOS). Anders wordt de mislukte gebeurtenis nog steeds geregistreerd in het toegangslogboek, maar met een 404 (niet gevonden) antwoord.

Bovendien worden de mislukte gebeurtenissen vastgelegd in het foutenlogboek:

Het formaat van het toegangslog kan worden aangepast aan uw behoeften met behulp van de LogFormat-richtlijn in het hoofdconfiguratiebestand, terwijl u niet hetzelfde kunt doen met het foutenlogboek .

Het standaardformaat van het toegangslogboek is als volgt:

LogFormat "%h %l %u %t \"%r\" %>s %b" [nickname]

Waar elk van de letters, voorafgegaan door een procentteken, aangeeft dat de server een bepaald stukje informatie moet loggen:

String

Beschrijving

 %h

 Externe hostnaam of IP-adres

 %l

 Logboeknaam op afstand

 %u

 Externe gebruiker als het verzoek is geverifieerd

 %t

 Datum en tijd waarop het verzoek is ontvangen

 %r

 Eerste regel van verzoek naar de server

 %>s

 Eindstatus van het verzoek

 %b

 Grootte van het antwoord [bytes]

en bijnaam is een optionele alias die kan worden gebruikt om andere logboeken aan te passen zonder dat u de hele configuratiereeks opnieuw hoeft in te voeren.

U kunt de LogFormat-richtlijn [sectie Aangepaste logformaten] in de Apache-documenten raadplegen voor verdere opties.

Beide logbestanden (toegang en fout) vormen een geweldige bron om snel in één oogopslag te analyseren wat er op de Apache-server gebeurt. Onnodig te zeggen dat dit het eerste hulpmiddel is dat een systeembeheerder gebruikt om problemen op te lossen.

Ten slotte is een andere belangrijke richtlijn Listen, die de server vertelt binnenkomende verzoeken op de opgegeven poort of adres/poort-combinatie te accepteren:

Als er alleen een poortnummer is gedefinieerd, luistert de apache naar de gegeven poort op alle netwerkinterfaces (het jokerteken * wordt gebruikt om ‘alle netwerkinterfaces’ aan te geven).

Als zowel het IP-adres als de poort zijn opgegeven, luistert de apache naar de combinatie van de gegeven poort en netwerkinterface.

Houd er rekening mee dat (zoals u in de onderstaande voorbeelden zult zien) meerdere luisterinstructies tegelijkertijd kunnen worden gebruikt om meerdere adressen en poorten op te geven waarnaar moet worden geluisterd. Deze optie instrueert de server om te reageren op verzoeken van een van de vermelde adressen en poorten.

Op naam gebaseerde virtuele hosts instellen

Het concept van virtuele host definieert een individuele site (of domein) die wordt bediend door dezelfde fysieke machine. Eigenlijk kunnen meerdere sites/domeinen worden bediend vanaf één enkele “echte” server als virtuele host. Dit proces is transparant voor de eindgebruiker, voor wie het lijkt alsof de verschillende sites worden bediend door verschillende webservers.

Op naam gebaseerde virtuele hosting zorgt ervoor dat de server erop kan vertrouwen dat de client de hostnaam rapporteert als onderdeel van de HTTP-headers. Met deze techniek kunnen veel verschillende hosts hetzelfde IP-adres delen.

Elke virtuele host wordt geconfigureerd in een map binnen DocumentRoot. Voor ons geval zullen we de volgende dummydomeinen gebruiken voor de testconfiguratie, elk in de overeenkomstige map:

  1. ivelinux.com – /var/www/html/ivelinux.com/public_html
  2. linuxrocks.org – /var/www/html/linuxrocks.org/public_html

Om ervoor te zorgen dat pagina's correct worden weergegeven, zullen we de map van elke VirtualHost chmod naar 755:

chmod -R 755 /var/www/html/ilovelinux.com/public_html
chmod -R 755 /var/www/html/linuxrocks.org/public_html

Maak vervolgens een voorbeeld van een index.html-bestand in elke public_html-map:

<html>
  <head>
    <title>www.ilovelinux.com</title>
  </head>
  <body>
    <h1>This is the main page of www.ilovelinux.com</h1>
  </body>
</html>

Voeg ten slotte in CentOS en openSUSE de volgende sectie toe onderaan /etc/httpd/conf/httpd.conf of / etc/apache2/httpd.conf, of wijzig het gewoon als het er al is.


<VirtualHost *:80>
     ServerAdmin [email  
     DocumentRoot /var/www/html/ilovelinux.com/public_html
     ServerName www.ilovelinux.com
     ServerAlias www.ilovelinux.com ilovelinux.com
     ErrorLog /var/www/html/ilovelinux.com/error.log
     LogFormat "%v %l %u %t \"%r\" %>s %b" myvhost
     CustomLog /var/www/html/ilovelinux.com/access.log	myvhost
</VirtualHost>
<VirtualHost *:80>
     ServerAdmin [email  
     DocumentRoot /var/www/html/linuxrocks.org/public_html
     ServerName www.linuxrocks.org
     ServerAlias www.linuxrocks.org linuxrocks.org
     ErrorLog /var/www/html/linuxrocks.org/error.log
     LogFormat "%v %l %u %t \"%r\" %>s %b" myvhost
     CustomLog /var/www/html/linuxrocks.org/access.log	myvhost
</VirtualHost>

Houd er rekening mee dat u elke virtuele hostdefinitie ook in afzonderlijke bestanden in de map /etc/httpd/conf.d kunt toevoegen. Als u ervoor kiest dit te doen, moet elk configuratiebestand de volgende naam krijgen:

/etc/httpd/conf.d/ilovelinux.com.conf
/etc/httpd/conf.d/linuxrocks.org.conf

Met andere woorden: u moet .conf toevoegen aan de site of domeinnaam.

In Ubuntu heeft elk afzonderlijk configuratiebestand de naam /etc/apache2/sites-available/[sitenaam].conf. Elke site wordt vervolgens als volgt in- of uitgeschakeld met respectievelijk de opdrachten a2ensite of a2dissite.

a2ensite /etc/apache2/sites-available/ilovelinux.com.conf
a2dissite /etc/apache2/sites-available/ilovelinux.com.conf
a2ensite /etc/apache2/sites-available/linuxrocks.org.conf
a2dissite /etc/apache2/sites-available/linuxrocks.org.conf

De opdrachten a2ensite en a2dissite maken koppelingen naar het configuratiebestand van de virtuele host en plaatsen (of verwijderen) deze in het bestand /etc/apache2/sites-enabled map.

Om vanuit een andere Linux-box naar beide sites te kunnen bladeren, moet u de volgende regels toevoegen aan het /etc/hosts-bestand op die machine om verzoeken naar die domeinen om te leiden naar een specifiek IP-adres adres.


[IP address of your web server]	www.ilovelinux.com
[IP address of your web server]	www.linuxrocks.org 

Als veiligheidsmaatregel zal SELinux niet toestaan dat Apache logs schrijft naar een andere map dan de standaard /var/log/httpd.

Je kunt SELinux uitschakelen, of de juiste beveiligingscontext instellen:


chcon system_u:object_r:httpd_log_t:s0 /var/www/html/xxxxxx/error.log

waarbij xxxxxx de map binnen /var/www/html is waar u uw virtuele hosts heeft gedefinieerd.

Nadat u Apache opnieuw hebt opgestart, zou u de volgende pagina op de bovenstaande adressen moeten zien:

SSL installeren en configureren met Apache

Ten slotte zullen we een zelfondertekend certificaat maken en installeren voor gebruik met Apache. Dit soort configuratie is acceptabel in kleine omgevingen, zoals een privé-LAN.

Als uw server echter inhoud via internet aan de buitenwereld openbaar maakt, wilt u een certificaat installeren dat is ondertekend door een derde partij om de authenticiteit ervan te bevestigen. Hoe dan ook, met een certificaat kunt u de informatie coderen die naar, van of binnen uw site wordt verzonden.

In CentOS en openSUSE moet u het mod_ssl pakket installeren.

yum update && yum install mod_ssl 		[On CentOS]
zypper refresh && zypper install mod_ssl	[On openSUSE]

Terwijl je in Ubuntu de SSL-module voor Apache moet inschakelen.

a2enmod ssl

De volgende stappen worden uitgelegd met behulp van een CentOS-testserver, maar uw configuratie zou vrijwel identiek moeten zijn in de andere distributies (als u problemen tegenkomt, aarzel dan niet om uw vragen achter te laten via de opmerkingen formulier).

Stap 1 [Optioneel]: Maak een map om uw certificaten op te slaan.

mkdir /etc/httpd/ssl-certs

Stap 2: Genereer uw zelfondertekende certificaat en de sleutel waarmee het wordt beschermd.

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/httpd/ssl-certs/apache.key -out /etc/httpd/ssl-certs/apache.crt

Een korte toelichting op de hierboven genoemde mogelijkheden:

  1. req -X509 geeft aan dat we een x509-certificaat maken.
  2. -nodes (NO DES) betekent “versleutel de sleutel niet”.
  3. -dagen 365 is het aantal dagen dat het certificaat geldig is.
  4. -newkey rsa:2048 maakt een 2048-bit RSA-sleutel aan.
  5. -keyout /etc/httpd/ssl-certs/apache.key is het absolute pad van de RSA-sleutel.
  6. -out /etc/httpd/ssl-certs/apache.crt is het absolute pad van het certificaat.

Stap 3: Open het door u gekozen virtuele hostconfiguratiebestand (of de overeenkomstige sectie in /etc/httpd/conf/httpd.conf zoals eerder uitgelegd) en voeg de volgende regels toe aan een virtuele hostdeclaratie die luistert op poort 443.

SSLEngine on
SSLCertificateFile /etc/httpd/ssl-certs/apache.crt
SSLCertificateKeyFile /etc/httpd/ssl-certs/apache.key

Houd er rekening mee dat u moet toevoegen.

NameVirtualHost *:443

bovenaan, rechtsonder

NameVirtualHost *:80

Beide richtlijnen instrueren apache om te luisteren op poorten 443 en 80 van alle netwerkinterfaces.

Het volgende voorbeeld is overgenomen uit /etc/httpd/conf/httpd.conf:

Start vervolgens Apache opnieuw op,

service apache2 restart 			[sysvinit and upstart based systems]
systemctl restart httpd.service 		[systemd-based systems]

En ga in uw browser naar https://www.ivelinux.com. U krijgt het volgende scherm te zien.

Ga je gang en klik op 'Ik begrijp de risico's' en 'Uitzondering toevoegen'.

Vink ten slotte “Deze uitzondering permanent opslaan” aan en klik op “Beveiligingsuitzondering bevestigen”.

En u wordt doorgestuurd naar uw startpagina via https.

Samenvatting

In dit bericht hebben we laten zien hoe u Apache en op naam gebaseerde virtuele hosting met SSL kunt configureren om de gegevensoverdracht te beveiligen. Als u om wat voor reden dan ook problemen ondervindt, kunt u ons dit laten weten via het onderstaande opmerkingenformulier. Wij helpen u graag bij het realiseren van een succesvolle installatie.

Lees ook

  1. Apache IP-gebaseerde en naamgebaseerde virtuele hosting
  2. Apache virtuele hosts maken met Vhosts-opties in-/uitschakelen
  3. Monitor “Apache Web Server” met behulp van de “Apache GUI” tool