defeating spammers (networks admin’s view)

24 08 2008

wakakakkakakakakakak….. serem nikok judulnyaaaa…… gaya gayaan doang sih sebenernya. biar keliatan keren gituuuu…. hahahhahaha.. :D padahal gw ga bisa apa apa….. kkkkkk. yo wis lah, gpp, sedikit sharing sharing ilmu yg udah gw dapet dari pengalaman gw kmaren. gini, sekitar semingguan kmaren, gw dapet pengalaman menarik. ngurusin email server di kantor gw yg rada rese’. sebenernya, anti spamm buat mail server di kantor gw udah jalan, gw mikir aja, kalo di level aplikasi bisa di blok, knapa ga main di layer network ajah buat blocking spam nya…. ehueheueueheuehue, iseng iseng ajah sih sebenernyaa.

oke, dapet ide gitu, gw cobain aja di mail server kantor. wkwkwkwkwkwk, hasilnya ternyata mengecewakan Y_Y. oh iya, hampir lupa, gw disini pake spamd yaa jgn lupa SPAMD. percobaan pertama spamd di kantor gagal. huhuhuhuu…. penasaran jugak. gw baru inget, ternyata gw masi punya akses root di salah satu server di kampus….(maklomm, adminnya ngilang ga tau kmana, ga pernah diurusin tu server). ya udah, gw cobain aja tu spamd di server kampus gw yg kebetulan ada fasilitas mail servernya. sedikit informasi, mail server kantor make Openbsd-x.x dan di kampus make freebsd-x.x.

kalo di freebsd, kita harus install dulu itu yg namanya spamd.caranya :

cd /usr/ports/mail/spamd
make install clean
di openbsd, udah jadi bawaan system operasinya. udah selesai nginstall?? oks, configuring the spamd it self. gw bahasnya di freebsd aja yaahh (yg udah jalan). sebelum kita konfig spamdnya, mount terlebih dulu file sistem berikut :

fdescfs 1.0K 1.0K 0B 100% /dev/fd

kalo udah, kita setting aja spamd nya. file konfig di freebsd ada di /usr/local/etc/spamd/spamd.conf. konfigurasi nya adalah sbb :

all:\
:uatraps:nixspam:china:korea:

# University of Alberta greytrap hits
# Addresses stay in it for 24 hours from time they misbehave.
uatraps:\
:black:\
:msg=”Your address %A has sent mail to a ualberta.ca spamtrap\n\
within the last 24 hours”:\
:method=http:\
:file=www.openbsd.org/spamd/traplist.gz

# Nixspam recent sources list.
# Mirrored from http://www.heise.de/ix/nixspam
nixspam:\
:black:\
:msg=”Your address %A is in the nixspam list\n\
See http://www.heise.de/ix/nixspam/dnsbl_en/ for details”:\
:method=http:\
:file=www.openbsd.org/spamd/nixspam.gz

# Mirrored from http://www.okean.com/chinacidr.txt
china:\
:black:\
:msg=”SPAM. Your address %A appears to be from China\n\
See http://www.okean.com/asianspamblocks.html for more details”:\
:method=http:\
:file=www.openbsd.org/spamd/chinacidr.txt.gz:

# Mirrored from http://www.okean.com/koreacidr.txt
korea:\
:black:\
:msg=”SPAM. Your address %A appears to be from Korea\n\
See http://www.okean.com/asianspamblocks.html for more details”:\
:method=http:\
:file=www.openbsd.org/spamd/koreacidr.txt.gz:

bingung ama konfigurasinya??? silakan baca penjelasannya di sini : http://www.openbsd.org/cgi-bin/man.cgi?query=spamd.conf&apropos=0&sektion=0&manpath=OpenBSD+Current&arch=i386&format=html

udah??? tinggal setting PF nya. kkkkkkkkkk, PF lagi PF lagi,hahahhaa bosen yah ama PF? buat rule sbb (defaut accept untuk contoh file /etc/pf.conf dibawah ini) :

