====== Installation Ubuntu 20.04 Server ====== ===== Installationsmedium ===== > https://releases.ubuntu.com/20.04/ Während der Installation setze ich * die Locale auf de_de * das Keyboard-Layout auf "German QWERTZ" * Hostname ===== Handwerkszeug installieren ===== **aptitude** # apt-get install aptitude **VIMnox** # aptitude install vim-nox **Midnight Commander** # aptitude install mc **Net-Tools (ifconfig, etc.)** # aptitude install net-tools ===== Timezone ===== Aktuell eingestellte Zeitzone: # timedatectl Local time: Sun 2020-10-11 11:00:01 UTC Universal time: Sun 2020-10-11 11:00:01 UTC RTC time: Sun 2020-10-11 11:00:02 Time zone: Etc/UTC (UTC, +0000) System clock synchronized: yes NTP service: active RTC in local TZ: no Zeitzone umstellen: # timedatectl list-timezones|grep Berlin Europe/Berlin # timedatectl set-timezone Europe/Berlin # timedatectl Local time: Sun 2020-10-11 13:02:31 CEST Universal time: Sun 2020-10-11 11:02:31 UTC RTC time: Sun 2020-10-11 11:02:32 Time zone: Europe/Berlin (CEST, +0200) System clock synchronized: yes NTP service: active RTC in local TZ: no ===== NTP Client ===== # This file is part of systemd. # # systemd is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation; either version 2.1 of the License, or # (at your option) any later version. # # Entries in this file show the compile time defaults. # You can change settings by editing this file. # Defaults can be restored by simply deleting this file. # # See timesyncd.conf(5) for details. [Time] NTP=ptbtime1.ptb.de FallbackNTP=ptbtime3.ptb.de ptbtime2.ptb.de Momentane Systemzeit ansehen: timedatectl Local time: So 2018-11-25 11:26:59 CET Universal time: So 2018-11-25 10:26:59 UTC RTC time: So 2018-11-25 10:27:00 Time zone: Europe/Berlin (CET, +0100) System clock synchronized: yes systemd-timesyncd.service active: yes RTC in local TZ: no systemctl restart systemd-timesyncd systemctl status systemd-timesyncd ● systemd-timesyncd.service - Network Time Synchronization Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2018-11-25 11:29:00 CET; 1s ago Docs: man:systemd-timesyncd.service(8) Main PID: 16475 (systemd-timesyn) Status: "Synchronized to time server 192.53.103.108:123 (ptbtime1.ptb.de)." Tasks: 2 (limit: 2319) CGroup: /system.slice/systemd-timesyncd.service └─16475 /lib/systemd/systemd-timesyncd Nov 25 11:29:00 backup systemd[1]: Starting Network Time Synchronization... Nov 25 11:29:00 backup systemd[1]: Started Network Time Synchronization. Nov 25 11:29:01 backup systemd-timesyncd[16475]: Synchronized to time server 192.53.103.108:123 (ptbtime1.ptb.de). ===== Reaktivierung von ifupdown ===== Um netplan.io zu deaktivieren, muss lediglich das Paket ifupdown installiert werden. **Die Deinstallation von netplan.io ist nicht empfehlenswert**, insbesondere dann nicht, wenn die Deaktivierung via SSH vorgenommen wird. Nach der Deinstallation ist ein Zugriff via IP nicht mehr möglich. Es muss auf die Konsole ausgewichen werden! aptitude install ifupdown Im Bootloader muss ebenfalls das Laden von netplan unterdrückt werden: [...] GRUB_CMDLINE_LINUX="netcfg/do_not_use_netplan=true" update-grub Um das klassische Verhalten von ifupdown wiederherzustellen, muss ebenfalls systemd-networkd ausgeschaltet werden. Dies geschieht folgendermaßen: systemctl disable systemd-networkd.service systemctl mask systemd-networkd.service systemctl stop systemd-networkd.service Die Netzwerkkonfiguration sollte nun komplett aus der interfaces-Datei übernommen werden. Eine Ausnahme stellen die DNS-Server dar. Damit diese ebenfalls aus interfaces übernommen werden, muss systemd-resolved ausgeschaltet und resolvconf aktiviert werden! aptitude install resolvconf systemctl disable systemd-resolved.service systemctl stop systemd-resolved.service systemctl mask systemd-resolved.service systemctl disable systemd-networkd-wait-online.service systemctl stop systemd-networkd-wait-online.service systemctl mask systemd-networkd-wait-online.service reboot ===== IPv6 abschalten ===== [...] #disable ipv6 net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1 ===== IPv6 statisch (alternativ) ===== net.ipv6.conf.default.accept_ra=0 net.ipv6.conf.default.autoconf=0 net.ipv6.conf.all.accept_ra=0 net.ipv6.conf.all.autoconf=0 iface ens3 inet6 static address 2001:0DB8:0068:9cb9::3 netmask 64 gateway 2001:0DB8:0068:9cb9::1 dns-nameservers 2620:fe::fe 2606:4700:4700::1111 ===== Firewall ===== ==== Installation ==== Die Pakete "''iptables-persistent''" und "''netfilter-persistent''" stehen in direkter Abhängigkeit und müssen daher beide installiert werden. apt-get update aptitude install iptables-persistent netfilter-persistent Ubuntu kommt von Hause aus mit dem Paket ''ufw'', ebenfalls eine auf iptables-basierende Firewall. Den Job übernimmt nun netfilter-persistent, daher deinstalliere ich es: aptitude purge ufw ==== Konfiguration / Regelwerk ==== Um ein Regelwerk zu kreieren, empfehle ich, ein Bash-Skript mit iptables-Befehlen zu schreiben. Sobald dieses ausgeführt worden ist, muss das Regelwerk abgespeichert werden. Dies geschieht mit folgendem Befehl: netfilter-persistent save Netfilter erstellt nun unter ''/etc/iptables'' zwei Dateien, ''rules.v4'' und ''rules.v6''. Die Dateien add-blocked.ips sowie blocked.ips stammen von einem eigenen Erweiterungskript, mit dem sich IP-Adressen einfach einer Sperrliste hinzufügen lassen. Darauf werde ich hier nicht weiter eingehen. ll /etc/iptables/ insgesamt 24 drwxr-xr-x 2 root root 4096 Feb 7 23:47 ./ drwxr-xr-x 99 root root 4096 Feb 7 23:18 ../ -rwxr-xr-x 1 root root 742 Feb 7 23:43 add-blocked.ips* -rw-r--r-- 1 root root 0 Feb 7 23:18 blocked.ips -rw-r----- 1 root root 4189 Feb 7 23:46 rules.v4 -rw-r----- 1 root root 183 Feb 7 23:46 rules.v6 Die Firewall sollte nun bereits einsatzfähig sein. ==== Logfile ==== Dummerweise schreibt iptables das syslog voll, welches somit unübersichtlich wird. Mit Hilfe des rsyslogd leite ich die Ausgaben in eine eigene Datei um: vi /etc/rsyslog.d/25-iptables.conf Damit dieser Weg funktioniert, habe ich mittels des Parameters --log-prefix von iptables der Ausgabe das Präfix "IPT:" hinzugefügt. Das könnnen wir uns als Filter zur Nutze machen. :msg,contains,"IPT:" -/var/log/iptables.log & ~ Beim ersten Mal muss die Datei erstellt werden und mit Rechten für den rsyslogd versehen werden. touch /var/log/iptables.log chown syslog.adm /var/log/iptables.log Die Änderungen werden erst nach einem Dienstneustart übernommen. service rsyslog restart Das Logfile wird schnell groß und sollter daher rotiert werden: /var/log/iptables.log { rotate 7 daily missingok notifempty delaycompress compress create 640 syslog adm sharedscripts } ===== Fail2Ban ===== Fail2Ban sollte meiner Meinung nach auf jeder Maschine laufen, die über SSH im Internet administriert wird. Natürlich ist die Absicherung weiterer Dienste wie SMTP, FTP, usw. ebenso sinnvoll. ==== Installation und erste Konfiguration ==== # aptitude install fail2ban [...] # "ignoreip" can be a list of IP addresses, CIDR masks or DNS hosts. Fail2ban # will not ban a host which matches an address in this list. Several addresses # can be defined using space (and/or comma) separator. #ignoreip = 127.0.0.1/8 ::1 ignoreip = 127.0.0.1/8 [...] # External command that will take an tagged arguments to ignore, e.g. , # and return true if the IP is to be ignored. False otherwise. # # ignorecommand = /path/to/command ignorecommand = # "bantime" is the number of seconds that a host is banned. bantime = 86400 # A host is banned if it has generated "maxretry" during the last "findtime" # seconds. findtime = 600 # "maxretry" is the number of failures before a host get banned. maxretry = 6 [...] # # JAILS # # # SSH servers # [sshd] enabled = true # To use more aggressive sshd modes set filter parameter "mode" in jail.local: # normal (default), ddos, extra or aggressive (combines all). # See "tests/files/logs/sshd" or "filter.d/sshd.conf" for usage example and details. #mode = normal port = 4444 logpath = %(sshd_log)s backend = %(sshd_backend)s [...] ==== IP entsperren ==== # fail2ban-client set unbanip ===== "Mini" Postfix ===== Der MTA Postfix soll nur dazu dienen Mails zu versenden. So können Informationen, zum Beispiel an den Admin, vom System versendet werden oder Webseiten können mit Ihren Benutzern kommunizieren, wenn beispielsweise ein Passwort zurückgesetzt werden soll. Zunächst sind die benötigten Pakete zu installieren. aptitude install postfix Die folgenden NEUEN Pakete werden zusätzlich installiert: postfix ssl-cert{a} 0 Pakete aktualisiert, 2 zusätzlich installiert, 0 werden entfernt und 8 nicht aktualisiert. 1.164 kB an Archiven müssen heruntergeladen werden. Nach dem Entpacken werden 4.141 kB zusätzlich belegt sein. Möchten Sie fortsetzen? [Y/n/?] {{:ubuntu:postfix-install-config.png|}} Hier die Default-Maildomäne eintragen: {{:ubuntu:postfix-install-config-2.png|}} Folgende Konfigurationsparameter anpassen: smtp_generic_maps = hash:/etc/postfix/generic mydestination = $myhostname, myhostname.mydomain.de, localhost inet_interfaces = loopback-only inet_protocols = ipv4 relayhost = [smtp.myprovider.de] root@myhostname.mydomain.de something@mydomain.de @myhostname.mydomain.de @mydomain.de # See man 5 aliases for format postmaster: root root: something@mydomain.de Die Konfigurationen anwenden: postmap hash:/etc/postfix/generic newaliases service postfix restart