KategorieWebServer

Postfix als Inbound Relay

Da ich aktuell einige Server auf IPv6 only umstelle kam ich nicht herum einen IPv4 to IPv6 Mail Gateway aufzusetzen. Um so wenig overhead zu habe als möglich, habe ich mich entschieden einen Postfix Server + RBL + Spamcheck aufzuseten.

Vorausgesetzt Ihr habt schon postfix installiert geht es dann wie folgt weiter:

nano /etc/postfix/main.cf

#am Anfang einfügen
#permit_auth_destination = yes
transport_maps = hash:/etc/postfix/transport
relay_domains = hash:/etc/postfix/transport
relay_recipient_maps = hash:/etc/postfix/recipients
unknown_relay_recipient_reject_code = 550
smtpd_client_restrictions = permit_sasl_authenticated,
        permit_mynetworks,
        reject_unauth_destination,
        reject_unlisted_recipient,
        reject_rbl_client zen.spamhaus.org,
        reject_rbl_client bl.spamcop.net,
        reject_rbl_client cbl.abuseat.org

Im Anschluss werden dann die Transport-Regeln und Empfänger definiert.

nano /etc/postfix/transport

#Ip in Klammer sorgt für direkt Zustellung, Ohne Klammern wird ein MX lookup ausgeführt

liebeskleineshaus.de    smtp:[xxx.xxx.xxx.xxx]:14506
kindgerechte-grundschule-herrlingen.de  smtp:[xxx.xxx.xxx.xxx]:14506

nano /etc/postfix/recipients

#Inhalt der Datei
#@liebeskleineshaus.de OK     #accepts all 
info@liebeskleineshaus.de OK  #accepts only info@

Jetzt muss nur noch die für Postfix lesbare Datenbank erstellt werden:

postmap /etc/postfix/transport
postmap  /etc/postfix/recipients

service postfix reload

Jetzt fehlt nur noch der Spam check. Dieser wird wie folgt installiert & konfiguriert:

apt-get install spamassassin 

nano /etc/default/spamassassin
#Hier nun enabled=1

nano /etc/postfix/master.cf

#Unterhalb von 
#smtp      inet  n       -       -       -       -       smtpd
#folgendes einfügern:
   -o content_filter=spamassassin


service postfix restart

Das wars, das inbound relay funktioniert jetzt 🙂

Cloudflare, ein kostenloser Reverse Proxy für IPv6 only Servers

512px-World_IPv6_launch_badge.svgAm 12. Januar 2012 war der offizielle “IPv6 launch day”. Seit nun fast 4 Jahre bieten immer mehr Provider IPv6 an. Der gorße Vorteil von IPv6 ist offensichtlich, so dass die Anzahl der Adressen gigantisch ist. Mit IPv6 fällt auch das altbekannte NAT (Network Address Translation) weg.

Jedes Gerät, kann jetzt eine eindeutige IPv6 Adresse erhalten. Diese Adresse kann dann auch im Router (ggf. Fritzbox) geroutet werden, so dass diese öffentlich im Internet verfügbar ist. Speziell wenn man zu Hause eine Webserver auf einer Raspberry Pi bertreiben möchte oder aber um Kosten zu sparen einen IPv6 Only VPS betreibt benötigt man eine preiswerte/kostenlose Lösung.

Alles in allem ist IPv6 ein saubere Sache, wären da nicht noch einige IPv4 ONLY Nutzer im Netz unterwegs. Jetzt beginnt das eigentliche Problem. Da die Webseite auch für diese Benutzer erreichbar sein muss bietet sich folgendes Setup an.

ipv4_ipv6_reverse_proxy

Um einen Reverse Proxy zu betreiben hat man nun die Wahl entweder einen Dienst in Anspruch zu nehmen, oder aber selbst auf einem Server eine nginx Server zu Hosten. Der Einfachheit halber möchte ich auf Cloudflare als Reverse Proxy & DNS Provider verweisen. Dieser Dienst ist kostenfrei und bietet zudem weitere Features wie kostenloses ssl Zertifikat, Auto Minify von Javascript …

[embedyt] http://www.youtube.com/watch?v=9SKrTDUM48A[/embedyt]

Apache für LOW Memory VPS/Raspberry Pi optimieren