table <spamd-white> persist

no rdr inet proto tcp from <spamd-white> to any port smtp

rdr pass inet proto tcp from any to any port 25 -> 127.0.0.1 port spamd

penjelasan rule :

table <spamd-white> persist : buat tabel spamd-white untuk menampung white-list address mail server. address yg tertampung di tabel spamd-white, akan langsung masuk ke port mail server (25).

no rdr inet proto tcp from <spamd-white> to any port smtp : ddress yg tertampung di tabel spamd-white, akan langsung masuk ke port mail server (25), tidak di redirect ke port spamd nya.

rdr pass inet proto tcp from any to any port 25 -> 127.0.0.1 port spamd : semua host yang ingin mengirim mail ke mail server gw, dia akan di redirect ke localhost port 8025 (portnya spamd).

udah selesai??? tinggal save, reload pf, + jalanin spamd nya. liat log nya nih (lebi asik ketimbang liat bokep, kkkkkkkkk) :

WHITE|69.147.83.53|||1219267326|1219269449|1222379850|4|0
WHITE|66.163.168.171|||1219278086|1219279746|1222390196|5|0
GREY|74.212.58.171|clsm-74-212-58-171-pppoe.dsl.clsm.epix.net|<hedley@atomic.com>|<fajar@xxxxxxxxxxx>|1219597616|1219612016|1219612016|1|0
GREY|82.10.176.183|cpc3-walt1-0-0-cust182.popl.cable.ntl.com|<Halina-iinifs@alloyd.com>|<phie@xxxxxxxxxxxx>|1219599136|1219613536|1219613536|1|0
GREY|74.65.70.142|cpe-74-65-70-142.stny.res.rr.com|<.reuef1986@3n1motorsports.com>|<bc6a4755@xxxxxxxxxxxxx>|1219600253|1219614653|1219614653|1|0
GREY|69.44.231.10|69-44-231-10.imsday.com|<htamansa@lort.com>|<johan@xxxxxxxxxxxxx>|1219600710|1219615110|1219615110|1|0
GREY|72.14.204.231|qb-out-0506.google.com|<frontiers.agency10@gmail.com>|<riezza@xxxxxxxxxxxxx>|1219604583|1219618983|1219618983|1|0
GREY|85.130.99.80|unknown.interbgc.com|<Harold-’sdeath@menoldinc.com>|<h_winarto.21s@xxxxxxxxxxxxx>|1219606565|1219620965|1219620965|1|0
GREY|201.89.241.206|201-89-241-206.ctame700.dsl.brasiltelecom.net.br|<nrobredn1967@ty.ca>|<xxx@xxxxxxxxxxxxx>|1219609635|1219624035|1219624035|1|0
GREY|80.195.224.12|80-195-224-12.cable.ubr01.shef.blueyonder.co.uk|<ignisses1988@countryhut.com>|<mill@xxxxxxxxxxxxxxxxxx>|1219610378|1219624778|1219624778|1|0
GREY|190.253.189.108|[190.253.189.108]|<mtedelen_1950@slantfin.com>|<tomrf@xxxxxxxxxxxxxx>|1219610934|1219625334|1219625334|1|0
WHITE|222.124.18.72|||1219434760|1219437269|1222547705|5|0
WHITE|66.163.168.172|||1219460851|1219462456|1222572907|5|0
GREY|78.161.122.18|[78.161.122.18]|<9mcclellan@exxell.com>|<novan@xxxxxxxxxxxxxxxx>|1219597572|1219611972|1219611972|1|0
GREY|99.232.64.249|CPE0014bfe9ea40-CM000a739a8c22.cpe.net.cable.rogers.com|<Ferencne-backfram@borroughs.com>|<rizal@xxxxxxxxxxxxxxxxx>|1219599510|1219613910|1219613910|1|0
GREY|79.120.196.196|[79.120.196.197]|<4richy5b5b@ms35.hinet.net>|<cakep@xxxxxxxxxxxx>|1219600151|1219614551|1219614551|1|0

