[HOWTO] Der perfekte Debian 7 Wheezy Root Server!
Version 2
Hallo epvp!
Lange ist es her, seit ich das Howto für ein Debian 6.x System veröffentlicht habe. Schon seit geraumer Zeit gibt es die Version 7 des beliebten Betriebssystems, mit vielen neuen Funktionen und Verbesserungen. Da ich mich in den letzten Tagen sehr intensiv damit beschäftigt habe das System zu aktualisieren und perfektionieren, möchte ich an dieser Stelle auch das Tutorial aktualisieren.
Hier eine Auflistung der eingesetzten Software bzw. Funktionen, die euer Server am Ende hat:
| System: | Debian 7.x Wheezy |
| Adminpanel: | Froxlor |
| Webserver: | Nginx mit PHP5-FPM und PHP5-APC |
| DatenbanK: | MySQL |
| SMTP: | Postfix |
| IMAP/POP3 | Dovecot |
| Nameserver: | Bind9 |
| FTP: | Pure FTPd |
| Security | |
| |
| Firewall: | Arno-Iptables-Firewall, als Grundgerüst mit perfektionierter LOG Funktion und umfangreicher Konfigurationsmöglichkeit |
| DDOS protecion: | Fail2ban (DNS DDOS, HTTP DDOS), SYN DRDOS, SYN flood protection, intelligente Iptables |
| Scan/Sniff protection: | NIDS (Network intrusion detection system - Wikipedia, the free encyclopedia) psad und fwsnort - Protection gegen jegliche Art von Scans. DNScrypt gegen eavesdropping und MITM-Angriffe |
| SSH: | Keybasierte Authentifizierung |
| Web Security: | ZB Block (Bots, Spam, SQLInjections, Website defacement, XSS, RFI, Blacklists, blockt IPs, Domains und UserAgends), PHP Konfiguration/Absicherung |
| System: | Kernel Abhärtung, rkhunter (Rootkit scanner) |
| E-Mail Protection: | ClamAV (Antivirus), Amavis (verbindet den Mailserver mit einem oder mehreren Virenscannern), SpamAssassin (Mächtiges Filtersystem anhand von Regeln und/oder Listen), Pyzor (Spamdetection), Razor (Spamdetection), Blacklists von spamhaus.org spamcop.net, datenbankbasierte Authentifikation |
Die Themen:
| #1 Einleitung |
| #2 Grundsätzliches |
| #2.1 Vorraussetzungen |
| #2.2 Vorbereitung |
| #3 LEMP |
| #3.1 Was ist LEMP? |
| #3.2 MySQL |
| #3.3 PHP |
| #3.4 nginx |
| #4 Froxlor |
| #5 Absicherung |
| #5.1 Firewall |
| #5.2 E-Mail Schutz |
| #5.3 DDOS, Authfails |
| #5.4 SSH & System |
| #5.5 ZB Block |
| #6 Tipps & Tricks |
| #6.1 Domain als Hostname |
[#1 Einleitung]
Besonders für Anfänger ist es schwierig ein System richtig einzurichten. Allein aus rechtlichen Gründen ist man als Besitzer eines Root/vServers für alles verantwortlich, umso wichtiger wird eine vernünftige Konfiguration. Es gibt nichts schlimmeres als eine gehackte Seite oder irgendwelche Kinder, die versuchen unser System lahmzulegen oder unseren Server als Spamschleuder benutzen. Dieses Tutorial richtet sich vor allem an diejenigen, die bisher noch keine Kenntnisse besitzen und Probleme haben, Übersicht und Kontrolle zu behalten.
[#2 Grundsätzliches]
#2.1 Vorraussetzungen
- Geduld und gute Laune
- Gesunder Menschenverstand
- Grundkenntnisse Server/Netzwerke und Linux
- Vorerfahrung mit der Kommandozeile
- Debian 7.x Minimal 64 bit frisch installiert
- !!! Server darf keine "Kontainer-Virtualisierung" sein !!!
- PuTTY oder ein ähnliches Secure Shell Programm
#2.2 Vorbereitung
Zeitzone anpassen und synchronisieren
Code:
dpkg-reconfigure tzdata (Nur für ausländische Server)
aptitude install ntpdate
ntpdate-debian
VIM - Ein sehr guter Editor und mein Favorit
Code:
aptitude install vim-nox
Dieser Editor besteht aus einem Eingabe- und einem Kommandomodus. Hier eine Auflistung der wichtigsten Funktionen und Befehle:
Alle vim-Kommandos (beginnen mit ":")
| Befehl | Beschreibung |
|---|
| STRG + C | Kommandomodus |
| A | Einfügmodus (am Ende der aktuellen Zeile) |
| i | Einfügmodus (an der aktuellen Stelle) |
| dd | Aktuelle Zeile löschen |
| gg | Zum Anfang des Textes springen |
| GG | Zum Ende des Textes springen |
| xxG | Zu einer bestimmten Zeile springen. xx Steht dementsprechend für die Zeile |
| ggVG | Alles markieren |
| v | Cursor Markierung |
| y | Markierung kopieren |
| :w | Speichern und Änderungen übernehmen |
| :wq | Speichern und Beenden |
| :q | Schließen |
| :q! | Schließen und Änderungen verwerfen |
| :u | Aktion rückgängig machen |
| :%d | Alles löschen |
| /Text | Nach "Text" Mit [n] weiter suchen |
| /Text/i | Nach "Text" suchen, Groß-/Kleinschreibung ignorieren |
| Mehr? | Weitere Befehle für VIM ( ) |
Erweiterung der Sourcelist
Die
sources.list beinhaltet eine Liste von Archiven,
aptitude sucht im Inventar nach den Paketen die man installieren möchte. Durch
aptitude update wird diese Liste geupdatet. Leider haben es einige aktuelle Versionen wie "php5-fpm" und "nginx" nicht in die Debian-Pakete geschafft, deswegen muss eine Fremdquelle hinzugefügt werden.

bietet aktuelle Pakete rund um LAMP auf Debian Servern an, unter anderem die von uns benötigten.
Code:
vim /etc/apt/sources.list
Inhalt löschen und folgendes einfügen:
Code:
deb http://ftp.debian.org/debian/ wheezy contrib main non-free
deb-src http://ftp.debian.org/debian/ wheezy contrib non-free
deb http://security.debian.org/ wheezy/updates main contrib non-free
deb-src http://security.debian.org/ wheezy/updates main contrib non-free
deb http://ftp.debian.org/debian/ wheezy-backports main contrib non-free
deb-src http://ftp.debian.org/debian/ wheezy-backports main contrib non-free
#dotdeb.org
deb http://packages.dotdeb.org wheezy all
deb-src http://packages.dotdeb.org wheezy all
deb http://packages.dotdeb.org wheezy-php55 all
deb-src http://packages.dotdeb.org wheezy-php55 all
Ein Schlüssel muss importiert werden, mit dem die Pakete der Quelle unterschrieben sind:
Code:
wget http://www.dotdeb.org/dotdeb.gpg
cat dotdeb.gpg | apt-key add -
Wenn man Pakete einer anderen Sprache installieren möchte (z. Bsp. deutsch), muss man die Liste folgendermaßen bearbeiten:
(Dies ist nur bei der FTP Domain relevant. security.de.debian.org hat keine Auswirkung)
Code:
ftp.[B][COLOR="Red"]de[/COLOR][/B].debian.org/debian/
Quelle aktualisieren:
Code:
aptitude update && aptitude upgrade
[#3 LEMP]
#3.1 Was ist LEMP?
LEMP unterscheidet sich nicht viel von LAMP. LAMP setzt sich zusammen aus
Linux
Apache
MySQL und
PHP. Es wird lediglich das A durch ein E ersetzt, doch was bedeutet das? Statt
Apache wird nun nginx, also
E verwendet.
Wieso nginx? Apache ist sehr einfach zu konfigurieren, kompatibel zu mehreren Plattformen und standartmäßig auf fast allen Distributionen vorhanden. Leider bringt Apache viele unnötige Erweiterungen mit sich und glänzt nicht gerade mit Performance. Besonders auf vServern stößt man bereits bei kleineren/mittleren Webseiten an die RAM-Limits. Kleinere DDoS Angriffe zwingen den Apache Server sehr schnell in die Knie. nginx ist auf Performance ausgelegt: sehr leichtgewichtig und vor allem schnell! Es gibt kaum Einschränkungen und die Konfiguration ist trotz allen Irrtums sehr einfach gehalten.
#3.2 MySQL
MySQL installieren
Code:
aptitude install mysql-server
mysql_secure_installation
Code:
Change the root password? [Y/n] n (wurde schon bei der Installation angegeben)
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y
Ein sicheres Passwort ist hier selbstverständlich. Die Konfiguration ist nicht nötig, weil MySQL standardmäßig schon perfekt abgesichert ist. Da der Server nur auf Anfragen von localhost (127.0.01) reagiert, werden Verbindungen von außen automatisch geblockt. Trotzdem muss keine Änderung vorgenommen werden, denn MySQL unterstützt eine SSH Connection die mittels PuTTY lokal getunnelt werden kann. So kann man ohne Einschränkung wie gewohnt mit dem Programm seines Vertrauens arbeiten. (Mehr dazu unter Tipps & Tricks)
Die Konfigurationsdatei befindet sich in
/etc/mysql/my.cnf. Das dazugehörige Init-Script findet man unter
/etc/init.d/mysql
#3.3 PHP
PHP installieren
Code:
aptitude install php5-fpm php5-mysql php5-gd php5-curl php5-apc php5-cli -y
Die Konfiguration von PHP-FPM findet man in
/etc/php5/fpm/php-fpm.conf, individuelle Configs unter
/etc/php5/fpm/pool.d/*.conf, das dazugehörige Initscript unter
/etc/init.d/php5-fpm und die PHP Einstellungen in
/etc/php5/fpm/php.ini
Prozesskonfiguration:
Code:
vim /etc/php5/fpm/php-fpm.conf
Folgende Einträge ändern:
Code:
emergency_restart_threshold = 10
emergency_restart_interval = 1m
process_control_timeout = 10s
Erklärung: Wenn 10 PHP-Prozesse innerhalb einer Minute abstürzen, so wird der Dienst neugestartet. Der letzte Eintrag legt die Zeit fest, wie lange diese Prozesse auf den Haupt-Prozess warten sollen.
PHP absichern:
Code:
vim /etc/php5/fpm/php.ini
Mit dieser Einstellung wird der Interpreter nur den exakten Dateipfad ausführen. Wenn die Einstellung aktiviert ist, sucht sich der Prozess einfach die nächstliegende Datei, durch einen Fehler im Code wird dies zu einer massiven Sicherheitslücke.
Mit dieser Einstellung kann man Funktionen verbieten.
Einige Funktionen sollten definitiv nicht verfügbar sein und werden in der Regel nicht gebraucht.
Folgende Funktionen der bereits eingetragenen Liste hinzufügen:
Code:
disable_functions = escapeshellarg, escapeshellcmd,passthru, proc_close, proc_get_status, proc_nice, proc_open,proc_terminate
Soll der Webserver den "X-Powered-By" Header senden?
Diese Einstellung ist optional.
Cookies werden mit httponly geflagt und sind nicht mehr über Browserskriptsprachen wie JavaScript erreichbar, bei Bedarf ausschalten
Code:
session.cookie_httponly = 1
Scripte die mit date() arbeiten, werden euren error.log sehr schnell füllen wenn die timezone nicht definiert wurde.
Code:
date.timezone = Europe/Berlin
Weitere Informationen zum Thema Sicherheit unter PHP findet man hier:
#3.4 nginx
nginx installieren
Code:
aptitude install nginx
Die Konfigurationsdatei von nginx liegt in
/etc/nginx/nginx.conf, das dazugehörige Init-Script unter
/etc/init.d/nginx und die vHosts Dateien im Ordner
/etc/nginx/sites-enabled
Konfiguration anpassen:
Code:
vim /etc/nginx/nginx.conf
Mit wie vielen Prozessen darf nginx arbeiten? Diese sollten wenn möglich gleich der Anzahl der im System verbauten CPU-Kernen sein.
Mit dem Befehl
cat /proc/cpuinfo | grep processor kann man die Anzahl erfahren.
Code:
worker_processes x;
Wie viele Verbindungen dürfen pro Prozess aufgebaut werden? Maximale Verbindungen = worker_processes x worker_connections
Code:
worker_connections 1024;
Gzip-Optimierung:
Standartmäßig ist gzip bereits aktiviert. Betreibt man jedoch ein CMS, Blog, o. ä., werden auch Stylesheets, Feeds und nicht selten zahlreiche JavaScript-Files benutzt. All diese Ressourcen können vom Webserver ebenfalls verkleinert ausgegeben werden.
Code:
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
Webserver für die Froxlor Installation vorbereiten:
Die vHosts Konfiguration läuft automatisiert über Froxlor ab, sodass keine manuelle Einstellung notwendig ist.
Für manuelle deny und rewrite Regeln gibt es eine extra dafür definierte Stelle (dazu später mehr).
Standard vHost entfernen
Code:
rm /etc/nginx/sites-enabled/default
Eigene vHosts Datei erstellen:
Code:
vim /etc/nginx/sites-enabled/default.conf
Code:
server {
listen SERVERIP:80 default_server;
server_name HOSTNAME/SERVERIP;
root /var/www/htdocs;
index index.php index.html index.htm;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
Folgende Einstellungen sollten geändert werden:
IP des Servers (Kann man durch den Befehl
ifconfig eth0 | grep inet | awk '{ print $2 }' erfahren)
Code:
listen SERVERIP:80 default;
Hostname oder Domain (Kann man durch den Befehl
hostname -f erfahren)
Code:
server_name [color=red]deine-seite.de[/color];
(Alternativ kann man auch die IP Adresse nehmen. Eine kostenlose "Domain" bzw DNS gibt es bei no-ip.org)
Nginx starten
Code:
service nginx start
Verzeichnisse erstellen
Code:
mkdir -p /var/www/htdocs/ && mkdir -p /var/customers/webs/ && mkdir -p /var/customers/logs/ && mkdir -p /var/customers/tmp && chmod 1777 /var/customers/tmp
[#4 Froxlor]
Froxlor ist ein open source (GPL) Server Management Panel, das folgende Funktionen bietet:
Verwaltet die vollständige E-Mail-, FTP-und Webspace-Infrastruktur an einem zentralen Ort.
Benutzerdefinierte Fehlerseiten, Pfadeinstellungen und Verzeichnisschutz für alle unterstützten Web-Server.
Perl/PHP support via SuEXEC und/oder FastCGI und php-fpm.
Individuelle PHP-Konfiguration für jede Domain.
Ein Support-Ticket-System für die Kommunikation zwischen Kunden und Reseller / Administration.
Integriertes Nachrichtensystem für Reseller und Kunden.
Froxlor runterladen
Code:
cd /var/www/htdocs && wget http://files.froxlor.org/releases/froxlor-latest.tar.gz
Entpacken
Code:
tar -xfv froxlor-latest.tar.gz
Rechteverteilung
Code:
chown -R www-data:www-data /var/www/htdocs/
Froxlor aufrufen
Code:
http://<SERVERIP>/froxlor/
Froxlor Konfiguration, Installation der restlichen Software:
Froxlor benötigt zunächst eine eigene Datenbank, diese legt man inklusive eines Benutzers wie folgt an:
(Standardmäßig heißen Benutzername und Datenbank
froxlor)
Code:
mysql --user=root --password=PASSWORD
grant all on DATENBANK.* to 'USERNAME'@'localhost' identified by 'PASSWORD';
Die erfolgreiche Erstellung wird anschließend mit
Query OK, 0 rows affected bestätigt. Verlassen mit
exit
Anschließend werden alle notwendigen Daten eingetragen und Froxlor installiert.
Eine erfolgreiche Installation sieht wie folgt aus:
Sollte Froxlor anzeigen, dass userdata.inc.php nicht erstellt werden konnte, dann liegt es daran, dass der HTTP User www-data keinen Zugriff hat. Schau dir die einzelnen Punkte am besten noch einmal genauer an

Da die Anleitung für nginx und php-fpm in der aktuellen Version nicht ganz korrekt ist, bitte wie folgt vorgehen:
Nameservice und Caching für MySQL
Code:
aptitude install libnss-mysql-bg nscd
chmod 600 /etc/libnss-mysql.cfg /etc/libnss-mysql-root.cfg
Code:
vim /etc/libnss-mysql.cfg
Inhalt löschen und folgendes hinzufügen:
Das MYSQL_PASSWORD sollte durch das Passwort des MySQL Benutzernamens für die Froxlor Datenbank ersetzt werden.
Code:
getpwnam SELECT username,'x',uid,gid,'MySQL User',homedir,shell \
FROM ftp_users \
WHERE username='%1$s' \
AND login_enabled = 'Y' \
LIMIT 1
getpwuid SELECT username,'x',uid,gid,'MySQL User',homedir,shell \
FROM ftp_users \
WHERE uid='%1$u' \
AND login_enabled = 'Y' \
LIMIT 1
getspnam SELECT username,password,FLOOR(UNIX_TIMESTAMP()/86400-1),'1','99999','7','-1','-1','0' \
FROM ftp_users \
WHERE username='%1$s' \
AND login_enabled = 'Y' \
LIMIT 1
getpwent SELECT username,'x',uid,gid,'MySQL User',homedir,shell \
FROM ftp_users
getspent SELECT username,password,FLOOR(UNIX_TIMESTAMP()/86400-1),'1','99999','7','-1','-1','0' \
FROM ftp_users
getgrnam SELECT groupname,'x',gid \
FROM ftp_groups \
WHERE groupname='%1$s' \
LIMIT 1
getgrgid SELECT groupname,'x',gid \
FROM ftp_groups \
WHERE gid='%1$u' \
LIMIT 1
getgrent SELECT groupname,'x',gid \
FROM ftp_groups
memsbygid SELECT username \
FROM ftp_users \
WHERE gid='%1$u'
gidsbymem SELECT gid \
FROM ftp_users \
WHERE username='%1$s'
host 127.0.0.1
database froxlor
username froxlor
password MYSQL_PASSWORD
port 3306
Code:
vim /etc/libnss-mysql-root.cfg
Inhalt löschen und folgendes hinzufügen:
Das MYSQL_PASSWORD sollte durch das Passwort des MySQL Benutzernamens für die Froxlor Datenbank ersetzt werden.
Code:
username froxlor
password MYSQL_PASSWORD
Code:
vim /etc/nsswitch.conf
Inhalt löschen und folgendes hinzufügen:
Das MYSQL_PASSWORD sollte durch das Passwort des MySQL Benutzernamens für die Froxlor Datenbank ersetzt werden.
Code:
# Make sure that `passwd`, `group` and `shadow` have mysql in their lines
# You should place mysql at the end, so that it is queried after the other mechanisams
#
passwd: compat mysql
group: compat mysql
shadow: compat mysql
hosts: files dns
networks: files dns
services: db files
protocols: db files
rpc: db files
ethers: db files
netmasks: files
netgroup: files
bootparams: files
automount: files
aliases: files
Dienst neustarten:
Code:
service nscd restart
PHP-FPM für Froxlor aktivieren und konfigurieren
Links im Menü
Einstellungen PHP-FPM aktivieren, anschließend erscheint rechts daneben in der Leiste ein Link zu dem PHP5-FPM Einstellungen,
diese bitte wie folgt übernehmen:
Standarconfig entfernen, Gruppe/User anlegen und Rechte erteilen:
Code:
rm /etc/php5/fpm/pool.d/www.conf
rm /etc/nginx/sites-enabled/default.conf
groupadd -f froxlorlocal
useradd -s /bin/false -g froxlorlocal froxlorlocal
chown -R froxlorlocal:froxlorlocal /var/www/htdocs/froxlor/
Initscript bearbeiten:
Code:
vim /etc/init.d/php5-fpm
Code:
# Required-Start: $remote_fs $network mysql nscd
Cronjob ausführen, damit alle Änderungen übernommen werden
Code:
/usr/bin/php5 -q /var/www/htdocs/froxlor/scripts/froxlor_master_cronjob.php --force
Nginx und php5-fpm neustarten:
Code:
service nginx restart && service php5-fpm restart
Froxlor sollte nun sauber starten und über FPM laufen!
Installation der restlichen Software
Die Konfiguration von Froxlor ist relativ simpel, auf der linken Seite befindet sich der Menüpunkt
Konfiguration.
Das MYSQL_PASSWORD sollte durch das Passwort des MySQL Benutzernamens für die Froxlor Datenbank ersetzt werden.
Dort wählt man oben zunächst die Distribution aus, anschließend den Service und den dazugehörigen Daemon.
In unserem Fall ist es Debian 7.0 (Wheezy).
Die restlichen Dienste können mit Hilfe der Froxlor Installationsanweisung ganz einfach installiert werden.
Grundsätzlich kann man jeglichen Inhalt löschen und mit dem in der Anleitung vorgeschlagenem Code ersetzen.
Außnahmen werden mit einem roten
* markiert, dort sollte man die Anweisung etwas genauer lesen, bzw.
stehen wichtige Informationen und Änderungen dabei.
Folgende Dienste müssen installiert werden:
Debian 7.0 (Wheezy) » Nameserver (DNS) » Bind9
Debian 7.0 (Wheezy) » Mailserver (SMTP) » Postfix/Dovecot*
Bei der Anleitung gibt es einen kleinen Fehler in der
/etc/postfix/main.cf. Folgende Zeile sollte kommentiert werden, sonst gibt es Probleme bei der MYSQL Anmeldung
Code:
#mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
Debian 7.0 (Wheezy) » Mailserver (SMTP) » Postfix MX-Access (anti spam)*
Folgenden Parameter sollte man in der
/etc/postfix/main.cf noch deaktivieren, da dieser nicht genutzt wird:
Code:
#smtpd_relay_restrictions=
Debian 7.0 (Wheezy) » Mailserver (IMAP/POP3) » Dovecot
Debian 7.0 (Wheezy) » FTP-Server » Pure FTPd
Debian 7.0 (Wheezy) » Sonstige (System) » Awstats
Debian 7.0 (Wheezy) » Sonstige (System) » Logrotate
Cronjob ausführen, damit alle Änderungen übernommen werden
Code:
/usr/bin/php5 -q /var/www/htdocs/froxlor/scripts/froxlor_master_cronjob.php --force
Nun wird der Master Cronjob automatisiert:
Debian 7.0 (Wheezy) » Sonstige (System) » Crond (cronscript)
(Kleiner Tipp: Crontab verlässt man wieder mit [STRG] + [x], dann [y] oder [j] und [Enter])
[#5 Absicherung]
Das Grundgerüst bietet uns Arno-Iptables-Firewall mit perfektionierter LOG Funktion und umfangreicher Konfigurationsmöglichkeit. DDOS Schutz wird durch intelligente Iptable Regeln, Software wie Deflate und Fail2ban (DNS, HTTP, SYN, UDP, uvm.) gewährleistet. PSAD und FWSNORT bilden zusammen außerdem ein mächtiges NIDS (
Network intrusion detection system - Wikipedia, the free encyclopedia) und bieten Schutz gegen jegliche Art von Scans. DNScrypt schützt uns vor eavesdropping und MITM-Attacken, da der gesamte DNS Traffic verschlüsselt übertragen wird. SSH Login ist nur noch durch einen zufällig generierten 1024 Bit Schlüssel möglich. Software wie ClamAV, Amavis, SpamAssassin, Pyzor und Razor filtern eingehende und ausgehende E-Mails an Hand von großen Blacklisten und Regeln nach Viren und Spam. ZB Block schützt die Webpräsenz vor Bots, Spam, SQL-Injections, Website Defacement, XSS, RFI, überprüft Blacklists, blockt IPs, Domains und User Agents. Der Kernel wird systemseitig abgehärtet, rkhunter scannt nach bekannten Rootkits und Signaturen solcher.
Allerdings darf man jedoch nicht vergessen, dass eine Software Protection nichts gegen größere Angriffe ausrichten kann, wenn die Bandbreite weniger bietet als der Angreifer oder der Server zu schwach ist, um die Möglichkeit zu bekommen Regeln anzuwenden. Sollte man keinen Schutz durch den Anbieter bekommen und wird der Server öfters mal attackiert, empfiehlt sich ein Dienst wie Cloudflare, etc. Sicherlich gibt es immer gewisse Grenzen, ab einer bestimmten Größe bringt auch die beste Infrastruktur nichts. Euer Server ist in jedem Fall ohne weitere Kostenpunkte ziemlich robust abgesichert und sollte, falls die Bandbreite es hergibt, binnen weniger Minuten die meisten Angriffe abwehren können.
#5.1 Firewall, FWSNORT und PSAD
Firewall installieren und konfigurieren:
Code:
aptitude install arno-iptables-firewall psad fwsnort
Installationsanleitung mit Screenshots bei Bedarf:
Ports die unbedingt notwendig sind, werden werden mit einem roten
* markiert. Bei Bedarf können weitere Ports hinzugefügt werden.
Eine Liste der standardisierten Ports findet man hier:
Liste der standardisierten Ports ? Wikipedia
Ports können nach der Installation auch hier noch editiert werden:
/etc/arno-iptables firewall/conf.d/00debconf.conf
Die gängigsten Ports auf einem Blick:
TCP:
| Port | Beschreibung |
|---|
| 21 | FTP* |
| 22 | SSH* |
| 25 | SMTP* |
| 53 | DNS* |
| 80 | HTTP* |
| 110 | POP3* |
| 143 | IMAP* |
| 443 | HTTPS |
| 465 | SMTPS |
| 993 | IMAPS |
| 995 | POP3S |
UDP:
Firewall konfigurieren:
Code:
vim /etc/arno-iptables-firewall/firewall.conf
Code:
DRDOS_PROTECT=0
### Nur, wenn IPV6 eingesetzt wird ###
IPV6_SUPPORT=1
### Nur, wenn IPV6 eingesetzt wird ###
ECHO_IGNORE=1
IP_FORWARDING=0
IPV6_AUTO_CONFIGURATION=0
PSAD konfigurieren:
Code:
vim /etc/psad/psad.conf
Code:
EMAIL_ADDRESSES
;
HOSTNAME HOSTNAME;
ENABLE_PERSISTENCE N;
EMAIL_ALERT_DANGER_LEVEL 3;
IPT_SYSLOG_FILE /var/log/arno-iptables-firewall;
IMPORT_OLD_SCANS Y;
ENABLE_AUTO_IDS Y;
### Nach Bedarf anpassen, Standard 5 ###
AUTO_IDS_DANGER_LEVEL 4;
### Nach Bedarf anpassen, Standard 5 ###
ENABLE_AUTO_IDS_REGEX Y;
ENABLE_AUTO_IDS_EMAILS N;
FLUSH_IPT_AT_INIT N;
TCPWRAPPERS_BLOCK_METHOD Y;
DISK_MAX_PERCENTAGE 80;
PSAD neustarten
Code:
service psad restart
PSAD ist so konzipiert, dass jede gebannte oder verdächtige IP, deren danger level sich für diese erhöht hat, per E-Mail gemeldet wird. Wer dies aus irgendwelchen Gründen auch immer nicht möchte, kann diese Funktion ausschalten:
ALERTING_METHODS noemail;
ip6tables Regeln
Code:
vim /etc/arno-iptables-firewall/custom-rules
Code:
ip6tables -A INPUT -j LOG
ip6tables -A FORWARD -j LOG
Firewall neustarten und Regeln aktualisieren
Code:
service arno-iptables-firewall restart
PSAD updaten:
Code:
psad --sig-update
psad -H
Prüfen, ob PSAD Regeln korrekt sind. Sollte so aussehen:
[+] Firewall config looks good.
FWSNORT konfigurieren:
FWSNORT updaten
Code:
/usr/sbin/fwsnort --update-rules
/usr/sbin/fwsnort
/var/lib/fwsnort/fwsnort.sh
Bei der Erstellung der iptables Regeln müsste zurzeit folgende Fehlermeldung ausgespuckt werden.
Dazu gibt es im weiteren Verlauf eine Lösung bzw. mehr Informationen.
Code:
[+] Splicing fwsnort 9225 rules into the iptables policy...
iptables-restore v1.4.14: Invalid hex char '|'
Error occurred at line: 9xxx
FWSNORT Signaturen beim Booten automatisch zu den iptables Regeln hinzufügen:
Code:
vim /etc/init.d/fwsnort
Code:
#!/bin/bash
#
### BEGIN INIT INFO
# Provides: fwsnort
# Required-Start: $network
# Required-Stop: $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description:
# Description: update-rc.d -f fwsnort defaults
### END INIT INFO
/var/lib/fwsnort/fwsnort.sh
exit 0
Code:
chmod +x /etc/init.d/fwsnort && update-rc.d -f fwsnort defaults
FWSNORT und PSAD automatisch updaten:
FWSNORT und PSAD updaten sich leider nicht von alleine, dafür muss ein kleines Script erstellt werden.
ACHTUNG. FWSNORT hat aktuell fehlerhafte Regeln, sodass Updates zwar geladen, diese jedoch von iptables nicht akzeptiert werden. Alle kaputte Regeln müssten entfernt werden, das ist bei knapp 9500 Einträgen etwas blöd und müsste nach einem Update erneut manuell bearbeitet werden. Bitte nutzt das Script vorerst NICHT!
Alternative weiter unten!
ACHTUNG, das Script vorerst nicht nutzen!
Alternative weiter unten!
Script anlegen
Code:
vim /etc/fwsnort/autoupdate
Code:
#!/bin/bash
/usr/sbin/fwsnort --update-rules
/usr/sbin/fwsnort
/var/lib/fwsnort/fwsnort.sh
echo "FWSNORT Signaturen wurden aktualisiert"
psad --sig-update
psad -H
echo "PSAD Signaturen wurden aktualisiert"
Script ausführbar machen
Code:
chmod +x vim /etc/fwsnort/autoupdate
Update wöchentlich ausführen
Code:
0 12 * * 5 /etc/fwsnort/autoupdate 2>&1 >> /var/log/fwsnort_update.log
Alternative:
Ich habe die FWSNORT Signaturen aktualisiert und alle fehlerhaften Regeln entfernt (Stand
23.11.2013)
Die bearbeitet Datei habe ich hochgeladen. Diese mit der defekten Datei wie folgt ersetzen:
Code:
cd /var/lib/fwsnort/ && rm fwsnort.save && wget https://www.dropbox.com/s/arh2y67un76lcxq/fwsnort.save && /var/lib/fwsnort/fwsnort.sh
Nun sollten die Regeln korrekt hinzugefügt sein. Bestätigt wird das mit einem simplen
Done.
Da die Updates für PSAD sauber funktionieren, kann man dafür trotz allem ein Script anlegen..
Script anlegen
Code:
vim /etc/fwsnort/autoupdate
Code:
#!/bin/bash
psad --sig-update
psad -H
echo "PSAD Signaturen wurden aktualisiert"
Script ausführbar machen
Code:
chmod +x vim /etc/fwsnort/autoupdate
Update wöchentlich ausführen
Code:
0 12 * * 5 /etc/fwsnort/autoupdate 2>&1 >> /var/log/fwsnort_update.log
#5.2 E-Mail Schutz
Software installieren
Code:
aptitude install amavisd-new spamassassin clamav-daemon libnet-dns-perl libmail-spf-perl pyzor razor
Clamav aktualisieren und starten
Code:
freshclam && service clamav-daemon start
Eine Meldung weist euch darauf hin, dass die aktuelle Version von Clamav OUTDATED ist. Leider habe ich es bisher nicht erfolgreich geschafft die neuste Version zu kompilieren, da diese anscheinend noch nicht alle Systeme unterstützt. Aus diesem Grund taucht sie auch noch nicht in den stable Repos von Wheezy auf. Gedulden wir uns also etwas, bis ein frisches Update kommt.. die Virusdatenbank ist in jedem Fall immer up to date
Optional können folgende Pakete installiert werden, damit angehängte Archive besser gescannt werden können (empfohlen)
Code:
aptitude install arj bzip2 cabextract cpio file gzip nomarch pax rar unrar unzip zip zoo
Konfiguration der einzelnen Software:
Code:
adduser clamav amavis && adduser amavis clamav
Spamassassin konfigurieren und starten
Code:
vim /etc/default/spamassassin
Code:
service spamassassin start
Amavis konfigurieren
Code:
vim /etc/amavis/conf.d/15-content_filter_mode
Inhalt bearbeiten, damit es wie folgt aussieht:
Code:
use strict;
# You can modify this file to re-enable SPAM checking through spamassassin
# and to re-enable antivirus checking.
#
# Default antivirus checking mode
# Uncomment the two lines below to enable it
#
@bypass_virus_checks_maps = (
\%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);
#
# Default SPAM checking mode
# Uncomment the two lines below to enable it
#
@bypass_spam_checks_maps = (
\%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);
1; # insure a defined return
Neustarten
Code:
service amavis restart
Schreibrechte
Code:
chmod 777 /var/mail
Postfix konfigurieren und anpassen
Code:
vim /etc/postfix/main.cf
Am Ende einfügen
Code:
content_filter = smtp-amavis:[127.0.0.1]:10024
Code:
vim /etc/postfix/master.cf
Folgende Zeile suchen
Code:
pickup fifo n - - 60 1 pickup
Diese beiden Zeilen direkt danach einfügen, inklusive der pickup Zeile sollte es so aussehen:
Code:
pickup fifo n - - 60 1 pickup
-o content_filter=
-o receive_override_options=no_header_body_checks
Folgenden Text ganz am Ende der Datei einfügen
Code:
smtp-amavis unix - - - - 2 smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
-o disable_dns_lookups=yes
-o max_use=20
127.0.0.1:10025 inet n - - - - smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_delay_reject=no
-o smtpd_client_restrictions=permit_mynetworks,reject
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o smtpd_data_restrictions=reject_unauth_pipelining
-o smtpd_end_of_data_restrictions=
-o mynetworks=127.0.0.0/8
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
-o smtpd_client_connection_count_limit=0
-o smtpd_client_connection_rate_limit=0
-o receive_override_options=no_header_body_checks,no_unknown_recipient_checks
Postfix Konfigurationsdateien neu laden
Code:
service postfix reload
Blacklist eintragen
Code:
vim /etc/postfix/main.cf
Folgende Zeile suchen
smtpd_client_restrictions und entsprechend editieren:
Code:
smtpd_client_restrictions = permit_mynetworks,
permit_sasl_authenticated,
reject_unknown_client_hostname,
reject_rbl_client zen.spamhaus.org,
reject_rbl_client bl.spamcop.net
#5.3 DDOS, Authfails
Fail2ban installieren und konfigurieren
Fail2ban überwacht Logs und bannt, sobald eine nicht gewollte Aktivität entdeckt wird. Es schützt vor Bruteforce-Attacken, kann SQLInjections erkennen und DDoS verhindern. Die Konfigurationsdatei findet man in
/etc/fail2ban/jail.conf und das dazugehörige Init-Script unter
/etc/init.d/fail2ban
Fail2ban installieren
Code:
aptitude install fail2ban
Grundkonfiguration, die Zeilen entsprechend editieren
Code:
vim /etc/fail2ban/jail.conf
Code:
ignoreip = 127.0.0.1/8
bantime = 3600
maxretry = 3
[ssh-ddos]
enabled = true
[pure-ftpd]
enabled = true
[postfix]
enabled = true
[dovecot]
enabled = true
DNS DDOS Schutz:
Verzeichnis erstellen
Code:
mkdir /var/log/named && chmod a+w /var/log/named
Logging aktivieren
Code:
vim /etc/bind/named.conf.local
Am Ende der Datei hinzufügen:
Code:
logging {
channel security_file {
file "/var/log/named/security.log" versions 3 size 30m;
severity dynamic;
print-time yes;
};
category security {
security_file;
};
};
Bind9 neustarten
Code:
service bind9 restart
Fail2ban mitteilen, damit die Logs gescannt werden sollen
Code:
vim /etc/fail2ban/jail.conf
Code:
[named-refused-udp]
enabled = true
port = domain,953
protocol = udp
filter = named-refused
logpath = /var/log/named/security.log
[named-refused-tcp]
enabled = true
port = domain,953
protocol = tcp
filter = named-refused
logpath = /var/log/named/security.log
Fail2ban neustarten
Code:
service fail2ban restart
Logcheck installieren:
(
Diese Software ist optional! Logcheck hilft dabei, automatisch Probleme und Sicherheitsverletzungen in den Protokolldateien zu erkennen und sendet die Ergebnisse per E-Mail zu. Wer daran interessiert ist seine Filter zu optimieren um ggf. einzelne Regeln in Fail2ban anzupassen, sollte sich gelegentlich eine Auswertung der Logs zuschicken. Es können auch andere Logs in die Liste hinzugefügt werden, z. Bsp. psad.log. Wer kein Interesse daran hat, kann diesen Schritt überspringen).
Code:
aptitude install logcheck
Logs zu logcheck hinzufügen
Code:
vim /etc/logcheck/logcheck.logfiles
Inhalt löschen und folgende Zeilen hinzufügen
Code:
/var/log/named/security.log
/var/log/fail2ban.log
Logcheck konfigurieren
Log als gzip verschicken, bei bedarf Info lesen und entsprechend anpassen
Code:
# Send the results as attachment or not.
# 0=not as attachment; 1=as attachment; 2=as gzip attachment
# Default is 0
MAILASATTACH=1
Normalerweise verschickt logcheck jede Stunde eine E-Mail mit den aktuellen Logs als Anhang. Da es mir persönlich etwas zu häufig ist, habe ich es auf 7:00 täglich geändert. Bitte ändern falls dir das nicht passt.
Code:
vim /etc/cron.d/logcheck
Code:
0 7 * * * logcheck if [ -x /usr/sbin/logcheck ]; then nice -n10 /usr/sbin/logcheck; fi
Cron neustarten
Code:
service crond restart
Falls jemand nicht versteht wie Cron funktioniert, kann sich hier einen netten Guide anschauen:
SPOILER ENDE
Fail2Ban für die restlichen Programme und Ports aktivieren:
HTTP GET/POST Regeln
Code:
vim /etc/fail2ban/jail.conf
Am Ende der Datei hinzufügen
(Erklärung: Wenn jemand 50 GET/POST Anfragen in 300 Sekunden an euren Webserver schickt, wird die IP für 2 Stunden gebannt. Dies bitte je nach Bedarf anpassen bzw. überwachen)
Code:
[http-get-dos]
enabled = true
port = http,https
filter = http-get-dos
logpath = /var/log/nginx/access.log
maxretry = 50
findtime = 300
bantime = 7200
action = %(action_mwl)s
Filter anlegen
(Erklärung: Der Filter sucht nacht GET/POST Einträgen in der logfile. Wenn diese Werte das Kriterium der in der jail.conf hinterlegten Werte erfüllen, wird die Regel ausgeführt. Unter ignoreregex können User Agents wie der Googlebot davon ausgeschlossen werden. Dies bitte je nach Bedarf anpassen bzw. überwachen)
Code:
vim /etc/fail2ban/filter.d/http-get-dos.conf
Code:
[Definition]
failregex = ^<HOST> -.*\"(GET|POST).*
ignoreregex = ^<HOST> -.*\"(GET|POST).*Googlebot
Schutz gegen Bots:
Sicherlich kennt das jeder der schon einmal einen eigenen Webserver betrieben hat: Bots versuchen nach Sicherheitslücken zu scannen, solche Aktionen sehen in den Logfiles anschließend so aus:
Code:
2013/11/22 20:52:37 [error] 19003#0: *20 open() "/var/www/htdocs/cgi-bin/php" failed (2: No such file or directory), client: xx
2013/11/23 00:50:07 [error] 25724#0: *65 open() "/var/www/htdocs/cgi-bin/php5" failed (2: No such file or directory), client: xx
2013/11/23 07:16:05 [error] 4434#0: *76 open() "/var/www/htdocs/cgi-bin/php" failed (2: No such file or directory), client: xx
oder
2013/11/23 08:04:13 [error] 5508#0: *234170 user "test" was not found in "/var/www/.htpasswd", client: xx
2013/11/23 08:05:14[error] 5508#0: *234170 user "admin": password mismatch, client: xx
Da wir oder normale User nie auf die Idee kommen würden nach Pfaden zu suchen oder Daten mehr als 5x falsch einzugeben, werden all diejenigen die es versuchen einfach gebannt. Die Liste kann sich natürlich erweitern, je nachdem wie umfangreich der Bot ist, welche Art von Software eingesetzt wird und natürlich ob jemand gezielt versucht anzugreifen.
Config anpassen
Code:
vim /etc/fail2ban/jail.conf
Folgende Zeilen entsprechend anpassen
Code:
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/nginx/error.log
maxretry = 5
Filter anpassen
Code:
vim /etc/fail2ban/filter.d/apache-auth.conf
Inhalt löschen und folgendes hinzufügen
Code:
[Definition]
failregex = user .* password mismatch, client: <HOST>
user .* was not found in .*, client: <HOST>
.*/(/var/www/htdocs/cgi-bin/php)" (is not found|failed) \(2: No such file or directory\), client: <HOST>
.*/(/var/www/htdocs/cgi-bin/php5)" (is not found|failed) \(2: No such file or directory\), client: <HOST>
ignoreregex =
In diesem Beispiel habe ich
/var/www/htdocs/cgi-bin/php und
/var/www/htdocs/cgi-bin/php5 genommen. Wie oben bereits geschrieben, können sich diese Regeln immer wieder erweitern. Das sollte in der Anfangsphase überwacht und vervollständigt werden.
Wer noch ein paar aufgefallene Beispiele hat, immer her damit :-)
#5.4 SSH & System
Damit unser SSH Server so sicher wie nur möglich ist, wird die standardmäßige Authentifizierung per Username + Passwort deaktiviert und durch eine Authentifizierung mit einem 1024 langen Schlüssel ersetzt. Dieser Schlüssel wird wiederum durch ein Passwort geschützt, sodass wir die bestmögliche Sicherheit kriegen.
Zunächst müssen zwei kleine Programme von der PuTTY Hauptseite heruntergeladen werden:
PuTTYgen (Damit erstellen wir unseren Schlüssel):
Pageant (Authentifiziert uns automatisch mit dem Passwort, dies ist alternativ und kann auch weggelassen werden. Dadurch müsste man jedes Mal das Passwort eintippen.. kann also jeder für sich selber entscheiden):
Jetzt wird der Schlüssel generiert, dafür wird PuTTYgen gestartet. Anschließend klickt man auf
Generate und erstellt einen public/private Key. (Die Maus in dem vorgesehenen Fenster wild hin und her bewegen, bis der Key erstellt wird.
Nicht vergessen ein Passwort zu vergeben!
Nachdem der Schlüssel generiert wurde, muss der private Key auf unserem Computer gespeichert werden:
Nun wird der Schlüssel getestet. Zunächst müssen wir uns aber erst ohne Schlüssel einloggen, den Server für eine Keybasierte Authentifizierung vorbereiten und den Benutzer in PuTTY eintagen:
Nun ganz normal mit dem Server verbinden und im Rootverzeichnis den Ordner und den Key anlegen:
Code:
mkdir ~/.ssh && chmod 700 ~/.ssh && vim ~/.ssh/authorized_keys2
In die Datei wird unser Public Key eingefügt (findet man im oberen Abschnitt von PuTTYgen)
Beispiel aus :
Damit diese Datei nur von dem User root gelesen/beschrieben darf, muss diese gesichert werden
Code:
chmod 600 ~/.ssh/authorized_keys2
Putty schließen und das Profil für den Server laden, den private Key hinzufügen und anschließend das
Profil wieder speichern:
Nun startet man Pageant und fügt den private Key hinzu, das Passwort muss bestätigt werden. Ab jetzt übernimmt Pageant die Eingabe des Passworts beim Login, das Programm muss dafür natürlich im Hintergrund aktiv sein, ansonsten wird einfach das Passwort erfragt.
So sieht es dann aus, wenn man sich erfolgreich mit dem Schlüssel anmelden konnte:
Code:
Using username "root".
Authenticating with public key "rsa-key-20131124" from agent
Wenn es bei euch auch so aussieht, kann der SSH Server konfiguriert werden
Code:
vim /etc/ssh/sshd_config
Folgende Zeilen entsprechend verändern
Code:
Protocol 2
PasswordAuthentication no
UsePAM no
Dienst neustarten
Code:
service ssh restart
System abhärten:
Code:
vim vim /etc/sysctl.conf
Folgenden Inhalt am Ende der Datei hinzufügen:
Code:
net.ipv4.tcp_syncookies=1
net.ipv4.conf.all.rp_filter=1
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv6.conf.default.autoconf=0
net.ipv6.conf.default.accept_dad=0
net.ipv6.conf.default.accept_ra=0
net.ipv6.conf.default.accept_ra_defrtr=0
net.ipv6.conf.default.accept_ra_rtr_pref=0
net.ipv6.conf.default.accept_ra_pinfo=0
net.ipv6.conf.default.accept_source_route=0
net.ipv6.conf.default.accept_redirects=0
net.ipv6.conf.default.forwarding=0
net.ipv6.conf.all.autoconf=0
net.ipv6.conf.all.accept_dad=0
net.ipv6.conf.all.accept_ra=0
net.ipv6.conf.all.accept_ra_defrtr=0
net.ipv6.conf.all.accept_ra_rtr_pref=0
net.ipv6.conf.all.accept_ra_pinfo=0
net.ipv6.conf.all.accept_source_route=0
net.ipv6.conf.all.accept_redirects=0
net.ipv6.conf.all.forwarding=0
Änderungen übernehmen
#6.5 ZB Block
ZB Block ist ein php security script und bietet Schutz vor Bots, SQLInjections, Website defacement, XSS, RFI, überprüft externe Blacklists und blockt unerwünschte Domains, IPs und User Agents. Mehr Informationen zu ZB Block findet man hier:
Installation:
- Die .zip, .7z, or .tar.gz. Datei runterladen

- Entpacken und den Inhalt des entpackten Ordners ins root Verzeichnis, also /<rootverzeichnis>/zbblock/
aufrufen
- Ab hier den Setup befolgen und die ZB_Block_Manual.pdf aus dem zbblock Ordner lesen
Die Installation an sich ist sehr simpel, nimmt kaum Zeit in Anspruch und schützt eure PHP Seiten.
[#6 Tipps & Tricks]
Wie stelle ich eine Verbindung zum MySQL Server her, wenn dieser nur Verbindungen von localhost erlaubt? Die Antwort ist PuTTY
PuTTY starten und mit SSH verbinden. Nun kann man sich ganz einfach über 127.0.0.1:3306 auf dem MySQL Server einloggen. Mein persönlicher Favorit unter den MySQL-Datenbank Tools ist SQLyog.
Persönliche Daten sichern und verwalten
Benutze einen Keymanager, um Logindaten und Passwörter sicher zu speichern. Der Vorteil ist klar: Man muss sich nur ein einziges Kenntwort merken. Jeder kennt das, man hat dutzende Seiten, jede Menge Logindaten und muss sich sehr viele Passwörter merken. Das Problem ensteht schnell.. man benutzt leichte Passwörter und meist das selbe für mehrere Accounts. Dadurch wird die Sicherheit sehr beeinträchtigt.
Ich empfehle euch
KeeyPassX oder ein ähnliches Programm. Es kann sichere Passwörter generieren und hilft euch bei der Verwaltung von sensiblen Daten. Die Datenbank wird selbstverständlich verschlüsselt, man kann das Ganze auch auf eine externe Schlüsseldatei erweitern, die beim Einloggen zusätzlich zum Passwort benötigt wird. Diese kann bequem auf einen USB-Stick gepackt werden und schützt so zusätzlich vor fremdem Zugriff.
Webseite:
#6.1 Domain als Hostname eintragen
Seid ihr im Besitz einer Domain, die bereits alle nötigen A und MX Records besitzt, könnt ihr diese als Hostname für euren Server eintragen.
Den Inhalt löschen und eure Domain dort eintragen. Zum Bsp.:
Ganz am Ende einfügen:
Code:
xxx.xxx.xxx.xxx your-domain.net your-domain
Befehl ausführen:
Code:
/etc/init.d/hostname.sh
Jetzt sollte
hostname -f folgendes ausgeben:
your-domain.net
Evtl. noch den Eintrag
host-name in
/etc/dhcp/dhclient.conf entfernen, sollte er aus irgendeinem Grund dort stehen.
Normalerweise sollte das aber nicht der Fall sein.
Da der Mailserver die Domains aus der froxlor MySQL Datenbank ausliest, muss man mydestination nicht mehr konfigurieren.
Der E-Mail Header sieht nach der Änderung dann so aus:
Return-Path: <

>
X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on your-domain.net
X-Spam-Level:
X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED,HTML_MESSAGE,
MIME_HTML_MOSTLY autolearn=ham version=3.3.1
Delivered-To:

Received: from adminPC (p5xxxxxxxxx.dip.t-dialin.net [91.10.xx.xx])
by your-domain.net (Postfix) with ESMTPSA id AC60917FD77
for <

>; Wed, 27 Mar 2013 14:23:23 +0100 (CET)
From: =?iso-8859-1?Q?Max_Mustermann?= <

>
To: <

>
Subject: test
Date: Wed, 27 Mar 2013 14:23:25 +0100
Message-ID: <
[email protected]>
MIME-Version: 1.0
Content-Type: multipart/alternative;
boundary="----=_NextPart_000_0019_01CE2AF6.A51B6340"
X-Mailer: Microsoft Outlook 15.0
Thread-Index: Ac4q7kAwKPcllCU1RWGaLymym249OA==
Content-Language: de