Iptables: Netzwerk Stats

Bevor ich wieder manpages lesen muss, schreib ich mir das hier mal auf:

Wie jede andere Firewall auch führt iptables auch eine Statistik über den verarbeiteten Pakete und Bytes. Dabei wird pro Regel gezählt. Ein Beispiel

 iptables -nvL INPUT
Chain INPUT (policy DROP 10 packets, 508 bytes)
 pkts bytes target     prot opt in     out     source               destination         
 243K   43M fail2ban-ssh  tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           multiport dports 22 
  58M  115G ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
  62M   18G ppp0_in    all  --  ppp0   *       0.0.0.0/0            0.0.0.0/0           
 397M  460G eth0_in    all  --  eth0   *       0.0.0.0/0            0.0.0.0/0           
...

Zurücksetzen kann man die Counter übrigens ganz einfach mit -Z also etwa

iptables -Z INPUT
VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Reboot nach Partitionsänderung mit fdisk vermeiden

Vor Ewigkeiten hatte ich mir hier aufgeschrieben, dass nach einem fdisk auf der aktuellen Platte ein Reboot notwendig ist. Das ist falsch! Mit partprobe steht ein Tool unter Linux zur Verfügung, dass dem Kernel die Änderung der Partitionstabelle mitteilt.

Man lernt nie aus …

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

PL2303 Udev Abenteuer

Ich habe mir einen 4fach USB zu serial Adapter gekauft. Das Teil ist super einfach. Es hat einen Hub eingebaut an dem 4 PL2303 Adapter hängen. Die werden der Reihenfolge im System eingehängt. Doof nur, dass ich machmal auch andere Geschichten mit FTDI oder PL2303 anschließe. So kann es vorkommen, dass die Ports nicht brav immer am Anfang der Reihenfolge geladen werden, sondern diverse Ports haben. Logischerweise will ich aber immer den richtigen Port direkt ansprechen. Daher habe ich mir ein UDEV Regel mit einem kleinen Skript gebastelt:

  1. UDEV
    KERNEL=="ttyUSB*", SYSFS{product}=="USB-Serial Controller", RUN="/usr/local/bin/comdevice.pl %p %k"
  2. Skript
    #!/usr/bin/perl
     
    use strict;
    use warnings;
     
    my $device = $ARGV[0];
    my $path = $ARGV[1];
    exit if($device !~ /devices/);
     
    my $newcomport = "0";
    $newcomport = $1 if($device =~ m/(\d+):[^:]+\/[^\/]+$/);
     
    symlink "/dev/".$path, "/dev/com".$newcomport if(! -e "/dev/com".$newcomport);

Das ganze erstellt dann Devices (/dev/com1 für den ersten Anschluß, /dev/com2 für den zweiten, ….)

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

dd Statistik

dd ist ja für mache Tasks ganz praktisch. Was ich aber ein wenig schande finde ist, dass es nur am Ende die Statistik ausgibt und man damit sozusagen im Blindflug unterwegs ist. D.h. währen des Kopierens sieht man nicht wie weit er schon ist. Es gibt aber einen Trick, der sogar in den manpages steht 🙂

$ dd if=/dev/zero of=/dev/null& pid=$!
$ kill -USR1 $pid; sleep 1; kill $pid
18335302+0 records in
18335302+0 records out
9387674624 bytes (9.4 GB) copied, 34.6279 seconds, 271 MB/s

Wann schaffe ich mal 271MB/s

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Inittab neu einlesen

Ich verwende /etc/inittab für so manches. Es oft einfacher darüber Daemons am laufen zu halten als Dinge wie restartd oder monit zu nehmen. Zum Neueinlesen habe ich immer folgendes geschrieben:

kill -HUP 1

Das ist zwar richtig aber nicht die feine Art. Besser ist

telinit q

oder noch kürzer:

init q

Nachdem ich zugeben muss, dass ich das letzte nicht in dem Zusammenhang kannte schreibe ich mir das hier auf. Gehört bestimmt zu den Linux Grundkenntnissen 😉

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: +1 (from 1 vote)

neuer Kernel unter RedHat/CentOS

Nachdem heute Nacht 2.6.33 herausgekommen ist und ich leider auf einem speziellen Alix Board immer den neusten einsetzen muss (ich verwende brandneue Hardware) muss ich selbst backen. Hier die Kommandos als Notiz für Drag and Drop :).