penjelasan :

WHITE : host host yang boleh ngirim email (langsung masuk ke port 25) tanpa lewat spamd.

GREY : host host tersebut akan di lewatkan ke spamd. di spamd nya akan di proses apakah dia akan di mark sbg BlackList-mail server atooo White-list Mail server.

GREY|79.120.196.196|[79.120.196.197]|<4richy5b5b@ms35.hinet.net>|<ca

kep@xxxxxxxxxxxx>|1219600151|1219614551|1219614551|1|0 (sebenernya sih nyambung itu log, tapi di wordpressnya kepotong jadi cuman kek gini GREY|79.120.196.196|[79.120.196.197]|<4richy5b5b@ms35.hinet.net>|<ca)

nih dikit penjelasannya

79.120.196.196|[79.120.196.197] : host yg nyoba buat ngirim mail

<4richy5b5b@ms35.hinet.net> : email sender

<cakep@xxxxxxxxxxxx> : alamat email penerima

1219600151 : tupple (host yg di greylist disebut tuple) pertama kali konek

1219614551 : kapan tupple tersebut di whitelist

1219614551 : kapan tupple tersebut akan di remove dari database (spamdb)

1: berapa kali host mencoba mengirim email ketika di greylist

0 : berapa kali host tersebut di deliver ke real mailserver (not talk to spamd-nya)

kalo pengen liat output diatas, tinggal jalanin aja perintah spamdb

table spamd-white di pf akan terisi otomatis ama spamd + pf nya, ketika mail-mail yg di tag sbg GREY berubah ke WHITE list. nih outputnya kalo ga percaya :

[begok]# pfctl -t spamd-white -Ts | grep 69.147.83
No ALTQ support in kernel
ALTQ related functions disabled
69.147.83.53
dari pengalaman gw setelah jalanin spamd, spam mail di mail server gw bisa berkurang drastis……

asik kan gabungin application security + network security nya?? hehehhehe, monggo monggo di cobain. selamat mencoba yaaahh :) , kalo ada error, mohon di benerin yaahh, gw jg masih belajar

regards……… ^_^





simplify your firewall rules

31 07 2008

jika kamu seorang network administrator, pasti sudah sering banget dengerin yang namanya firewall, sering create firewall rules. sebenernya gampang gampang susah kalo kita bikin rule firewall, asal kita tau konsep nya, mana yang akan di blok, mana yang akan di allow, lewat interface mana aja paket tersebut lewat. nah kalo kita udah ngerti konsep nya, dijamin cepet bikin rule nya. sambil merem pun bisa, kkkkkkkk. oke, basa basi nya cukup. di sini, firewall yg gw gunain adalah CISCO PIX PF (Packet Filter) :p . cukup PF ajah :D , ga ada duit buat beli embeded firewall. contoh kasus kek gini. gw kasih rule PF kek gini

pass in on em0 from <clientA> to any keep state

pass out on em1 from <clientA> to any keep state

pass in on em1 from any to <clientA> keep state

contoh rule nya adalah kek gitu. gw nyimpen alamat client di table clientA. kalo ada yang belum tau tentang table di PF, silakan baca manual PF. oke, kalo rule nya cuman tiga buah, ga masalah. nah, skarang coba bayanin kalo jumlah table client hingga Z (<clientZ>). pasti bikin pusing kepala dong, kudu nulis lengkap rule nya dari mulai pass in/on ampe keep state nya. buang buang waktu. nah, gimana cara nyederhanainnya?? gampang, tinggal pake packet tagging.

