04.02.2014 11:29:01 von Oliver Herms

Using CGI with webroot in home dir with SELinux

Have you ever tried doing webdevelopment on your Linux desktop with enabled SELinux? Then you problably saw this on opening your webapp: "Internal Server Error 500" and /var/log/httpd/error.log just telling you

[fcgid:warn] [pid 5068] (104)Connection reset by peer: [client ::1:40211] mod_fcgid: error reading data from FastCGI server

Hopefully /var/log/audt/audit.log can tell you more...

Weiterlesen …

15.01.2014 16:37:15 von Oliver Herms

Enabling ip_forward in Linux can take interfaces down and up

Today someone on #denog on IRCnet asked into the channel why his 10GE interfaces are going down and coming back up when he enables IP forwarding on his Linux machines. I grepped through the kernel sources and found the reason:

When /proc/sys/net/ipv4/ip_forward is changed the kernel calls a function called inet_forward_change() in file net/ipv4/devinet.c. This function essentially does what we expect from it: Enable IP forwarding. But it does even more: On line 1933 (version 3.12.7) is a loop over all network devices which disable large receive offload (LRO) for all devices. 
This leads to a reload of the driver which triggers the interface to go down and up.

So if you don't want your interfaces to go down when enabling IP forwarding just disable LRO on boot.

Weiterlesen …

29.03.2013 00:59:17 von Oliver Herms

Recursorscanner 1.0 released

I've just released a handy tool for network admins:
Recursorscanner. It scans netblocks for open DNS recursors. Nothing more.
There is good reason to find and restrict open DNS recursors on your network...

Download

Weiterlesen …

07.12.2012 13:21:29 von Oliver Herms

AntiRootKit version 0.7 released

Today I've release a new version of AntiRootKit (ARK).
The new version is now 0.7. However: The only thing changed is that opening of /dev/mem and /dev/kmem is now not being circumvented by comparing filenames, but by using device numbers.

I would be very pleased to get some feedbock on the idea of AntiRootKit.

Weiterlesen …

12.09.2012 15:45:02 von Oliver Herms

Apache Reverse Proxy with URL rewriting for absolute URLs

Setting up an Apache reverse proxy is very straigth forward.
You may use something like this:

<Location /my-proxy-app>
    ProxyPass http://my-proxy-destination.tld/path
</Location>

But now imagine the case that the webserver behind the proxy delivers HTML content with absolute URLs.
It is very likely that thoase absolute URLs will not work in the outside world.
The solution is to rewrite the links in the HTML content forwarded by the proxy.

mod_proxy_html implements this functionality.
Version 3.0 is included in the Debian 6.0 distribution.

The following configuration does the trick:

<Location /my-proxy-app>
    ProxyPass http://my-proxy-destination.tld/path
    ProxyHTMLExtended On
    ProxyHTMLURLMap http://my-proxy-destination.tld/path/ /my-proxy-app/
    SetOutputFilter proxy-html
    RequestHeader unset Accept-Encoding
</Location>

Weiterlesen …

07.09.2012 17:59:10 von Oliver Herms

There is good reason for ICMP Type 3 code 4

Yesterday I've moved an internet connection from an existing GRE-Tunnel to an IP-IP tunnel.
A Customer called and complained that he could not reach several websites, e.g. www.bundestag.de and www.bahn.de.

A ping to bundestag.de failed because they are blocking ICMP Type 8 Code 0. A ping to bahn.de was successful. So I tried to reach those websites from behind the tunnel: I saw that I don't see anything.

What happened?
The MTU of the new tunnel was 1480 bytes (1500 bytes - 20 bytes for outter IP header, the old tunnel had a much larger MTU). Those webservers are setting the "Don't Fragment" (DF) bit in the IP header, telling our router not to fragment those packets.
Instead our router generates an "ICMP destination unreachable (fragmentation needed, df set)" to the sender to inform him that he has to send smaller packets, so packets fit the MTU.

Weiterlesen …

06.06.2012 18:07:38 von Oliver Herms

Linux, IPv6, OSPFv3 and IPSec - Update

At the moment I am discovering a bug in the Linux Kernel.
The scenario is as follows:

There is a router using virtual interfaces (e.g. VLANs) eth1.100 and eth1.200.
Those interfaces share a MAC address. In IPv6 there are so called "link-local" addresses.
These addresses are build from an static prefix + the MAC address.

On the router runs Quagga with its ospf6d (doing OSPFv3) configured with eth1.100 and eth1.200 in area 0. Quagga starts to send OSPF hello packets on both links. On eth1.100 it sends the packets with an interface ID of 4. On eth1.200 is sends the packets with an interface ID of 5.

As I've discovered in the Quagga source code, the packets are bound to an interface by using the struct in6_addr with its property  sin6_scope_id.

So far, everything is ok.

When I now activate IPsec in transport mode with AH only (have not tested other setups yet) for protocol 89 (ospf) all OSPF packets have an AH added. But: The packets seem to loose their associated interfaces and are being sent on all interfaces. The problem reside somewhere in the XFRM stack of the Linux Kernel.

UPDATE:

In the mean time I found out that
1. the problem does not exist in kernel version 3.4 but in 2.6.32
2. the problem resides in net/xfrm/xfrm_policy.c in the __xfrm_policy function where it calls xfrm_find_bundle(fl, policy, family).

xfrm_find_bundle returns a struct dst_entry. dst_entry is a linkes list and the last element is being used for routing. xfrm_find_bundle gets the fl parameter where fl.oif is the number of the outgoing interface that should be used. However that interfaces seems to be ignored in some cases, so the dev structure in dst_entry does not equal the fl.oif interface.

