| |||
|
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 aptitude folgende Pakete
aufgespielt, nachdem die /etc/apt/sources.list angepasst 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/daily5h anlegen...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_config nur 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/httpd spielen (sollte von altem Rechner her noch tun)
im data/tools Ordner bei jeder installierten Seite das Skript
./bootstrap -U go -P PASSWD SITE aufrufen,
dann die vorher mit table2csv exportierten Daten wieder mit ./csv2table all SITE
einspielen. 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.ini kontrollieren,
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.de via https erreichbar sein, muß der Eintrag in der
/home/go/httpd/httpd.include so 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 von agena.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 mit https://www.domain.de angesprochen werden, Apache würde dann aber
intern auf einen anderen Port (z.B. 44301) weiterleiten und in dem Browser würde bei der Antwort dann
https://www.domain.de:44301 stehen.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 openssl Kommando 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/charset wird AddDefaultCharset auskommentiert:
# AddDefaultCharset UTF-8Stattdessen kann man den Default auch auf ISO-8859-1 einstellen, 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 openssl Kommando siehe weiter oben unter Apache 2in /etc/courier/pop3d-ssl wird folgendes geändert:
POP3_STARTTLS=YES TLS_CERTFILE=/etc/apache2/ssl/postfix.pemanalog in der /etc/courier/imapd-ssl
IMAPDSTARTTLS=YES TLS_CERTFILE=/etc/apache2/ssl/postfix.pemdas Kommando ergibt folgenden Dialog: diese Keyfiles in der /etc/postfix/main.cf einfü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.cf ist 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.cf wieder aktivieren,
Zeilen mit -o auskommentieren:
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.log kommt, kanns auch an den Logeinstellungen
liegen: in /etc/mysql/my.cnf folgende Zeile einkommentieren. Vorsicht,
wieder entfernen, bremst ohne Ende!
log = /var/log/mysql.logKontrollieren, ob unter /var/spool/mail/virtual/local/new die 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.cf bei smtpd_recipient_restrictions noch
zusätzlich check_policy_service inet:127.0.0.1:60000 einfü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_recipients kann 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_clients schon voreingestellte Ausnahmen eingetragen.
phpmyadmin konfigurierenfunktioniert direkt unter VHCS2, keine weitere Konfiguration nötigrestartdnachzustartende Prozesse in/etc/restartd.conf eintragen, 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 -ef Kommandos gesucht wird, um bei Misserfolg den 3.String auszuführen.Anschliessend den Restard-Demon neu starten. OpenVPN konfigurierenUnterverzeichniszertifikate erzeugen, 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.txt erzeugen, 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.com eingeben, 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.com das 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.com Zum 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.ovpn ist für die Installation unter E:\Programme\Openvpn ,
wobei die vier Konfigurationsdateien dann im Ordner E:\Programme\Openvpn\config liegen:
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 fwstart nicht 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 |