Archive for the ‘networking’ Category

Warum ich die Bezeichnung “Class C Netz” nicht mehr hören mag

Donnerstag, Mai 4th, 2017

Bei vielen, die schon seit längerem in der IT arbeiten, hat es sich eingeschlichen, von einem “Class C” Netz zu sprechen, wenn ein Netz mit 256 IP-Adressen gemeint ist. Wenn ich dann darauf hinweise, dass wohl ein /24 gemeint sei, ernte ich häufig verwirrte Gesichter und die Antwort, dass dies doch das Gleiche sei.

Hierzu ein kleiner Ausflug in die gute alte Zeit. Früher wurde zwischen verschiedenen Autonomen Systemen beim Austausch von Routing-Informationen nur die Netzadresse übertragen. Die Netzmaske ergab sich aus der “natürlichen” Netzmaske anhand des Class Based Routing. Mit Einführung von CIDR (Classless Inter-Domain Routing) wurde die Übertragung von Netzmasken verpflichtend. Dadurch konnten beliebige Subnetze gebildet und übermittelt werden.

Die Netz-Klasse war also ein Hilfsmittel, um die Netzmaske zu ermitteln. Dies bedeutet aber auch, dass mit der Einführung von CIDR die Netzmaske nicht mehr umgekehrt auf die Netzklasse schließen lies. Somit kann also ein /24-Netz in den Bereich der Class C Netze fallen, aber ebensogut aus dem Class A oder Class B Bereich stammen.

Warum allerdings nur die Bezeichnung Class C für ein /24, aber nicht die anderen Bezeichnungen bis heute überlebt haben, erschließt sich mir nicht.

Meine Bitte: Wer sich dieser Mehrdeutigkeit nicht klar ist oder sich unmissverständlich ausdrücken möchte, solle doch bitte ausschließlich Netzmasken in CIDR-Notation verwenden, und den Begriff des “Class C” Netzes endlich aussterben lassen.

Cisco Type 7 Passwörter entschlüsseln

Donnerstag, Februar 11th, 2016

Relativ früh in meiner Laufbahn als Netzwerkadministrator habe ich erfahren, dass Passwörter auf Cisco-Routern manchmal reversibel gespeichert werden. Da es nicht immer praktikabel ist, auf einem entsprechenden Gerät einfach “no service password-encryption” einzugeben, gibt es diverse Skripte zur Umkehrung dieser Verschlüsselung. Damit ich nie wieder suchen muss lege ich ein Skript, von dem ich leider keine Ahnung habe wer der ursprüngliche Autor ist, hier ab:

#!/usr/bin/perl
use File::Copy;

############################################################################
# Vigenere translation table
############################################################################
@V=(0x64, 0x73, 0x66, 0x64, 0x3b, 0x6b, 0x66, 0x6f, 0x41, 0x2c, 0x2e,
    0x69, 0x79, 0x65, 0x77, 0x72, 0x6b, 0x6c, 0x64, 0x4a, 0x4b, 0x44,
    0x48, 0x53, 0x55, 0x42, 0x73, 0x67, 0x76, 0x63, 0x61, 0x36, 0x39,
    0x38, 0x33, 0x34, 0x6e, 0x63, 0x78, 0x76, 0x39, 0x38, 0x37, 0x33,
    0x32, 0x35, 0x34, 0x6b, 0x3b, 0x66, 0x67, 0x38, 0x37);
############################################################################

############################################################################
# Usage guidelines
############################################################################
if ($ARGV[0] eq ""){
   print "This script reveals the IOS passwords obfuscated using the Vigenere algorithm.n";
   print "n";
   print "Usage guidelines:n";
   print " cdecrypt.pl 04480E051A33490E     # Reveals a single passwordn";
   print " cdecrypt.pl running-config.rcf   # Changes all passwords in a file to cleartextn";
   print "                                  # Original file stored with .bak extensionn";
}