Apache und LOW Memory vertragen sich ja nicht so wirklich, deshalb eines Vorweg, man sollte wenn man nich unbedingt Apache braucht, auf Alternative wie nginx oder Lighttpd setzen. Ich betreibe eigentlich nur auf allen meinen kleineren Systemen (<2GB Ram) nur nginx und (<256MB Ram) lighttpd. Hier haben ich auch einen Link zu einer Low Memory LLMP Konfiguration.

Nichts desto trotz benötigt man manchmal unbedingt einen Indianer, und so kann man ihn auch auf einem Low Mem Server betreiben.

Also wie gesagt ist das größte Problem der Speicher den der Apache braucht. In der Konfigurationsdatei
/etc/apache2/apache2.conf kann man die Einstellungen tunen.

nano /etc/apache2/apache2.conf

In der Konfigurationsdatei dann folgende Konfiguration vornehmen:

<IfModule mpm_prefork_module>
    StartServers          1
    MinSpareServers       1
    MaxSpareServers       3
    MaxClients           10
    MaxRequestsPerChild 3000
</IfModule>
 
<IfModule mpm_worker_module>
    StartServers          1
    MinSpareThreads       5
    MaxSpareThreads      15 
    ThreadLimit          25
    ThreadsPerChild       5
    MaxClients           25
    MaxRequestsPerChild 200
</IfModule>

Des weiteren empfiehlt sich das Timeout zu reduzieren. KeepAliveTimeout sollte nicht mehr als 15 (Sekunden) betragen.

Nach diesen Einstellungen ist Apache schon wesentlich genügsamen. Jetzt sollte man noch nicht benötigte Module deaktivieren. Mit diesem Befehl seht Ihr alle Apache Module.

apache2ctl -M

Bildschirmfoto 2015-11-15 um 12.21.51

Um beispielsweise einen WordPress Blog zu hosten brauch man folgende Module (wie gesagt, WordPress läuft auch unter nginx & Lighttpd).

LoadModule dir_module modules/mod_dir.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule mime_module modules/mod_mime.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule alias_module modules/mod_alias.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule rewrite_module modules/mod_rewrite.so

Um ein Modul zu deaktivieren kann man entweder die Konfigurationsdatei oder aber folgenden Befehl ausführen:

# Modul aktivieren
a2enmod module_name
#Modul deaktivieren
a2dismod module_name

Anschließend noch den Apache neu starten und Spaß haben.

MySQL Dump richtig Importieren

mysqlJetzt noch ein schneller Tip für heute. Wie bekommt man den MySQL Dump wieder richtig eingespielt? Ich habe immer wieder
das Problem, dass dieses ä,ö und ü nicht korrekt wiederhergestellt werden.

Eigentlich ist es ganz einfach, wenn er Dump im utf8 Format erzeugt wurde, das einfach beim Import mit angeben.

mysql -u root -p --default-character-set=utf8 database < database.sql

 

froxlor in 5 minuten installieren

Der eigene vServer, was nun?froxlor

Um euch schnell einen eigenen Server aufzusetzen und zu betreiben, gibt es viele Anleitungen im Netz. Hier nun eine Anleitung wie Ihr Euren Server innerhalb weniger Minuten an den Start bringt und verwaltet.

Ich gehe davon aus, das der vServer auf Debian setzt und frisch installiert ist.

Zunächst einmal, muss man die Froxlor-Paketquellen einfügen.

nano /etc/apt/sources.list.d/froxlor.list

Hier nun folgendes einfügen:

deb http://debian.froxlor.org/ wheezy main

Im Anschluss müssen noch die GPG-Keys bekannt gemacht werden.

gpg --keyserver pgp.mit.edu --recv-keys F6B4A8704F9E9BBC
gpg --export F6B4A8704F9E9BBC|apt-key add -

Jetzt wird Froxlor Installiert

apt-get update && apt-get install froxlor

Während der Installation werden Euch einige Auswahldialoge gezeigt. Hier bitte wie folgt antworten:

  1. Im Dialog “Configuring courier-base”, Nein auswählen
  2. Root-Passwort für MySQL festlegen

Nach einigen Minuten ist die Installation erledigt und Froxlor steht nun unter http://<IP des Servers>/froxlor zur Verfügung.

Bei Debian Jessie muss dass DocRoot im Apache nachgeändert werden, anderenfalls ist das UI nicht verfügbar.

Fighting the SPAM

Heute habe ich eine Benachrichtigung von einem meiner Server bekommen, dass mein “Warn” Threshold in der mailq erreicht wurde. Da ich so gut wie kein Mail Verkehr über meine Server leite, war ich etwas verwundert.

