Visualisation d’Iptables en temps réel

gressgraph image

Aujourd’huin un article rapide sur la visualisation des règles Iptables sous forme graphique afin de mieux comprendre son fonctionnement et de permettre le debug.

Plusieurs solutions s’offrent à nous:

gressgraph

dot-iptables

Nous allons aborder gressgraph, je vous laisse le soin d’essayer les autres outils, ils sont tous aussi puissants.

Depuis une Debian Stretch :

apt-get install -y graphviz
git clone https://github.com/jekor/gressgraph.git
cd gressgraph

 

Depuis une Ubuntu 16.04 :

apt-get install -y iptables graphviz make lhs2tex ghc libghc-parsec3-dev git clone https://github.com/jekor/gressgraph.git cd gressgraph

 

Pour lancer la visualisation :

iptables -L -vx | gressgraph > iptables.twopi
twopi -Tsvg iptables.twopi > iptables.svg

 

Pour visualiser les logs d’Iptables :

Afterglow

iptstate

En bonus:

Fast iptables monitor:

watch -n 1 iptables -vnL

 

Real-time iptables monitor

#!/usr/bin/perl
use strict;
use warnings;
my @types = qw/nat mangle filter/;
$SIG{INT} = sub{print "\e[?25h\e[u"; exit}; 
print "\e[40;37m\e[2J\e[?25l";
while (1) {
  print "\e[0;0H";
  my %output = map {$_ => scalar `iptables -t $_ -L -v -Z`} @types;
  foreach my $type (@types) {
    print "\e[01;34m------", uc($type), '-' x (73 - length($type)), "\
+n";
    $output{$type} =~ s/ pkts[^\n]*\n(\n|Zeroing)/$1/gs;
    foreach my $line (split /\n/, $output{$type}) {
      next if $line =~ m/^Zeroing/ || $line eq '';
      print $line =~ m/^\s*(\d+)/ || $line =~ m/(\d+) packets/
        ? ($1 > 0 
          ? ($line =~ m/DROP|DENY|REJECT/
            ? "\e[01;40;31m" 
            : "\e[01;40;32m")
          : "\e[00;40;37m")
        : "\e[00;40;33m";
      print "\e[K$line\e[01;40;37m\n"
    }
  }
  print "\e[s";
  sleep 1
}