15 Januari 2012

PF Dilema Rules

Saya mempunyai PF rules spt ini di /etc/pf.conf:
porthttp = "80"           # HTTP Port
portsquid = "7080"        # Squid Port
ifint0 = "rl0"            # Ethernet ke LAN
rdr pass on $ifint0 proto tcp from 192.168.0.0/24 to any port $porthttp -> $ipproxy port $portsquid
Rules diatas berguna untuk Redirection (RDR)/Transparent Proxy. Lalu saya mempunyai rules spt ini:
ipwebmodem = "{ 10.0.0.1/32, 10.1.0.1/32 }"
block  in     quick on $ifint0 proto tcp from 192.168.0.0/24 to $ipwebmodem port = 80
Hasil: block rules ke 2 tidak akan bekerja alias tidak akan keblock. Jika rules diatas dituker tentu tidak akan bisa karena Statement Order tidak valid. Cara ini bisa diakali dengan menambahkan Exception (Pengecualian) menggunakan table unproxy pada RDR rules, sehingga rules menjadi:
table  { 0.0.0.0/0, !10.0.0.0/30, !10.1.0.0/30 }
porthttp = "80"              # HTTP Port
portsquid = "7080"           # Squid Port
ifint0 = "rl0"               # Ethernet ke LAN

rdr pass on $ifint0 proto tcp from 192.168.0.0/24 to  port $porthttp -> $ipproxy port $portsquid

ipwebmodem = "{ 10.0.0.1/32, 10.1.0.1/32 }"
block in quick on $ifint0 proto tcp from 192.168.0.0/24 to $ipwebmodem port = 80
Terus terang dengan sistem seperti ini lumayan agak repot juga, jika ingin ngeblock site tertentu harus meng-unproxy dulu site tersebut. Lebih fleksible menggunakan IPFW untuk kepentingan spt ini, saya belum menemukan cara yg simple dengan menggunakan PF.

08 Januari 2012

Malas memahami ipfw(8)

Setelah otak atik, bahkan sampe switch untuk redirect packet untuk proxy-squid via packet filter OpenBSD, akhirnya ketemu juga cara yg lebih efesien/efektif, intinya "Terlalu malas untuk memahami man page ipfw(8)" :-(. Berikut salah satu study-casenya:
${fwcmd} add 30 fwd ${ipproxy},${portproxy} tcp from ${ipclproxy} to any dst-port ${porthttp} in via ${ifint0}
${fwcmd} add 52 pipe 2 ip from any to ${ipclient} via ${ifint0}
${fwcmd} add 53 pipe 3 ip from ${ipclient} to any via ${ifint0}
${fwcmd} pipe 2 config bw ${bwcldown} mask dst-ip 0xffffffff
${fwcmd} pipe 3 config bw ${bwclup} mask src-ip 0xffffffff
Kendala dengan ruleset spt diatas adalah traffic control loss artinya traffic yg lewat transparent proxy gak kena limit. Jika saya tuker ruleset diatas menjadi:
${fwcmd} add 52 pipe 2 ip from any to ${ipclient} via ${ifint0}
${fwcmd} add 53 pipe 3 ip from ${ipclient} to any via ${ifint0}
${fwcmd} pipe 2 config bw ${bwcldown} mask dst-ip 0xffffffff
${fwcmd} pipe 3 config bw ${bwclup} mask src-ip 0xffffffff
${fwcmd} add 70 fwd ${ipproxy},${portproxy} tcp from ${ipclproxy} to any dst-port ${porthttp} in via ${ifint0}
Kendalanya adalah traffic yg lewat kena limit tetapi transparent proxynya tidak jalan. Nah, dilematis memang jika running dalam satu masin yang sama. Cara yg ampuh adalah ngeset sysctl variable net.inet.ip.fw.one_pass=0, dengan ini artinya "paket yg masuk melalui dummynet/pipe
akan diterukan ke rule berikutnya.", jadi tetep rule dummynet harus sebelom rule transparent proxy ( Ruleset no 2 ). ( Big Thank To: Ian Smith ).

07 Januari 2012

Sting - Fields Of Gold

Satu lagu yang cukup `dingin` di telinga saya ketika diputar. "Sting - Fields Of Gold", salah satu lagu favourit saya, jaman SMA dapet lagu ini hasil rekaman dari temen alias dibajak :D. Kebetulan iseng-iseng dapet Lyrics-nya:

You'll remember me when the west wind moves upon the fields of barley
You'll forget the sun in his jealous sky as we walk in fields of gold
So she took her love for to gaze awhile upon the fields of barley
In his arms she fell as her hair came down among the fields of gold


Will you stay with me, will you be my love among the fields of barley?
We'll forget the sun in his jealous sky as we lie in fields of gold
See the west wind move like a lover so upon the fields of barley.
Feel her body rise when you kiss her mouth among the fields of gold


I never made promises lightly and there have been some that I've broken
But I swear in the days still left we'll walk in fields of gold
We'll walk in fields of gold


Many years have passed since those summer days among the fields of barley
See the children run as the sun goes down among the fields of gold
You'll remember me when the west wind moves upon the fields of barley
You can tell the sun in his jealous sky when we walked in fields of gold
When we walked in fields of gold, when we walked in fields of gold

06 Januari 2012

PC game VS PS game

Salah satu yang mencolok dalam hal kebiasaan dan hasrat untuk bermain game di Willsz.net - Cyber Internet Station adalah PC game selalu diidentikan dengan PS game, akibatnya request game-game baru di Warnet yang saya kelola selalu berpatokan dengan game yang ada di PS. Itu wajar karena mereka berpengalaman hanya di game PS, sedangkan di game basis PC mereka dalam tahan penyesuaian.

Maka dari itu saya coba mencarikan game-game yang ada di PS agar bisa diimplementasikan di PC, ada beberapa game yang saya hindari menggunakan emulator PS, jadi saya cari saja game yang benar-benar compatible dengan PC.

Diantaranya karena disini populer Winning Eleven, GTA San Andreas, mungkin sementara segitu dulu. Nanti saya tambah lagi biar gak pada bosan :)