Ein Blick in die Mailq zeigt mir 500 “outstanding Mails”, der Absender war immer www-data. Was bedeutet das? Ein Skript auf meinem Server ist unsicher, oder ein Skript wurde eingeschleust um Mails zu senden.

Zunächst habe ich einmal die Queue komplett geleert:

 postsuper -d ALL

Anschließen habe ich etwas gewartet, bis wieder neue Mails in der Queue waren. Eine dieser Mails habe ich dann mit folgendem Befehl angeschaut:

 postcat -q BD63E29200F2

Hier konnte ich den Absender der Email identifizieren, und somit das Web des versendenden Benutzers überprüfen.

OpenVZ und Debian Wheezy

Heute möchte ich Euch keine kurze Einleitung geben, wie Ihr Euch zu Hausen einen eigenen OpenVZ Server einrichtet.

Falls Ihr Euch noch nicht mit OpenVZ auseinander gesetzt habe, habe ich Euch mal den Wikipedia Artikel verlinkt.

Als erstes muss man das Repository in der sources.list eintragen. Hierzu einfach folgenden Befehl als root ausführen.

cat << EOF > /etc/apt/sources.list.d/openvz-rhel6.list
deb http://download.openvz.org/debian wheezy main
# deb http://download.openvz.org/debian wheezy-test main
EOF

Um auch Pakete aus dem Repository installien können müssen wir noch den GPG-Key installieren.

wget http://ftp.openvz.org/debian/archive.key
apt-key add archive.key

Als nächstes machen wir ein Update der Paketlisten:

apt-get update

Nachdem jetzt alle Vorbedingen erfüllt sind gehts an die eigentliche Installation. Zunächst müssen wir bestimmen ober wir ein 32bit oder 64bit System als Host haben. Abhängig davon müssen wir den OpenVZ Kernel für 32 oder 64 bit installieren. Mit dem folgenden Befehl könnt Ihr den notwendigen Kernel bestimmen.

apt-cache search linux-image-openvz

Der Befehlt lieferte auf meinem System das 64bit Paket zurück.

apt-get install linux-image-openvz-amd64 vzctl vzquota vzdump

Alle abhängigen Pakete müssen natürlich mitinstalliert werden 😉

Um muss das Dateisystem noch eingebunden werden:

ln -s /var/lib/vz /vz

Jetzt nehmen wir noch einige systemspezifische Änderungen vor und fügen folgenden Code in die /etc/sysctl.conf ein

net.ipv4.conf.all.rp_filter=1
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.conf.default.forwarding=1
net.ipv4.conf.default.proxy_arp = 0
net.ipv4.ip_forward=1
kernel.sysrq = 1
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.eth0.proxy_arp=1

Jetzt geschwindt noch die Einstellungen anwenden:

sysctl -p

Um standardmäßig den notwendigen OpenVZ Kernel  zu booten, muss der Grub Bootloader noch angepasst werden:

nano /etc/default/grub

In der Konfigurationsdatei dann einfach den Defaultwert auf 2 setzen. Warum? das Ihr noch 2 Einträge davor habt und Grub bei 0 anfängt zu zählen.

...
GRUB_DEFAULT=2
...

Grub kann nun geupdated werden und der original Kernel deinstalliert.

update-grub
apt-get remove linux-image-amd64 linux-image-3.2.0-4-amd64
update-grub

Nach dem Neustart könnt Ihr nun Prüfen ob der richtige Kernel gebootet wurde.

uname -r

Wenn alles OK war, geht es mit dem OpenVZ Web Panel (OWP) weiter:

Es gibt eine automatische Installationsroutine für das OWP, welche durch den folgenden Befehl runtergeladen und direkt ausgeführt wird.

wget -O - http://ovz-web-panel.googlecode.com/svn/installer/ai.sh | sh

Wenn Ihr jetzt einen Fehler bezüglich ruby Version 1.9 bekommt führ bitte folgende Befehle aus:

apt-get install ruby1.8 ruby-switch
ruby-switch --set ruby1.8

Jetzt wiederholt bitte der Schritt zur Installation des OWP.

Euer OpenVZ Server ist nun fertig installiert 😉 Öffnet das Web Panel und ändert butte den Login.

http://<serverip>:3000/

[HowTo] Froxlor, SSL und Apache richtig konfigurieren

