VMWare OVA export verkleinern…

Mir ist es nun schon häufiger passiert das ich ein schönes VM Image erstellt habe und der export zu einer OVA auf einmal riesig wurde. Mein aktuelles Beispiel, die /root Partition war im System 3,3 GB groß und der export war auf einmal 15 GB groß.
Ich hatte hier einige Dateien vom System gelöscht die aber anscheinend im Dateisystem nur markiert wurden. So das der Export diese noch als existent betrachtete.
Ein kleiner Trick schafft hier Abhilfe, wir überschrieben einfach den gesamten Speicherplatz mit Zeros. Unter Linux genügt dort ein

dd if=/dev/zero of=/zerofile
sync
rm -rf /zerofile

Das System sollte damit relativ schnell voll werden. Am besten den gesamten leeren Speicher auffüllen und dann löschen.

Unter Windows kann man dafür das tool nullfile.exe oder sdelete.exe verwenden.
Wenn man nun das System exportiert wo ist der Unterschied schon gewaltig. Vorher 15 GB nun noch grademal 1,2 GB durch Kompression.

Schon witzig das man erst etwas richtig voll machen muss um es dann kleiner zu bekommen ^^

Samba 4.0.3 auf Ubuntu 12.04 LTS einrichten

Endlich gibt es Samba 4 als stabieles Release. 10 Jahre hat dies gedauert, jedoch finde ich das ganze ist schon gut gelungen. Leider gibt es für Ubuntu PRECISE 12.04 nur ältere Alpha-Pakete welche doch einige Funktionen nicht mitbringen. Daher habe ich mich ran gemacht und Samba 4 selbst erstellt. Da es hier jedoch einige Stolpersteine gab will ich hier meinen Weg mit euch teilen. Ich hoffe dem einen oder anderen damit zu helfen. Auch die PPA Quellen einiger Leute sind doch sehr sehr fehlerhaft und unsicher.

Ich habe mich grundlegend an das offizielle Howto von Samba 4 gehalten welches ihr hier findet. Jedoch gibt es hier unter Ubuntu 12.04 doch einige Probleme, zumindest bei mir. Zuerst richtige ich mir meine Umgebung ein und lade die Quellen runter…

$ mkdir /root/src
$ cd /root/src
$ git clone -b v4-0-stable git://git.samba.org/samba.git samba4

Nun brauche ich alle noch einige Bibliotheken damit das erstellen auch klappt. Hier helfe ich mir mit einem Trick. Ich lade erstmal alle Bibliotheken die das Ubuntu Packet von Samba benötigt runter…

$ apt-get build-dep samba4

Hier hatte ich nun Probiert mein Packet zu erstellen, leider gab es hier Fehler beim Kompilieren. Nach einigem googeln bin ich auf folgende Seite gestoßen. Nun also noch einige Pakete zusätzlich installieren. Also ein

$ apt-get install build-essential libacl1-dev libattr1-dev \
 libblkid-dev libgnutls-dev libreadline-dev python-dev \ 
 python-dns python gdb pkg-config libpopt-dev libldap2-dev \
 dnsutils libbsd-dev attr krb5-user docbook-xsl libcups2-dev

Leider ging es nun auch nicht sofort. Also noch schnell die die configure Anweisungen angepasst und nochmal das ganze Samba 4 Packet kompiliert.

$ ./configure --prefix=/usr \
--mandir=/usr/share/man \
--sysconfdir=/etc \
--localstatedir=/var \
--with-piddir=/var/run \
--disable-rpath --disable-rpath-install \
--libdir=/usr/lib/x86_64-linux-gnu \
--with-modulesdir=/usr/lib/x86_64-linux-gnu/samba/ \
--enable-fhs
$ make -j 4
$ make install -j 4

Das j 4 macht den ganzen Vorgang doch erheblich schneller da ich einen 4 Core CPU habe. Nun lief bei mir Samba 4 sauber auch als Domain Controller unter Ubuntu 12.04. Auch wbinfo läuft Prima und ohne Probleme. Auch die Scripte wie samba-tool laufen sauber ohne flüssig, genauso wie der KDC und so weiter. Bitte beachtet aber, das in der neuen Version der interne DNS Server von Samba 4 per default eingesetzt wird und nicht BIND oder BIND mit DLZ ( mein Favorit ). Hier muss man beim provision des DC’s aufpassen. Den Rest erklärt das offizielle Samba4 Howto Super…

Ich hoffe ich konnte den einen oder anderen Helfen über ein Feedback eurerseits würde mich wie immer freuen…