############################################################################
# Process arguments and execute
############################################################################
if(open(F,"<$ARGV[0]")){    # If argument passed can be opened then convert a file
  open(FO,">cdcout.rcf") || die("Cannot open 'cdcout.rcf' for writing ($!)n");
  while(<F>){
    if (/(.*passwords)(7s)([0-9a-fA-F]{4,})/){     # Find password commands
      my $d=Decrypt($3);                             # Deobfuscate passwords
      s/(.*passwords)(7s)([0-9a-fA-F]{4,})/$1$d/;  # Remove '7' and add cleartext password
    }
    print FO $_;
  }
  close(F);
  close(FO);
  copy($ARGV[0],"$ARGV[0].bak")||die("Cannot copy '$ARGV[0]' to '$ARGV[0].bak'");
  copy("cdcout.rcf",$ARGV[0])||die("Cannot copy '$ARGV[0]' to '$ARGV[0].bak'");
  unlink "cdcout.rcf";
}else{                      # If argument passed cannot be opened it is a single password
  print Decrypt($ARGV[0]) . "n";
}

############################################################################
# Vigenere decryption/deobfuscation function
############################################################################
sub Decrypt{
  my $pw=shift(@_);                             # Retrieve input obfuscated password
  my $i=substr($pw,0,2);                        # Initial index into Vigenere translation table
  my $c=2;                                      # Initial pointer
  my $r="";                                     # Variable to hold cleartext password
  while ($c<length($pw)){                       # Process each pair of hex values
    $r.=chr(hex(substr($pw,$c,2))^$V[$i++]);    # Vigenere reverse translation
    $c+=2;                                      # Move pointer to next hex pair
    $i%=53;                                     # Vigenere table wrap around
  }                                             #
  return $r;                                    # Return cleartext password
}

Rewrite-Rules für GET-Parameter

Montag, Juli 15th, 2013

(c) BastianDietz / photocase.comManchmal steht man vor dem Problem, dass eine Website auf ein neues oder anderes Content Management System (z.B. Joomla! oder WordPress) umgestellt wird, man aber die alten URLs per Redirect auf die neuen umleiten möchte, z.B. um weiterhin per Google gefunden zu werden.

Intuitiv würde man dann Rewrite-Regeln wie die folgenden schreiben:

RewriteRule ^start/$ /start.html [R=301,L]
RewriteRule ^index.php?page=imprint$ /imprint.html [R=301,L]

Die erste Regel funktioniert auch problemlos, die  zweite allerdings nicht, weil die Parameter eines Requests nicht an der Stelle mit ausgewertet werden. Daher muss man anstelle dieser Regel mit einer Bedingung vorweg arbeiten:

RewriteCond %{QUERY_STRING} ^page=imprint$
RewriteRule ^index.php$ /imprint.html? [R=301,L]

DNS-Einträge automatisch erzeugen mit BIND

Donnerstag, Januar 10th, 2013

Da grundsätzlich jede statisch oder dynamisch vergebene IP-Adresse eine funktionierende DNS-Auflösung haben sollte, bietet sich neben einem Skript, das solche Einträge erzeugen könnte, die Makro-Funktion des BIND Nameservers an. Hiermit kann man automatisch passende Einträge erzeugen lassen:

Forward-Zone example.com:

$GENERATE 42-47 static-192-0-2-$ A 192.0.2.$

Reverse-Zone 2.0.192.in-addr.arpa:

$GENERATE 42-47 $ PTR static-192-0-2-$.example.com.

Speicherverbrauch per Linux-Kommandozeile

Sonntag, April 22nd, 2012

Ein kurzer Tipp zwischendurch: Wenn eine Partition unter Linux voll ist und man herausfinden möchte, wo der Speicherplatz geblieben ist, hilft diese Kommandozeile. Sie gibt für alle Unterverzeichnisse des aktuellen Verzeichnisses, wie viel Platz sie belegen — aufsteigend sortiert:
du -s * .??* | sort -n | cut -f 2 | xargs du -sh