packet tagging?? artinya adalah, proses penandaan paket dengan ID (identitas tertentu) dimana ID tersebut dapat digunakan kembali untuk rule lain. ilustrasi gampangnya adalah kek gini, kita jalan jalan ke ancol, waktu masuk, kita di kasi cap, or stempel. nah, dengan stempel itu, kita bisa bebas keluar masuk anjungan wahana wisata sesuka kita. nah, ilustrasi tersebut kurang lebih sama ama packet tagging di PF. paket yang udah di kasi TAG (di tandai), dapat di gunakan kembali tanpa kita harus membuat rule lengkapnya. jelas kan?? nah gimana caranya kita bikin TAG di PF dari contoh rule di atas?. liat rule di bawah ini :

pass in on em0 from <clientA> to any tag boleh keep state #1

pass out on em1 tagged boleh keep state #2

pass in on em1 tagged boleh keep state #3

coba liat baris rule yang di BOLD. penjelasannya adalah sebagai berikut :

  1. rule no satu gw kasi ID boleh. buat nambahin id, tinggal tambahin baris tag id_packet ke rule PF kamu. oke, kita udah berhasil bikin ID untuk menandai sebuah paket. gimana caranya buat manggil ID tadi? liat penjelasan nomor 2
  2. kita ngga perlu nulis lengkap kek yang di contoh pertama, kita tinggal memanggil id paket tersebut dengan cara nambahin tagged id_packet ke rule PF kamu. ga usah nulis rule lengkap from <clientA> to any cukup tulis tambahin tagged id_packet di rule no. 2
  3. penjelasan sama dengan no. 2

untuk menangani kasus jumlah client yang banyak, tinggal di bedain ajah tag (ID) name packet nya, trus panggil tag (ID) tadi pake tagged id_packet. contohnya kek gini:

pass in on em0 from <clientA> to any tag boleh keep state

pass out on em1 tagged boleh keep state

pass in on em1 tagged boleh keep state

pass in on em0 from <clientB> to any tag boleh_aja keep state

pass out on em1 tagged boleh_aja keep state

pass in on em1 tagged boleh_aja keep state

enak kan?? hehehehehhehhehehe. packet tagging enak banget waktu digunain buat bikin rule firewall yang kompleks. contohnya, router kamu punya 4 interface, trus client itu hanya di ijinkan keluar masuk lewat interface tertentu. hihhihihihi, ga kebayang kalo ga ada packet tagging. dijamin puyeng……..

sekian dulu tulisan sampah dari gw, hihihihi, tulisan ga ada gunanya :D . semoga bisa sedikit membantu temen temen buat belajar PF. saran dan cacian ditunggu yaaa

iptables??? sorry gw udah lupa :p





Simple BGP Routing Filter

26 07 2008

hihihihihihihi, akhirnya posting lagi blog ga mutu ini :p . BGP??? wahhhh……. apaan tu? silakan cari artikel tentang BGP, gw ga bakalan ngejelasin tentang cara kerjanya :p . nah, gimana implementasi nya??? 

itu gambar diatas adalah contoh dari network gw. ada 3 buah router: IIX Router, Int’l Router, dan Our Router. IIX ROuter merupakan BGP router yang tugasnya memberikan prefix IIX ke router kita. Int’l Router sama kaya’ IIX router tapi message yang dibawa adalah prefix internasional. Our Router tugasnya adalah meneruskan prefix prefix yang tadi untuk di teruskan ke client (bgp peering client). nah.. dalam gambar diatas ada kasus kek gini, gimana ya caranya buat filter prefix supaya prefix yg berasal dari IIX router tidak masuk ke Int’l router, dan juga sebaliknya. skarang ambil conto kasus kek gini, dari Int’l router, dia mengadvertise 250.000 prefix ke our router, IIX router juga mengadvertise 2000 prefix ke Our router. our router akan mengadvertise kembali prrefix-prefix yang diterima dari Int’l router ke IIX router, dan juga sebaliknya. waahhh, kebayang dong load yang terjadi di IIX router kalo dia nerima prefix prefix dari IIX router. kalo kamu udah pernah config bgp routing, pasti pada tau, betapa ngerinya prefix prefix yang bakal di advertise ke router kita. Pengalaman gw, router gw menerima 250.000 prefix lebih dari internet. nah, disini gw cuman bahas, gimana filter prefix biar prefix tadi ga salah masuk. oke, sekarang kita mulai konfig. gw disini make CISCO openbgpd :p, maklum ga punya duit buat beli cisco :D . IIX router dan Int’l router gw anggap sudah melakukan peering ke Our Router. IIX router AS-Numbernya 12345 dan Int’l Router AS-Numbernya 23456. oks, mulai konfigurasi. konfigurasinya adalah sebagai berikut (Our Router) :