make rpm-pkg
rpm -i /usr/src/redhat/RPMS/i386/kernel-2.6.33-1.i386.rpm
new-kernel-pkg --mkinitrd --depmod --install 2.6.33
VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

chown/chgrp bei symbolischen Link

Nachdem ich jedes mal wieder selbst darauf hereinfalle wird das jetzt aufgeschrieben! Will man mit chgrp bzw. chown den Owner bzw. die Gruppe des symbolischen Links ändern, so geht das wie folgt:

chown -h root:root /vmlinuz

Entscheidend ist das -h. Ansonsten wird das Ziel des Links geändert.

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

bash-tipp: pushd / popd

Nein pushd und popd sind keine Daemons. Das d steht für directory und nicht für daemon. Mit den beiden Kommandos navigiert man schnell durch Verzeichnisse. Beide Kommandos sind die Fortsetzung von

cd -

. Im Detail:

  • pushd ist ein cd, das sich zusätzlich die History auf einem Stack merkt.
  • popd holt sich das jeweils letzte Verzeichnis vom Stack und wechselt dort hin.

Idealerweise legt man sich noch 2 Alias in .bashrc an:

alias cd="pushd"
alias cb="popd"

Damit kann man cd – jetzt mit cb ersetzen und das sogar mehrfach.

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

tcp keepalives und timeouts

Nachdem ich mit einer kommerziellen bei Idle-Verbindungen immer rausgeflogen bin habe ich mir das Thema mal auf Linux Büchsen genauer angesehen. Es gibt zwei wichtige Schrauben:

  1. /proc/sys/net/ipv4/tcp_keepalive*
    Über die 3 Kernel Parameter tcp_keepalive_time, tcp_keepalive_intvl, tcp_keepalive_probes kann man dem Kernel mit geben wie häufig er Keepalive Pakete verschickt. Das hilft, wenn man zwischen Client und Server eben solch kommerziellen Firewalls hat, die eine idlen Verbindung sehr schnell trennen. Details dazu hier.
  2. /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_*
    Über diese Kernel Parameter regelt man auf Linux Firewalls selbst wie hoch die entsprechenden Timeouts sind. Am wichtigsten ist hier wohl der Parameter ip_conntrack_tcp_timeout_establishe, welcher per Default auf 432000 Sekunden (=5 Tage) steht. D.h. Linux-Firewalls würden per Default erst nach 5 Tagen idle Verbindungen trennen. Speziell auf Firewalls mit viel Traffic kann es schon mal vernünftig sein, den Wert zu verkleinern. Bei der kommerziellen Firewall, die mich genervt hatte, waren 30 Minuten eingestellt. Ein zu hoher Wert kann im schlimmsten Fall dafür sorgen, dass die Conntrack Tabelle voll läuft und man eine Meldung wie diese bekommt:

    Nov 20 12:43:24 hostname kernel: ip_conntrack: table full, dropping packet.
    

    Nicht schön!

    Die Anzahl der aktuell aktiven und inaktiven TCP Verbindungen kann man übrigens ganz leicht per snmp abfragen. Die beiden OIDs sind .1.3.6.1.2.1.6.5.0 für aktive und .1.3.6.1.2.1.6.6.0 für passive (das kann OpenNMS von Haus auf). Direkt am System geht es gesamt mit:

    [root@host]# cat /proc/sys/net/ipv4/netfilter/ip_conntrack_count
    10333

    Bei der Unterscheidung zwischen den einzelnen Stati hilft grep, awk, sort … 🙂

PS: Wie die Parameter über den Reboot hin rettet erklärt man sysctl bzw. man sysctl.conf

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Blockdevice entsorgen

Bei meinem iSCSI Spielereien habe ich mir ein Block Device eingefangen. D.h. ich hatte beim rumspielen mit iSCSI alles sauber angelegt und anschließend das iSCSI Device auf der iSCSI Seite entsorgt. Blöd, denn der Server hat immer noch nach dem Device gesucht. Ständig kamen folgende Fehler:
sd 8:0:0:0: Device not ready: <6>: Current: sense key: Not Ready
Add. Sense: Logical unit not ready, manual intervention required
end_request: I/O error, dev sdb, sector 0

Los geworden bin ich die Meldungen und das Device über das sysfs:
echo 1 > /sys/block/sdb/device/delete

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)