RHCSA-Serie: Installation, Konfiguration und Absicherung eines Web- und FTP-Servers – Teil 9

A web server (also known as a HTTP server) is a service that handles content (most commonly web pages, but other types of documents as well) over to a client in a network.

A FTP server is one of the oldest and most commonly used resources (even to this day) to make files available to clients on a network in cases where no authentication is necessary since FTP uses username and password without encryption.

Der Webserver, der in RHEL 7 verfügbar ist, ist Version 2.4 des Apache HTTP Servers. Was den FTP-Server betrifft, werden wir den Very Secure Ftp Daemon (auch bekannt als vsftpd) verwenden, um Verbindungen durch TLS zu sichern.

RHCSA: Installing, Configuring and Securing Apache and FTP – Part 9

In diesem Artikel erklären wir, wie man einen Webserver und einen FTP-Server in RHEL 7 installiert, konfiguriert und absichert.

Installation von Apache und FTP-Server

In dieser Anleitung verwenden wir einen RHEL 7-Server mit einer statischen IP-Adresse von 192.168.0.18/24. Um Apache und VSFTPD zu installieren, führen Sie folgenden Befehl aus:

# yum update && yum install httpd vsftpd

Wenn die Installation abgeschlossen ist, sind beide Dienste zunächst deaktiviert, daher müssen wir sie vorübergehend manuell starten und aktivieren, um sie beim nächsten Booten automatisch zu starten:

# systemctl start httpd
# systemctl enable httpd
# systemctl start vsftpd
# systemctl enable vsftpd

Zusätzlich müssen wir die Ports 80 und 21 öffnen, an denen die Web- und FTP-Dämonen jeweils lauschen, um den Zugriff auf diese Dienste von außen zu ermöglichen:

# firewall-cmd --zone=public --add-port=80/tcp --permanent
# firewall-cmd --zone=public --add-service=ftp --permanent
# firewall-cmd --reload

Um zu bestätigen, dass der Webserver ordnungsgemäß funktioniert, starten Sie Ihren Browser und geben Sie die IP des Servers ein. Sie sollten die Testseite sehen:

Confirm Apache Web Server

Was den FTP-Server betrifft, müssen wir ihn weiter konfigurieren, was wir gleich tun werden, bevor wir bestätigen, dass er wie erwartet funktioniert.

Konfiguration und Absicherung des Apache Web Servers

Die Hauptkonfigurationsdatei für Apache befindet sich in /etc/httpd/conf/httpd.conf, aber sie kann von anderen Dateien abhängen, die sich in /etc/httpd/conf.d befinden.

Obwohl die Standardkonfiguration für die meisten Fälle ausreichend sein sollte, ist es eine gute Idee, sich mit allen verfügbaren Optionen vertraut zu machen, wie sie in der offiziellen Dokumentation beschrieben sind.

Wie immer sollten Sie vor dem Bearbeiten eine Sicherungskopie der Hauptkonfigurationsdatei erstellen:

# cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.$(date +%Y%m%d)

Öffnen Sie sie dann mit Ihrem bevorzugten Texteditor und suchen Sie nach den folgenden Variablen:

  1. ServerRoot: das Verzeichnis, in dem die Konfigurations-, Fehler- und Protokolldateien des Servers gespeichert sind.
  2. Listen: gibt Apache an, auf bestimmten IP-Adressen und/oder Ports zuzuhören.
  3. Include: ermöglicht das Einbinden anderer Konfigurationsdateien, die existieren müssen. Andernfalls schlägt der Server fehl, im Gegensatz zur IncludeOptional-Direktive, die stillschweigend ignoriert wird, wenn die angegebenen Konfigurationsdateien nicht existieren.
  4. User und Group: der Name des Benutzers/der Gruppe, unter dem der httpd-Dienst ausgeführt wird.
  5. DocumentRoot: Das Verzeichnis, aus dem Apache Ihre Dokumente bereitstellt. Standardmäßig werden alle Anfragen aus diesem Verzeichnis entgegengenommen, aber symbolische Links und Aliase können verwendet werden, um auf andere Speicherorte zu verweisen.
  6. ServerName: Diese Anweisung legt den Hostnamen (oder die IP-Adresse) und den Port fest, mit dem sich der Server identifiziert.

Die erste Sicherheitsmaßnahme besteht darin, einen dedizierten Benutzer und eine Gruppe (z.B. tecmint/tecmint) zu erstellen, um den Webserver auszuführen, und den Standardport auf einen höheren Wert (9000 in diesem Fall) zu ändern:

ServerRoot "/etc/httpd"
Listen 192.168.0.18:9000
User tecmint
Group tecmint
DocumentRoot "/var/www/html"
ServerName 192.168.0.18:9000

Sie können die Konfigurationsdatei mit

# apachectl configtest

testen und wenn alles OK ist, den Webserver neu starten.

# systemctl restart httpd

Und vergessen Sie nicht, den neuen Port in der Firewall zu aktivieren (und den alten zu deaktivieren):

# firewall-cmd --zone=public --remove-port=80/tcp --permanent
# firewall-cmd --zone=public --add-port=9000/tcp --permanent
# firewall-cmd --reload

Beachten Sie, dass Sie aufgrund der SELinux-Richtlinien nur die von

# semanage port -l | grep -w '^http_port_t'

zurückgegebenen Ports für den Webserver verwenden können.

Wenn Sie einen anderen Port verwenden möchten (z.B. den TCP-Port 8100), müssen Sie ihn dem SELinux-Portkontext für den httpd-Dienst hinzufügen:

# semanage port -a -t http_port_t -p tcp 8100
Add Apache Port to SELinux Policies

Um Ihre Apache-Installation weiter abzusichern, befolgen Sie diese Schritte:

1. Der Benutzer, unter dem Apache läuft, sollte keinen Zugriff auf eine Shell haben:

# usermod -s /sbin/nologin tecmint

2. Deaktivieren Sie das Verzeichnislisting, um zu verhindern, dass der Browser den Inhalt eines Verzeichnisses anzeigt, wenn in diesem Verzeichnis keine index.html vorhanden ist.

Bearbeiten Sie die Datei /etc/httpd/conf/httpd.conf (und die Konfigurationsdateien für virtuelle Hosts, falls vorhanden) und stellen Sie sicher, dass die Direktive Options sowohl am Anfang als auch in den Directory-Blöcken auf None gesetzt ist:

Options None

3. Verbergen Sie Informationen über den Webserver und das Betriebssystem in den HTTP-Antworten. Bearbeiten Sie die Datei /etc/httpd/conf/httpd.conf wie folgt:

ServerTokens Prod 
ServerSignature Off

Jetzt sind Sie bereit, Inhalte aus Ihrem Verzeichnis /var/www/html bereitzustellen.

Konfiguration und Sicherung des FTP-Servers

Wie im Fall von Apache ist die Hauptkonfigurationsdatei für Vsftpd (/etc/vsftpd/vsftpd.conf) gut kommentiert, und obwohl die Standardkonfiguration für die meisten Anwendungen ausreichen sollte, sollten Sie sich mit der Dokumentation und der Handbuchseite (man vsftpd.conf) vertraut machen, um den FTP-Server effizienter zu betreiben (Ich kann das nicht genug betonen!).

In unserem Fall werden folgende Direktiven verwendet:

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
allow_writeable_chroot=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

Durch die Verwendung von chroot_local_user=YES werden lokale Benutzer standardmäßig in einem chroot-Jail in ihrem Home-Verzeichnis nach dem Login platziert. Das bedeutet, dass lokale Benutzer nicht auf Dateien außerhalb ihrer entsprechenden Home-Verzeichnisse zugreifen können.

Zum Schluss, um FTP das Lesen von Dateien im Home-Verzeichnis des Benutzers zu ermöglichen, setzen Sie das folgende SELinux-Attribut:

# setsebool -P ftp_home_dir on

Sie können sich jetzt mit einem Client wie Filezilla mit dem FTP-Server verbinden:

Check FTP Connection

Beachten Sie, dass das Protokoll /var/log/xferlog Downloads und Uploads aufzeichnet, die mit der obigen Verzeichnisliste übereinstimmen:

Monitor FTP Download and Upload

Weitere Informationen: Begrenzen Sie die von Anwendungen in einem Linux-System verwendete FTP-Netzwerkbandbreite mit Trickle

Zusammenfassung

In diesem Tutorial haben wir erklärt, wie man einen Web- und FTP-Server einrichtet. Aufgrund der Vielfalt des Themas ist es nicht möglich, alle Aspekte dieser Themen abzudecken (z.B. virtuelle Webhosts). Daher empfehle ich Ihnen, auch andere ausgezeichnete Artikel auf dieser Website über Apache zu lesen.

Source:
https://www.tecmint.com/rhcsa-series-install-and-secure-apache-web-server-and-ftp-in-rhel/