| 
 | |||
| agena.go-itservice.com neuCompaq Pro Reliant DS 320 zum Einsatz beim Provider. Hardware:Compaq Pro Reliant DS 320 mit 2x120GB IDELinux installieren:Bootreihenfolge im BIOS: CDROM - HD0von der Etch Netinstal DVD/CD booten, am Bootprompt "expertgui" eingeben. Da der Rechner erst mal im Privaten Netz installiert wird (aber nicht bei mir, man siehts an den abweichenden Adressen): ip: 192.168.120.100bei der Partitionierung der ersten Platte hatte ich erst übersehen, dass diese als Slave eingestellt war aber keine Lust mehr, das zu ändern. Hier die Partitionierungsdaten: 10,0 GB hdf1 ext3 / 70,5 GB hdf2 ext3 /homeda ich an dem Tag sehr in Eile war, man siehs auch an der kurzen und relativ ungenauen Ausführung dieser Doku, habe ich auf einen RAID Verbund verzichtet. Der Rest der Installation ist erstmal Standard. manuelle PaketauswahlPakete installieren Mailserver: nur lokal Mails root: rootnach dem ersten Booten und der Grundinstallation werden mit aptitudefolgende Pakete 
aufgespielt, nachdem die/etc/apt/sources.listangepasst wurde, am besten über 
"Suche",deb ftp://ftp.uni-bayreuth.de/pub/linux/Debian/debian/ etch main contrib deb http://security.debian.org/ etch/updates main contribWie man sieht habe ich vom alten Server agena her den Versionswechsel auf PHP 5 und MySQL 5 vollzogen. + amavisd-new + apache2-mpm-prefork + awstats + bind9 + catdoc (wegen xls2csv) + clamav + clamav-daemon + courier-authdaemon + courier-authlibmysql + courier-base + courier-imap + courier-imap-ssl + courier-pop-ssl + courier-pop + courier-ssl + cryptsetup + debconf-utils + fetchmail + hdparm + laptop-mode-tools + imagemagick + joe + ldap-utils + libapache2-mod-php5 + libapache2-mod-proxy-html + libauthen-sasl-cyrus-perl + libauthen-sasl-perl + libgsasl7 + libnet-ip-perl + libsasl2 + libsasl2-modules + libsasl2-modules-sql + lynx + mcrypt + mdadm + mysql-client-5.0 + mysql-server-5.0 + ntpdate + ntp-server + openssl + openvpn + perlmodule (unter nicht-installiert -> perl, siehe "Allgemeines zu Etch") + php5 (incl diverser Module , siehe "Allgemeines zu Etch") + phpldapadmin + phpmyadmin + postfix + postfix-tls + postfix-mysql + postgrey + restartd + rsh-redone-client + rsync + slapd + spamassassin + spamc + squid + squidguard + squirrelmail + squirrelmail-locales + ssh + sysutils (wegen dos2unix) Konfigurieren des SystemsCronjob für/root/daily5hanlegen...ssh-Keys von Workstation an .ssh/authorized-Leys hängen, bzw diese erst erzeugen. sshddamit Zugang auf agena auch von Netzen aus möglich ist, bei denen eine (Firmen)Firewall den Internetzugang via ssh auf Port 22 verhindert, lauscht der sshd auf Agena auch auf Port 563, das ist der Port für "secure News". Dazu muß in der/etc/ssh/sshd_confignur eine weitere Port Zeile
eingetragen werden. Port 443 (https) wäre noch besser, der ist fast überall frei, allerdings 
läuft der Apache auf agena auch auf Port 443, so daß diese Option nicht möglich ist:Port 22 Port 563 VHCS2 installierenVHCS2 herunterladen bei Bedarf auch das deutsche Sprachpaket auspacken die Installationsanleitung Installationsanleitung lesen. Bei den benötigten Paketen kann statt PHP4 auch PHP5 mit den entsprechenden Modulen verwendet werden.Apache 2Hier weicht es wegen VHCS2 von der bisherigen Konfiguration stark ab.goweb Dateien nach /home/go/httpdspielen (sollte von altem Rechner her noch tun)
imdata/toolsOrdner bei jeder installierten Seite das Skript./bootstrap -U go -P PASSWD SITEaufrufen,
dann die vorher mittable2csvexportierten Daten wieder mit./csv2table all SITEeinspielen. Das Bootstrap Skript erzeugt die DB und sorgt für den grant auf die Tabellen. 
Falls PHP5 nicht auf mysql verbinden kann, die/etc/php5/apache2/php.inikontrollieren, 
dort muß ganz unten stehen:extension=imagick.so Apache 2 mit httpsZertifikat erzeugen, der Servername muß mit dem CommonName im Zertifikat übereinstimmen! Soll die Domänewww.dummy.devia https erreichbar sein, muß der Eintrag in der/home/go/httpd/httpd.includeso aussehen:
<VirtualHost *:443>
        SSLEngine On
        SSLCipherSuite HIGH:MEDIUM
        SSLCertificateFile    /etc/apache2/ssl/www.dummy.de.cert
        SSLCertificateKeyFile /etc/apache2/ssl/www.dummy.de.key
        SSLProtocol all
        ServerName      www.dummy.de
        DocumentRoot    /home/go/httpd/dummyssl
        DirectoryIndex  index.php index.html index.htm