MfG

Thowie

 

Statische Routen unter Ubuntu automatisieren

Hallo zusammen,

ich musste für einen Kunden ein VPN auf seinen Webserver einrichten und dies durch ein eigenes Gateway schleusen. Da der Server jedoch eine öffentliche IP mit eigenem Default Gateway hat, auf diesem jedoch nicht das VPN eingerichtet wurde. Musste nun ein weg zum VPN Router gefunden werden… Weiterlesen

Postfix BCC Maps

Durch die BCC Maps können unter Postfix einzelne Mailadressen oder auch ganze Domains archiviert werden bzw. als Kopie in ein anderes Postfach geschickt werden. Dies gilt für den ausgehenden wie den eingehenden Mailverkehr. Hier zeige ich die grundsätzliche Einrichtung unter Postfix.

Die postfix Maps erstellen…

Als erstes müssen wir unsere Mapdateien erstellen. Ich verwende hier wieder meine Ubuntuumgebung daher müsst ihr eventuell die Pfade anpassen.

nano /etc/postfix/recipient_bcc

Die Datei hat folgendes ( sehr typisches postfix ) Format:

QUELLADRESSE ZIELADRESSE

Für einzelne Emailadressen:

mailadress@domain.de archiv@intern.domain.de
mailadress2@domain2.de kopie@domain.de

Für gesamte Domains:
@domain.de archiv@intern.domain.de
@domain.de @domain2.de

Die Datei speichern und dann müssen wir die postfix db erstellen. Dies machen wir mit dem Aufruf von postmap.

postmap /etc/postfix/recipient_bcc

Nun editieren wir noch die main.cf von Postfix um die Änderung bekannt zu geben.

nano /etc/postfix/main.cf

Dort tragen wir an das Ende der Datei folgendes ein:

recipient_bcc_maps = hash:/etc/postfix/recipient_bcc
sender_bcc_maps = hash:/etc/postfix/sender_bcc

Hier habe ich schon die sender_bcc_map mit eingetragen dessen Format das gleiche wie oben ist. Nur heißt hier die Datei einfach anders ^^

Nach einem restart von postfix wird die Konfiguration sofort übernommen…

/etc/init.d/postfix restart

Wenn ihr eine Kopie von wirklich jeder Mail die durch euer System wandert erstellen wollt, dann könnt ihr auch die Konfiganweisung always_bcc verwenden. Einfach in die main.cf eintragen und dahinter eine Mailaddi und schon wird alles an diese Mailadresse geschickt. Ohne das es jemand sieht. Bitte auf den Datenschutz achten!!!

Mehr zum Thema adressrewriting unter postfix könnt ihr hier lesen…

FTP unter Ubuntu Linux mounten

Wenn man mit häufig mit Webseiten arbeitet, muss man oft viele Dateien von und auf ein FTP Verzeichnis kopieren. Dies kann man wie üblich einfach mit einem FTP Programm erledigen, jedoch ist dies oftmals ehr nervig. Schöner wäre es doch das entfernte FTP Verzeichnis einfach in das Dateisystem einzubinden. Dies können wir unter Ubuntu sehr einfach machen.

Installation von curlftpfs

Zuerst müssen wir curlftpfs installieren. Dazu geben wir in einer shell als root folgendes ein:

apt-get install curlftpfs

Nun müssen wir fuse Fertig einrichten. Als erstes muss der Benutzer der curlftpfs verwenden soll unter /etc/fuse.conf eingetragen werden. Dies erledigt ein:

nano /etc/fuse.conf

Dort einfach den Benutzernamen eintragen. Nun müssen wir diese Datei für alle Lesbar machen.

sudo chmod a+r /etc/fuse.conf
 Wichtig ist es nun ein Verzeichnis anzulegen wo das FTP-Verzeichnis eingehangen werden soll. In unserem Beispiel unter /mnt/ftp.
mkdir /mnt/ftp

Nun können wir in einem Terminal die Verbindung testen oder auch bereits nutzen.

curlftpfs User:Passwort@ftp-server.de/pfad_auf_dem_server/ /mnt/ftp
Wir können nun auch die Verbindung in unsere /etc/fstab schreiben, so würde die Verbindung immer automatisch beim Systemstart wiederhergestellt werden.
curlftpfs#Benutzername:Password@ftp-server.de /mnt/ftp fuse auto,user,uid=1000,allow_other,disable_eprt 0 0
Wichtig ist hier alles in eine Zeile zu schreiben!!! Bitte keinen Zeilenumbruch.
Das ganze ist auch für Backups sehr praktisch.

