• Jak na to? > Linux > Firewall - díl 3. - práce s logy >
Firewall - díl 3. - práce s logy
V minulém díle jsem slíbil, že se podíváme na nějakou tu šikovnou utilitku, která nám zpříjemní (a hlavně
http://www.saunalahti.fi/~mikpija/unix/fire-waller/
Nebo vejděte na www.google.com a jako vyhledávaný řetězec zadejte firewaller, případně fire-waller.
Fire-waller je velice šikovný perlový skriptík (ano, budete potřebovat perl), který "vyzobe" ze souboru /var/log/messages zápisy našeho paketového filtru a "připraví" nám z nich html výstup v podobě souborufirewall.log
Co se perlu týče, já jsem použil (rpm -qa | grep perl) verzi
perl-5.6.0-12 (balíček rpm pro mou distribuci linuxu). Ale myslím, že firewaller není příliš vybíravý:-)
Jak jsem již uváděl minule, náš skript (firewall) "ukládá" své zápisy (logy) do souboru/var/log/messages. Zmíněný log může vypadat třeba takto:
Příklad 1
Apr 7 13:52:09 michal kernel: Packet log: input - ppp0 PROTO=17 195.250.128.34:53 212.20.104.66:1024 L=155 S=0x00 I=19019 F=0x0000 T=62 (#2)
Výpis ze skriptu firewaller bude vypadat takto a je značně přehlednější:
DATE INPUTCHAIN INTERFACE ACTION FROM HOST TO HOST TO PORT PROTOCOL
Apr 7 14:17:42 input ppp0 - 195.250.128.34 212.20.104.40 1024 udp
Z výpisu je patrné, že se jedná o "povolenou" odpověď nameserveru (zkontrolujte si adresu 195.250.128.34) na IP adresu našeho vzdáleného rozhraní (protějšek k ppp0). Zde se jednalo o "akci" našeho www prohlížeče, v daném případě Mozilla.
Příklad 2
Následující případ již tak nevinný není, patrně se jednalo o "vyhledávací proces" nějakého automatu. Podívejte se sami:
Jan 17 23:26:09 michal kernel: Packet log: input DENY ppp0 PROTO=17 63.98.99.130:137 212.20.97.6:137 L=78 S=0x00 I=50949 F=0x0000 T=109 (#24)
Jan 17 23:26:10 michal kernel: Packet log: input DENY ppp0 PROTO=17 63.98.99.130:137 212.20.97.6:137 L=78 S=0x00 I=50977 F=0x0000 T=109 (#24)
Jan 17 23:26:12 michal kernel: Packet log: input DENY ppp0 PROTO=17 63.98.99.130:137 212.20.97.6:137 L=78 S=0x00 I=51002 F=0x0000 T=109 (#24)
A tentýž zápis v podání skriptu firewaller:
DATE INPUTCHAIN INTERFACE ACTION FROM HOST TO HOST TO PORT PROTOCOL
Jan 17 23:26:09 input ppp0 DENY 63.98.99.130 212.20.97.6 netbios-ns udp
Jan 17 23:26:10 input ppp0 DENY 63.98.99.130 212.20.97.6 netbios-ns udp
Jan 17 23:26:12 input ppp0 DENY 63.98.99.130 212.20.97.6 netbios-ns udp
Příklad 3
Ani toto nebyla "korektní" komunikace:
Jan 21 13:33:57 michal kernel: Packet log: input - ppp0 PROTO=6 24.30.250.88:4272 212.20.104.194:8080 L=48 S=0x00 I=6146 F=0x4000 T=102 SYN (#1)
Jan 21 13:33:57 michal kernel: Packet log: input DENY ppp0 PROTO=6 24.30.250.88:4272 212.20.104.194:8080 L=48 S=0x00 I=6146 F=0x4000 T=102 SYN (#26)
Jan 21 13:34:00 michal kernel: Packet log: input - ppp0 PROTO=6 24.30.250.88:4272 212.20.104.194:8080 L=48 S=0x00 I=55042 F=0x4000 T=102 SYN (#1)
Jan 21 13:34:00 michal kernel: Packet log: input DENY ppp0 PROTO=6 24.30.250.88:4272 212.20.104.194:8080 L=48 S=0x00 I=55042 F=0x4000 T=102 SYN (#26)
A opět v podání skriptu firewaller:
DATE INPUTCHAIN INTERFACE ACTION FROM HOST TO HOST TO PORT PROTOCOL
Jan 21 13:33:57 input ppp0 - 24.30.250.88 212.20.104.194 webcache tcp
Jan 21 13:33:57 input ppp0 DENY 24.30.250.88 212.20.104.194 webcache tcp
Jan 21 13:34:00 input ppp0 - 24.30.250.88 212.20.104.194 webcache tcp
Jan 21 13:34:00 input ppp0 DENY 24.30.250.88 212.20.104.194 webcache tcp
Z výpisů vidíte, že příklad 1 je ukázkou korektní komunikace našeho www prohlížeče (odpověď od nameserveru) a příklady 2 a 3 lze naopak hodnotit jako pokusy "nenechavců", kteří se snažili náš stroj prohlížet zvenčí. Příklad 3 je vyložená drzost, útočník se zřejmě snažil na portu 8080 (webcache) nalézt cosi jako http démona z případu Brown Orifice http://www.brumleve.com/BrownOrifice/
Pokud se ptáte, proč jsou pakety z příkladu 2 logovány jen jednou a v příkladu 3 dvakrát, je to proto, že jsme to skriptu firewall sami nařídili. Příklad 2 je totiž pokus o přístup na privilegovaný port a to v době, kdy byl v našem skriptu řádek pro logování všech příchozích paketů vypnut. Lépe řečeno, ještě tam nebyl - z poznámek vidíte, že jsem jej přidal až 21.01.2001 a zápis je z 17.01.2001. Vidíte, k čemu jsou dobré poznámky?
/etc/rc.d/init.d/firewall
# LOGOVANI PRICHOZICH PAKETU
# Logovat vsechny prichozi SYN pakety
# (SYN plati pouze pro TCP)
#ipchains -A input -p TCP -i $EXTERNAL_INTERFACE -s ! $LOOPBACK_INTERFACE -d 0.0.0.0/0 -y -l
# Jen pro externi rozhrani
#
ipchains -A input -p TCP -s ! $LOOPBACK_INTERFACE -d 0.0.0.0/0 -y -l
# Pro vsechna rozhrani
#
# Moje uprava 21.01.2001
# logovat vsechny prichozi UDP pakety z externiho rozhrani
ipchains -A input -p UDP -i $EXTERNAL_INTERFACE -s ! $LOOPBACK_INTERFACE -d 0.0.0.0/0 –l
Soubor /var/log/messages
Ano, na ten se často zapomíná. V zásadě byste neměli zapomenout na dvě věci a to na rotace a na archivaci tohoto souboru. Třetí bod je vlastně "vylepšení". Totiž, tak jak /var/log/messages narůstá, bude muset skript firewaller analyzovat stále více a více dat a bude tedy "pomalejší". Tomu lze napomoci tak, že před zavoláním skriptu firewaller napřed vytvoříme jakýsi pomocný soubor (já mu říkám messages500) a do tohoto souboru zkopírujeme posledních 500 řádků ze souboru /var/log/messages. V praxi to může vypadat třeba následovně:
Napoprvé vytvořte "prázdný" soubor /firewall/messages500 třeba takto:
touch /firewall/messages500
A nyní náš vlastní pomocný skript, který zkopíruje oněch posledních 500 řádků.
skript /firewall/fwlogger
#!/bin/sh
tail -500 /var/log/messages >/firewall/messages500
/firewall/fwlog.pl
Perlový skript /firewall/fwlog.pl je vlastně náš firewaller.pl, který se ovšem místo do /var/log/messages "dívá" do /firewall/messages500
Nebojte se, tu "ruční" úpravu skriptu fire-waller.pl hravě zvládnete.
Rotace /var/log/messages
Prostě, buď používáte cron a ten v daných časových intervalech spouští příkaz logrotate s příslušnými parametry, nebo spusťte čas od času logrotate "ručně". Budete si muset napsat "ruční" parametrický soubor pro logrotate, který může vypadat třeba takto:
logrotate.rucne
compress
create
/var/log/messages {
rotate 5
weekly
# endscript
}
Příklad 4
Následující obrázek "mluví" patrně sám za sebe. Je to zcela zřejmý pokus o skenování portů na mém počítači (původce mi tak vlastně ušetřil čas s generováním něčeho podobného pro tento článek). Typuji, že jako portscanner byl použit buď nmap (www.insecure.org/nmap) nebo nessus (www.nessus.org). Mohu jen dodat: Hezký pokus "sousede".
Tentokrát jsem se podíval na freshmeat.net a našel jsem tento skript:
http://freshmeat.net/projects/plbackitup/?highlight=backup
Author:
Brian Tuchten <btuchten at xo dot com>
Homepage:
http://www.glandrake.com/scripts.html
Tar/GZ:
http://www.glandrake.com/scripts/plbackitup/plbackitup-0.7.0.tar.gz
Changelog:
http://www.glandrake.com/scripts/plbackitup/README.changelog
Dovolil jsem si celý výstup přetisknout, snad se na freshmeatu nebudou zlobit:-)
Opět se jedná o perlový skript, který spolupracuje s řadou dalších (konzolových)utilit.
Poněkud jsem mu upravil pár řádků (zkráceno)
Úpravy v skriptu plbackitup.pl
#use Net::FTP; Nepoužívám ftp pro zálohování
...
################
## Backup Vars
################
$backup_dir = "/diskhda3/linux.zaloha/backup/";
#$backup_dir = "/tmp/backup/";# path to dir to save your
# backed up files to (end with /)
...
###############
## Log Vars
################
$backup_log = "/diskhda3/linux.zaloha/backup/.plbackitup.log";
#$backup_log = "/tmp/backup/.plbackitup.log";
# path to the log file
Volám jej takto:
Skript /opt/plbackitup/plbackitup.run
#!/bin/sh
/opt/plbackitup/plbackitup-0.7.0/plbackitup.pl /diskhda3/linux.zaloha/backup/plbackitup_list
A konečně, soubor plbackitup_list vypadá takto:
U mne se nachází v adresáři /diskhda3/linux.zaloha/backup
/diskhda3/linux.zaloha/backup/plbackitup_list
#
# backuplist for plbackup.pl
#
# format is PartialFileName:/path:exclude exclude etc...
# if you don't want to exclude, leave blank
# add or delete lines, below are some examples
etc:/etc:
#home:/home:ftp
root:/root:
boot:/boot:
var-log:/var/log:
var-lib:/var/lib:
#texty:/windows/texty
Pokud jste příznivci X-Windows (já ano, a používám KDE), udělejte si na pracovní plochu simlink na skript /opt/plbackitup/plbackitup.run (nezapomněli jste mu nastavit executable atribut, že ne?) a dílo je dokonáno.
Umístěte na pracovní plochu i odkaz na skripty /firewall/fwlogger
a /firewall/firewall_log.html a situace bude rázem přehlednější.
Tak, to je pro dnešek všechno. Doufám, že se vám váš nový paketový filtr líbí (příjemné čtení logu, je to poučné). Nezapomeňte na rotaci /var/log/messages a nezapomeňte zálohovat.
Zálohu si čas od času vypalte na CD a za domácí úkol se podívejte třeba na tripwire (tahle utilitka se vám bude časem také hodit).
Popis tripwire najdete zde:
http://www.linux.cz/noviny/2001-04/clanek04.html
P.S. Málem bych zapomněl. Skript fwlogger spouštím po každém připojení na internet (před odpojením modemu) a následně prohlížím firewall_log.html. Skript plbackitup.pl spouštím tak dvakrát do týdne, soubor /var/log/messages rotuji tak jednou do měsíce a zálohy na CD pálím podle potřeby (ale alespoň jednou do měsíce).
Michal Vymazal
www.linuxservices.cz
Akce:
Otevřít verzi pro tisk