</VirtualHost>
Der Apache 2 lässt leider nur ein einziges Zertifikat pro Port zu,  d.h. auf dem Standard-https
Port 443 sendet er das Zertifikat vonagena.go-itservice.com.Das ist eine bekannte
Einschränkung, die man nicht direkt umgehen kann. Falls jemand unbedingt ein eigenes Zertifikat 
verwenden will geht das auch, aber nur auf einem anderen Port als auf 443. Die Webseite kann zwar 
ganz normal mithttps://www.domain.deangesprochen werden, Apache würde dann aber 
intern auf einen anderen Port (z.B. 44301) weiterleiten und in dem Browser würde bei der Antwort dannhttps://www.domain.de:44301stehen.Apache kann übrigens beide Varianten nicht richtig leiden und quittiert dies mit Warnings im error-Log nach jedem Start. Beide Varianten folgen, DOMAIN ist eine beliebige Domäne, z.b. uligotchi.de,USER der UNIX Username des Besitzers:selbes Zertifikat für alle Seiten 
Listen 443
NameVirtualHost *:443
<VirtualHost *:443>
        SSLEngine On
        SSLCipherSuite HIGH:MEDIUM
        SSLCertificateFile    /etc/apache2/ssl/agena.go-itservice.com.cert
        SSLCertificateKeyFile /etc/apache2/ssl/agena.go-itservice.com.key
        SSLProtocol all
        SetEnv XXURL  /agena.go-itservice.com
        ServerName      agena.go-itservice.com
        DocumentRoot    /home/go/httpd/agena.go-itservice.com/htdocs
        ErrorLog /home/go/httpd/logs/agena.go-itservice.com-Serror.log
        DirectoryIndex  index.php index.html index.htm
        php_admin_value open_basedir "/home:/var/www/vhcs2/gui/:/etc/vhcs2/:/proc/:/var/www/virtual/:/tmp/:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
        php_admin_value session.save_path "/tmp/"
</VirtualHost>
<VirtualHost *:443>
        SSLEngine On
        SSLCipherSuite HIGH:MEDIUM
        SSLCertificateFile    /etc/apache2/ssl/www.DOMAIN.cert
        SSLCertificateKeyFile /etc/apache2/ssl/www.DOMAIN.key
        SSLProtocol all
        SetEnv XXURL  /www.DOMAIN
        ServerName      www.DOMAIN
        ServerAlias     www.DOMAINmit.com
        DocumentRoot    /home/USER/html
        ErrorLog /home/mpaint/html/logs/USER-Serror.log
        DirectoryIndex  index.php index.html index.htm
