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";
}
}
}
}