05 Januari 2012

DNS dan MRTG

Kalo lagi melamun kadang kebiasaan saya demen monitoring ini itu :-). Sekarang saya coba nambahin DNS request dan successful query. Pertama-tama ada perbedaan generate log stats untuk beberapa versi dari Bind. Disini saya menggunakan versi BIND 9.8.1-P1.
Di named.conf bagian options pastikan ada entry spt ini:
statistics-file "/var/stats/named.stats";
Setelah itu bikin sedikit script sederhana kurang lebih seperti ini:
#!/bin/sh
STATSTMP="/tmp/dnsstats"
STATSFILE="/var/named/var/stats/named.stats"
OLDQ=`grep QUERY $STATSFILE | awk '{print $1}'`
OLDS=`grep successful $STATSFILE | awk '{print $1}'`
rm -f /var/named/var/stats/named.stats
rndc stats
NEWQ=`grep QUERY $STATSFILE | awk '{print $1}'`
NEWS=`grep successful $STATSFILE | awk '{print $1}'`
DIFFQ=$(($NEWQ-$OLDQ))
DIFFS=$(($NEWS-$OLDS))
echo $DIFFQ
echo $DIFFS
Lalu, save file tersebut dan chmod 755. Bikin entry di file CFG MRTG anda kurang lebih spt ini:
Target[dnsstat]: `/usr/local/bin/dnsstat`
Title[dnsstat]: DNS Query/Success Answer
Colours[dnsstat]: DODGERBLUE#1E90FF,BLUE#0000FF,DODGERBLUE#1E90FF,BLUE#0000FF
RouterUptime[dnsstat]: local@localhost
MaxBytes[dnsstat]: 800
AbsMax[dnsstat]: 800
YTics[dnsstat]: 10
PageTop[dnsstat]: DNS Query/Success Answer
YLegend[dnsstat]: Query/Answer
ShortLegend[dnsstat]: Query/5 Min
LegendI[dnsstat]: Query
LegendO[dnsstat]: Answer
Options[dnsstat]: gauge, growright, avgpeak, integer, absolute, pngdate

Silahkan dicoba - Semoga berhasil :)

02 Januari 2012

Hitung packets IPFW untuk TCP/UDP

Dulu pernah terpikir dibenak saya untuk menghitung packet yang lewat IPFW dan seperti biasa hasilnya saya phasing ke MRTG. Tapi kendalanya packet selalu bertambah jumlahnya sesuai dengan output rules dari IPFW; dengan ini grafik yang dihasilnya bersifat naik terus sampe ketika mesin reboot barulah ia kembali ke nol. Jadi, perhitungan rata-rata packet yang masuk/keluar lewat router per-satuan waktu tidak didapatkan alias tidak dinamis. Barulah setelah saya ingat beberapa teknik lama pemograman yaitu dengan variable dummy dengan mencatat packet awal/akhir, lalu dihitung selisihnya per-satuan waktu, hasil grafik terlihat lebih manusiawi :-). Ini adalah satu contoh sederhana scripting yang saya buat:
#!/bin/sh
# TmpFile
TEMPFILE="/tmp/ipfw.tu"
# TCP/UDP grab to file
OLDT1=`ipfw -a list | grep 00300 >  $TEMPFILE`
OLDT2=`ipfw -a list | grep 00301 >> $TEMPFILE`
OLDT3=`ipfw -a list | grep 00302 >> $TEMPFILE`
OLDT4=`ipfw -a list | grep 00303 >> $TEMPFILE`
OLDU1=`ipfw -a list | grep 00400 >> $TEMPFILE`
OLDU2=`ipfw -a list | grep 00401 >> $TEMPFILE`
OLDU3=`ipfw -a list | grep 00402 >> $TEMPFILE`
OLDU4=`ipfw -a list | grep 00403 >> $TEMPFILE`

