V-Server einrichten
Ein Freund von mir hat das aktuelle Angebot an V-Servern bei Strato genutzt und sich einen Linux Virtual Server 1 bestellt. Nun versuche ich hier zu dokumentieren, welche Schritte zur Einrichtung notwendig waren.
Der Server soll einige Dinge erledigen:
Webserver
Zur Bereitstellung von Webseiten benutzen wir den Apache-Webserver. Da der Server unter mehreren Adressen erreichbar sein wird, richten wir VirtualHosts ein.
Nach der Installation mit dem Befehl
apt-get install apache2 php5 php5-mysql
zeigt der Server die Dateien in /var/www/ an.
Hier erstellen wir nun den Ordner vhosts, wo wir Unterordner mit den einzelnen Domains erstellen werden. Die Konfiguration für Apache finden wir in
/etc/apache2/sites-available
hier sollte nur eine Datei zu finden sein. Hier müssen wir nur die Standard-Dokumentpfade anpassen. Am Besten legen wir den Standard-Inhalt in
/var/www/vhosts/default
Nun können wir eine Standard-Konfiguration für neue Domains erstellen:
<VirtualHost *:80> ServerAdmin webmaster@<domain> ServerName <domain> DocumentRoot /var/www/vhosts/<domain>/htdocs <Directory /var/www/vhosts/<domain>/htdocs/> Options MultiViews AllowOverride None Order allow,deny allow from all </Directory> ErrorLog /var/log/apache2/<domain>.error.log LogLevel warn CustomLog /var/log/apache2/<domain>.access.log combined </VirtualHost>
Diese Konfiguration können wir nun einfach in das Verzeichnis /etc/apache2/sites-available/ kopieren und die Platzhalter anpassen. Danach müssen wir die Domains noch mit einer Verlinkung aktivieren:
root@server:/# cd /etc/apache2/sites-enabled root@server:/etc/apache2/sites-enabled# ln -s ../sites-available/<domain> <domain>
Nach dem Erstellen der Verzeichnisse sollte mit einem Apache-Neustart
root@server:/# apache2ctl graceful
alles laufen.
Bugzilla
Für eine bereits vorhandene Bugzilla-Version musste nach einem Umzug eine neue Perl-Grundinstallation vorgenommen werden. Die Installation von Zusatzpaketen erfolgt hier über die benutzerfreundliche Oberfläche cpan, die einfach im Terminal mit Befehlen versorgt wird:
root@server:/# cpan cpan[1]>
Mit dem Befehl install können Pakete installiert werden. Für Bugzilla 4.0 müssen folgende Pakete installiert werden:
CGI (3.51) Date::Format (2.21) DateTime (0.28) DateTime::TimeZone (0.71) DBI (1.41) DBD::mysql (4.00) (für MySQL-Datenbanken) DBD::Pg (1.45) (für PostgreSQL-Datenbanken) DBD::Oracle (1.19) (Für Oracle-Datenbanken) Digest::SHA (any) Email::Send (2.00) Email::MIME (1.904) Template (2.22) URI (any)
Für das Paket Template wird zusätzlich das Paket YAML benötigt. Template kann auch direkt über die Debian-Quellen installiert werden:
apt-get install libtemplate-perl
Datenbank-Server
Als Datenbank-Server benutzen wir MySQL. Diesen Server installieren wir ganz einfach per apt:
root@server:/# apt-get install mysql-server mysql-client
Dann setzen wir dem root-Benutzer in MySQL ein neues Passwort:
root@server:/# mysqladmin -u root password "newpwd"
Mailserver
Die folgende Anleitung ist teilweise eine Übersetzung von http://johnny.chadda.se/article/mail-server-howto-postfix-and-dovecot-with-mysql-and-tlsssl-postgrey-and-dspam/
Für den Ein- und Ausgang von Mails auf dem Server muss ein Mailserver eingerichtet werden. Wir entscheiden uns hier für Postfix als MTA und Dovecot als MDA. Die Einrichtung von Postfix ist komplexer, da wir hier mit virtuellen Benutzern arbeiten werden, um so wenig Systembenutzer auf dem System zu haben, wie möglich. Außerdem unterstützt der Server dann auch die Handhabung mehrerer Domains. Zu aller Erst installieren wir Postfix mit apt:
root@server:/# apt-get install postfix postfix-mysql
Falls bei der Installation ein Konfigurations-Dialog auftritt, wählen wir hier einfach erstmal "Keine Konfiguration" aus.
Dann Erstellen wir im MySQL-Server eine neue Datenbank "mail" und einen neuen Benutzer "mail" mit allen Rechten:
root@server:/# mysql -u root -p mysql> CREATE DATABASE mail; mysql> GRANT ALL PRIVILEGES ON mail.* TO 'mail'@'localhost' IDENTIFIED BY 'mail'; mysql> quit
Postfix Admin
Dann laden wir den Postfix Admin von der Webseite herunter und entpacken ihn in ein eingerichtetes Verzeichnis z.B. einer Subdomain (z.B. mail.<domain>)
root@server:/# mkdir /var/www/vhosts/mail.example.org/htdocs root@server:/# cd /var/www/vhosts/mail.example.org/htdocs root@server:/# tar xvfz postfixadmin-X.X.X.tgz
Nun passen wir noch den Postfix Admin an unsere Zwecke an. Dazu wechseln wir in das vorhin angelegte Verzeichnis postfixadmin-X.X.X/ (das wir noch ändern sollten ;-) ) und kopieren die Standardkonfiguration:
root@server:/# cd ...../postfixadmin-X.X.X/ root@server:/# cd .. root@server:/# mv postfixadmin-X.X.X/ postfixadmin/ root@server:/# vi config.inc.php
Hier passen wir folgende Parameter an:
$CONF['postfix_admin_url'] = ‘'var/www/vhosts/mail.example.org/postfixadmin/'; $CONF['database_type'] = 'mysqli'; $CONF['database_user'] = 'mail'; $CONF['database_password'] = 'mail'; $CONF['database_name'] = 'mail';
(Natürlich an die eigenen Zwecke angepasst)
Postfix
Die Konfiguration liegt in /etc/postfix wir wechseln also in das Verzeichnis und bearbeiten die (vielleicht neue) Datei main.cf
root@server:/# cd /etc/postfix root@server:/# vi main.cf
Dann richten wir die Datei wie folgt ein (denken Sie dran myhostname und myorigin an Ihre eigenen Bedürfnisse anzupassen). Mit Dovecot 2.0 hat sich einiges an der SASL-Authentifizierung geändert... das ist hier schon eingearbeitet:
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) biff = no append_dot_mydomain = no #delay_warning_time = 4h myhostname = mail.mycompany.com myorigin = mycompany.com mydestination = localhost relayhost = mynetworks = 127.0.0.0/8 mailbox_size_limit = 0 recipient_delimiter = + inet_interfaces = all virtual_mailbox_domains = proxy:mysql:$config_directory/mysql_virtual_domains_maps.cf virtual_mailbox_base = /var/vmail virtual_mailbox_maps = proxy:mysql:$config_directory/mysql_virtual_mailbox_maps.cf virtual_alias_maps = proxy:mysql:$config_directory/mysql_virtual_alias_maps.cf virtual_minimum_uid = 150 virtual_uid_maps = static:150 virtual_gid_maps = static:8 virtual_transport = dovecot # SASL Authentication #smtpd_sasl_exceptions_networks = $mynetworks #smtpd_sasl_security_options = noanonymous #broken_sasl_auth_clients = yes smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_auth_enable = yes smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, permit
Diese Konfiguration legt die Mails in /var/vmail ab und benutzt den Benutzer vmail mit der UID 150 (legen wir gleich an):
root@server:/# useradd -r -u 150 -g mail -d /var/vmail -s /sbin/nologin -c “Virtual mailbox” vmail root@server:/# mkdir /var/vmail root@server:/# chmod 770 /var/vmail/ root@server:/# chown vmail:mail /var/vmail/
Jetzt fangen wir an, die Maps zu konfigurieren. Hiermit bringen wir Postfix bei, wir er die Datenbank nach Mail-Adressen abfragen muss. Dafür müssen wir einige Dateien anlegen:
root@server:/# touch /etc/postfix/mysql_virtual_alias_maps.cf root@server:/# touch /etc/postfix/mysql_virtual_domains_maps.cf root@server:/# touch /etc/postfix/mysql_virtual_mailbox_limit_maps.cf root@server:/# touch /etc/postfix/mysql_virtual_mailbox_maps.cf
/etc/postfix/mysql_virtual_alias_maps.cf
user = mail password = mail hosts = localhost dbname = mail table = alias select_field = goto where_field = address additional_conditions = and active = '1' #query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
/etc/postfix/mysql_virtual_domains_maps.cf
user = mail password = mail hosts = localhost dbname = mail table = domain select_field = domain where_field = domain additional_conditions = and backupmx = '0' and active = '1' #query = SELECT domain FROM domain WHERE domain='%s' AND backupmx = '0' AND active = '1'
/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
user = mail password = mail hosts = localhost dbname = mail table = mailbox select_field = quota where_field = username additional_conditions = and active = '1' #query = SELECT quota FROM mailbox WHERE username='%s' AND active = '1'
/etc/postfix/mysql_virtual_mailbox_maps.cf
user = mail password = mail hosts = localhost dbname = mail table = mailbox select_field = CONCAT(domain,'/',maildir) where_field = username additional_conditions = and active = '1' #query = SELECT CONCAT(domain,'/',maildir) FROM mailbox WHERE username='%s' AND active = '1'
Wichtig ist es, hier den Benutzernamen und das Passwort an die MySQL-Einstellungen anzupassen.
Als letzte Postfix-Konfiguration müssen wir in der master.cf ganz unten die Pipe für Dovecot einrichten:
dovecot unix – n n – – pipe flags=DRhu user=vmail:mail argv=/usr/lib/dovecot/deliver -d $(recipient) submission inet n - - - - smtpd -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_sasl_type=dovecot -o smtpd_sasl_path=private/auth -o smtpd_sasl_security_options=noanonymous -o smtpd_sasl_local_domain=$myhostname -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o smtpd_sender_login_maps=hash:/etc/postfix/virtual -o smtpd_sender_restrictions=reject_sender_login_mismatch -o smtpd_recipient_restrictions=reject_non_fqdn_recipient,reject_unknown_recipient_domain,permit_sasl_authenticated,reject
Dovecot
Nun beginnen wir, den zweiten Teil des Mailservers anzupassen. Hierfür installieren wir Dovecot über apt:
root@server:/# apt-get install dovecot-imapd dovecot-pop3d dovecot-mysql
Wir können hier auch das Paket "dovecot-pop3d" weglassen, wenn wir keine POP3-Anmeldung am Server brauchen.
Nun beginnen wir mit der Konfiguration von Dovecot unter /etc/dovecot/dovecot.conf. Diese Konfiguration kann einfach so kopiert werden. Es bringt auch eine SSL-Unterstützung mit, die aber von Haus aus deaktiviert ist:
auth_mechanisms = plain login disable_plaintext_auth = no first_valid_uid = 150 hostname = mail.lt42.de last_valid_uid = 150 log_timestamp = "%Y-%m-%d %H:%M:%S " mail_location = maildir:/var/vmail/%d/%u passdb { args = /etc/dovecot/dovecot-sql.conf driver = sql } postmaster_address = xxx@example.com service auth { unix_listener /var/spool/postfix/private/auth { group = postfix mode = 0660 user = postfix } unix_listener auth-userdb { group = mail mode = 0600 user = vmail } } service imap-login { executable = imap-login inet_listener imap { port = 143 } } service pop3-login { executable = pop3-login director inet_listener pop3 { port = 110 } } # Hier kann bei Bedarf die SSL-Verschlüsselung eingeschaltet werden. ssl = no #ssl_cert = </etc/ssl/certs/dovecot.pem #ssl_key = </etc/ssl/private/dovecot.pem userdb { args = /etc/dovecot/dovecot-sql.conf driver = sql } protocol imap { mail_max_userip_connections = 10 }
Nun müssen wir Dovecot nur noch sagen, wie sich Dovecot die Anmelde-Daten beschaffen kann. Dafür bearbeiten wir die Datei /etc/dovecot/dovecot-sql.conf:
driver = mysql connect = host=localhost dbname=mail user=mail password=mail # The new name for MD5 is MD5-CRYPT so you might need to change this depending on version default_pass_scheme = MD5 # Get the mailbox user_query = SELECT '/var/vmail/%d/%n' as home, 'maildir:/var/vmail/%d/%n' as mail, 150 AS uid, 8 AS gid, concat('dirsize:storage=', quota) AS quota FROM mailbox WHERE username = '%u' AND active = '1' # Get the password password_query = SELECT username as user, password, '/var/vmail/%d/%n' as userdb_home, 'maildir:/var/vmail/%d/%n' as userdb_mail, 150 as userdb_uid, 8 as userdb_gid FROM mailbox WHERE username = '%u' AND active = '1' # If using client certificates for authentication, comment the above and uncomment the following #password_query = SELECT null AS password, '%u' AS user
Hier müssen wir möglicherweise die Felder user= und password= an unsere Zwecke anpassen.
Dann setzen wir noch die Rechte für Dovecot:
root@server:/# chmod 600 /etc/dovecot/*.conf root@server:/# chown vmail /etc/dovecot/*.conf
Dovecot ist jetzt konfiguriert. Momentan noch ohne SSL, aber das kommt später.
Nun ist der Mailserver eingerichtet. Wir starten nun die Services neu:
root@server:/# /etc/init.d/postfix restart root@server:/# /etc/init.d/dovecot restart root@server:/# /etc/init.d/apache2 restart root@server:/# /etc/init.d/mysql-server restart
Nun können wir unter http://mail.example.org/postfixadmin/admin/ einen neuen Benutzer und eine neue Domain anlegen und einige Tests durchführen. Damit ist der Mailserver eingerichtet.
SSL
Für die sichere Mail-Übertragung ermöglichen wir eine Verbindung per SSL. Dafür erstellen wir auf dem Server erstmal selbst signierte SSL-Zertifikate.
mkdir -p /etc/ssl/mailserver/ cd /etc/ssl/mailserver/ openssl genrsa 1024 > mail-key.pem chmod 400 mail-key.pem openssl req -new -x509 -nodes -sha1 -days 365 -key mail-key.pem > mail-cert.pem
Der common name MUSS hier mit dem Server-Namen übereinstimmen (mail.example.org)
Nun blenden wir in der dovecot.conf die SSL-Kommentare ein:
protocols ssl_listen ssl_cert_file ssl_key_file ssl_parameters_regenerate = 168 verbose_ssl = no
und passen die Pfade an.
SpamAssassin
Um auch Spammern von dem Versand von Mails auszuschließen, haben wir bereits Einstellungen gesetzt. Nun können Spammer aber immernoch Mails bei uns abliefern. Das ändern wir mit der Installation von SpamAssassin und Amavis:
sudo apt-get amavisd-new clamav-daemon spamassassin pyzor razor
Nun bekommen wir eine handvoll Perl-Pakete vorgeschlagen, die wir alle mitinstallieren. Um die Viren-Filterung mit ClamAV zu ermöglichen, fügen wir den Benutzer der amavis-Gruppe hinzu:
sudo adduser clamav amavis
Nun aktivieren wir SpamAssassin, in dem wir die Datei
sudo vi /etc/default/spamassassin
bearbeiten und die Einstellung
ENABLED=0
auf
ENABLED=1
setzen.
Nun müssen wir noch die Einstellungen für Amavis setzen und mitteilen, dass es für die Spam-Erkennung zuständig ist:
sudo vi /etc/amavos/conf.d/15-content_filter_mode
Hier löschen wir insgesamt vier Kommentar-Zeichen, sodass die Datei so aussieht:
use strict;
# You can modify this file to re-enable SPAM checking through spamassassin # and to re-enable antivirus checking. # # Default antivirus checking mode # Please note, that anti-virus checking is DISABLED by # default. # If You wish to enable it, please uncomment the following lines: @bypass_virus_checks_maps = ( \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re); # # Default SPAM checking mode # Please note, that anti-spam checking is DISABLED by # default. # If You wish to enable it, please uncomment the following lines: @bypass_spam_checks_maps = ( \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re); 1; # ensure a defined return
Nun können wir noch einige Einstellungen vornehmen, wann und wie SPAM gekennzeichnet wird und wie dann mit den Mails umgegangen wird.
sudo vi /etc/amavis/conf.d/20-debian_defaults
Weil Spammer oft Fake-Adressen benutzen, kann es problematisch werden, abgelehnte E-Mails als solche zurück zu schicken. Hier setzen wir in jedem Fall die Einstellung
$final_spam_destiny = D_BOUNCE
auf
$final_spam_destiny = D_DISCARD
Hier können wir auch einstellen, wann Mails als Spam bezeichnet, markiert oder abgelehnt werden sollen.
$sa_tag_level_deflt = 2.0; # add spam info headers if at, or above that level $sa_tag2_level_deflt = 6.31; # add 'spam detected' headers at that level $sa_kill_level_deflt = 6.31; # triggers spam evasive actions $sa_dsn_cutoff_level = 10; # spam level beyond which a DSN is not sent
Es kann auch sinnvoll sein, die Spam-Kennzeichnung durch ein Kommentar zu erweitern, damit man auf einen Blick weiß, welcher Server die Mail als Spam markiert hat:
$sa_spam_subject_tag = '***SPAM*** ';
wird zum Beispiel zu
$sa_spam_subject_tag = '[SPAM@lt42.de] ';
Nebenbei gefallen mir auch die Sterne nicht... da finde ich eckige Klammern schöner.
Nun starten wir Amavis neu und lesen so die Konfiguration neu ein:
sudo /etc/init.d/amavis restart
Zur Integration mit Postfix sind mehrere Schritte notwendig. Zuerst geben wir stupide folgenden Befehl in die Konsole ein:
sudo postconf -e 'content_filter = smtp-amavis:[127.0.0.1]:10024'
Nun bearbeiten wir die Datei
vi /etc/postfix/master.cf
und setzen an das Ende der Datei folgende Zeilen:
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
Um zu Vermeiden, dass Mails, die über Spam-Mails informieren sollen, als Spam markiert werden, setzen wir folgende Options unter die Zeile, die von pickup angeführt wird:
-o content_filter= -o receive_override_options=no_header_body_checks
Nun starten wir Postfix neu und das System sollte laufen:
sudo /etc/init.d/postfix restart
FTP-Server
Die Installation des FTP-Servers könnte einfacher nicht sein. Zuerst installieren wir den Daemon über die Shell:
sudo apt-get install vsftpd
Dann passen wir unter /etc/vsftpd.conf folgende Zeilen an:
anonymous_enable=NO local_enable=YES write_enable=YES chroot_local_user=YES
Aus Spaß können wir mit
ftpd_banner=FTP Service on XX.stratoserver.net
noch eine FTP-Begrüßung hinzufügen.
Nun können wir Benutzer im System erstellen und ihnen als Home-Verzeichnis ihren Domain-Ordner zuweisen und setzen ihnen ein Passwort:
useradd -M -d /var/www/vhosts/test.de/ -s /sbin/nologin test passwd test
Nun können sich Benutzer per FTP über Port 21 mit dem Server verbinden.