Was brauchen wir? Fangen wir mit den Zertifikaten an. Zunächst legen wir einen Ordner unter /etc/apache2 namens ssl an.

mkdir /etc/apache2/ssl/
cd /etc/apache2/ssl/

Im Anschluss erzeugen wir die notwendigen Zertifikate. Hierbei legen wir der einfachheitshalber zunächst ein Skript an.

nano create_certs.sh

In die Datei bitte folgendes einfügen:

#!/bin/sh
# Ersetzen mit Zerifikatsnamen
keyname=MyCert

openssl genrsa -out $keyname.key 2048
openssl req -new -key $keyname.key -out $keyname.csr
openssl rsa -in $keyname.key -out $keyname.key
openssl x509 -req -days 365 -in $keyname.csr -signkey $keyname.key -out $keyname.crt
cat $keyname.crt $keyname.key > $keyname.pem
chmod 664 *.crt
chmod 600 *.key
chmod 600 *.pem

Jetzt noch die Zertifikate erzeugen lassen:

sh create_certs.sh

Nun geht es im Froxlor Interface weiter. Hier müsst Ihr nun unter  Server -> Einstellungen -> SSL Einstellungen SSL aktivieren.

frox_ip1 frox_ip2

Falls es beim neustart des Appache zu folgendem Fehler kommt, muss ssl noch aktiviert werden:

Invalid command 'SSLEngine', perhaps misspelled or defined by a module not included in the server configuration
Action 'configtest' failed.
The Apache error log may have more information.
 failed!

Wenn man nun das Modul aktiviert sollte es wieder funktionieren.

a2enmod ssl

Jetzt ist alles geschafft!

[HowTo] – Portsharing für ssl, ssh und openvpn

Wer kennt es nicht, das leidige Thema um IP und Ports, gewürzt mit restriktiven Proxy-Servern die nur Port 80 und 443 durchlassen? Häufig steht man ja vor dem Problem, dass man ein VPN betreiben will, welches “selbstverständlich” durch alle Firewalls durchgeht, aber nicht einen dedizierten VPN Gateway betreiben möchte. Oder aber Ihr wollt in Eurem Heimnetzwerk eine “Cloud” betreiben mittels https, brauch aber auch VPN access. Das sind die typischen Probleme wo der ssl-Multiplexer sslh unter Linux oder genauer unter Debian zu Einsatz kommt. Wie Ihr sicherlich mitbekommen habt, bin sich sehr Debian lastig, aber das es funktioniert genau so unter CentOS, RedHat, SuSE …. Natürlich funktioniert das HowTo auch mit OpenMediaVault, ist ja schließlich Debian 😉

Der Einfachheit halber installier ich heute das Paket aus den Quellen und kompiliere es NICHT neu 🙂

Los gehts!

Zuerst updaten wir unsere Paketlisten und installieren dann aus dem Repository das sslh package.

apt-get update 
apt-get install sslh

Du bekommst wahrscheinlich eine ähnliche Meldung, einfach mit “Y” bestätigen und Pakete installieren.

root@server2.tschoerner.eu:~# apt-get install sslh
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
  libconfig9 libfile-copy-recursive-perl update-inetd
Suggested packages:
  openbsd-inetd inet-superserver
The following NEW packages will be installed:
  libconfig9 libfile-copy-recursive-perl sslh update-inetd
0 upgraded, 4 newly installed, 0 to remove and 40 not upgraded.
Need to get 124 kB of archives.
After this operation, 425 kB of additional disk space will be used.
Do you want to continue [Y/n]? Y

Bei der Installation wird man gefragt, ob der Service via ineid gestartet werden soll oder aber als standalone Dienst, Ich habe mich für die Standalone Konfiguration entschieden.

sslh

Nach der Installation wirst du wahrscheinlich eine ähnliche Meldung bekommen, das der Dienst nicht gestartet wurde. Dies passiert, da bei der Initial-Konfiguration, des Flag auf “unkonfiguerte=Yes” eingestellt ist.

sslh_install

Vor der Konfiguration stellen wir noch sicher, dass kein Dienst auf 443 mehr läuft, typischerweise SSL (Apache, Nginx, Lighttpd) oder aber ssh und OpenVPN. Diese Dienste müssen auf einen der ungelich 443 konfigueriert werden. das interne Mapping auf 443 übernimmt dann der SSL Multiplexer sslh.