IIX   =”10.20.30.40″
inter   =”50.60.70.4″

AS 2222 #AS Number router kita
router-id 50.60.70.5
listen on 127.0.0.1

fib-update yes
nexthop qualify via bgp
log updates
network 50.60.70.96/27  #ini network yang akan di advertise ke IIX router dan Int’l Router
# neighbors and peers

group “internasional” {
remote-as       23456
announce        all
announce        capabilities yes
softreconfig    in yes
multihop        2
neighbor $core1

{
descr   “INT”

}

}

group “IIX-Peering” {

remote-as      12345

announce       all

neighbor $iix { descr “IIX-only” }

}

deny from any
allow from any inet prefixlen 8 – 24
# do not accept a default route
deny from any prefix 0.0.0.0/0
deny to {group IIX-Peering} peer-as {38458, 17826} #Penting neeh
# filter bogus networks
deny from any prefix 10.0.0.0/8 prefixlen >= 8
deny from any prefix 172.16.0.0/12 prefixlen >= 12
deny from any prefix 192.168.0.0/16 prefixlen >= 16
deny from any prefix 169.254.0.0/16 prefixlen >= 16
deny from any prefix 192.0.2.0/24 prefixlen >= 24
deny from any prefix 224.0.0.0/4 prefixlen >= 4
deny from any prefix 240.0.0.0/4 prefixlen >= 4

oke. konfigurasinya cukup kek diatas.trus jalanin bgpd . deny to {group IIX-Peering} peer-as {38458, 17826} dapetnya dari mana?????? liat neh, gw kasi dikit output dari prefix yg di advertise ke Our Router dari Int’l Router :

flags destination         gateway               lpref   med aspath origin
I*    8.3.19.0/24         202.149.67.121     100     0    17826 4788 3356 26769 i
I*    8.3.26.0/23         202.149.67.121     100     0    17826 4788 3356 26769 i
I*    8.3.30.0/24         202.149.67.121     100     0    17826 4788 10026 15133 15133 i
I*    8.3.37.0/24         202.149.67.121     100     0    17826 4788 3356 21640 i
I*    8.3.38.0/23         202.149.67.121     100     0    17826 4788 5511 3549 16420 i
I*    8.3.46.0/24         202.149.67.121     100     0    17826 4788 3356 21640 i
I*    8.3.52.0/23         202.149.67.121     100     0    17826 4788 1239 26759 i
I*    8.3.160.0/24        202.149.67.121    100     0    17826 4788 3356 36524 i
I*    8.3.162.0/24        202.149.67.121    100     0    17826 4788 5511 3549 17058 i
I*    8.3.208.0/24        202.149.67.121    100     0    17826 4788 701 36431 i
I*    8.3.210.0/24        202.149.67.121    100     0    17826 4788 27524 i
I*    8.3.211.0/24        202.149.67.121    100     0    17826 4788 3356 40415 i
I*    8.3.213.0/24        202.149.67.121    100     0    17826 4788 4739 i
I*    8.3.214.0/23        202.149.67.121    100     0    17826 4788 3356 23286 i
I*    8.3.218.0/23        202.149.67.121    100     0    17826 4788 3356 26769 i