CARP unter Ubuntu Linux

Allgemeines zu CARP

Durch das Common Address Redundancy Protocol (CARP) lässt sich die Verfügbarkeit von IP-Systemen deutlich erhöhen. Dies wird durch den Einsatz virtueller IP/MACAdressen auf verschiedenen Rechnern erreicht. Das Haupteinsatz von CARP ist zwar die Hochverfügbarkeit von Gateways, jedoch lassen sich auch andere Dienste wie Datenbanken oder Mailserver sehr einfach redundant auslegen. Heute zeige ich euch wie wir dies unter Ubuntu machen können…

Weiterlesen

Malwarefilter mit Postfix einrichten

Postfix ist ein mächtiger Mailserver welcher von Haus aus viele Möglichkeiten der Spamabwehr bereitstellt. Leider werden zu viele davon einfach nicht oder nur teilweise genutzt. Wir richten heute einen Malwarefilter unter Postfix ein. Malware ist ein Schadprogramm welches auf einem Rechner eingeschleust wird um schädliche Funktionen auszuführen. Im eigentlichen Sinn ist Malware kein Virus wie sie oft dargestellt wird.

Wir richten heute einen Filter ein der bei der Annahme der Mail den Inhalt scannt und bei Malwarebefund die Weiterverarbeitung der Mail unterbindet. Um dies zu realisieren nutzen wir den sog. body_check. Durch die body_checks überprüft Postfix den Inhalt der Mail gegen bekannte Pattern bzw. Regexe. Wir laden unsere malwareliste automatisch runter und können so sehr schnell neue Bedrohungen erkennen.

Als erstes erstellen wir uns ein Script namens fetch_malware unter /usr/sbin/…

nano /usr/sbin/fetch_malware

Dort tragen wir folgendes ein:

/usr/bin/wget -O - http://www.malware.com.br/cgi/submit?action=list_postfix > /etc/postfix/malwarelist
/etc/init.d/postfix reload > /dev/null

Dieses Script machen wir nun ausführbar.

chmod +x /usr/sbin/fetch_malwarelist

Nun soll unsere Liste ja automatisch in regelmässigen Intervallen aktualisiert werden. Dafür tragen wir in unsere Crontab einen Job ein.

crontab -e
25 * * * * root /usr/sbin/fetch-malwarelist >/dev/null 2>&1

Damit wird die Liste jede Stunde zur 25ten Minute gedownloaded.

Nun muss Postfix noch beigebracht werden das er diese Daten auch verwenden soll. Dafür tragen wir nun in die main.cf folgendes ein:

 body_checks = regexp:/etc/postfix/malwarelist

Das wars dann auch schon. So habt ihr einen sehr effektiven Schutz vor Malware auf eurem Mailgateway installiert. Ihr könnt natürlich auch weitere Listen hinzufügen um euren Schutz noch zu erweitern. Jedoch muss beachtet werden das die body_checks von Postfix auch CPU Resourcen benötigen. Daher sollten nicht zu viele Listen oder Einträge verwendet werden. Ein heutiger PC hat aber genug Resourcen zum Filtern.

 

Plesk secondary DNS eventscript

Ich habe mir mal ein kleines Script gebastelt um mir die Einrichtung von Domains unter Plesk etwas zu vereinfachen. Ich betreibe mehrere Server in Rechenzentren und habe auch ein paar Pleskinstallationen am laufen. Ich selber finde Plesksysteme für die schnelle Verwaltung von Websitehostings nicht schlecht. Jedoch habe ich eigene DNS Server die ich für meine Dienste nutzen will. Diese laufen auch auf dem bekannten ISC Server Bind9…

Unter Plesk kann man zwar DNS Server angeben die als Slave anerkannt werden, jedoch werden diese nicht automatisch eingerichtet. Allerdings hat Plesk eine sehr nette Funktion, die Eventscripts. Dies sind Scripte die ich an verschiedene Aktionen von Plesk anhängen kann. Diesen Umstand nutzt mein DNS Script. Im Grunde ist es sehr einfach. Das Script wird bei jeglichen Aktionen die Domains bzw. DNS betreffen ausgeführt und fragt die Plesk Domains aus einer Datenbank ab und transferiert die Daten an einen zweiten Linux Server mit Bind.

Hier mal der Weg für die Installation:

cd /tmp
wget http://www.networkmonkey.de/scripts/dns_sync

Nun bearbeitet ihr das Script mit eurem Lieblingseditor ich nehme gerne nano für solche Aufgaben…