sslh_sym

Zurück zur sslh Konfiguration. Unter Debian und Ubuntu liegt die Konfiguration unter “/etc/default/”.

nano /etc/default/sslh

In Zeile 12 muss der Dienst aktiviert werden, indem das RUN=no in RUN=Yes geändert wird.

Innerhalb der Daemon option können nun die Ziele der verschiedenen Dienste definiert werden, aber ACHTUNG, die Reihenfolge ist wichtig!!

Meine sslh sieht so aus:

# Default options for sslh initscript
# sourced by /etc/init.d/sslh

# Disabled by default, to force yourself
# to read the configuration:
# - /usr/share/doc/sslh/README.Debian (quick start)
# - /usr/share/doc/sslh/README, at "Configuration" section
# - sslh(8) via "man sslh" for more configuration details.
# Once configuration ready, you *must* set RUN to yes here
# and try to start sslh (standalone mode only)

RUN=yes

# binary to use: forked (sslh) or single-thread (sslh-select) version
DAEMON=/usr/sbin/sslh

DAEMON_OPTS="--user sslh --listen 0.0.0.0:443 --ssh 127.0.0.1:22 --openvpn 127.0.0.1:1194 --ssl 127.0.0.1:443 --pidfile /var/run/sslh/sslh.pid"

Nach getaner Arbeit, muss der SSLH noch einmal neu gestartet werden und wir sind fertig.

/etc/init.d/sslh restart

 

MySQL 5.6 LOW Memory VPS configuration

Nachdem ich spontan meine Cloud umziehen musste … Nein, nicht weil er kaputt gegangen ist, die Performance war sehr schlecht und der Apache auf dem Shared Hoster lief äußerst inperformant und instabil.

Als alter “Schotte” hab ich mir ein VPS gesucht, der möglichst viel Speicherplatz bietet. Mir war es dabei nicht so wichtig, möglichst viel CPU oder RAM zu haben. Meine Wahl fiel auf den Hoster 1fire.de.

1fire

Der Service-Plan war genau das was ich gesucht habe:

1fire_Plan

Nach der Installation aller nötigen Dienste wie Apache, Postfix und MySql wurde klar, bei der Speichernutzung muss ich etwas aufpassen. MySQL hat sich von dem 1024 MB direkt mal 800MB gekrallt. Das geht natürlich nicht 😉 Also was tun?

Ich habe MySql 5.6 im Einsatz hier sind die Änderungen die ich unter [mysql] eingefügt habe.

# Since 5.5.5, mysql uses innodb as default storage engine,
# but innodb requires more memory than MyIASM.
# So, on my low memory machine, I have to disable it.

# disable innodb and set MyISAM as default storage engine
skip-innodb
default-storage-engine=MyISAM
default-tmp-storage-engine=MEMORY
loose-innodb-trx=0
loose-innodb-locks=0
loose-innodb-lock-waits=0
loose-innodb-cmp=0
loose-innodb-cmp-per-index=0
loose-innodb-cmp-per-index-reset=0
loose-innodb-cmp-reset=0
loose-innodb-cmpmem=0
loose-innodb-cmpmem-reset=0
loose-innodb-buffer-page=0
loose-innodb-buffer-page-lru=0
loose-innodb-buffer-pool-stats=0
loose-innodb-metrics=0
loose-innodb-ft-default-stopword=0
loose-innodb-ft-inserted=0
loose-innodb-ft-deleted=0
loose-innodb-ft-being-deleted=0
loose-innodb-ft-config=0
loose-innodb-ft-index-cache=0
loose-innodb-ft-index-table=0
loose-innodb-sys-tables=0
loose-innodb-sys-tablestats=0
loose-innodb-sys-indexes=0
loose-innodb-sys-columns=0
loose-innodb-sys-fields=0
loose-innodb-sys-foreign=0
loose-innodb-sys-foreign-cols=0

# optimize for low memory
key_buffer=16K
table_open_cache=4
query_cache_limit=256K
query_cache_size=4M
max_allowed_packet=1M
sort_buffer_size=64K
read_buffer_size=256K
thread_stack=64K

# only local - wenn gewünscht :)
skip-networking

Hier noch der vergleich in Munin und htop

memory-day-server4-mysql-optimize server4_mem

An der Aktuellen Messung kann man schön erkennen, dass das System nun kaummehr beginnt zu swapen.

Das wars auch wieder!

Stay tuned!