LINUX.ORG.RU
ФорумAdmin

аналог Cisco ASA packet-tracer для netfilter

 


2

2

Добрый день, в iptables увеличилось количество и сложность правил, стало возникать много проблем с доступом, время на разбор правил увеличилось.

Для решения данных задач на Cisco ASA реализована проверка с помощью утилиты packet-tracer: указываем proto,src,dst,port) и получаем вывод без лишней возни с генерацией трафика

packet-tracer input corporate tcp 10.X.X.Z 8080 10.Y.Y.Y 80
Result:
input-interface: corporate
input-status: up
input-line-status: up
output-interface: inside
output-status: up
output-line-status: up
Action: allow

или ACE по которой дропается трафик

Phase: 3
Type: ACCESS-LIST
Subtype:
Result: DROP
Config:
Implicit Rule
Additional Information:

Хотелось бы узнать есть ли на linux такой механизм?

Все что нашел в интернете - основывается на TRACE и генерации реального трафика.

Кстати, годная штука, надо бы в lkml закинуть идею. Так-то действительно все эти ковыряния по большей части write only.

Anoxemian ★★★★★
()

TRACE нужно использовать оооочень осторожно на машинах с большим трафиком. Есть риск потерять доступ к машине по сети.

А еще, логи от TRACE очень трудно читать.

Я для облегчения жизни себе сделал скрипт, который дает более простой вывод. Смысл в том, чтобы в каждой следующей строке показывать только разницу с предыдущей строкой.

#!/usr/bin/env perl
use strict;

my @R;
open(F,"dmesg|") || die;
while(<F>) {
        next if !/TRACE:/;
        chomp;
        push @R,[split /\s+/];
}
close(F);

my $LL = $R[$#R];
die if !$LL;
die if $LL->[0] !~ /^\[(\d+)\.\d+\]$/;
print "$1\n$LL->[0]\n";
my $st = 0;
my @PX;
foreach my $L (@R) {
        next if !$st && $L->[2] !~ /^raw/;
        $st = 1;
        @PX = () if $L->[2] =~ /^raw/;
        #print ">",join(' ',@$L),"\n";
        my @X;
        for(my $i=0; $i <= $#{$L}; $i++) {
                push @X,$L->[$i] if $L->[$i] !~ /^(TOS=|PREC=|TRACE:)/;
        }
        my @t = ($X[0],$X[1]);
        for(my $i=2; $i <= $#X; $i++) {
                my $d = 0;
                foreach (@PX) {
                        if($_ eq $X[$i]) { $d=1; last;}
                }
                # print ">$X[$i] $d ",join('|',@PX),"\n";
                if(!$d) {
                        push @PX,$X[$i];
                        push @t,$X[$i];
                }
        }
        print join(" ",@t),"\n";
}

vel ★★★★★
()

мои знания крайне поверхностны в этой области, но какие-то флешбэки на тему, что для фильтрации используется bpf.

быстрый гуглинг привел в базу знаний красношапки https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/configuring_and_managing_networking/network-tracing-using-the-bpf-compiler-collection_configuring-and-managing-networking

в то же время, через трейс вона какой велосипед нашелся, но как уже @vel справедливо отмечал, можно умело навернуть хост, если потоки трафика велики

aol ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.