[ Pobierz całość w formacie PDF ]

38
Piotr Kopyt, Michał Kułakowski, Krzysztof Niemiec
# sprawdzamy czy skrypt wywołano z parametrem  n, jeśli tak ustawiamy
# wyświetlanie nazw zamiast adresów IP
if ($ARGV[0] eq "-n") {
$printbyNames = 1;
}
if (!(open(FILE,"$log_file"))){
print "\nERROR: Can't open file $log_file \n\n";
}else{
while ($row=) {
# parsujemy pojedyncza linijkÄ™ pliku
if ($row =~ m/([^ ]+) +([^ ]+) +(..):(..):(..).*MASQUERADE_LOG_(...).*SRC=(\S*)
DST=(\S*) .*SPT=(\S*) DPT=(\S*) .*/ ){
$day = $2;
$month = $1;
$hour = $3;
$min = $4;
$sec = $5;
$srcIP = $7;
$dstIP = $8;
$srcPORT = $9;
$dstPORT = $10;
$connType = $6;
if ($connType eq "SYN") {
# pakiet SYN : otwarcie połączenia
if ($connections{$srcIP}->{$dstIP}->{$dstPORT}) {
my $onePortConnections = $connections{$srcIP}->
{$dstIP}->
{$dstPORT};
foreach $conn (@$onePortConnections) {
my $del = delta( $conn->{"startDay"},
$conn->{"startMonth"},
$conn->{"startHour"},
$conn->{"startMin"},
$conn->{"startSec"},
$day,
$month,
$hour,
$min,
$sec);
if ($del
# jeśli znalezliśmy połączenie otwarte nie wcześniej
# niż 5 minut temu anulujemy jego zamknięcie
$conn->{"endDay"} = "-1";
$conn->{"endMonth"} = "-1";
$conn->{"endHour"} = "-1";
$conn->{"endMin"} = "-1";
$conn->{"endSec"} = "-1";
last;
} else {
# logujemy nowe połączenie
my $connection = {"startDay" => $day,
"startMonth" => $month,
"startHour" => $hour,
"startMin" => $min,
"startSec" => $sec,
"endDay" => "-1",
"endMonth" => "-1",
"endHour" => "-1",
"endMin" => "-1",
"endSec" => "-1"};
$len = ++$#{@{$connections{$srcIP}->
{$dstIP}->
{$dstPORT}}};
$connections{$srcIP}->
Plik: firewall Wersja: 0.1-82 z dnia 13.06.2002 Stron: 41 Długość: 307 kB
Copyright © 2002 Akademia Górniczo-Hutnicza Prowadzenie zajęć: mgr inż. BogusÅ‚aw Juza
39
Piotr Kopyt, Michał Kułakowski, Krzysztof Niemiec
{$dstIP}->
{$dstPORT}->[$len] = $connection;
last;
}
}
} else {
my $connection = {"startDay" => $day,
"startMonth" => $month,
"startHour" => $hour,
"startMin" => $min,
"startSec" => $sec,
"endDay" => "-1",
"endMonth" => "-1",
"endHour" => "-1",
"endMin" => "-1",
"endSec" => "-1"};
$connections{$srcIP}->{$dstIP}->{$dstPORT} = [$connection];
}
} else {
# pakiet FIN: połączenie jest zamykane
my $onePortConnections = $connections{$srcIP}->
{$dstIP}->
{$dstPORT};
# szukamy nie zamkniętego połączenia i zamykamy go
foreach $conn (@$onePortConnections) {
if ($conn->{"endDay"} == "-1") {
$conn->{"endDay"} = $day;
$conn->{"endMonth"} = $month;
$conn->{"endHour"} = $hour;
$conn->{"endMin"} = $min;
$conn->{"endSec"} = $sec;
}
}
}
}
}
print "\n\n";
printConnections;
close FILE;
}
Rezultat działania skryptu wywołanego z parametrem  n przedstawiono poniżej:
Connections:
local IP: 192.168.1.2
remote host: onet.hit.gemius.pl
remote port: 80
start: 26 May 02:30:51 end: 26 May 02:30:52
remote host: f7virt.onet.pl
remote port: 80
start: 26 May 02:30:51 end: 26 May 02:30:52
remote host: f1virt.onet.pl
remote port: 80
start: 26 May 02:30:51 end: -1 -1 -1:-1:-1
Wartości  1 w ostatniej linijce oznaczają że połączenie nie zostało jeszcze (w momencie uruchomienai
skryptu) zamknięte.
W skrypcie wykorzystany został mechanizm wyrażeń regularnych Perla. Wykorzystany został także
mechanizm tworzenia anonimowych hashy i tablic. Wszystkie połączenia trzymane są w tablicy hashującej
hashowanej po lokalnych numerach IP która zawiera odwołania do tablic hashujących zawierających
połączenia których dokonano z danego adresu IP. Tablice te z kolei hashowane są po numerach IP zdalnych
hostów z którymi się łączono a zawierają odwołania do tablic hasujących hashowanych po numerach portów
i zawierających odwołania do tablic zawierających połączenia do danego portu. Każda komórka takiej tabeli
zawiera odwołanie do hasha będącego  rekordem reprezentującym pojedyncze połączenie.
Plik: firewall Wersja: 0.1-82 z dnia 13.06.2002 Stron: 41 Długość: 307 kB
Copyright © 2002 Akademia Górniczo-Hutnicza Prowadzenie zajęć: mgr inż. BogusÅ‚aw Juza
40
Piotr Kopyt, Michał Kułakowski, Krzysztof Niemiec
7. Bibliografia
[1] Olaf Kirch, Terry Dawson, LINUX Podręcznik administratora sieci, O Reilly 2000
[2] Materiały dostępne na http://www.jtz.org.pl/tlumaczenia.html
[3] Materiały dostępne na http://www.netfilter.org
[4] Materiały dostępne na http://www.socks.nec.com
Plik: firewall Wersja: 0.1-82 z dnia 13.06.2002 Stron: 41 Długość: 307 kB
Copyright © 2002 Akademia Górniczo-Hutnicza Prowadzenie zajęć: mgr inż. BogusÅ‚aw Juza
41 [ Pobierz całość w formacie PDF ]
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • exclamation.htw.pl