# Apache Webserver & vsFTP & Firewall In dieser Einheit werden Folgende Tool / Kommandos verwendet. ``` vsftpd - Very Secure FTP Daemon apache2 - Apache Hypertext Transfer Protocol Server ufw - program for managing a netfilter firewall gufw - ufw GUI netstat - Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships dig - DNS lookup utility nslookup - query Internet name servers interactively nmap - Network exploration tool and security / port scanner systemctl - Control the systemd system and service manager ps - report a snapshot of the current processes ``` Auf der Wiki-Seite https://de.wikipedia.org/wiki/Liste_der_standardisierten_Ports sind alle gebräuchlichen TCP/IP Ports aufgelistet. ## Vorbereitung: ### Installation der benötigten Programme / Tools. ``` sudo apt install -y apache2 php vsftpd nmap net-tools vim gufw ``` ### VSFTPD Einrichten **Anonymous Erlauben** ``` sudo vi /etc/vsftpd.conf # Allow anonymous FTP? (Disabled by default). anonymous_enable=YES sudo systemctl restart vsftpd ``` oder mit `sed` ``` sudo sed -i 's/anonymous_enable=NO/anonymous_enable=YES/g' /etc/vsftpd.conf ``` **Test Datei Anlegen** ``` sudo bash -c 'echo "Test Text1" > /srv/ftp/test-1' sudo bash -c 'echo "Test Text2" > /srv/ftp/test-2' ``` **Testen** Im Webbrowser `ftp://IP_AdresseServer` Eingeben. Es sollten die beiden Dateien `Test-1` und `Test-2 zu sehen sein. ### Webserver Vorbereiten Original `index.html` sichern. ``` sudo mv /var/www/html/index.html /var/www/html/index.html.org ``` Neu Start Seite erstellen: ``` sudo vi /var/www/html/index.php

Hallo VHS-Kurs