</VirtualHost>
eigenes Zertifikat für jede Seite, verschiedene Ports
Listen 443
Listen 44301
Listen 44302
Listen 44303DOMAIN
Listen 44304
NameVirtualHost *:443
<VirtualHost *:443>
        ServerName      agena.go-itservice.com
        SSLEngine On
        SSLCipherSuite HIGH:MEDIUM
        SSLProtocol all
        SetEnv XXURL  /agena.go-itservice.com
        SSLCertificateFile    /etc/apache2/ssl/agena.go-itservice.com.cert
        SSLCertificateKeyFile /etc/apache2/ssl/agena.go-itservice.com.key
        DocumentRoot    /home/go/httpd/agena.go-itservice.com/htdocs
        ErrorLog /home/go/httpd/logs/agena.go-itservice.com-Serror.log
        DirectoryIndex  index.php index.html index.htm
        php_admin_value open_basedir "/home:/var/www/vhcs2/gui/:/etc/vhcs2/:/proc/:/var/www/virtual/:/tmp/:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
        php_admin_value session.save_path "/tmp/"
</VirtualHost>
<VirtualHost *:443>
        ServerName      www.DOMAIN
        RedirectMatch permanent ^.*$ https://www.DOMAIN:44301$0
</VirtualHost>
<VirtualHost *:443>
        ServerName      www.go-itservice.de
        ServerAlias     www.go-itservice.com
        RedirectMatch permanent ^.*$ https://www.go-itservice.de:44302$0
</VirtualHost>
<VirtualHost 213.133.101.163:44301>
        ServerName      www.DOMAIN
        SSLEngine On
        SSLCipherSuite HIGH:MEDIUM
        SSLCertificateFile    /etc/apache2/ssl/www.DOMAIN.cert
        SSLCertificateKeyFile /etc/apache2/ssl/www.DOMAIN.key
        SSLProtocol all
        SetEnv XXURL  /www.DOMAIN
        ServerAlias     www.DOMAINmit.com
        DocumentRoot    /home/USER/html
        ErrorLog /home/USER/html/logs/USER-Serror.log
        DirectoryIndex  index.php index.html index.htm
</VirtualHost>
<VirtualHost 213.133.101.163:44302>
        ServerName      www.DOMAIN
        SSLEngine On
        SSLCipherSuite HIGH:MEDIUM
