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.