nano dns_sync
# Server IP from Master DNS Server of the Domain
MASTER_DNS_SERVER=“1.1.1.1;“
# Masterserver config dir
MASTER_DNS_CONFIG_DIR=“/var/named/run-root/etc/“
# Which Server should notify allow?
NOTIFY_DNS_SERVER=“first_ip_here; second_ip_here;“
# Servernames of the secondary DNS Servers for SSH connect
DNS_SLAVE_SERVERS=(ns1.yourdomain.de x.x.x.x)
# Store for secondary domain data
SLAVE_DNS_DATA_DIR=“/etc/bind/slave/“
# Configdir for secondary slave server
SLAVE_DNS_CONFIG_DIR=“/etc/bind/“
# User that can edit SLAVE_DNS_CONFIG an get shell access throug SSH
SLAVE_DNS_SSH_USER=“dnsadmin“
# Configfile of secondary DNS Server
SLAVE_DNS_BIND_CONFIG=“named.conf“

Die Variablen sollten sich selbst erklären. Die Datei danach speichern und in an einen Ort kopieren wo es ausgeführt werden kann… z.B.

mv /tmp/dns_sync /usr/sbin/dns_sync

Nun brauchen wir einen SSH key für unseren ssh Benutzer… Diesen erstellen wir uns kopieren ihn gleich auf den Server wo er benötigt wird. Bitte beim kopieren des ganzen darauf achten, die gleichen Daten wie im Script angegeben zu verwenden… Auch muss dieser Schlüssel auf alle Server die unter DNS_SLAVE_SERVERS angegeben sind. Beim erstellen des Keys darauf achten KEIN Passwort einzugeben und einfach Enter drücken!!!

ssh-keygen
ssh-copy-id user@servername

Wichtig ist das der Benutzer auf dem SlaveServer auch schreibrechte in dem Bind directory hat und das Programm rndc ausführen darf. Am besten fügt man den SSH Benutzer der Gruppe bind hinzu. Zumindest unter Debian und Ubuntu klappt das ohne Probleme. Jetzt können wir das Script testen in dem wir es einfach ausführen. Es sollte keine Passwortabfrage erscheinen und die Daten sollten kopiert werden. Nun sollte auch auf dem Slaveservern eine neue Datei im Bindkonfigverzeichniss erscheinen welche den Hostnamen eures Masterservers hat mit der Endung .slave. Diese Konfig sollte nun durch die named.conf am ende eingebunden werden!!! Wenn dies geklappt hat läuft alles einwandfrei. Und wir können die Events hinzufügen.

Die Eventkonfiguration könnt ihr hier finden.

Plesk 10

Tools und Einstellungen -> Ereignissmanager

Plesk 9.5

Start -> Eventmanager

Dort fügt ihr ein neues Event hinzu. Ich habe für jeden Domainevent ein Ereignis erstellt. Unter Plesk 10 heissen die Domainevents übrigens StandardDomain. Als Priorität könnt ihr geringste einstellen und als Benutzer solltet ihr root angeben. Dies ist der Benutzer unter welchem das Script ausgeführt wird. Dieses könnt ihr natürlich auch anpassen. Als Befehlt gebt ihr nur den Pfad zu dem Script an ohne irgendwelche Parameter und schon wird das Script jedes mal bei eines dieser Events ausgelöst.

Ich hoffe dieses Script macht euch das leben auch etwas einfacher wie mir ^^

 

Mailgraph und Postscreen

Moin,

ich habe heute meinen Spamfilter mit Postscreen ausgestattet, was ich sehr empfehlen kann, und habe mich gewundert das mein Mailgraph mir so geringe Werte anzeigte. Kurz geschaut und meine Mailgraph Version kannte die regexe für Postscreen noch nicht. Daher muss man so in Zeile 636 nach:

elsif($prog eq 'cleanup') {
  if($text =~ /^[0-9A-Z]+: (?:reject|discard): /) {
    event($time, 'rejected');
  }
}

folgendes einfügen:

 elsif($prog eq 'postscreen') {
   if($text =~ /NOQUEUE: reject:/) {
     event($time, 'spam');
   }
   elsif($text =~ /DISCONNECT/) {
     event($time, 'spam');
   }
 }

Mit diesen Zeilen werden die Mail die Postscreen rejectet oder die Verbindung nicht zulässt als SPAM erkannt. Tauscht man

'spam'

durch

'rejected'

so werden die Mails als reject unter Mailgraph angezeigt. Jeder so wie er es lieber mag 😉