Wartungsarbeiten

Donnerstag, Dezember 29th, 2011

Manchmal haben wir als Webhoster die Diskussion, ob und wann Wartungsarbeiten akzeptabel sind. Da es hier oft unterschiedliche Ansichten gibt habe ich mittlerweile eine kleine Sammlung von Wartungsseiten, um zu zeigen dass es keine Schande ist, ab und zu seine Seite offline zu schalten um in Ruhe Änderungen vorzunehmen.

Apple Developer:

eBay:

Geocaching.com:

Rittal:

RIPE:

Dear colleagues,

To allow us to update the software behind the RIPE NCC website and RIPE
Labs, functionality on these sites will be reduced between 15:00 and
19:00 (UTC) today, 28 June 2011.

During this time, the sites will remain available. However, they will be
in "read only" mode. Search functionality will be unavailable, and it
will not be possible to comment on articles or join in discussions.

We apologise in advance for any inconvenience this might cause.

If you have any questions about this maintenance work, please contact
webmaster@ripe.net.

Ergänzung zum Thema Wartungsarbeiten-Seite

Dienstag, Oktober 4th, 2011

Ich las kürzlich von jemandem, der aufgrund von Problemen auf einer Webseite eine Umleitung auf eine Fehlerseite bekommen hatte. Ist so eine Umleitung einmal erfolgt, kann man im Browser so oft die Seite aktualisieren, man bekommt trotzdem immer wieder die Fehler- oder Wartungsseite.

Dabei fiel mir mein Posting zum Thema Wartungsseite mit mod_rewrite wieder ein, das in der Hinsicht auch nicht besser war. Daher hier meine Ergänzung zur rewrite-Regel für eine Wartungsseite, bei der man nach erfolgter Wartung von der Wartungsseite auf die Startseite zurückleitet. Auch hier dienen die Bedingungen dazu, dass man von seiner festen IP-Adresse jederzeit die Wartungsseite testen kann:

RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^192.168.28.17$ [NC]
RewriteCond %{REMOTE_ADDR} !^fe80:$ [NC]
RewriteRule ^wartung.html$ / [NC,L]

SNMP-Traps per EEM generieren

Donnerstag, Mai 19th, 2011

Kürzlich habe ich darüber geschrieben, wie man die Alarm-Kontakte an einem Cisco Metro Ethernet Switch, z.B. dem Modell ME 3400EG-2CS-A, nutzen kann. Allerdings hat offenbar Cisco — mal wieder — das nützlichste Feature vergessen, nämlich die Möglichkeit, SNMP-Traps hierzu zu generieren.

Alles, was man bekommt, sind Log-Meldungen, die z.B. so aussehen:

%PLATFORM_ENV-1-EXTERNAL_ALARM_CONTACT_ASSERT:
Alarm asserted: Door
%PLATFORM_ENV-1-EXTERNAL_ALARM_CONTACT_CLEAR:
Alarm cleared: Door

Zum Glück hat man aber heutzutage den Embedded Event Manager zur Verfügung. Hiermit kann man aus den Logmeldungen auch SNMP-Traps generieren:

event manager applet DoorOpen
 event syslog occurs 1 pattern "%PLATFORM_ENV-1-EXTERNAL_ALARM_CONTACT_ASSERT:"
 action 1.0 snmp-trap intdata1 1 intdata2 2 strdata "Door Opened"
event manager applet DoorClose
 event syslog occurs 1 pattern "%PLATFORM_ENV-1-EXTERNAL_ALARM_CONTACT_CLEAR:"
 action 1.0 snmp-trap intdata1 1 intdata2 0 strdata "Door Closed"

Hierbei wird in den Trap-Parametern die Sensor-Nummer 1 sowie der Status als entsprechender Code für das auswertende Nagios-Plugin übermittelt. Der Trap enthält somit diese Daten:

SNMPv2-SMI::enterprises.9.10.91.1.2.3.1.9.11 = INTEGER: 1#011
SNMPv2-SMI::enterprises.9.10.91.1.2.3.1.10.11 = INTEGER: 2#011
SNMPv2-SMI::enterprises.9.10.91.1.2.3.1.11.11 = STRING: “Door Closed”#011

Alarm-Kontakt Cisco ME 3400EG-2CS-A

Donnerstag, Mai 12th, 2011

Bei einigen Cisco-Switches der Metro Ethernet Serie ist ein praktischer Alarm-Port eingebaut. Diesen kann man z.B. verwenden, um einen verschlossenen Verteilerkasten beim Kunden zu überwachen. Leider findet man bei Cisco hierzu nur eine kurze Notiz im Installation Guide:

Alarm Input Port

The switch supports four alarm inputs. The alarm input is a dry-contact alarm port. Use the CLI to define each alarm input to respond to a normally open or closed dry-contact closure and to define the alarm severity as minor, major, or critical. When a condition triggers an alarm, the console displays an alarm message, and the corresponding Alarm LED responds (see the “Alarm LEDs” section).

Welche Pins hierfür benutzt werden müssen geht hieraus leider nicht hervor. Durch Tests habe ich allerdings an unserem Cisco ME 3400EG-12CS-M folgende Belegung ermitteln können:

Pin Signal Farbe (T568A)
1 Alarm1 weiß/grün
2 Alarm2 grün
3 weiß/orange
4 Alarm3 blau
5 Alarm4 weiß/blau
6 orange
7 weiß/braun
8 Masse braun

Die Konfiguration im IOS ist dann entsprechend der Dokumentation schnell erledigt, z.B. wenn an Port 1 der Normalzustand “Geschlossen” ist:

alarm-contact 1 description door
alarm-contact 1 severity critical
alarm-contact 1 trigger open

Update: In der Zwischenzeit ist auch die Dokumentation Configuring Switch Alarms bei Cisco verfügbar geworden

Netzwerk-Kabel-Automat

Freitag, April 1st, 2011

Als Netzwerktechniker ist man im Rechenzentrum manchmal ein wenig aufgeschmissen. Man hat alle Geräte dabei, die eingebaut werden sollen, die Schränke sind vorbereitet und der Strom ist gelegt. Aber dann fehlen einem Kleinteile im Wert von wenigen Cent, die einen Strich durch die Rechnung und die Zeitplanung machen.

Wir buchen, Sie fluchenDie Kollegen von FlexOptix haben kürzlich auf der CeBit den Gearomat vorgestellt. Ein ähnliches Produkt haben wir, ebenfalls unter größter Geheimhaltung, für unser Rechenzentrum entwickelt. Den Automatic Cable Dispenser können Sie demnächst in unseren Rechenzentren finden und benutzen. Nach der Testphase unserer Prototypen werden wir sie auch anderen Interessenten anbieten.

Am Automatic Cable Dispenser können Sie eingeben, welche Länge das gewünschte Netzwerkkabel haben soll, von welchem Typ und mit welchen Steckern es ausgestattet sein soll. Je nach Kabeltyp haben Sie ausserdem die Wahl zwischen verschiedenen Farben. Nach Eingabe dieser Parameter wird das Kabel in gewünschter Länge ausgegeben. Ein zweiter Ausgabeschacht liefert den benötigten Stecker und eventuelles Zubehör aus.

Mit Hilfe der am Automaten befestigten Crimpzange können Sie dann den oder die Stecker montieren. Hierbei wird auf dem Mehrfarbdisplay eine bebilderte Anleitung angezeigt. Ausserdem bietet der Automatic Cable Dispenser Testanschlüsse für alle angebotenen Stecker- und Kabeltypen. Das Ergebnis dieser Kabelmessung wird gespeichert und auf Wunsch auf Thermopapier ausgedruckt.

Die Zahlung erfolgt Bargeldlos, entweder per Kredit- oder Geldkarte, oder mit der Rechenzentrums-Zugangskarte über die nächste Rechnung.