firewall.log dosyasından örnek satır:
Jan 8 01:53:53 192.168.1.1 RAS: src="81.213.17.202:4747"
dst="XXX.XXX.XX.XXX:445"
msg="Firewall default policy: TCP (W to W/PRESTIGE)" note="ACCESS BLOCK"
devID="EF63AF"
cat="Access Control"
Yapacağım işlem, bu satırlardan IP adreslerini çıkartarak bu adreslerin Türk kökenli ve dinamik olduğunu kontrol etmek ve daha önce karalisteye alınmamış ise karalisteye almak.
/var/lib/rbldns/karaliste_ekle diye bir betik oluşturalım:
#!/bin/bash
grep "ACCESS BLOCK" /var/log/firewall.log.0 | \
awk '{ if ($6 ~ /^src.*/ ) { \
srcip=$6; gsub(/src\=\"/,"",srcip); \
gsub(/\:.*/,"",srcip); \
gsub(/\"/,"",srcip); \
split(srcip,A,/\./); \
printf( \
"%s\t%s.%s.%s.%s.tr.countries.nerd.dk\
\t%s.%s.%s.%s.dul.dnsbl.sorbs.net\
\t%s.%s.%s.%s.rbl.zzz\n",\
srcip, \
A[4], A[3], A[2], A[1], \
A[4], A[3], A[2], A[1], \
A[4], A[3], A[2], A[1]) } }' \
| sort | uniq > /tmp/tmp.rbl
tarih=`date +%F`
while read srcip tr_test dul_test rbl_test
do
rbl_result=`dig +short $rbl_test`
if [[ $rbl_result != '127.0.0.2' ]] ; then
tr_result=`dig +short $tr_test`
if [[ -n $tr_result ]] ; then
dul_result=`dig -p 530 $dul_test`
if [[ -n $dul_result ]] ; then
printf "%s :127.0.0.2: Izinsiz erisim yapan TR dinamik IP -- %s\n" \
$srcip $tarih >> /var/lib/rbldns/rbl.zzz
fi
fi
fi
done < /tmp/tmp.rbl
rm -f /tmp/tmp.rbl
Bu betik, yukarıda örneğini verdiğim günlük kaydından IP adresini alıyor. Yukarıdaki örneğe uygular isek, srcip değişkeni 81.213.17.202 olacak. Daha sonra, IP kontrolünü yapabilmek için bu adresi A dizisine alıyor ve ters çevirerek /tmp/tmp.rbl dosyasına şu satırı ekliyor:
81.213.17.202 202.17.213.81.tr.countries.nerd.dk 202.17.213.81.dul.dnsbl.sorbs.net 202.17.213.81.rbl.zzz
Daha sonra, betik, /tmp/tmp.rbl dosyasını işleyerek bu karalisteleri kontrol ediyor ve eğer Türk kökenli ise, dinamik IP ise ve mevcut karalistede yok ise, karaliste dosyasına ekliyor.
Her hafta firewall.log döndürülürken karalisteye ekleme
yapılması makul olur.
/etc/logrotate.d/firewall dosyasını aşağıdaki şekilde
değiştirelim:
/var/log/firewall.log {
weekly
missingok
rotate 52
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
/var/lib/rbldns/karaliste_ekle
endscript
}