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
<html>
<body>
<h1> Hallo VHS-Kurs</h1>
Das ist der Host:
<?php
echo gethostname();
?>
<br />
Datum und Uhrzeit:
<?php
date_default_timezone_set('Europe/Berlin');
echo date(DATE_RFC822);
?>
</body>
</html>
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.