...
dann SSL Modul laden, Zertifikat[e] erzeugen und Apache neu starten:# openssl req -new -outform PEM -out www.DOMAIN.cert -newkey rsa:2048 -nodes -keyout www.DOMAIN.key -keyform PEM -days 9999 -x509 # /etc/init.d/apache2 force-reloadDas opensslKommando erzeugt nach dem folgenden Dialog ein für 9999 Tage gültiges Zertifikat.Country Name (2 letter code) [AU]: DE State or Province Name (full name) [Some-State]: Baden-Wuerttemberg Locality Name (eg, city) []: Ulm Organization Name (eg, company) [Internet Widgits Pty Ltd]: go-itservice Organizational Unit Name (eg, section) []: admin Common Name (eg, YOUR name) []: agena.go-itservice.com Email Address []: 04@go-itservice.comDer fett markierte Eintrag muß exakt der Name des Servers im DNS sein! Unter Debian etch ist beim apache als Charakterset UTF-8 voreingestellt, und zwar so, dass dies nur über die PHP-header Funktion umgestellt werden kann, eine Umstellung via http-equiv im HTML-Header reicht nicht, das HTML Metatag wird ignoriert. In der /etc/apache2/conf.d/charsetwirdAddDefaultCharsetauskommentiert:# AddDefaultCharset UTF-8Stattdessen kann man den Default auch auf ISO-8859-1einstellen, hat dann aber das
umgekehrte Problem mit UTF-8 codierten Seiten.mysqlZum Anmelden:# mysqladmin -u root -p PASSWD # mysql -u root -p PASSWDZu Beginn ist das Mysql-Passwort des root-Accounts leer, dies sofort ändern! Datenbanken, DB-User und Tabellen können bequem mit VHCS2 angelegt werden. Postfix und Courier mit verschlüsselter Verbindung bei SMTP,POP und IMAPFür Apache, Postfix und Courier wied das selbe Zertifikat verwendet, Courier (POP und IMAP) will es allerdings als PEM File mit Key und Zertifikateintrag neben Hashkey in einer Datei. Zuerst wird die Key- und Zertifikatdatei generiert, diese aneinandergehängt und der Hashkey hinzugefügt:# openssl req -new -outform PEM -out postfix.cert -newkey rsa:2048 -nodes -keyout postfix.key -keyform PEM -days 9999 -x509 # cat postfix.cert postfix.key > postfix.pem # openssl gendh >> postfix.pem # chmod 440 postfix.pemDialog für opensslKommando siehe weiter oben unter Apache 2in /etc/courier/pop3d-sslwird folgendes geändert:POP3_STARTTLS=YES TLS_CERTFILE=/etc/apache2/ssl/postfix.pemanalog in der /etc/courier/imapd-sslIMAPDSTARTTLS=YES TLS_CERTFILE=/etc/apache2/ssl/postfix.pemdas Kommando ergibt folgenden Dialog: diese Keyfiles in der /etc/postfix/main.cfeinfügen.Da der Server im lokalen Netz ohne lokalen DNS Server installiert wurde, muss wegen EHLO/HELO Meldung des Postfix Hostname und Domain angepasst werden. Dies ist wichtig, da sonst viele Mailprovider keine Mails von Agena annehmen! myhostname = agena.go-itservice.com mydomain = agena.go-itservice.com ... smtpd_tld_loglevel = 2 smtpd_tls_cert_file = /etc/apache2/ssl/postfix.cert smtpd_tls_key_file = /etc/apache2/ssl/postfix.key smtpd_use_tls = yes smtpd_tls_auth_only = no smtpd_tls_received_header = yesFalls Postfix mails mit mehr als 10 MB verschicken soll (im Beispiel 40MB), muss noch folgende Zeile ergänzt werden: message_size_limit = 41943040Diese Einstellung kann analog zu anderen alle Postfix-Parametern mit: # postconf message_size_limitkontrolliert werden. In der master.cfist für Verschlüsselten Mailversand eine Zeile 
einzufügen (oder einzukommentieren)smtps inet n - - - - smtpd Test der MailinstallationTest smtpalle Dienste stoppen: # /etc/init.d/courier-imap stop # /etc/init.d/courier-imap-ssl stop # /etc/init.d/courier-pop stop # /etc/init.d/courier-pop-ssl stop # /etc/init.d/postfix stopTesten: # netstat -tnpContent checks disablen: /etc/postfix/master.cfwieder aktivieren, 
Zeilen mit-oauskommentieren:smtp inet n - n - - smtpd cleanup unix n - - - 0 cleanupZeilen mit content_filter auskommentieren in /etc/postfix/main.cf # content_filter = amavis:[127.0.0.1]:10024Mysql und postfix Log mit tail in zwei Terminals verfolgen: # tail -f /var/log/mysql.log # tail -f /var/log/maillog.infoDann MySQL und Postfix starten: # /etc/init.d/mysql start # /etc/init.d/postfix startwenn beide Laufen, telnet auf Port 25 zum Test des Postfix: > telnet localhost 25 EHLO wega.ulm.go-itservice.de ... MAIL FROM: go@wega.ulm.go-itservice.de OKimap RCPT TO: local@uligotchi.de OK data ... . quitFalls kein Eintrag im mysql.logkommt, kanns auch an den Logeinstellungen 
liegen: in/etc/mysql/my.cnffolgende Zeile einkommentieren. Vorsicht, 
wieder entfernen, bremst ohne Ende!log = /var/log/mysql.logKontrollieren, ob unter /var/spool/mail/virtual/local/newdie neue Mail 
angekommen ist. Wenn ja, Test mit falschem Recipient, diese wird abgelehnt!Test imap Analog zu smtp redet man nun mit dem IMAP server: > telnet localhost 143worauf sich der IMAP Server meldet, und mit dem Pop Server: > telnet localhost 110 USER local@uligotchi.de PASS local* STAT LIST (Mails auflisten) RETR 1 (Mail ansehen) RSET (sonst ist die Mail gelöscht!) QUIT Logout postgrey zur Spamunterdrückung konfigurierenin/etc/postfix/main.cfbeismtpd_recipient_restrictionsnoch
zusätzlichcheck_policy_service inet:127.0.0.1:60000einfügen, um den
postgrey-Dämon einzubinden:smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, check_policy_service inet:127.0.0.1:60000, reject_unauth_destinationDadurch werden ankommende Mails von einer bisher nicht empfangengen Domain für einige Minuten abgewiesen. Reguläre Mails werden vom Mail Server nach einiger Zeit erneut zugestellt und dann akzeptiert, während Spam-Sender normalerweise keinen Zweitversand versuchen. Denen geht es nur darum, in möglichst kurzer Zeit viele Mails zu versenden. Das Verzögerungsverfahren nennt sich "greylisting". In der Datei /etc/postgrey/whitelist_recipientskann man einzelne Mailadressen oder Domains 
vom Greylisting ausnehmen, deren Mails werden dann immer und sofort akzeptiert. Da einige Senderdomains mit dem Verfahren 
nicht zurechtkommen, sind in der Datei/etc/postgrey/whitelist_clientsschon voreingestellte Ausnahmen eingetragen.phpmyadmin konfigurierenfunktioniert direkt unter VHCS2, keine weitere Konfiguration nötigrestartdnachzustartende Prozesse in/etc/restartd.confeintragen, z.b.apache2 ".*apache2" "/etc/init.d/apache2 restart"Wobei der 2.String den Ausdruck angibt, der vom Restard-demon in der Ausgabe des ps -efKommandos gesucht wird, um bei Misserfolg den 3.String auszuführen.Anschliessend den Restard-Demon neu starten. OpenVPN konfigurierenUnterverzeichniszertifikateerzeugen, wo die erstellten Zertifikate abgelegt werden.# cd /etc/ssl # mkdir zertifikateSchlüssel für CA ( Certifikate Authority ) erstellen # openssl genrsa -aes256 -out private/vpn-cakey.pem 2048CA erstellen # openssl req -new -x509 -days 365 -key private/vpn-cakey.pem -out vpn-ca.pem -set_serialfestgelegtes Passwort vergeben, nun folgt der Zertifizierungsdialog. Country Name (2 letter code) [AU]: DE State or Province Name (full name) [Some-State]: Baden-Wuerttemberg Locality Name (eg, city) []: Ulm Organization Name (eg, company) [Internet Widgits Pty Ltd]: go-itservice Organizational Unit Name (eg, section) []: admin Common Name (eg, YOUR name) []: vpn1.go-itservice.com Email Address []: 04@go-itservice.comDatei index.txterzeugen, damit man später die Zertifikate sperren kann, 1 in serial schreiben# echo "01" > serial # touch index.txt && echo "01" > serialZertifikatanfrage und den Schlüssel erstellen: # openssl req -new -newkey rsa:2048 -out zertifikate/server_csr.pem -nodes -keyout private/server_key.pem -days 9999diesmal als CN vpn2.go-itservice.comeingeben, Rest gleich. Kein Passwort vergeben. 
Rechte auf Datei korrigieren (sonst Warnung von OpenVPN)# chmod 600 /etc/ssl/private/server_key.pemServer Zertifikat erzeugen -CA: für das Unterzeichnen des Zertifikates -Cakey: Masterschlüssel für das Erstellen des Zertifikates # openssl x509 -req -in zertifikate/server_csr.pem -out zertifikate/server_cert.pem -CA vpn-ca.pem -CAkey private/vpn-cakey.pem -CAserial serial -days 9999Jetzt der Schlüssel und das signierte Zertifikat fü r den Client # openssl req -new -newkey rsa:2048 -out zertifikate/Client1_csr.pem -keyout private/Client1_key.pem -days 9999festgelegtes Passwort vergeben, im Zertifizierungsdialog CN: vpn3.go-itservice.comdas Client Zertifikat wird fast identisch wie das Serverzertifikat erzeugt # openssl x509 -req -in zertifikate/Client1_csr.pem -out zertifikate/Client1_cert.pem -CA vpn-ca.pem -CAkey private/vpn-cakey.pem -CAserial serial -days 9999kein Passwort, im Zertifizierungsdialog CN: vpn4.go-itservice.comZum Schluss den Diffie Hellman Parameter erzeugen (dauert lange). # openssl dhparam -out dh2048.pem 2048Startskripte anpassen in /etc/init.d/fwstart/sbin/iptables -t nat -F POSTROUTING echo 1 > /proc/sys/net/ipv4/ip_forward /sbin/iptables -t nat -A POSTROUTING -o eth0 -s 192.168.90.0/24 -j MASQUERADE ... /sbin/iptables -A INPUT -i "$EXT_IF" -p udp --dport 1194 -m state --state NEW -j ACCEPTin /etc/init.d/obi1/usr/sbin/openvpn /etc/openvpn/Server.ovpnServerkonfigurationsdatei Server.ovpn:port 1194 proto udp mode server tls-server dev tap client-to-client keepalive 10 120 #Virtuelle Server IP ifconfig 192.168.90.1 255.255.255.0 ifconfig-pool 192.168.90.2 192.168.90.9 push "redirect-gateway" ca /etc/ssl/vpn-ca.pem cert /etc/ssl/zertifikate/server_cert.pem key /etc/ssl/private/server_key.pem dh /etc/ssl/dh2048.pem auth SHA1 cipher aes-256-cbc comp-lzo user nobody group nogroup persist-key persist-tun #Logging 0, (Zum testen:5) verb 3 log-append /var/log/openvpn/openvpn.log status /var/log/openvpn/status.logder OpenVPN Client für Windows kann von http://openvpn.net/index.php/downloads.html heruntergeladen werden. die Konfigurationsdatei Client.ovpnist für die Installation unterE:\Programme\Openvpn,
wobei die vier Konfigurationsdateien dann im OrdnerE:\Programme\Openvpn\configliegen:tls-client pull dev tap proto udp remote 213.133.101.163 1194 resolv-retry infinite nobind persist-key persist-tun ca E:\\Programme\\Openvpn\\config\\vpn-ca.pem cert E:\\Programme\\Openvpn\\config\\Client1_cert.pem key E:\\Programme\\Openvpn\\config\\Client1_key.pem cipher AES-256-CBC comp-lzo auth SHA1 verb 3 mute 20Bei der Verbindung von OpenVPN auf den Server muß das festgelegte Passwort eingegeben werden. Diese Beschreibung basiert übrigens auf openvpn-wiki Paketfilter mit iptablesDamit der Rechner etwas besser gesützt ist, verhindert ein Paketfilter Verbindungsaufnahmen auf den Server agena und lässt nur einige Ports, wie POP, SMTP, HTTP und HTTPS offen.Damit man sich bei Änderungen an der Datei fwstartnicht versehentlich dauerhaft
selber aussperrt, wird die Firewallregel alle 24h für 5 Minuten durch einen 
Defaultfiltersatz ersetzt.Server kommt zum Providerumstellen der IP Adresse auf den Provider Hetznerin /etc/network/interfaces |