I don't think I'll invest more energy on this bug as it does not exist in 3.4 anymore.
However, here is a hotfix for the problem (in case you have this problem and can not easily upgrade your kernel):

diff linux-2.6.32.59/net/xfrm/xfrm_policy.c linux-2.6.32.59.orig/net/xfrm/xfrm_policy.c 
1615,1618d1614
<         /* HACK: get sure that packet is being transmitted out of fl->oif! */
<         if(dst != NULL)
<             dst->path->dev = dev_get_by_index(net, fl->oif);
<

Weiterlesen …

10.05.2012 14:00:25 von Oliver Herms

LANCOM Router resetten inaktive TCP-Verbindungen (z. B. SSH)

Einer meiner Kunden setzt seit geraumer Zeit Router von LANCOM ein.
Nun kam es öfter vor, dass ich beim Kunden vor-Ort auf entfernte Server per SSH zugreifen musste und, während Verbindungen geöffnet waren, untätigerweise einige Minuten in einer SSH-Sitzung vergingen.

Soweit so gewöhnlich. Das sollte soweit kein Problem sein.
Was jedoch passierte war folgendes: Mein Rechner erhielt nach ein paar Minuten Inaktivität ein TCP-Segment mit der Absender-IP des Servers und gesetztem RST-Flag, was zu einem sofortigen Abbruch der Verbindung führte.

Nachdem ich also auf dem Server mit tshark gesnifft habe und festgestellt habe, dass der Server gar keinen Reset sendet, geriet der Router des Kunden in den Verdacht in meine Verbindung einzugreifen. Und so war es.

Ursache hierür ist, dass LANCOM Router standardmäßig inaktive TCP-Verbindungen für schlappe 5 Minuten in ihrer Maskierungstabelle vorhalten. Der Wert kann im Konfigurationsmenü unter [IP-Router] => [Maskierung] => [TCP-Aging] angehoben werden.

Ich empfehle hier je nach Größe des Netzes ein Zeitspanne von 1800 Sekunden (30 Minuten) bis 7200 Sekunden (2 Stunden).

Weiterlesen …

19.04.2012 09:33:21 von Oliver Herms

tops.net ist im Internet6

Seit Mittwoch Abend 23:40 Uhr steht das erste IPv6-Peering zwischen tops.net (AS12581) und der Außenwelt über einen 6in4-Tunnel mit Hurricane Electric (AS6939). Damit erscheint der vor einigen Wochen zugeteilte IPv6-Präfix 2a00:c940::/32 nun in der globalen Routingtabelle. Es bleibt aber noch viel zu tun, bevor IPv6 hier produktiv eingesetzt werden kann. Unter anderem fehlt es noch an der Konfiguration eines Redundanzrouters sowie eines weiteren IPv6-Transit-Providers.

In einem meiner nächsten Beiträge werde ich darauf eingehen wie man IPv6-Routen in Ciscos IOS und Junipers JunOS sinnvoll filtert.

12.04.2012 20:56:28 von Oliver Herms

ARK - AntiRootKit

Ich habe soeben mein erster "nützliches" selbst erstelltes Linux-Kernel-Modul online gestellt.
Eine Beschreibung der Funktionalität findet sich in der Rubrik "Projekte".

Der Code ist noch etwas unausgereift. Vom produktivem Einsatz rate ich daher natürlich ab.

10.04.2012 14:16:28 von Oliver Herms

Amsterdam Internet Exchange erklärt das Internet

Ich bin soeben beim rumstöbern auf YouTube auf folgendes Video gestoßen.
Sehr schöne Umsetzung. Meiner Meinung nach gerade für nicht-Techniker sehr gut geeignet um einen ersten Einblick zu bekommen. Das Video ist zweiteilig und dauert insgesamt ca. 21 Minuten.

Viel Spaß damit: [Link]

29.03.2012 17:19:58 von Oliver Herms

tops.net führt IPv6 ein

Seit geraumer Zeit arbeite ich nun schon freiberuflich für einen kleinen Internet-Service-Provider mit Sitz in Bonn.
Unter anderem bin ich dort derzeit mit der Einführung von IPv6 beschäftigt.
13 Jahre nachdem tops.net den IPv4-Adressbereich 212.79.160.0/19 von RIPE zugeteilt bekommen hat ist heute der IPv6-Adressbereich 2a00:c940::/32 hinzugekommen.
Mal schauen wann dieses Präfix in der globalen IPv6-Routingtabelle auftaucht.

27.03.2012 13:43:08 von Oliver Herms

Wenn man nicht mehr damit rechnet...

Monate nachdem ich im Internet unter tunnelbroker.net den Rang des "IPv6 Certified Sage" erlangt habe, habe ich heute Post aus den USA bekommen. Das kommt nicht alle Tage vor und eigentlich erwartete ich lediglich ein Paket von Amazon. Nach einem Blick auf den Absender (Hurricane Electric, Fremont, CA) war dann aber alles klar:

Weiterlesen …

23.03.2012 20:45:07 von Oliver Herms

Online

Seit gerade eben bin ich wieder mit eigener Webseite im Web vertreten.
Ich werde von nun an mehr oder weniger regelmäßig über meine beruflichen Aktivitäten im IT-Bereich berichten. Schwerpunkte dabei werden die Systemadministration unter Debian GNU/Linux, CentOS und Ubuntu, der Aufbau und Betrieb von Netzwerken sowie die Webentwicklung sein.
Hin und wieder kann sich auch die ein oder andere "Privatsache" darunter mischen...