On Fri, Sep 30, 2011 at 07:35:36PM +0700, Victor Sudakov wrote:

> Коллеги,
> 
> ifpw как известно весьма низкоуровневая вещь. Никто не писал макрос
> или скрипт, который бы сгенерил правила ipfw по типу как в Cisco PIX:
> назначил интерфейсам уровни безопасности, и трафик может идти с
> интерфейса с большим security level на интерфейс с меньшим security
> level, но не наоборот (точнее, наоборот - только возвратный трафик).
> 
> Я что-то попытался продумать такую конструкцию с keep-state хотя бы
> для 3 интерфейсов  с разными уровнями (inside 100, outside 0, dmz 50)
> и у меня ум за разум зашёл. А если еще адреса транслировать надо,
> вообще труба.

#!/usr/bin/perl
print "Input: ifname sec_level\n";
while(<>){
 @F = split;
 push @{$Sec{$F[1]}}, $F[0];
}
@seclist = sort {$b <=> $a} keys %Sec;
print "check-state\n";
foreach $f (@seclist) {
 @fl = sort @{$Sec{$f}};
 foreach $t (@seclist) {
  next if $t > $f;
  if($f == $t) {
    for($i=0; $i <= $#fl; $i++){
     for($j=0; $j <= $#fl; $j++) {
      next if $fl[$i] eq $fl[$j];
      print "permit ip from any to any recv $fl[$i] xmit $fl[$j]\n";
     }
    }
    next;
  }
  @tl = sort @{$Sec{$t}};
  foreach $from (@fl) {
   foreach (@tl) {
    print "permit ip from any to any recv $from xmit $_ keep-state\n";
   }
  }
 }
}

Ответить