# Fetch old packets
OLDTI1=`grep 00300 $TEMPFILE | awk '{print $2}'`
OLDTI2=`grep 00301 $TEMPFILE | awk '{print $2}'`
OLDTI3=`grep 00302 $TEMPFILE | awk '{print $2}'`
OLDTI4=`grep 00303 $TEMPFILE | awk '{print $2}'`
OLDTO1=`grep 00300 $TEMPFILE | awk '{print $3}'`
OLDTO2=`grep 00301 $TEMPFILE | awk '{print $3}'`
OLDTO3=`grep 00302 $TEMPFILE | awk '{print $3}'`
OLDTO4=`grep 00303 $TEMPFILE | awk '{print $3}'`
OLDUI1=`grep 00400 $TEMPFILE | awk '{print $2}'`
OLDUI2=`grep 00401 $TEMPFILE | awk '{print $2}'`
OLDUI3=`grep 00402 $TEMPFILE | awk '{print $2}'`
OLDUI4=`grep 00403 $TEMPFILE | awk '{print $2}'`
OLDUO1=`grep 00400 $TEMPFILE | awk '{print $3}'`
OLDUO2=`grep 00401 $TEMPFILE | awk '{print $3}'`
OLDUO3=`grep 00402 $TEMPFILE | awk '{print $3}'`
OLDUO4=`grep 00403 $TEMPFILE | awk '{print $3}'`

# Clean TmpFile
rm -f $TEMPFILE

# Summ TCP old packets
SOLDTIO=$(($OLDTI1+$OLDTI2+$OLDTI3+$OLDTI4 \
+$OLDTO1+$OLDTO2+$OLDTO3+$OLDTO4))

# Summ UDP old packets
SOLDUIO=$(($OLDUI1+$OLDUI2+$OLDUI3+$OLDUI4 \
+$OLDUO1+$OLDUO2+$OLDUO3+$OLDUO4))

# Fetch TCP curr packets
NEWTI1=`ipfw -a list | grep 00300 | awk '{print $2}'`
NEWTI2=`ipfw -a list | grep 00301 | awk '{print $2}'`
NEWTI3=`ipfw -a list | grep 00302 | awk '{print $2}'`
NEWTI4=`ipfw -a list | grep 00303 | awk '{print $2}'`
NEWTO1=`ipfw -a list | grep 00300 | awk '{print $3}'`
NEWTO2=`ipfw -a list | grep 00301 | awk '{print $3}'`
NEWTO3=`ipfw -a list | grep 00302 | awk '{print $3}'`
NEWTO4=`ipfw -a list | grep 00303 | awk '{print $3}'`

# Summ TCP curr packets
SNEWTIO=$(($NEWTI1+$NEWTI2+$NEWTI3+$NEWTI4 \
+$NEWTO1+$NEWTO2+$NEWTO3+$NEWTO4))

# Fetch UDP curr packets
NEWUI1=`ipfw -a list | grep 00400 | awk '{print $2}'`
NEWUI2=`ipfw -a list | grep 00401 | awk '{print $2}'`
NEWUI3=`ipfw -a list | grep 00402 | awk '{print $2}'`
NEWUI4=`ipfw -a list | grep 00403 | awk '{print $2}'`
NEWUO1=`ipfw -a list | grep 00400 | awk '{print $3}'`
NEWUO2=`ipfw -a list | grep 00401 | awk '{print $3}'`
NEWUO3=`ipfw -a list | grep 00402 | awk '{print $3}'`
NEWUO4=`ipfw -a list | grep 00403 | awk '{print $3}'`

# Summ UDP curr packets
SNEWUIO=$(($NEWUI1+$NEWUI2+$NEWUI3+$NEWUI4 \
+$NEWUO1+$NEWUO2+$NEWUO3+$NEWUO4))

# Diff old/curr packets
DIFFTIO=$(($SNEWTIO-$SOLDTIO))
DIFFUIO=$(($SNEWUIO-$SOLDUIO))

# Prob all result
echo $DIFFTIO
echo $DIFFUIO
Selanjutnya hasilnya tinggal ditampilkan ke MRTG atau RRDTool. Dibawah ini saya coba menggunakan MRTG:
Target[ipfw.tu]: `/usr/local/bin/ipfw.tu`
Title[ipfw.tu]: IPFW TCP/UDP Packets Summary
Colours[ipfw.tu]: DODGERBLUE#1E90FF,BLUE#0000FF,DODGERBLUE#1E90FF,BLUE#0000FF
RouterUptime[ipfw.tu]: local@localhost
MaxBytes[ipfw.tu]: 30000
AbsMax[ipfw.tu]: 30000
YTics[ipfw.tu]: 10
PageTop[ipfw.tu]: IPFW TCP/UDP Packets Summary
YLegend[ipfw.tu]: Packets/5 Min
ShortLegend[ipfw.tu]:
LegendI[ipfw.tu]: TCP
LegendO[ipfw.tu]: UDP
Legend1[ipfw.tu]:
Legend2[ipfw.tu]:
Options[ipfw.tu]: gauge, growright, avgpeak, integer, absolute, pngdate


Selamat mencoba :-)