itu sebagian output dari prefix yang di advertise ke Our Router dari Int’l Router. kalo gw copiin semua outputnya semua…… hahhahaha muntah muntah ntar :D . oke……. gw filternya ngambil Leftmost AS (17826). liat deh output di atas. deny to {group IIX-Peering} peer-as {38458, 17826} artinya, router kita (Our Router) nggak bakalan meng-advertise prefix prefix yang memiliki LeftMost AS 17826 dan 38458 ke group IIX-Peering. kalo pengen ngeliat prefix yang di advertise ke router kita, pake perintah ini : bgpctl sh rib neigh INT in

gampang kan?? untuk filter yang lebih lanjut, sabar yaahhh, gw juga masih belajar. maklum masi newbie alias CUPU banget.

dedicated to iud ^_^





blocking ssh bruteforce attack with PF

19 07 2008

wahhhhh, keknya keren juga yah judulnya…… hueheuehuehueu, ngeblok ssh brute force pakek PF. kurang lebih begitulah judulnya kalo pake bahasa indonesah. hmmmmmm, coba deh kamu cek file auth.log kamu, banyak yang nyoba buat akses ssh ke server kamu…… authentication failed!!!! yaa, kurang lebih begitulah bunyinya. bosen kan dihadepin ama yg gituan??? dari pengalaman gw, banyak banget usaha ngakses ssh (lebi tepatnya brute force ssh password) ke server gw di kampus + router-router gw di kantor. cukup nyebelin emang, tapi ya mau gimana lagi, namanya juga internet, unsecured places :D . nah, gimana sih cara buat ngurangin usaha, lebi tepatnya nge-block usaha brute force ssh password tadi? caranya gampang, cukup pake PF, firewall bawaan dari OpenBSD + FreeBSD (lo kudu compile kernel dulu di FreeBSD). lha trus, gimana caranya??? ga usa basa basi, langsung aja di mulai

pertama buka file /etc/pf.conf, trus buat rule kek gini :


int_if = "bce0" #1
table <bruteforce> persist #2
block quick from <bruteforce> #3
pass in on $int_if proto tcp from any to $int_if:0 port ssh keep state (max-src-conn 10, max-src-conn-rate 5/3, overload <bruteforce> flush global) #4

Penjelasan :

#1. buat variable untuk interface bce0. bce0 di definisian sbg int_if

#2. buat tabel bruteforce di PF nya. knapa persist?? heheeheheehe, cari tau sendiri yaah artinyaa :p

#3. block semua paket yang berasal dari alamat-alamat yang terdefinisi di tabel bruteforce

#4. nah, ini yang penting. ijinkan paket TCP masuk ke interface bce0 dimana paket tersebut berasal dari mana aja, tujuan paket tersebut ke alamat IP address interface bce0, dengan aturan sebagai berikut :

  • max-src-conn 10 : jumlah maksimum koneksi dari satu host ke server ssh kita adalah 10.
  • max-src-conn-rate 5/3 : rasio jumlah koneksi dari satu host per satuan waktu, dalam hal ini, satu host hanya diperbolehkan melakukan 5 koneksi per 3 detik.
  • overload <bruteforce> flush global : jika tidak memenuhi kedua persyaratan di atas, maka IP address tersebut akan di catat di tabel bruteforce, dan kemudian akan di blok oleh rule no #3 (block quick from <bruteforce> )

nah, kalo udah, save rule-nya trus jalanin PF nya. tungguin deh, beberapa saat, tergantung seberapa banyak serangan. nah, kalo pengen liat ip-address mana aja yang di blok, jalanin perintah ini :

pfctl -t bruteforce -Tshow

gampang kan??? heheehehehhe, hampir lupa, parameter max-src-conn + max-src-conn-rate tadi tidak mengikat, tergantung pilihanmu, mo yg paranoid or biasa biasa aja. selamat mencoba yaaaaaaa :)