Datenhaufen zu IT und Elektronik.

Kategorie: IT-Security (Seite 14 von 15)

Notizen & Praxis zur IT-Sicherheit – von Responsible Disclosure bis Härtung.

Unix / Linux Openssl Zertifikat pem konvertieren zu Microsoft Windows pfx

Man man man… Da bittet ein Kollege um ein Zertifikat, ich schraube das schnell zusammen und schiebe es im als .PEM – Base64-kodiertes Zertifikat, umschlossen von „—–BEGIN CERTIFICATE—–“ und „—–END CERTIFICATE—–“ zu.

Nun versucht dieser das Zertifikat auf seinem Windows Server zu importieren. Klappt aber so einfach nicht. Microsoft hätte nämlich gerne das Zertifikat als .PFX (.P12 – PKCS#12, kann öffentliche Zertifikate und private Schlüssel (Kennwort-geschützt) enthalten.) Macht ja auch Sinn wenn es eh in einer Zertifikatsverwaltung liegt und dass ganze Kennwortgeschützt ist. So ist es etwas sicherer, wenn die Datei mal jemanden in die Hände fällt, der es nicht haben soll!

Wie also nun aus PEM ein PFX machen? Openssl hilft:

# openssl pkcs12 -export -out telefon.de.pfx -inkey telefon.de.key -in telefon.de.crt -certfile CACert.crt

telefon.de.key sowie telefon.de.crt sollten wir beim einfachen erstellen des Zertifikates per Openssl ja bereits haben. CACert.crt ist einfach der Zertifikat der CA, mit welchem unsere CSR unterschrieben wurde. Noch Fragen?

Hinzufügen der GPG Keys zum DNS

GnuPG bietet seit längerem verschiedene Möglichkeiten DNS Server nach gpg/pgp Schlüsseln zu fragen. Die aus meiner Sicht einfachste und schnellste ist PKA.

Kann der GPG Client den Schlüssel selbstständig aus dem Internet laden muss ich mich nicht mehr darum kümmern meinen aktuellen öffentlichen Schlüssel auf allen möglichen Key-Servern zu verteilen. Kommt der Schlüssel oder die Information zum Schlüssel und dessen Fingerprint noch von dem DNS Server, welcher für die Domain/Zone zuständig ist, kann man sich noch etwas sicherer sein. Ist diese Zone dann noch per DNSsec (http://www.kernel-error.de/dnssec) geschützt… Ja dann kann man noch etwas sicherer sein! 100%tige Sicherheit gibt es nicht, ich kann mich nur den 100% annähern. Um so besser mir dieses gelingt um so sicher kann ich mir sein 🙂

Wie geht es nun? Recht einfach. Ich exportiere meinen public key und sorge dafür das http clients (https ist nicht wirklich nötig, da der Schlüssel am Ende eh mit dem Fingerprint verglichen wird) diesen herunterladen können. Dann erstelle ich einen Fingerprint meines Schlüssels und veröffentliche beide Informationen zusammen mit der/den E-Mail Adressen in der DNS Zone.

OK los geht es. Zuerst besorge ich mir die Key-ID meines GPG-Keys:

$ gpg --list-keys kernel-error@kernel-error.com

Nun exportiere ich den öffentlichen Teil meines GPG-Keys, den public Key:

$ gpg --export --armor 0F9874D8 > kernel-error.asc

Jetzt brauche ich noch den Fingerprint meines GPG-Keys:

$ gpg --list-keys --fingerprint 0F9874D8

Nun beginne ich die records für meine DNS Zonen zu bauen. Diese sehen wie folgt aus:

E-Mail Adresse (das @ wird zu ._) gefolgt vom record Type TXT sowie dem Fingerprint ohne Leerzeichen und der HTTP-Adresse des öffentlichen Schlüssels.

Für mich schaut es so aus:

Zone kernel-error.com:

kernel-error._pka.kernel-error.com.  TXT         "v=pka1;fpr=80CF90446B5867DA3A55854AF01C3E040F9874D8;uri=http://www.kernel-error.de/kernel-error.pubkey.txt"

Zone kernel-error.de:

kernel._pka.jabber.kernel-error.de.  TXT         "v=pka1;fpr=80CF90446B5867DA3A55854AF01C3E040F9874D8;uri=http://www.kernel-error.de/kernel-error.pubkey.txt"
kernel-error._pka.kernel-error.de.  TXT         "v=pka1;fpr=80CF90446B5867DA3A55854AF01C3E040F9874D8;uri=http://www.kernel-error.de/kernel-error.pubkey.txt"

Zone vandemeer.de:

sebastian._pka.vandemeer.de.  TXT         "v=pka1;fpr=80CF90446B5867DA3A55854AF01C3E040F9874D8;uri=http://www.kernel-error.de/kernel-error.pubkey.txt"

Ob sich die records abrufen lassen teste ich mit dig:

dig +short kernel-error._pka.kernel-error.com. TXT

Klappt dieses probiere ich ob gpg auch alles findet. Da ich den Schlüssel natürlich bereits in meinem Keyring habe, sage ich gpg dass es einen neuen Keyring unter /tmp/ anlegen soll. In diesen wird dann auch der Public Key importiert, wenn alles funktioniert 🙂 Das echo „foo“ | ist nur damit gpg auch Daten hat die es anfassen soll!

Es ist NICHT sicher, daß der Schlüssel zu dem in der User-ID
Genannten gehört. Wenn Sie *wirklich* wissen, was Sie tun,
können Sie die nächste Frage mit ja beantworten

Diesen Schlüssel trotzdem benutzen? (j/N) j
-----BEGIN PGP MESSAGE-----
Version: GnuPG v1.4.10 (GNU/Linux)

hQIMAyLQ0wrCELyPAQ//SaagWN6N57qIN1s0IksGwbXpchBTTW4FWZVotKUeHeHv
6LQ2abOL3ulRbzIHOmYINT3CUJ3Pf0DmFm44UqXP0Ay/R0PpANNqumshP8J+0aBY
YyhImPEk4s6qK8rJqD0+0F5sWrX7A2bPbmBHmp6BDQSpIUKxTXFTChJ0Hx7n/ntn
X3iLIpl3NYzvWd78Q+7lFcH9TDL+tLb655lwbZ4HcaQOT6NAkHAL76Td8CDQdbUM
Iu7UcZrpVebAaT7dL0HcifpNy+Vfo3xzq7b/MQsHxYASgafwtuOLCJr7Mi1bJqsk
eLZgxtLsflhgnkK/4Yj/zz7TosvUKb6ZemMxok6B95tmIMmBzJt9QPtBhuF6Uhgc
Vr6E6YSM3dKOy3e2N2YEYS/eXUk68S/2B+PtSBRxMuwMB9qIfLxqZPDrMgSoSOOz
7IaBqAy+HZ7JQdYDBg+6uLrf17+hjiX9g3X/sJB002lTqEJ5aIz+fe1QBXwqM97b
7hcOQCbEm1XQOFJmJWPsgROvpQhMZvd8ylLSIKtIKHqWgn0CkobABQ5Y9HJVkpO2
+DID8yT4Iy/be/YfCzU56i2AnswduZpK3bc2DLEPORVRp6PloNOmNhTXtf6IsN1X
mZfGr3sycFq7XNY9M5nha6Jco2ZdBSgebcKNZlkPF7f1GMDfnAAJgwUcX0QMSp7S
PwFvh2D0NqPcl1Rb7ManjL5tpR0NCjnxVEPNRv0j+2Ejr7LGKH/yqZVbnr+eiSRX
FPSvDQJVgT65sPIyn0k6tg==
=k7cd
-----END PGP MESSAGE-----

Tja, damit sollte wohl nun jeder meinen GPG-Key über meinen per DNSsec geschützten DNS Server besorgen können.

Evolution merkt sich die Einstellungen der Zertifizierungsstellen nicht

Ich nutze Evolution als E-Mail Client. In den Zertifikatseinstellungen habe ich unter Zertifizierungsstellen auch eine ganze Latte von CAs. Ich kann auch welche hinzufügen und entfernen alles kein Problem.

Will ich aber deren Einstellung bearbeiten, sprich für welche Dinge ich dieser CA vertrauen möchte bleiben diese Einstellungen nur immer für die aktuelle Sitzung gespeichert. Schließe und Starte ich Evolution wieder sind die Einstellungen alles wieder weg 🙁 Das ist doof!

Wer sucht, der findet einen Workaround……..

Das Problem ist wohl dass Evolution aus irgendwelchen Gründen die cert9.db / key4.db unter ~/.pki/nssdb nicht updatet.

So kann ich mir anschauen was bei mir eingetragen ist:

$ certutil -L -d sql:/home/kernel/.pki/nssdb/

Certificate Nickname                                         Trust Attributes
                                                             SSL,S/MIME,JAR/XPI

StartCom Ltd. ID von Sebastian Van De Meer                   u,u,u
StartCom Class 2 Primary Intermediate Client CA - StartCom Ltd. ,,   
CA Cert Signing Authority - Root CA                          ,,   
CAcert Class 3 Root - Root CA                                ,,   
StartCom Class 1 Primary Intermediate Client CA - StartCom Ltd. ,,   
StartCom Certification Authority - StartCom Ltd.             ,,   
StartCom Ltd.                                                ,,   
StartCom Certification Authority                             ,,   
......

Und so verpasse ich den einzelnen Zertifikaten die passenden „Verwendungsmöglichkeiten“:

$ certutil -M  -n "CA Cert Signing Authority - Root CA"  -t "TCu,Cu,TCuw" -d sql:/home/kernel/.pki/nssdb/

Am Ende schaut es nun so aus (ich mache mir dann noch mal nen Kopf ob es so auch sinnig ist):

$ certutil -L -d sql:/home/kernel/.pki/nssdb/

Certificate Nickname                                         Trust Attributes
                                                             SSL,S/MIME,JAR/XPI

StartCom Ltd. ID von Sebastian Van De Meer                   u,u,u
StartCom Class 2 Primary Intermediate Client CA - StartCom Ltd. CT,C,C
CA Cert Signing Authority - Root CA                          CT,C,C
CAcert Class 3 Root - Root CA                                CT,C,C
StartCom Class 1 Primary Intermediate Client CA - StartCom Ltd. CT,C,C
StartCom Certification Authority - StartCom Ltd.             C,C,C
StartCom Ltd.                                                C,C, 
StartCom Certification Authority                             C,C,C
......

Auf meine Openindiana Kiste musste ich dafür noch folgendes Paket installieren:

system/mozilla-nss

Und wegen des Bugs #1739 certutil with incomplete runpath musste ich noch folgenden Workaround dafür einwerfen:

$ elfedit -e 'dyn:runpath $ORIGIN/../lib:/usr/lib/mps' /usr/sfw/bin/certutil

Jetzt macht zwar Evolution nicht die Arbeit aber mein Wunsch ist erfüllt. Ob ich da mal nen Bug bei den Jungs aufmache?

So long…

StartSSL

StartCom ist ein Unternehmen, das Software herstellt und als Zertifizierungsstelle digitale Zertifikate ausstellt. Seit Februar 2005 ist das Unternehmen als Zertifizierungsstelle tätig. Das bekannteste Produkt ist das kostenlose Class 1 X.509 SSL-Zertifikat „StartSSL Free“, das sowohl für Webserver (SSL/TLS) als auch für die E-Mail-Verschlüsselung (S/MIME) eingesetzt werden kann. Außerdem werden Class 2 Zertifikate und Extended-Validation-SSL-Zertifikate ausgestellt, für die eine kostenpflichtige Validierung Voraussetzung ist. StartCom-Zertifikate werden von allen modernen Browsern akzeptiert: Mozilla Firefox unterstützt sie schon ab Version 2.0, Opera seit Juli 2010, Apple Mac OS X ab Version 10.5 (Leopard) und Microsoft Windows seit September 2009; Apple Safari, Internet Explorer und Google Chrome greifen auf den Zertifikatspeicher des Betriebssystems zurück.

Das kostenlose Class1 Zertifikat stellt nur sicher das der angegebene Domainname existiert und anscheinend dem Halter des StartCom Accounts gehört. Aus diesem Grund findet sich natürlich auch nur der Domainname im Zertifikat. Wer seinen Namen auch noch im Zertifikat hinterlegen möchte kann dieses denn noch auf einem kostenlosen Weg schaffen. Ähnlich CAcert setzt StartCom auf das Prinzip des Web of Trust (wot). Es gibt bei StartCom ehrenamtliche Notare. Jeder Inhaber eines StartCom Accounts kann sich von diesen verifizieren lassen. Dazu findet sich im Webinterface des eigenen Accounts auf der Seite unter StartSSL WoT ==> WoT Netzwerk der Punkt Notarsucher. Hier findet sich über die Eingabe des eigenen Wohnortes oder halt der nächsten größeren Stadt schnell ein solcher Notar.

Wurde man von mindestens zwei dieser Notare bestätigt, kann man seinen Namen mit ins Zertifikat aufnehmen.

Eine solche Bestätigung findet immer über ein persönliches Treffen mit dem Notar statt. Bei diesem Treffen prüft der Notar anhand von zwei amtlichen Lichtbildausweisen ob der Name im Account mit dem auf den Ausweisen identisch ist.

Da die Root-Zertifikate dieser Zertifizierungsstelle bereits in den meisten großen Browsern und Betriebssystemen enthalten sind, kommt es bei diesen Zertifikaten (anders als bei z.B. CAcert.org) nicht zu „Fehlermeldunge“ bzw. Warnmeldungen im Zusammenhang mit den Zertifikaten. Vor allem dieser Umstand und natürlich da es kostenneutral ist, würde ich StartCom x.509 Zertifikate als einen optimalen Einstieg in diesen Themenbereich nennen können. Wer am Ende mehr will, wie eine Class 2 Zertifizierung oder bis hin zum Class 3 Zertifikat für Unternehmen, kann dieses schnell und günstig weiterführen. Wem das Class 1 Zertifikat ausreicht, dem stehen direkt nach der erfolgreichen Anmeldung schon fast alle Möglichkeiten der E-Mail Signatur / Verschlüsselung sowie SSL/TLS Verschlüsselte Serververbindungen offen.

Ich selbst bin bei StartSSL Notar und wie bei GPG / PGP oder CAcert.org bestätige ich auch hier gerne Identitäten auf Anfrage 🙂

DNSSEC HowTo: Sicherheit für dein DNS-System

Die Domain Name System Security Extensions (DNSSEC) sind eine Erweiterung des DNS, mit der Authentizität und Datenintegrität von DNS-Transaktionen gewährleistet werden. Ein DNS-Teilnehmer kann damit verifizieren, dass die durch den Server, mit dem er kommuniziert, gelieferten Zonendaten auch tatsächlich identisch mit denen sind, die der für die Zone autorisierte und die Zone signierende Server ausliefert. DNSSEC wurde als Mittel gegen Cache-Poisoning entwickelt, Serverauthentifizierung findet nicht statt. Wer jetzt noch genauere Informationen dazu haben möchte beginnt am besten >>hier<<….

Was mich beim ersten Lesen eines Artikels zu DNSSEC etwas durcheinander gebracht hat, war dieses Umhergewerfe mit den Begriffen: KSK, ZSK, SEP, DNSKEY, RRSIG und DS… Daher versuche ich das mal kurz verständlich zu erklären, den im Grunde ist das alles total einfach!
Der KSK (Key signing Key) hat grob gesehen nur eine einzige Aufgabe. Er muss den ZSK (Zone signing Key) unterschreiben. Der KSK ist nämlich immer in der übergeordneten Zone hinterlegt (von kernel-error.org ist die übergeordnete Zone z.B.: org). Der ZSK hat auch nur eine Aufgabe, das unterschreiben der Zone…..
Es beginnt also alles mit dem KSK der Rootzone. Die Rootzone ist „.“! Mal angenommen wir wollen nach www.kernel-error.org fragen. Dann geht es ganz oben los. Die Nameserver der Rootzone wissen welche Nameserver für die einzelnen TLDs (Top level domains) zuständig sind. Die Nameserver der TLDs wissen welche Nameserver für die einzelnen Unterdomains (z.B.: kernel-error.org) zuständig sind. Der Nameserver der Unterdomain kennt nun selbst die Adresse für www.kernel-error.org oder kann zumindest sagen welcher Nameserver für die Unterdomain „www“ zuständig ist. Will ein Angreifer nun also dafür sorgen dass man mit seinem Browser beim Aufruf von www.kernel-error.org nicht auf meinem Webserver landet, sondern auf seinem (bei Banken hätte das ja was, oder?), dann hat er zwei einfache Möglichkeiten.

  1. Er antwortet auf die Anfrage des Clients (wer ist denn der für die Domain kernel-error.org zuständige Nameserver) mit seinem eigenen Nameserver. Somit fragt der Client immer den Nameserver des Angreifers, welcher mit den falschen Adressen antwortet.
  2. Er antwortet auf jede Anfrage des Clients (mit gefälschter Absenderkennung) schneller als der eigentlich zuständige DNS-Server und kann so falsche Informationen übermitteln.

Mal angenommen man würde nun auf DNSSEC setzten und jeder Nameserver würde seine Zone signieren. Woher wüsste man dann, dass die Antwort korrekt ist? Angreifer können genau so signierte Antworten schicken. Genau, man muss die Gültigkeit der Signatur prüfen. Genau dafür ist nun der KSK. Der KSK signiert die Zone und zusätzlich wird der KSK jeweils in der übergeordneten Zone bekannt gemacht. Die übergeordnete Zone wird mit dem ZSK signiert, welcher mit dem KSK der übergeordneten Zone unterschrieben wurde, dieser KSK ist natürlich wieder der Zone darüber bekannt…. Man kann also Stück für Stück nach oben gehen. Am Ende steht dann der KSK der Root-Zone. Die folgende Zeichnung soll das ganze noch verständlicher darstellen.

DNSSEC Vertrauenskette

Sollte es jemandem denn noch nicht klar sein, helfe ich gerne weiter. >>Einfach fragen<<

Es sind leider noch lange nicht alle TLDs signiert bzw. haben DS-Records in den Root-Servern. Eine ganz nette Liste über bereits signierte TLDs findet sich hier: https://www.tldwithdnssec.se/
Unsere DENIC hat ein .de testbed eingerichtet. Die Jungs wollen Anfang 2011 aber auch loslegen. Infos zum DENIC DNSSEC testbed gibt es hier.

Möchte man seine Domain per DNSSEC schützen muss natürlich als erstes der für die Domain zuständige DNS-Server DNSSEC unterstützen und es muss aktiviert sein. Klingt logisch, oder? Ich bin, unter anderem, ein Freund von Bind. Daher beschränke ich mich hier einfach mal auf diesen…. Ab ISC Bind 9.6.2 sind alle Tools und Funktionen wohl soweit ausgereift dass man es im Zusammenhang mit DNSSEC sauber nutzen kann!

DNSSEC schaltet man recht einfach im options-Block ein:

options {
........
dnssec-enable yes;
dnssec-validation yes;
........
};

Recursive DNS-Server benötigen natürlich noch den KSK der Rootzone. Diesen muss man als vertrauenswürdig einstufen. Am einfachsten bekommt man diesen mit folgendem Aufruf:

$ dig . dnskey | grep -w 257 > dnssec_root.key

Diesen legt man jetzt im trusted-keys Block ab:

trusted-keys {
. 257 3 8 "AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjF FVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoX bfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaD X6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpz W5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relS Qageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulq QxA+Uk1ihz0=";<br />};</div> <p>Um sicherzustellen das man auch den richtigen bekommen hat, erstellt man kurzerhand daraus einen DS-Record und vergleicht diesen...</p> <div style="padding: 7pt; width: 100%; background-color: #7e0000;"># dnssec-dsfromkey -2 dnssec_root.key

. IN DS 19036 8 2 49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32 F24E8FB5

Für die Integritätsprüfung dieses Schlüssels hat die ICANN mehrere Methoden spezifiziert. Dieses liest sich sehr gut >>hier<<.

Nun sollte man Bind neu starten, damit er die Änderungen übernimmt. Theoretisch ist Bind nun schon in der Lage mit DNSSEC umzugehen.

Frage ich z.B.: meinen DNS-Server zuhause nach einer signierten Domain (www.cacert.org), das Flag +ad fordert den Nameserver auf die Antwort per DNSSEC zu validieren:

$ dig +ad www.cacert.org SOA @2a01:198:6ce::1

Dann bekomme ich die folgende Antwort.

dig +ad www.cacert.org SOA

Möchte man wissen ob sein DNS-Server überhaupt DNSSEC beherrscht, setzt man bei seiner Anfrage einfach das Flag +dnssec
Beherrscht der gefragte Nameserver DNSSEC erhält man signierte Records….

$ dig +dnssec www.cacert.org SOA @2a01:198:6ce::1
dig +dnssec www.cacert.org SOA

Gehen einem die, gleich erstellten, Schlüssel verloren, oder die signierte Zonendatei brennt ab, hat mein ein Problem. Genau wie bei der eigentlichen Einrichtung oder Aktualisierung ist die Reihenfolge sehr wichtig und einzuhalten. Denn die rekursiven DNS-Server halten ja für die Zeit der TTL die Abfrage im Cache…. Somit könnte man, bei falschem Vorgehen, für die Zeit der längsten TTL ~nicht~ erreichbar sein!

Ich habe mir folgenden Masterplan fürs DNSSEC aufgestellt. Im Grunde nichts weiter also vor jeder „großen“ Änderung immer die längste TTL der Zone abzuwarten und fertig! Dieses habe ich mir mal irgendwann aufgemalt (nicht schön aber extrem selten). Hier also dieses ~analoge~ Bild!

Analoger DNSSEC Masterplan

Nun könnte man schon beginnen seine Zonen zu signieren. Dazu muss natürlich erstmal ein neuer Schlüssel erzeugt werden. In meinem Fall dreht sich alles um die Domain kernel-errror.org
Um für diese ZONE nun einen 4096 Bit langen KSK zu erzeugen gibt man folgendes ein:

$ dnssec-keygen -r /dev/urandom -f KSK -a NSEC3RSASHA1 -b 4096 -n ZONE kernel-error.org
Kkernel-error.org.+007+55836

Den ZSK für die ZONE erstellt man mit:

$ dnssec-keygen -r /dev/urandom -a NSEC3RSASHA1 -b 4096 -n ZONE kernel-error.org
Kkernel-error.org.+007+25685

Nun finden sich im Verzeichnis vier neue Dateien. Kkernel-error.org ist die Domain, +007 ist der Schlüsseltyp und +55836 bzw. +25685 ist die ID des Schlüssels. Die Endung .key bezeichnet jeweils den öffentlichen Teil, .privat steht für den privaten Teil. Den privaten Teil sollte keiner in die Finger bekommen

Den öffentlichen Teil des KSK und des ZSK müssen nun noch in der Zone hinzugefügt werden.

$ cat *.key >> kernel-error.org

Der öffentliche Teil des KSK ist zusätzlich der Teil, welcher in der übergeordneten Zone publiziert werden muss. In diesem Fall müssen also die Jungs an den Root-Servern der TLD .org einen DS aus unserem öffentlichen KSK erstellen und ihn neben die NS-Records klatschen! Das läuft überall etwas anders. Die Vorgehensweise von der DENIC und EURID schaut so aus, dass man seinen öffentlichen KSK dort hinschickt die Jungs basteln daraus einen DS-Record (sie trauen es einem wohl nicht selbst zu) und veröffentlichen diesen daraufhin.

Somit kann man nun das eigentliche Zonenfile signieren 🙂 Folgender Aufruf erledigt dieses:

dnssec-signzone -r /dev/urandom -e +31104000 -k Kkernel-error.org.+007+55836 -f kernel-error.org.signed kernel-error.org Kkernel-error.org.+007+25685
Verifying the zone using the following algorithms: NSEC3RSASHA1.
Zone signing complete:
Algorithm: NSEC3RSASHA1: ZSKs: 1, KSKs: 1 active, 0 revoked, 0 stand-by
kernel-error.org.signed

+31104000 ist hier etwas besonders. Denn das ist die Zeit in Sekunden, welche die Signatur gültig ist. In diesem Fall 360 Tage….

Nun teilt man Bind noch mit dass er anstelle der Zonendatei kernel-error.org die Datei kernel-error.org.signed >>laden<< soll, restart und schon ist die Arbeit fast beendet… Änderungen an der Zone nimmt man nun weiterhin wie gewohnt in der kernel-error.org vor, muss nach diesen Änderungen nur jeweils die Zone neu signieren. Ist ja klar, oder?

Man darf natürlich nicht vergessen den KSK in der übergeordneten Zone bekannt zu machen. Für die Publikation des KSK haben die meisten Registries ein Webinterface (meiner leider nicht :-/). Am Ende sind dann neben den NS-Records auch die nötigen DS-Records. Ob diese gesetzt sind findet man am besten heraus, indem man die DNS-Server der übergeordneten Zone (hier also die der TLD .org) danach fragt…..

$ dig org. in NS

Wirft uns die zuständigen DNS-Server für die TLD .org entgegen. Von diesen fischt man sich einfach einen heraus und fragt nach dem DS-Record der gewünschten Domain (ich frage einfach mal wieder nach cacert.org)!

$ dig +short @b2.org.afilias-nst.org cacert.org in DS
cacert.org.             86400   IN      DS      59365 3 1 DA0668FAF7F726EF64284FC8D1393CF3DD0A39C5
cacert.org.             86400   IN      DS      59365 7 2 3A4F6F9F8CFB0FABB508CDE5E874206F159B8A893938A8792C091613 6CF499BD

Vom feinsten, oder?


Gibt es etwas besonders zu beachten, gibt es Probleme?

Ja, die gibt es :-/

Normalerweise läuft die Kommunikation mit den Nameservern über das UDP Protokoll, schlägt dieses fehl kommt der Fallback auf TCP. Das UDP Protokoll hat aber ein Größenlimit von 512 Bytes pro Paket. Die Schlüssel bei DNSSEC sind dafür einfach zu groß. Vor allem bei NSEC3 Schlüsseln! EDNS (Extension Mechanisms for DNS) heben dieses auf. EDNS (RFC 2671) erlaubt nämlich unter anderem größere Pakete. Dieses wurde alles schon 1999 festgelegt. Na ja, wie bei so vielen schönen Dingen hängt, wie z.B. bei IPv6, die Umsetzung leider etwas durch . Somit hat die ein oder andere Firewall, security appliance und vor allem einige plaste DSL-Router damit Probleme. Einige lösen einfach nichts mehr auf und andere erschrecken sich bei einer signierten Antwort so sehr, dass sie erstmal abstürzen!


Ich als Freund vom Firefox habe da noch ein Addon gefunden. Dieses Firefox Plugin, der DNSSEC Validator zeigt einem jeweils den Status der aktuellen Seite an: https://addons.mozilla.org/de/firefox/addon/64247/


* UPDATES 08.02.2011 *

Heute gibt es zwei schöne Updates….

1. DeNIC will die de-Domain bald signieren
2. Mein Registrar hat es endlich geschafft meinen DS-Record in der ORG-Zone zu veröffentlichen 🙂

Domain kernel-error.org ist nun sauber signiert

Ich habe mir natürlich auch mal angeschaut in wie weit Microsofts Serverbetriebssystem hier mitspielt. Windows Server 2008 R2 SP1…. Der mitgelieferte DNS-Server soll/kann DNSSEC. Leider frisst der DNS-Server aus den Windows Sever 2008 R2 SP1 Boardmitteln nur Schlüssel vom Type SHA1. Das kommt daher, weil zuerst geplant war die ROOT-Zone so zu signieren. Später ist es dann aber doch SHA256 geworden. Daher lässt sich mit dem Systemeigenen DNS-Server nicht viel anfangen. Im SP2rc habe ich auch keine Verbessungen dazu gesehen. Wann dazu ein Update kommt, keine Ahnung 🙂

Davon mal abgesehen…. So geht es!

Windows Server2008RC2 SP1 DNSSEC

Klickt man im DNS-Manager mit der rechten Maustaste auf den gewünschten DNS-Server und geht dort in die Eigenschaften öffnen sich diese auch in einem neuen Fenster. Hier findet sich nun der Reiter: „Anchors für Vertrauensstellung“. Hier werden nun alle als vertrauenswürdig eingestuften Schlüssel aufgelistet. Die DNSKEYs der TLD se sind schon seit (ich glaube) 2007 signiert. Die Jungs haben Schlüssel vom Type SHA1… Diese lassen sich also importieren. Die Schlüssel besorgt man sich am einfachsten wieder mit dig:

$ dig se. dnsskey
dig se. dnssec

Nun ist es wohl am Einfachsten die Schlüssel in einen Texteditor zu werfern und dort schnell die Leerzeichen zu entfernen, sonst firsst der Windows Server 2008RC2 SP1 DNS-Server die Schlüssel nicht!

DNSKEY se anpassen

Dann schnell die Eingabeaufforderung des Admins öffnen und mit dem Befehl:

c:\>dnscmd /TrustAnchorADD se ##Schlüssel##

Den DNSKEY In den lokalen DNS-Server werfen…..

Windows Server 2008RC2 SP1 DNS-Server DNSSEC

Und schon ist der Schlüssel in der Liste 🙂 Auch wenn man damit keine vollständige Vertrauenskette bilden kann.
Wir warten also alle mal auf ein Update!
Was der Microsoft Server 2011 da kann, werde ich in den nächsten Tagen mal testen.


Ok, habe mir dann mal den Microsoft Windows Server 2011 SBS in den ESX4-Cluster geworfen…. Was soll ich sagen? Laut GUI kann der 2011 SBS Standard DNS-Server das auch ~noch~ nicht 🙁

Microsoft Windows Server 2011 SBS DNSSEC

Wer mit Microsoft Systemen und deren Boardmitteln arbeiten will, dem bleibt nichts weiter übrig als zu warten….


* UPDATES 22.02.2011 *

Ich habe gerade meine kernel-error.de Domain auch signiert. Mein Registrar hat den DNSKEY freundlicherweise direkt veröffentlicht. Das bringt zwar erst etwas, wenn die TLD de. offiziell signiert ist…. Denn noch fängt der frühe Vogel den Wurm (oder so ähnlich)!

Über die Resolver aus dem DeNIC Testbed kann natürlich auch jetzt schon sauber abgefragt werden!

dnssec kernel-error.de denic testbed dnskey
DNSSEC Testbed DNSKEY kernel-error.de

* UPDATE 08.06.2011 *

Wooohoooo DeNIC hat ja inzwischen die TLD de sauber signiert. Inzwischen sind die DS-RR auch in der Root-Zone angekommen und nutzbar 🙂 Damit ist die TLD .de. fertig signiert und voll nutzbar *freu*


* UPDATE 28.02.2012 *

Ich habe gerade alles in die Wege geleitet um die Domain: kernel-error.com zu schützen.

Zusätzlich habe ich eine ganz nette Möglichkeit gefunden sich alles nett grafisch darstellen zu lassen. Für meine Domains wären es folgende Links:

https://dnsviz.net/d/kernel-error.de/dnssec
https://dnsviz.net/d/kernel-error.org/dnssec
https://dnsviz.net/d/kernel-error.com/dnssec

Wer sich den Link anschaut, wird erkennen wie er schnell „seine“ Domain dort eintragen kann.

Um zu testen ob sein eigener Rechner derzeit überhaupt die Möglichkeit hat mit DNSSEC zu arbeiten klickt am besten kurz hier:

https://test.dnssec-or-not.org

* UPDATE 27.05.2012 *

Wenn man schon eine so geschützten DNS-Server hat, dann lassen sich natürlich sehr gut darüber weitere Informationen als nur A-RECORDS oder ähnliches verteilen.

Ich habe hier https://www.kernel-error.de/dnssec/gpg-im-dns beschrieben wie sich die eigenen GPG Schlüssel über den DNS Server verteilen lassen und hier https://www.kernel-error.de/dnssec/ssh-key-im-dns ist beschrieben wie sich mit OpenSSH die Fingerprints einzelner Hosts mit dem DNS Server abgleichen lassen.


* UPDATE 12.10.2012 *

Ich glaub es nicht der geht… nö der geööööhhht!

Der Microsoft Windows Server 8 also öhm der Microsoft Windows Server 2012 kann es. Komplett sauber und ganz Microsoft in klickibunti… Ich habe sogar sinnige und nutzbare Informationen zu dem Thema bei Microsoft selbst gefunden.
Es lässt sich wirklich fast alles mit der Maus erledigen, vom Zonen signieren bis im Im- und Export von allem möglichen Zeugs. Auch eine Schritt für Schritt Anleitung habe ich gefunden. https://technet.microsoft.com/en-us/library/hh831411.aspx

Ich habe hier auch noch ein paar Bilder zum gucken!


* UPDATE 10.08.2013 *

Jetzt sind zusätzlich die TLS/SSL Schlüssel meiner Dienste per DANE mit dem DNS abgleichbar 🙂


* UPDATE 14.11.2012 *

Ich habe dann mal die Schlüssellänge auf 4096bit angepasst 😀

DKIM

Ich gehe davon aus, das eine funktionsfähige amavis, postfix usw… Konstellation vorhanden ist!

Ich habe einen Server im Internet stehen, welcher sich um meine E-Mails und die meiner Verwanden und Bekannten kümmert. Hier liegen mehrere Domains und die E-Mails in lokalen Postfächern. Diese sind per smtp, imap und webmail zu erreichen.

OS ist Debian Lenny, als MTA nutze ich Postfix welcher mit amavis, spamassassin, clamav, dovecot und etwas Krims mehr zusammenarbeitet.

Meine Idee war nun alle ausgehenden E-Mails jeweils mit DKIM zu signieren und alle eingehenden E-Mails zusätzlich auf eine gültige DKIM Signatur zu prüfen.

Es gibt hier nun mehrere Möglichkeiten dieses umzusetzen. Ich habe mehrere Systeme ausprobiert und finde, für mich ist es über amavis am angenehmsten. Seit der Version 2.6 bringt amavis-new diese Funktionalität mit. Na dann wollen wir mal….

Vorbereitung der Signaturprüfung

Ich habe folgende Einträge in meiner 50-user unter /etc/amavis/conf.d/ dafür ergänzt:

$enable_dkim_verification = 1;

Damit überreden wir amavis die DKIM Signaturen zu prüfen. Dieses läuft in Zusammenarbeit mit spamassassin. Hier müssen folgende Einträge vorgenommen werden:

/etc/spamassassin/v320.pre
loadplugin Mail::SpamAssassin::Plugin::DKIM

Ohne diesen Eintrag wird spamassassin nicht das passende Modul laden und versteht überhaupt nicht was man von ihm will (häufige Fehlerquelle).

/etc/spamassassin/local.cf
#DKIM
score DKIM_VERIFIED -3.0
score DKIM_POLICY_TESTING 0
score USER_IN_DKIM_WHITELIST -8.0
whitelist_from_dkim @kernel-error.de

Hier lege ich nun die Punkte fest, welche von spamassassin vergeben werden. Da natürlich auch Spammer eine DKIM Signatur erstellen könnten (was eher selten ist) gebe ich maximal -3 Punkte für eine erfolgreich geprüfte DKIM Signatur.

Es fehlt nur noch ein Paket: libmail-dkim-perl
Dieses installieren wir einfach schnell mit

apt-get install libmail-dkim-perl

nach!

Ab jetzt werden E-Mails schon auf eine gültige DKIM Signatur überprüft.

Ich werfe, nach einiger Zeit, mal ein: cat /var/log/mail.log|grep dkim_id raus um zu sehen ob schon etwas passiert ist:

Mar 11 10:59:56 kernel-error amavis[10736]: (10736-05) Passed CLEAN, [91.194.xxx.xxx] [91.194.xxx.xxx] <e3@xxxxx.net> -> <xxx@xxx-meckenheim.de>, Message-ID: <0.0.10@e3xxys.net>, mail_id: Cf, Hits: -9.187, size: 33396, queued_as: 6883, dkim_id=eBay@reply.ebay.de,eBay@reply.ebay.de, 6951 ms

Schaut gut aus und im MailHeader dieser E-Mail steht:

Authentication-Results: kernel-error.de (amavisd-new); dkim=pass
header.i=eBay@reply.ebay.de
Authentication-Results: kernel-error.de (amavisd-new); domainkeys=pass

Das geht also schon mal 😀

Vorbereitung der Signierung

In /etc/amavis/conf.d/50-user müssen folgende Konfigurationszeilen eingefügt werden:

$enable_dkim_signing = 1;
dkim_key('kernel-error.de', 'kernel-error', '/pfad/kernel-error.key.pem');
@dkim_signature_options_bysender_maps = (
{ '.' => { ttl => 21*24*3600, c => 'relaxed/simple' } } );
@mynetworks = qw(127.0.0.0/8);  # list your internal networks

Zeile 1 bringt amavis dazu E-Mails per DKIM zu signieren.
Zeile 2 sagt amavis wo für die jeweilige Domain (hier kernel-error.de) die Schlüsseldatei liegt.
Zeile 3 gibt vor wie und was signiert werden soll.
Zeile 4 gibt an, welche IP-Netze als lokal behandelt werden sollen. Da dieser Server bei uns im Rechenzentrum steht gibt es kein lokales Netzwerk, bis auf 127…

Jetzt müssen wir noch den Schlüssel erstellen. amavis hilft dabei mit folgendem Befehl:

amavisd-new genrsa /pfad/kernel-error.key.pem

Wir können uns den Schlüssel anschauen und direkt Testen ob amavis alles richtig verstanden hat, mit Hilfe dieses Befehls:

amavisd-new showkeys

Die Ausgabe sollte ähnlich dieser sein:

kernel-error._domainkey.kernel-error.de.        3600 TXT (
"v=DKIM1; p="
"MIGfMCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC/KYIHw8NZNIB"
"SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS6orDC2DzZ7"
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
"qZZZZZZZZZZZZZZZZZZZZZZZZB")

Genau diesen Schlüssel müssen wir nun in den DNS-Eintrag des DNS-Servers eintragen, welcher für die Domain zuständig ist. Der DNS-Server meiner Domain ist ein Bind9. Um diesem meinen Schlüssel schmackhaft zu machen, muss ich ihn noch etwas umformen. Er wird am Ende so ausschauen:

kernel-error._domainkey.kernel-error.de.        3600 TXT  "v=DKIM1; p="MIGfMCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC/KYIHw8NZNIBSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS6orDC2DzZ7XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXqZZZZZZZZZZZZZZZZZZZZZZZZB"

Ich habe alle Zeilenumbrüche und ~überfüssige~ ( „ ) sowie die beiden Klammern entfernt. Der Eintrag im Bind schaut nun also so aus:

$ORIGIN .
$TTL 86400      ; 1 day
kernel-error.de         IN SOA  kernel-error.de. root.kernel-error.de. (
xxxxxxxxx ; serial
10000      ; refresh (2 hours 46 minutes 40 seconds)
1800       ; retry (30 minutes)
2419200    ; expire (4 weeks)
86400      ; minimum (1 day)
)
NS      ns1.kernel-error.de.
NS      ns2.kernel-error.org.
A       213.xx.xx.xx
MX      10 smtp.kernel-error.de.

kernel-error._domainkey.kernel-error.de.        3600 TXT  "v=DKIM1; p="MIGfMCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC/KYIHw8NZNIBSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS6orDC2DzZ7XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXqZZZZZZZZZZZZZZZZZZZZZZZZB"


$ORIGIN kernel-error.de.
$TTL 300        ; 5 minutes
imap                    A       213.xx.xx.xx
smtp                    A       213.xx.xx.xx

Ein amavisd-new testkeys sollte nun folgendes ergeben:


TESTING: kernel-error._domainkey.kernel-error.de => pass

Ab jetzt werden alle lokalen E-Mails signiert! Hier ist darauf zu achten, dass nur E-Mails signiert werden, welche als lokal eingestuft werden. Wir erinnern uns daran, dass wir 127.0.0.0/8 als lokales Netzwerk eingestuft haben. Wenn also nun E-Mails von Benutzern signiert werden sollen, welche sich mit ihrem E-Mail Client per smtp am Server anmelden und E-Mails verschicken, dann ist noch etwas mehr Arbeit nötig!

Am einfachsten ist es mit zwei verschiedenen IP-Adressen zu arbeiten und für diese Spezielle Regeln anzulegen. Dazu müssen ein paar Einträge in der /etc/postfix/master.cf vorgenommen werden:

213.xx.xx.xx:smtp      inet  n       -       -       -       -       smtpd 
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
-o local_header_rewrite_clients=

Ist hier mein Eintrag für E-Mails, welche über den MX Eintrag an meinen Mailserver gesendet werden, also für die Domains und User bestimmt sein sollten, welche ich über meinen Mailserver verarbeite. Die User sollten über diese Adresse keine E-Mails einliefen!!

### Einlieferung eigene Nutzer
213.xx.xx.xxx:smtp      inet  n       -       y       -       100     smtpd
-o smtpd_proxy_filter=localhost:10028
-o smtpd_etrn_restrictions=reject
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o smtpd_sasl_auth_enable=yes
-o content_filter=
213.xx.xx.xxx:smtps    inet  n       -       y       -       100       smtpd
-o smtpd_etrn_restrictions=reject
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o smtpd_tls_wrappermode=yes
-o smtpd_proxy_filter=localhost:10028
-o smtpd_sasl_auth_enable=yes
-o content_filter=

Dieses sind nun meine Einträge für die zweite IP-Adresse. Über welche die User, welche sich per sasl anmelden, ihre E-Mails ins System werfen.

localhost:smtp      inet  n       -       -       -       -       smtpd

Damit auch mein Webmail sauber funktioniert ist dieser Eintrag zuständig. Sonst lauscht halt keiner mehr lokal 😀

Hier ist nun klar zu sehen, das die per smtp angenommenen E-Mails je nach IP anderen Regeln unterliegen und auch lokal an amavis auf anderen Ports weitergeleitet werden. Dieses müssen wir natürlich amavis auch mitteilen. Wenn amavis nicht weiss das es auf weiteren Ports lausch soll, wird es dieses kaum von sich aus tun. Dafür müssen wir einen Eintrag unter /etc/amavis/conf.d/20-debian_defaults ändern.

$inet_socket_port = [10024,10028,10032];  # listen on multiple TCP ports geaendert

Jetzt geben wir in der /etc/amavis/conf.d/50-user noch unsere spezielle Regel für die sasl Benutzer an:

# DKIM
$policy_bank{'SASLNUTZER'} = {   # Einlieferung eigener Nutzer
originating => 1,
os_fingerprint_method => undef,  # eigentlich ueberfluessig
};
$interface_policy{'10028'} = 'SASLNUTZER';

Interessant ist hier im Grunde nur:

originating => 1,

Man könnte originating => 1 auch einfach mit in die 20-debian_defaults werfen und sich das mit der zweiten IP und den amavis Regeln sparen. Damit wird aber jede E-Mail als lokal behandelt. Ob das so gut ist bleibt jedem selbst überlassen 😛

Tja, was soll ich sagen, hier ist nun Ende. Sollte es Fragen oder Probleme geben, könnt ihr euch gerne bei mir melden!

Hier nun noch ein Paar Informationen zu DKIM:

DomainKeys ist ein Identifikationsprotokoll zur Sicherstellung der Authentizität von E-Mail-Absendern, das von Yahoo entwickelt wurde und seit Ende 2004 in Erprobung ist. Es wurde konzipiert, um bei der Eindämmung von unerwünschter E-Mail wie Spam oder Phishing zu helfen.

DomainKeys wurde ursprünglich unter dem Titel Domain-Based Email Authentication Using Public Keys Advertised in the DNS (DomainKeys) im RFC 4870 veröffentlicht und unter dem Titel DomainKeys Identified Mail (DKIM) Signatures durch RFC 4871 abgelöst.

Arbeitsweise

DomainKeys basiert auf asymmetrischer Verschlüsselung. Die E-Mail wird mit einer Digitalen Signatur versehen, die der empfangende Server anhand des öffentlichen Schlüssels, der im Domain Name System (DNS) der Domäne verfügbar ist, verifizieren kann. Schlägt dies fehl, hat der empfangende Mail Transfer Agent (MTA) oder das empfangende Anwendungsprogramm die Möglichkeit, die E-Mail zu verweigern oder auszusortieren.

Kern des Verfahrens ist, dass der sendende MTA jede versendete E-Mail im sogenannten „DomainKey-Signature-Header“ mit einer digitalen Signatur des Inhaltes der E-Mail versieht.

Für die Erzeugung des für die Signatur nötigen Hashwertes unterstützt DKIM die Hashfunktionen SHA-1 und SHA-256, wobei die Verwendung von letzterer empfohlen wird. Die anschließende Verschlüsselung des Hashwertes, die letztlich die digitale Signatur zum Ergebnis hat, wird in beiden Fällen mit dem Verschlüsselungsverfahren RSA realisiert. Damit die Signatur mit dem beim E-Mail-Versand verwendeten ASCII-Zeichensatz dargestellt werden kann, wird sie mit Base64 kodiert.

Die so erzeugte digitale Signatur wird vom empfangenden MTA zunächst base64-dekodiert und dann mit dem öffentlichen Schlüssel der angeblichen Absender-Domäne (z.B. yahoo.com) entschlüsselt, der Hashcode der E-Mail wird neu berechnet. Stimmen der gelieferte entschlüsselte und der selbst berechnete Hashcode überein, stammt die E-Mail wirklich von der angegebenen Domäne. Der oder die verwendeten öffentliche(n) Schlüssel werden hierzu im DNS-Eintrag der sendenden Domäne publiziert. Das heißt, dass der DNS als Zertifizierungsstelle fungiert. Eine mit Hilfe von DomainKeys signierte E-Mail bietet also die Möglichkeit, sicher nachzuprüfen, ob die in der E-Mail-Absenderadresse enthaltene Domäne korrekt ist und dass die E-Mail auf dem Weg der Zustellung nicht verändert wurde.
Spamfilterung

Da es sich bei DomainKeys um einen Authentifizierungsmechanismus handelt, dient DomainKeys nicht dazu, Spam zu filtern. Stattdessen begrenzt DomainKeys die Möglichkeit, E-Mail-Absenderadressen zu verschleiern, da man mit DomainKeys feststellen kann, ob eine E-Mail tatsächlich über die angegebene Domäne versendet wurde.

Diese Nachvollziehbarkeit kann dazu verwendet werden, Bewertungssysteme und Filtertechniken von Spamfiltern wirkungsvoller zu gestalten. Zudem kann DomainKeys den Datendiebstahl durch Phishing begrenzen, da teilnehmende Mailversender ihre E-Mails als Originale zertifizieren können. Fehlt eine solche Zertifizierung, obwohl der vermeintliche Absender angibt, seine E-Mails zu zertifizieren, so kann die E-Mail als mögliche Fälschung betrachtet werden.
Lizenzierung

Yahoo hat das Verfahren patentieren lassen und es bei der IETF zur Standardisierung eingereicht. Das Verfahren wurde mittlerweile als Standard RFC 4871 akzeptiert.

Das DomainKeys-Verfahren kann von Yahoo wahlweise unter den Bedingungen der GPL 2.0 oder den Bedingungen des proprietären Yahoo DomainKeys Patent License Agreement lizenziert und verwendet werden.

Dem DomainKeys-Verfahren werden nach dem Scheitern der Standardisierung von Microsofts Sender ID – bei welchem an keine GNU-Lizenzierung gedacht wurde – gute Chancen eingeräumt, sich neben dem Sender Policy Framework (SPF) im Internet zu etablieren.
Unterstützung

Das DomainKeys-Verfahren erfordert größere Modifikationen am Mailserver – entsprechende Anpassungen existieren derzeit für fast alle gängigen Mail Transfer Agenten. Derzeit wird das DomainKeys-Verfahren nur von sehr wenigen Providern unterstützt; bekannte größere Provider, die Domainkeys einsetzen, sind Yahoo, Gmail und Strato.

Das Problem bei dieser und aller anderen Methoden zur Sicherstellung der Absender-Authentizität ist, dass es einen langen Zeitraum brauchen wird, um ein solches System zu verbreiten, da zuerst die Software angepasst werden muss und diese dann auch noch auf den Mailservern zum Einsatz kommen muss.
Weiterentwicklungen

Im Juli 2005 wurde von Cisco und Yahoo ein gemeinsamer Entwurf mit dem Titel DomainKeys Identified Mail (DKIM) bei der IETF eingereicht. Unterstützt wurde dieser Vorschlag nun auch von anderen Größen der IT-Branche, darunter mit Microsoft und AOL auch von denjenigen, die als Alternativlösung SPF vorschlugen. DKIM wurde im Mai 2007 als RFC 4871 veröffentlicht und ersetzte damit den vorherigen Entwurf RFC 4870.

Firewall

Update 2014

BOAR IST DAS SCHLECHT!!! Auf keinen Fall nachmachen… Gott ist das lange her!

 


 

Mein Netzwerk braucht natürlich eine Firewall. Diese muss die einzelnen Zugriffsrechte zwischen den Clients und den Netzen regeln sowie nach „ungewollten“ Packten filtern. Natürlich soll sie auch die Verbindung ins Internet absichern. Damit ich mich auch remote zu meinem Netzwerk verbinden kann habe ich den SSH-Dienst aus Richtung Internet freigegeben. Ich lade mit Hilfe des Programms BitTorrent freie CD- oder DVD-Images von Linux Distributionen wie z.B.: Debian GNU Linux herunter. Um hier nun den Nutzen und Sinn des Programms BitTorrent zu erhalten sind ganz besondere Zugriffsrechte an der Firewall nötig. Damit ich nicht gleich von jedem Script Kiddie genervt werde ist es ganz sinnvoll nicht auf jedes „Ping“ aus dem Internet zu antworten. Mache ich daher auch nicht :-). Es gehört vielleicht nicht ganz in eine Firewall aber ich möchte für einen bestimmten Netzwerkteil die maximale Bandbreite in beide Richtungen begrenzen.

Hier werde ich nun einige Teile meiner Firewall aufführen. Die hier aufgeführte Firewall ist natürlich nicht 1 zu 1 so bei mir im Einsatz. Einige Teile lasse ich weg oder schreibe sie etwas um. Man muss potenziellen Angreifern ja nicht unnötig helfen, oder?

Die Firewall läuft bei mir auf einem eigenen Rechner. Dieser ist ein Pentium 4 mit 2,4 Ghz, 512 MB RAM, zwei 40 GB SCSI Platten im Raid 1 und 3 NICs. Anfänglich waren 1024 MB RAM in dem System installiert. Dieses ist aber auf 512 MB RAM geändert worden, da dieses völlig ausreichend ist. Im Moment zumindest 😉 Als Betriebssystem habe ich Debian GNU Linux 3.0 mit dem Kernel 2.4 gewählt, welches über (das super geile) APT immer schön auf dem neusten Stand gehalten wird. Die Firewall wird über iptables realisiert und die Bandbreite über tc – traffic shaping geregelt.

Wie das eigentliche System nun gehärtet wird, IDS – Intrusion Detection System in meinem System funktioniert und die Dienste weiter abgesichert sind, werde ich vielleicht in einem späteren einmal beschreiben. Fragen dazu kann ich aber gerne beantworten.

Iptables benötigt einen Kernel 2.4 oder höher. Es ist recht weit verbreitet (fast bei jeder Distribution dabei), sehr simpel in der Anwendung und man kann damit sehr komplexe Aufgaben erfüllen. Iptables „speichert“ die Regeln in einer Art Liste / Tabelle. Schlägt irgendwo ein Paket auf schaut Iptables sich dieses an und geht die Regelliste von oben nach unten durch, bis es eine passende Regel gefunden hat. Dieses kann sehr oft zu Fehlern führen an denen man sich totsucht. Hat man im oberen teil z.B.: Erlaubt das vom Client mit der IP 192.168.0.3 alle Pakete ungehindert ins Internet dürfen, etwas weiter unten aber dann dem Client keinen Zugriff auf FTP geben möchten (also Port 21 sperren) werden wir uns wundern warum der Client immer noch FTP darf und suchen. Hier nimmt iptables nämlich die erste zutreffende Regel (alle Pakete ungehindert ins Internet). Iptables wird hier also nie bei der Verbotregel für Port 21 ankommen.

Tc ist seit einiger Zeit fester Bestandteil des offiziellen Linux Kernels. Um es nutzen zu können benötigen wir aber noch iptables und iproute2. Das feine an TC ist, dass man mit der Hilfe von iptables Pakete markieren kann und dessen Bandbreite dann nach festgelegten Regeln managen kann. Da man mit iptables alles mögliche filtern (also auch markieren) kann, ist hiermit fast jeder Idee recht einfach realisierbar.

#!/bin/bash


# TC-Krims
tc qdisc add dev eth2 root handle 1:0 htb default 10
tc qdisc add dev ppp0 root handle 1:0 htb default 10
tc class add dev eth2 parent 1:0 classid 1:1 htb rate 150kbit ceil 250kbit
tc class add dev ppp0 parent 1:0 classid 1:2 htb rate 30kbit ceil 40kbit
tc filter add dev eth2 parent 1: prio 0 protocol ip handle 1 fw flowid 1:1
tc filter add dev ppp0 parent 1: prio 0 protocol ip handle 2 fw flowid 1:2


# iptables-Modul
modprobe sch_htb
modprobe sch_sfq
modprobe cls_fw
modprobe cls_u32
modprobe cls_route
modprobe ip_tables


# Connection-Tracking-Module
modprobe ip_conntrack
modprobe ip_conntrack_irc
modprobe ip_conntrack_irc
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp 


# Tabelle flushen
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -X


# Default-Policies setzen
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP


# MY_REJECT-Chain
iptables -N MY_REJECT

# MY_REJECT fuellen
iptables -A MY_REJECT -p tcp -m limit --limit 7200/h -j LOG --log-prefix "REJECT TCP "
iptables -A MY_REJECT -p tcp -j REJECT --reject-with tcp-reset
iptables -A MY_REJECT -p udp -m limit --limit 7200/h -j LOG --log-prefix "REJECT UDP "
iptables -A MY_REJECT -p udp -j REJECT --reject-with icmp-port-unreachable
iptables -A MY_REJECT -p icmp -m limit --limit 7200/h -j LOG --log-prefix "DROP ICMP "
iptables -A MY_REJECT -p icmp -j DROP
iptables -A MY_REJECT -m limit --limit 7200/h -j LOG --log-prefix "REJECT OTHER "
iptables -A MY_REJECT -j REJECT --reject-with icmp-proto-unreachable


# MY_DROP-Chain
iptables -N MY_DROP
iptables -A MY_DROP -m limit --limit 7200/h -j LOG --log-prefix "PORTSCAN DROP "
iptables -A MY_DROP -j DROP


# Alle verworfenen Pakete protokollieren
iptables -A INPUT -m state --state INVALID -m limit --limit 7200/h -j LOG --log-prefix "INPUT INVALID "
iptables -A OUTPUT -m state --state INVALID -m limit --limit 7200/h -j LOG --log-prefix "OUTPUT INVALID "
iptables -A FORWARD -m state --state INVALID -m limit --limit 7200/h -j LOG --log-prefix "FORWARD INVALID "


# Korrupte Pakete zurueckweisen
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A OUTPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP


# Stealth Scans etc. DROPpen
# Keine Flags gesetzt
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j MY_DROP
iptables -A FORWARD -p tcp --tcp-flags ALL NONE -j MY_DROP


# SYN und FIN gesetzt
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j MY_DROP
iptables -A FORWARD -p tcp --tcp-flags SYN,FIN SYN,FIN -j MY_DROP


# SYN und RST gleichzeitig gesetzt
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j MY_DROP
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN,RST -j MY_DROP


# FIN und RST gleichzeitig gesetzt
iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j MY_DROP
iptables -A FORWARD -p tcp --tcp-flags FIN,RST FIN,RST -j MY_DROP


# FIN ohne ACK
iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j MY_DROP
iptables -A FORWARD -p tcp --tcp-flags ACK,FIN FIN -j MY_DROP


# PSH ohne ACK
iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j MY_DROP
iptables -A FORWARD -p tcp --tcp-flags ACK,PSH PSH -j MY_DROP


# URG ohne ACK
iptables -A INPUT -p tcp --tcp-flags ACK,URG URG -j MY_DROP
iptables -A FORWARD -p tcp --tcp-flags ACK,URG URG -j MY_DROP


# Loopback-Netzwerk-Kommunikation zulassen
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT


# Maximum Segment Size (MSS) fr das Forwarding an PMTU anpassen
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu


# Connection-Tracking aktivieren
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i ! ppp0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


# Zocken mit den Kindern
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.100.0/24 -d 192.168.0.5 -j MASQUERADE


# Bandbeitenregelung
iptables -A POSTROUTING -t mangle -o eth2 -j MARK --set-mark 1
iptables -A POSTROUTING -t mangle -o ppp0 -s 192.168.100.0/24 -j MARK --set-mark 2


# SSH
iptables -A INPUT -i ppp0 -m state --state NEW -p tcp --dport 22 -j ACCEPT


# IP-Adresse des LAN-Interfaces ermitteln
LAN_IP=$(ifconfig eth0 | head -n 2 | tail -n 1 | cut -d: -f2 | cut -d" " -f 1)
LAN_IP2=$(ifconfig eth2 | head -n 2 | tail -n 1 | cut -d: -f2 | cut -d " " -f 1)
LAN_IP3=$(ifconfig eth3 | head -n 2 | tail -n 1 | cut -d: -f2 | cut -d " " -f 1)


#NAT fuer BitTorrent
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 6881:6889 -j DNAT --to-destination 192.168.0.9
iptables -t nat -A POSTROUTING -o eth0 -p tcp --dport 6881:6889 -j SNAT --to-source $LAN_IP
iptables -A FORWARD -i ppp0 -m state --state NEW -p tcp -d 192.168.0.9 --dport 6881:6889 -j ACCEPT


###########################################################################################################################


# Proxy Server
# Zugriff uerber die Firewall auf den Proxy
iptables -A INPUT -i eth0 -s 192.168.0.0/24 -p tcp --dport 3128 -j ACCEPT
iptables -A INPUT -i eth3 -s 192.168.101.0/24 -p tcp --dport 3128 -j ACCEPT
iptables -A INPUT -i eth2 -s 192.168.100.0/24 -p tcp --dport 3128 -j ACCEPT


# Diese duerfen alle direkt!
iptables -t nat -A POSTROUTING -o ppp0 -d dl1.antivir.de -p tcp --dport 80 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -d dl2.antivir.de -p tcp --dport 80 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -d dl3.antivir.de -p tcp --dport 80 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -d dl4.antivir.de -p tcp --dport 80 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -d dl1.avgate.net -p tcp --dport 80 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -d dl2.avgate.net -p tcp --dport 80 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -d dl3.avgate.net -p tcp --dport 80 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -d dl4.avgate.net -p tcp --dport 80 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -d dl5.avgate.net -p tcp --dport 80 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -d dl6.avgate.net -p tcp --dport 80 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -d dl7.avgate.net -p tcp --dport 80 -j MASQUERADE


iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.24 -p tcp --dport 80 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.101.10 -p tcp --dport 80 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.101.11 -p tcp --dport 80 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.10 -p tcp --dport 80 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.26 -p tcp --dport 80 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.28 -p tcp --dport 80 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.22 -p tcp --dport 80 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.9 -p tcp --dport 80 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.5 -p tcp --dport 80 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.100 -p tcp --dport 80 -j MASQUERADE


iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.101.30 -d 213.155.73.106 -p tcp --dport 80 -j MASQUERADE 
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.101.30 -d 213.155.73.106 -p tcp --dport 80 -j MASQUERADE 
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.101.30 -d 213.155.73.107 -p tcp --dport 80 -j MASQUERADE 
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.101.30 -d 213.155.73.107 -p tcp --dport 80 -j MASQUERADE 


## Um ganz sicher zu gehen machen wir die 80 sonst mal ganz zu :)
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.101.0/24 -p tcp --dport 80 -j DROP
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.0/24 -p tcp --dport 80 -j DROP
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.0/24 -p tcp --dport 80 -j DROP


###########################################################################################################################


# FTP


# - Kontrollverbindung
# - - Zugriff auf den Server
iptables -A INPUT -i ppp0 -p tcp --dport 1024:65535 --sport 21 ! --syn -j ACCEPT
iptables -A OUTPUT -o ppp0 -p tcp --sport 1024:65535 --dport 21 -j ACCEPT 


# - - Forwarding durch die Firewall 
iptables -A FORWARD -i eth0 -o ppp0 -p tcp --sport 1024:65535 --dport 21 -j ACCEPT
iptables -A FORWARD -i eth2 -o ppp0 -p tcp --sport 1024:65535 --dport 21 -j ACCEPT
iptables -A FORWARD -i eth3 -o ppp0 -p tcp --sport 1024:65535 --dport 21 -j ACCEPT
iptables -A FORWARD -i ppp0 -o eth0 -p tcp --dport 1024:65535 --sport 21 ! --syn -j ACCEPT
iptables -A FORWARD -i ppp0 -o eth2 -p tcp --dport 1024:65535 --sport 21 ! --syn -j ACCEPT
iptables -A FORWARD -i ppp0 -o eth3 -p tcp --dport 1024:65535 --sport 21 ! --syn -j ACCEPT


# - aktives FTP
# - - Zugriff auf den Server
iptables -A INPUT -i ppp0 -p tcp --dport 1024:65535 --sport 20 -j ACCEPT
iptables -A OUTPUT -o ppp0 -p tcp --sport 1024:65535 --dport 20 ! --syn -j ACCEPT


# - - Forwarding durch die Firewall
iptables -A FORWARD -i eth0 -o ppp0 -p tcp --sport 1024:65535 --dport 20 ! --syn -j ACCEPT
iptables -A FORWARD -i eth2 -o ppp0 -p tcp --sport 1024:65535 --dport 20 ! --syn -j ACCEPT
iptables -A FORWARD -i eth3 -o ppp0 -p tcp --sport 1024:65535 --dport 20 ! --syn -j ACCEPT
iptables -A FORWARD -i ppp0 -o eth0 -p tcp --dport 1024:65535 --sport 20 -j ACCEPT
iptables -A FORWARD -i ppp0 -o eth2 -p tcp --dport 1024:65535 --sport 20 -j ACCEPT
iptables -A FORWARD -i ppp0 -o eth3 -p tcp --dport 1024:65535 --sport 20 -j ACCEPT


# - passives FTP
# - - Zugriff auf den Server
iptables -A INPUT -i ppp0 -p tcp --dport 1024:65535 --sport 1024:65535 ! --syn -j ACCEPT
iptables -A OUTPUT -o ppp0 -p tcp --sport 1024:65535 --dport 1024:65535 -j ACCEPT


# - - Forwarding durch die Firewall
iptables -A FORWARD -i eth0 -o ppp0 -p tcp --sport 1024:65535 --dport 1024:65535 -j ACCEPT
iptables -A FORWARD -i eth2 -o ppp0 -p tcp --sport 1024:65535 --dport 1024:65535 -j ACCEPT
iptables -A FORWARD -i eth3 -o ppp0 -p tcp --sport 1024:65535 --dport 1024:65535 -j ACCEPT
iptables -A FORWARD -i ppp0 -o eth0 -p tcp --dport 1024:65535 --sport 1024:65535 ! --syn -j ACCEPT
iptables -A FORWARD -i ppp0 -o eth2 -p tcp --dport 1024:65535 --sport 1024:65535 ! --syn -j ACCEPT
iptables -A FORWARD -i ppp0 -o eth3 -p tcp --dport 1024:65535 --sport 1024:65535 ! --syn -j ACCEPT


###########################################################################################################################


# LAN-Zugriff auf ethx
iptables -A INPUT -m state --state NEW -i eth0 -j ACCEPT
iptables -A INPUT -i eth3 -s 192.168.101.10 -p udp --dport 22 -j ACCEPT
iptables -A INPUT -i eth3 -s 192.168.101.10 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i eth3 -s 192.168.101.11 -p udp --dport 22 -j ACCEPT
iptables -A INPUT -i eth3 -s 192.168.101.11 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i tun0 -p udp --dport 22 -j ACCEPT
iptables -A INPUT -i tun0 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -m state --state NEW -i eth2 -j DROP
iptables -A INPUT -m state --state NEW -i eth3 -j DROP


# Default-Policies mit REJECT
iptables -A INPUT -j MY_REJECT
iptables -A OUTPUT -j MY_REJECT
iptables -A FORWARD -j MY_REJECT


# Routing
echo 1 > /proc/sys/net/ipv4/ip_forward 2> /dev/null




###########################################################################################################################


# DNS nach draussen darf nur mein DNS-Server
## Mein lieber DNS-Server
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.10 -p tcp --dport 53 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.10 -p udp --dport 53 -j MASQUERADE
## Tja, und alle die es halt nicht duerfen :)
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.101.0/24 -p tcp --dport 53 -j DROP
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.101.0/24 -p udp --dport 53 -j DROP
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.0/24 -p tcp --dport 53 -j DROP
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.0/24 -p udp --dport 53 -j DROP


# Der liebe Sebi darf schoen xMule machen :)
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.9 -p tcp --dport 4000:5000 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.9 -p udp --dport 4000:5000 -j MASQUERADE
# Sonst darf aber kein Schwein xMule....
iptables -t nat -A POSTROUTING -o ppp0 -p tcp --dport 4000:5000 -j DROP
iptables -t nat -A POSTROUTING -o ppp0 -p udp --dport 4000:5000 -j DROP


# Kernel darf alles
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.101.10 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.101.10 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth2 -s 192.168.101.10 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.101.11 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.101.11 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth2 -s 192.168.101.11 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.101.2 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.101.2 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth2 -s 192.168.101.2 -j MASQUERADE


# Aus dem Netz 192.168.100.0 drfen nur Leutz die ich mag auch auf meinen dns-server zugreifen und auch nur
# auf diesen. Wre ja noch schner wenn da jeder spacken drfte.
iptables -t nat -A POSTROUTING -o eth0 -p tcp --dport 53 -s 192.168.100.2 -d 192.168.0.10 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -p udp --dport 53 -s 192.168.100.2 -d 192.168.0.10 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -p tcp --dport 53 -s 192.168.101.30 -d 192.168.0.10 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -p udp --dport 53 -s 192.168.101.30 -d 192.168.0.10 -j MASQUERADE 
iptables -t nat -A POSTROUTING -o eth0 -p tcp --dport 53 -s 192.168.100.100 -d 192.168.0.10 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -p udp --dport 53 -s 192.168.100.100 -d 192.168.0.10 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -p tcp --dport 53 -s 192.168.100.22 -d 192.168.0.10 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -p udp --dport 53 -s 192.168.100.22 -d 192.168.0.10 -j MASQUERADE 


# Wlan
iptables -t nat -A POSTROUTING -o eth0 -p tcp --dport 53 -s 192.168.101.0/24 -d 192.168.0.10 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -p udp --dport 53 -s 192.168.101.0/24 -d 192.168.0.10 -j MASQUERADE


# Cederic darf auf den Printserver fr die Buerodrucker zugreifen
#iptables -t nat -A POSTROUTING -o eth0 -s 192.168.100.2 -d 192.168.0.251 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.101.30 -d 192.168.0.251 -j MASQUERADE


# Cederic darf auf dem Netz 192.168.100.0 auf meinen mail-server zugreife
iptables -t nat -A POSTROUTING -o eth0 -p tcp --dport 25 -s 192.168.100.2 -d 192.168.0.10 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -p tcp --dport 110 -s 192.168.100.2 -d 192.168.0.10 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -p tcp --dport 25 -s 192.168.101.30 -d 192.168.0.10 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -p tcp --dport 110 -s 192.168.101.30 -d 192.168.0.10 -j MASQUERADE


# Anna darf auch mp3s hoeren
iptables -t nat -A POSTROUTING -o eth0 -p tcp --dport 137:139 -s 192.168.101.30 -d 192.168.0.10 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -p udp --dport 137:139 -s 192.168.101.30 -d 192.168.0.10 -j MASQUERADE


# Zugriff vom gesammten internen Netz auf die Test mp3 maschine
iptables -t nat -A POSTROUTING -o eth0 -p udp --dport 80 -s 192.168.101.0/24 -d 192.168.0.9 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -p tcp --dport 80 -s 192.168.101.0/24 -d 192.168.0.9 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -p udp --dport 8000 -s 192.168.101.0/24 -d 192.168.0.9 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -p tcp --dport 8000 -s 192.168.101.0/24 -d 192.168.0.9 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -p udp --dport 80 -s 192.168.100.0/24 -d 192.168.0.9 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -p tcp --dport 80 -s 192.168.100.0/24 -d 192.168.0.9 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -p udp --dport 8000 -s 192.168.100.0/24 -d 192.168.0.9 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -p tcp --dport 8000 -s 192.168.100.0/24 -d 192.168.0.9 -j MASQUERADE


# Kernel-Error darf natrlich ins Netz 192.168.100.0 zugreifen :)
iptables -t nat -A POSTROUTING -o eth2 -s 192.168.0.5 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth2 -s 192.168.0.110 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth2 -s 192.168.0.111 -j MASQUERADE


# und natrlich ins wlan
iptables -t nat -A POSTROUTING -o eth3 -s 192.168.0.5 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth3 -s 192.168.0.110 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth3 -s 192.168.0.111 -j MASQUERADE


# Einige Ports aus dem Netz 192.168.100.0 werden nicht geroutet.


iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.0/24 -p tcp --dport 25 -j DROP
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.0/24 -p udp --dport 25 -j DROP
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.0/24 -p tcp --dport 110 -j DROP
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.0/24 -p udp --dport 110 -j DROP
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.0/24 -p tcp --dport 443 -j DROP
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.0/24 -p udp --dport 443 -j DROP


###########################################################################################################################


#Cederic
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.2 -p tcp --dport 22 -j DROP
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.2 -p udp --dport 22 -j DROP
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.2 -d 62.216.176.242 -p tcp --dport 31343 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.2 -p udp --dport 8767 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.2 -p udp --dport 8766 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.2 -p udp --dport 4765 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.2 -p tcp --dport 6111:6119 -j MASQUERADE 
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.2 -p udp --dport 6111:6119 -j MASQUERADE 
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.2 -p tcp --dport 4000 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.2 -p udp --dport 4000 -j MASQUERADE 
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.2 -p tcp --dport 6667:6669 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.2 -p udp --dport 6667:6669 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.2 -p tcp --dport 1:79 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.2 -p udp --dport 1:79 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.2 -p tcp --dport 81:1024 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.2 -p udp --dport 81:1024 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.2 -p tcp --dport 27000:29000 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.2 -p udp --dport 27000:29000 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.2 -p tcp --dport 14534 -d 82.211.60.25 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.2 -p udp --dport 14534 -d 82.211.60.25 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.2 -p tcp --dport 6003 -d half-life.east.won.net -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.2 -p udp --dport 6003 -d half-life.east.won.net -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.2 -p tcp --dport 6003 -d half-life.west.won.net -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.2 -p udp --dport 6003 -d half-life.west.won.net -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.2 -p tcp --dport 6003 -d half-life.central.won.net -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.2 -p udp --dport 6003 -d half-life.central.won.net -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.2 -p tcp --dport 7002 -d half-life.east.won.net -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.2 -p udp --dport 7002 -d half-life.east.won.net -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.2 -p tcp --dport 7002 -d half-life.west.won.net -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.2 -p udp --dport 7002 -d half-life.west.won.net -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.2 -p tcp --dport 7002 -d half-life.central.won.net -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.2 -p udp --dport 7002 -d half-life.central.won.net -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.2 -p tcp --dport 5190 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.2 -p udp --dport 5190 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.2 -p tcp --dport 10636 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.2 -p udp --dport 10636 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -d 81.2.131.248 -s 192.168.100.2 -p tcp --dport 26580 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -d 81.2.131.248 -s 192.168.100.2 -p udp --dport 26580 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.2 -d 217.172.188.219 -p tcp --dport 6000 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.2 -d 217.172.188.219 -p udp --dport 6000 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.2 -d 81.169.187.190 -p tcp --dport 3445 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.2 -d 81.169.187.190 -p udp --dport 3445 -j MASQUERADE 
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.2 -d 62.75.250.105 -p tcp --dport 8000 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.2 -d 62.75.250.105 -p udp --dport 8000 -j MASQUERADE


#Server-Bodo 
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.100 -p tcp --dport 22 -j DROP
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.100 -p udp --dport 22 -j DROP
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.100 -p tcp --dport 1:79 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.100 -p udp --dport 1:79 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.100 -p tcp --dport 81:1024 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.100.100 -p udp --dport 81:1024 -j MASQUERADE


# Anna
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.101.30 -p tcp --dport 1:1024 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.101.30 -p udp --dport 1:1024 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.101.30 -p tcp --dport 5190 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.101.30 -p udp --dport 5190 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.101.30 -p tcp --dport 10636 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.101.30 -p udp --dport 10636 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.101.30 -d 213.155.73.107 -p tcp --dport 7670 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.101.30 -d 213.155.73.107 -p udp --dport 7670 -j MASQUERADE


# AnnA-wlan
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.101.101 -p tcp --dport 1:1024 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.101.101 -p udp --dport 1:1024 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.101.101 -p tcp --dport 5190 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.101.101 -p udp --dport 5190 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.101.101 -p tcp --dport 10636 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.101.101 -p udp --dport 10636 -j MASQUERADE


# Alles was aus dem Net 192.168.100.0 kommt und ich nicht erlaubt habe bleibt auch da :)
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -j DROP
iptables -t nat -A POSTROUTING -s 192.168.101.0/24 -j MASQUERADE


# Aus Netz 192.168.0.0 erst mal alles weitere durch lassen
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.0/24 -j MASQUERADE


###########################################################################################################################

# SYN-Cookies
echo 1 > /proc/sys/net/ipv4/tcp_syncookies 2> /dev/null

# Stop Source-Routing
for i in /proc/sys/net/ipv4/conf/*; do echo 0 > $i/accept_source_route 2> /dev/null; done

# Stop Redirecting
for i in /proc/sys/net/ipv4/conf/*; do echo 0 > $i/accept_redirects 2> /dev/null; done

# Reverse-Path-Filter
# Auskommentiert, da IPSEC mit RP_Filter nicht funktioniert!
# for i in /proc/sys/net/ipv4/conf/*; do echo 2 > $i/rp_filter 2> /dev/null; done

# Log Martians
for i in /proc/sys/net/ipv4/conf/*; do echo 1 > $i/log_martians 2> /dev/null; done

# BOOTP-Relaying ausschalten
for i in /proc/sys/net/ipv4/conf/*; do echo 0 > $i/bootp_relay 2> /dev/null; done

# Proxy-ARP ausschalten
for i in /proc/sys/net/ipv4/conf/*; do echo 0 > $i/proxy_arp 2> /dev/null; done

# Ungltige ICMP-Antworten ignorieren
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses 2> /dev/null

# ICMP Echo ignorieren
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all 2> /dev/null

# Max. 500/Sekunde (5/Jiffie) senden
echo 5 > /proc/sys/net/ipv4/icmp_ratelimit

# Speicherallozierung und -timing fr IP-De/-Fragmentierung
echo 262144 > /proc/sys/net/ipv4/ipfrag_high_thresh
echo 196608 > /proc/sys/net/ipv4/ipfrag_low_thresh
echo 30 > /proc/sys/net/ipv4/ipfrag_time

# TCP-FIN-Timeout zum Schutz vor DoS-Attacken setzen
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout

# Maximal 3 Antworten auf ein TCP-SYN
echo 3 > /proc/sys/net/ipv4/tcp_retries1

# TCP-Pakete maximal 15x wiederholen
echo 15 > /proc/sys/net/ipv4/tcp_retries2

 

 

 

Wlan-Sicherheit

Wie finde ich heraus ob mein Wlan sicher ist?
(Bilder werden beim Anklicken gross.)

Hier möchte ich die möglichen „Angriffsmethoden“ zu einem Wlan
beschreiben. Am Ende wird jedem Sysadmin dann selbst auffallen, welche Bereiche
man am besten wie schützen sollte.

Es kommt immer wieder vor, dass Angestellte in der Firma einen AccessPoint
aufstellen. Dieses ohne den Admin darüber zu informieren. Was natürlich
ein grosses Sicherheitsproblem ist. Daher werde ich zum Anfang erst einmal beschreiben, wie
es überhaupt möglich ist ein Wlan zu finden. Alle meine Beschreibungen werden sehr
grob ausfallen. Wer sich wirklich mit diesem Thema beschäftigen möchte sollte sich
besser selbst mit den Einzelheiten auseinandersetzen.

Anhand folgender Ausrüstung, welche ich selbst besitze, werde ich die Beschreibung
und meine Beispiele machen.

Um mich nicht schon beim Suchen mit einem grossen und auffälligen Notebook herumschlagen
zu müssen habe ich den Sharp Zaurus SL-5500G mit einer SanDisk
CompactFlash 802.11b Low Power Wireless LAN Card
. Die Wlan Karte braucht sehr wenig Strom
und hat einen Prism II-Chip verbaut. Will man eine Wlan-Karte, welche ohne Probleme
mit Linux zusammenarbeiten, sollte man auf diesen Chip achten.

Mit Hilfe von meinem kleinen Zaurus kann ich nun sehr bequem und unauffällig durch die Gegend
laufen und nach WLANs ausschau halten. Habe ich dort mit Hilfe vom Wellenreiter ein Funknetzwerk
gefunden, bekomme ich gleich einige wichtige Informationen. Diese helfen mir dann dabei das Wlan einzuordnen.

Hat man ein Netz gefunden, welches interessant ausschaut (meist schon an der SSID zu erkennen),
ist es natürlich angenehmer mit einem Notebook zu arbeiten. Auch die Möglichkeiten sind hier grösser.
Jetzt gibt es aber wieder Probleme. Mit einem Notebook in der Hand fällt man auf. Man muss sich also in eine Ecke
verdrücken. Meist leidet der Empfang darunter. Sitzt man im Auto schirmt das Metall sofort alles ab.
Darum gibt es so etwas:

Links ist ein Standfuss mit Magnet. Dieser hält auch bei 50km/h noch auf dem Autodach.
Auf diesen wird nun die Antenne (Mitte) geschraubt. Dieses kann man nun ohne Probleme in die
Orinoco Gold PCMCIA-Karte (rechts) stecken, hier ist auch ein Prism II Chip verbaut.
Fertig….. Der Empfang ist einfach nur geil. Egal
wo man nun genau sitzt!

Jetzt fehlt nur noch ein Notebook.

Ich nutze ein Fujitsu Siemens LifeBook E 7110! Linux arbeiten mit
allen Komponenten in diesem Notebook ohne Probleme und gebastel zusammen.
Um Funknetzwerke zu finden, muss die Wlan-Karte in den Monitor Mode gesetzt werden.
Im Monitor Mode nimmt die Karte alle Packet an. Egal aus welchem Netz sie kommen und egal
für wen sie bestimmt sind.
Der Standart Linux-Kernel kann die Karte nicht in den Monitor Mode setzen. Dieser muss also gepatch
werden oder es muss ein passendes Kernelmodul erstellt werden. Am einfachsten geht es so:

0. Mit iwpriv schauen ob der eigene Kernel vielleicht schon gepatcht wurde!
1. Quellen des aktuellen Kernels installieren.
2. gcc installieren.
3. Die aktuelle Konfiguration des Kernels ins root der Kernelquellen legen.
Unter Suse: zcat /proc/config.gz > .config
Als Root unter /usr/src/linux
4. Saug dir hier die Datei orinoco-0.13e-SN-5.tar.bz2
5. Datei schön entpacken!
6. Als Root-User folgendes im root des Kernelmodules tippern:
make modules; make install
7. alle Dateien mit der Endung ko in /lib/modules/dein-aktueller-kernel/drivers/net/wireless kopieren.
Vorher Sicherung davon machen, da du einiges überschreiben musst!
8. Neustarten oder die Module entladen und laden.

Jetzt sollte nach der Eingabe von „iwpriv“, beim Teil der Wlan-Karte der Monitor Mode auftauchen.

Um mit dem Notebook nun nach Wlans zu suchen, nutzt man am besten das Programm Kismet.

Dieses sollte vorher noch konfigurieren werden;-). Es gibt unter /etc/kismet/ die Datei:
kismet.conf.
In dieser müssen wir zwei Änderungen vornehmen.
Beim Punkt „suiduser=“ tragen wir hinter dem = unseren Usernamen ein mit dem wir auf der Linux
Kiste arbeiten.
Am Punkt „source=“ tragen wir hinter dem = folgendes ein: orinoco,eth1,orinocosource
Wobei wir eth1 natürlich gegebenenfalls gegen unsere Wlan-Karte austauschen!
Ein „sudo kismet“ in der Userkonsole sollte nun das Programm starten und sogleich nach Netzen
suchen.
Haben wir eines gefunden und wollen erst einmal nachschauen, was genau dort durch die Gegend fliegt.
Brauchen wir dazu ein Programm mit dessen Hilfe wir den Datenstrom auslesen können. Dieses erledigt Ethereal
super. Später ist es auch drin, mit diesem Programm sehr komplexe Filterungen auf den Datenstrom anzuwenden.
Da wir aber nur die Daten annehmen können welche auf unserem Channel gesendet werden.
Betreibt Kismet Channelhopping. D.h.: Kismet springt im ms. Takt vom Einen in den Anderen Channel.
Wenn wir einen konstanten Datenstrom mitlesen wollen, ist das scheisse! Wir können dann ja nur die Daten
mitlesen, wenn wir auch gerade im passenden Channel sind. Daher beenden wir Kismet und setzen die Karte von Hand
in den Monitor Mode und den passenden Channel. Dieses geht als User-Root so:
iwpriv eth1 monitor 1 1
eth1 ist in diesem Fall die Wlan-Karte, mit monitor 1 sagen wir das der Monitor Mode gestartet werden soll
(mit iwpriv eth1 monitor 0 würden wir ihn also wieder beenden) und die letzte 1 gibt den Channel an, in
welchem die Karte gesetzt werden soll.

Ethereal kann nun mit den im Bild angezeitgen Optionen gestartet werden.
Nun würde Ethereal JEDES Datenpaket welches im Channel 1 durch die Gegend fliegt
auffangen und speichern.
Sollte auf dem AccessPoint eine Mac-Adressenfilterung eingerichtet sein, so müssen wir uns um
diese nicht weiter kümmern. Wir versuchen uns ja nicht am AP anzumelden, sondern hören ja einfach
nur zu. Interessant wird es erst, wenn das Netzwerk die Daten verschlüsselt überträgt.
Wir bekommen zwar immer noch alles, können damit aber nichts mehr anfangen.
Es ist aber Möglich WEP-Verschlüsselungen aufzubrechen, den Schlüssel zu errechnen.

AirSnort ist ein Programm welches genau das macht. Es kann die Karte in den Monitor-Mode
packen. Wenn vom User gewünscht auch gleich noch in den passenden Channel. Ab diesem Zeitpunkt
sammelt Airsnort die verschlüsselten Packete. Bei einer 128 Bit WEP Verschlüsselung muss es ca.
6 Millionen Pakete sammeln.
Das liegt daran, dass für die WEP Verschlüsselung nur ein begrenzter
Zufallszahlenraum zur Verfühgung steht. Nach ca. 6 Millionen Paketen wiederholen sich in jedem Fall Teile.
Mit diesen kann AirSnort nun rechnen.
Hat AirSnort den Schlüssel erfolgreich errechnet, tragen wir ihn einfach mit iwpriv bei unserer Wlan-Karte
ein und schon kann es weiter gehen!

WEP Verschlüsselungen mit einer Stärke von 256 Bit sind im Vergleich noch sehr sicher. Es würde
eine sehr lange Zeit dauern die notwendigen Pakete zu sammeln. Leider arbeiten kaum Karten mit 256 Bit WEP
Schlüsseln. Es gibt auch eine neue Methode: WPA… WPA gilt bisher als sicher.

Ich stufe mein Wlan immer noch als ein feindliches Netz ein. So behandelt es auch meine Firewall und so sollte es
jeder Admin behandeln. Es ist und bleibt wohl noch über lange Zeit ein grosses Sicherheitsproblem.

Genauere Fragen zu diesem Thema beantworte ich gerne per E-Mail!
Solltest du Fragen stellen achte bitte darauf deine Frage so genau wie irgend
möglich zu stellen. Beschreibe kurz dein Problem, haue mich nicht mit log und
configs zu und habe etwas Geduld. Ich bekomme nicht nur eine E-Mail am Tag. Darum
werde ich ganz sicher nicht auf unfreundliche und ungenaue Fragen antworten. KEINER
hat ein Recht drauf von mir Support zu bekommen!!

CAcert in Firefox

CAcert ist eine feine Sache. Leider sind deren Root-Zertifikate noch nicht in allen Browsern und Programmen integrieret.

Ich habe mir nun Gedanken dazu gemacht:

Wie schaffe ich es die CAcert-Root-Zertifikate in Anwendungen von Microsoft (Word, Outlook, Internetexplorer..) und Mozilla (Thunderbird, Firefox…) so zu integrieren das sie immer als vertrauenswürdig erkannt werden? Auch bei allen anderen Usern auf dem System und denen die später noch ein neues Konto bekommen…

Natürlich könnte ich bei jedem User die Zertifikate einzeln mit der Hand importieren und als vertrauenswürdig einstufen.  Es ist aber sehr aufwändig und bestimmte User haben damit ein, nennen wir es Problem! Es muss also automatisch gehen.

Für die Microsoftprodukte habe ich eine einfache Lösung gefunden. Mit >>dieser<< Regestrierungsdatei werden die CAcert-Root-Zertifikate automatisch ins System übernommen. Ab diesem Moment sind in allen Microsoftanwendungen, bei allen Usern (vorhandenen und neuen) eines Systems die Zertifikate gültig.

Bei Mozilla ist es nicht ganz so einfach. Hier geht es am einfachsten so:

!!Firefox sollte noch nicht auf dem System installiert sein!!

Zuerst besorgt man sich die Installationsdatei für den Firefox. Am einfachsten wohl hier:  http://www.mozilla-europe.org/de/firefox/

Dann installiert man den Firefox wie gewohnt, startet ihn und importiert die CAcert-Root-Zertifikate als vertrauenswürdig. Jetzt Firefox zu machen und lassen! Bisher alles klar und einfach. Aber nun…

Jetzt sucht man unter: Dokumente und Einstellungen\seinUsername\Anwendungsdaten\Mozilla\Firefox\Profiles\irgendwas.default\ die Datei cert8.db. Gefunden? Gut… Merken wo!

Jetzt das Firefoxinstallerpacket entpacken. Am einfachsten vielleicht mit WinRAR.

Nun kopiert man die cert8.db in den, gerade entpackten Ordner, Firefox Setup 3.0.1\localized\defaults\profile\

Startet man nun die Firefoxinstallation über die setup.exe sind die CAcert-Root-Zertifikate immer automatisch im Firefox integriert. Da immer wenn ein User das erste mal den Firefox startet, sein default Profile zusammengestellt wird. Es wird also immer die cert8.db mit in sein Profil kopiert. In dieser liegen die Zertifikate. Also auch unserer importierten CAcert-Root-Zertifikate. Dieses Packet könnte man nun immer für seine Installationen nutzen und vielleicht auch weitergeben. Will man allen existierenden Usern die Zertifikate unterschieben, muss man einfach nur die cert8.db in dessen Ordner packen (Dokumente und Einstellungen\seinUsername\Anwendungsdaten\Mozilla\Firefox\Profiles\irgendwas.default\).

So funktioniert es auch unter Thunderbird. Bei Linux funktioniert es auch über diese Datei.

Ich diese Infos helfen dem Einen oder Anderen. Wenn noch jemand Infos dazu hat, freue ich mich natürlich über zuschriften!

« Ältere Beiträge Neuere Beiträge »

© 2026 -=Kernel-Error=-RSS

Theme von Anders NorénHoch ↑