Das ist der Host:
Datum und Uhrzeit: ``` **Testen** `http://ip-adresse_servrer` Aufrufen. Webseite wird angezeigt. ## Firewall **Status Überprüfen** ``` sudo ufw status Status: inactive ``` **ufw Aktivieren** Firewall Aktivieren und nur `ssh` Port `22/tcp` Erlauben. ``` sudo ufw allow 22/tcp sudo ufw enable sudo ufw status Status: active To Action From -- ------ ---- 22/tcp ALLOW Anywhere 22/tcp (v6) ALLOW Anywhere (v6) ``` Alles ausser der `ssh` Zugang wird geblockt. _*Die vorher erstellte Webseite ist nicht mehr erreichbar.*_ **http Erlauben** ``` ufw allow 80/tcp ``` _*Die vorher erstellte Webseite ist wieder erreichbar.*_ **ftp Erlauben** Anpassung von `/etc/vsftpd.conf` In einem aktiven Modus verwendet der FTP-Client einen zufälligen Port, um die Verbindung herzustellen. Im passiven Modus fordert der Client die passive Verbindung an und fordert einen zufälligen Port vom FTP-Server an. Normalerweise verwendet der FTP-Client den passiven Modus, wenn sich der Client hinter einer Firewall befindet. Die Anweisung pasv_enable = Yes aktiviert den passiven Modus für den Ubuntu vsftpd-Server. (Es kann einen beliebigen benutzerdefinierten Portbereich definiert werden.) Diese drei Zeilen am ende der `vsftpd.conf` Datei einfügen. ``` sudo vi /etc/vsftpd.conf pasv_enable=Yes pasv_min_port=10100 pasv_max_port=10110 sudo systemctl restart vsftpd ``` ``` sudo ufw allow 20/tcp sudo ufw allow 21/tcp sudo ufw allow from any to any proto tcp port 10100:10110 ``` Der `vsftpd` Server ist wieder erreichbar. ## System Dienste / Log Dateien ### System Dienste Die Dienste von neueren Linux Systemen werden von `systemd` gesteuert. `systemd, init - systemd system and service manager` ``` systemctl - Auflistung aller verwendeten Systemdienste. systemctl status DienstName - Anzeige des Status von einem Dienst. systemctl start DienstName - Starten von einem Dienst. systemctl stop DienstName - Stoppen von einem Dienst. systemctl restart DienstName - Neustarten von einem Dienst (Entspricht stop / start) systemctl reload DienstName - Die Konfiguration Datei wird neu eingelesen. ``` **Status vom VSFTP Dienst** ``` systemctl status vsftpd ● vsftpd.service - vsftpd FTP server Loaded: loaded (/lib/systemd/system/vsftpd.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2020-10-26 11:00:42 UTC; 1h 9min ago Process: 22401 ExecStartPre=/bin/mkdir -p /var/run/vsftpd/empty (code=exited, status=0/SUCCESS) Main PID: 22412 (vsftpd) Tasks: 1 (limit: 1074) Memory: 896.0K CGroup: /system.slice/vsftpd.service └─22412 /usr/sbin/vsftpd /etc/vsftpd.conf ``` Die einzelnen Zeilen: Systemd Service Name und Beschreibung: ``` ● vsftpd.service - vsftpd FTP server ``` Program Verzeichnis und Vorgaben vom Hersteller / Programmierer. ``` Loaded: loaded (/lib/systemd/system/vsftpd.service; enabled; vendor preset: enabled) ``` Status des Prozesses und seit wann dieser Arbeitet. ``` Active: active (running) since Mon 2020-10-26 12:22:14 UTC; 3min 24s ago ``` Prozess ID. Kann mit `ps -ef | grep vsftpd` Überprüft werden. ``` Main PID: 767 (vsftpd) ``` Anzahl der Prozesse. ``` Tasks: 1 (limit: 1074) ``` Der in Anspruch genommen Speicher. ``` Memory: 1.2M ``` Ausführende Gruppen. ``` CGroup: /system.slice/vsftpd.service └─767 /usr/sbin/vsftpd /etc/vsftpd.conf ``` ## Logdateien Die Standard Logdateien sind unter `/var/log/` zu finden. Applikationen können auch in anderen Verzeichnissen ihre Log Dateien erstellen. Mit `sudo find / -name *.log` kann man die meisten Log Dateien finden. Diese können mit den vorhandenen Editoren angeschaut werden. **Bei SystemD Systemen gibt es noch `journal`** Option | Erklärung --- | --- -e, --pager-end | springt direkt ans Ende des Journals, d.h. die neuesten Einträge werden angezeigt -r, --reverse | sortiert die Logeinträge in umgekehrter Reihenfolge, d.h. die neuesten werden zuerst angezeigt -f, --follow | Springt direkt ans Ende des Journals und zeigt neue Einträge "live" an. Der Follow-Modus kann mit Strg + C verlassen werden. -b, --boot | Zeigt alle Logeinträge seit dem letzten Booten an. --since=DATUM | Zeigt alle Logeinträge ab dem Datum DATUM an. Datum hat folgendes Format "JJJJ-MM-TT HH:MM:SS", also z.B. "2016-01-17 12:00:00" --since=yesterday | Zeigt alle Logeinträge ab 00:00:00 Uhr des Vortages an. --until=DATUM | Wie --since DATUM, nur das Logeinträge bis zum Datum DATUM angezeigt werden. -k, --dmesg | zeigt nur Logmeldungen des Kernels an -u UNITNAME, --unit UNITNAME | Zeigt nur Logmeldungen der Unit UNITNAME an. Es kann ein kompletter Unitname oder ein Muster angegeben werden. So würde z.B. journalctl -u an* nur Logeinträge von Units anzeigen, deren Name mit an beginnt. -t IDENTIFIER, --identifier IDENTIFIER | Zeigt nur Logeinträge an, die den Identifier IDENTIFIER zugeordnet sind -p PRIORITÄT, --priority PRIORITÄT | Zeigt nur Logeinträge mit der Priorität PRIORITÄT an. Mögliche Werte sind: emerg, alert, crit, err, warning, notice, info und debug. Alternativ können die Prioritäten als Zahl angegeben werden. 0 entspricht emerg, 1 entspricht alert usw. **Beispiel** Zeig live die `sshd` login Versuche auf dem Server. ``` ~# journalctl -f -t sshd -- Logs begin at Thu 2020-10-29 16:53:41 UTC. -- Oct 29 21:27:37 vhsVM-1 sshd[903]: Accepted password for user01 from 192.168.178.104 port 52814 ssh2 Oct 29 21:27:37 vhsVM-1 sshd[903]: pam_unix(sshd:session): session opened for user user01 by (uid=0) Oct 29 21:29:12 vhsVM-1 sshd[1429]: Accepted password for user01 from 192.168.178.104 port 52824 ssh2 Oct 29 21:29:12 vhsVM-1 sshd[1429]: pam_unix(sshd:session): session opened for user user01 by (uid=0) Oct 29 21:29:27 vhsVM-1 sshd[1467]: Received disconnect from 192.168.178.104 port 52824:11: disconnected by user Oct 29 21:29:27 vhsVM-1 sshd[1467]: Disconnected from user user01 192.168.178.104 port 52824 Oct 29 21:29:27 vhsVM-1 sshd[1429]: pam_unix(sshd:session): session closed for user user01 Oct 29 21:29:33 vhsVM-1 sshd[1487]: Failed password for user01 from 192.168.178.104 port 52825 ssh2 Oct 29 21:29:34 vhsVM-1 sshd[1487]: Failed password for user01 from 192.168.178.104 port 52825 ssh2 Oct 29 21:29:34 vhsVM-1 sshd[1487]: Connection closed by authenticating user user01 192.168.178.104 port 52825 [preauth] ``` **ps - Prozesse anzeigen.** ps - report a snapshot of the current processes. Je nach dem welche Parameter `ps` mitgegeben werden können sich die Zeilen Unterscheide. **Beispiel:** ``` ~# ps -ef | grep [a]pache2 UID PID PPID C STIME TTY TIME CMD root 822 1 0 12:22 ? 00:00:00 /usr/sbin/apache2 -k start www-data 823 822 0 12:22 ? 00:00:00 /usr/sbin/apache2 -k start www-data 824 822 0 12:22 ? 00:00:00 /usr/sbin/apache2 -k start www-data 825 822 0 12:22 ? 00:00:00 /usr/sbin/apache2 -k start www-data 826 822 0 12:22 ? 00:00:00 /usr/sbin/apache2 -k start www-data 827 822 0 12:22 ? 00:00:00 /usr/sbin/apache2 -k start ``` ``` UID - Benutzer ID. PID - Prozess ID. PPID - Die PPID ist die PID des übergeordneten Prozesses. C - CPU Auslastung. STIME - Start Zeit des Prozesses. TTY - Terminal. TIME - Totale CPU Zeit. CMD - Kommando welches den Prozess gestartet hat. ```