poptop + squid in FreeBSD 6.2

24 11 2007

sick of love today!!! hmmm, skarang ngejunk dokumentasi lagi :D . selama 2 minggu ini, pikiran gw kaco banget. mikirin ini mikirin itu, yang paling pusing mikirin gimana caranya bikin VPN server yang mekanisme nya kek di kampus gw. hohohohoho……………., kebetulan, ni juga buat projject gw. mekanisme kerja nya kek gini : user harus login terlebih dahulu sebelum dia mo surfing ke internet. hohohohohoho…..

dalam pengujian kali ini, ada tiga buah Box yang digunakan, A. 1 buah Router untuk connect ke internet (2 lan card, bge0 dan fxp0), B. 1 buah PC sebagai Proxy server dan VPN server,dan C. 1 buah PC client. karna ga ada visio di PC saia, heheheh, gambar menyusul yaa……

internet ———————– fxp0-A-bge0—————B—————-C

oke, skarang kita mulai konfigurasi masing masing Box nya.

A. box A sebagai router, menggunakan FreeBSD. digunakan sebagai nat router. fxp0 memiliki IP public, 222.124.xxx.xxx . bge0 digunakan sebagai interface buat intranet. bge0 IP Address nya adalah 10.14.200.231. IP FORWARDING telah diaktifkan. Box A menggunakan PF sebagain untuk proses NAT nya. konfigurasi nat-nya adalah sebagai berikut (di /etc/pf.conf tambahkan baris di bawah ini):

nat on fxp0 proto {tcp, udp, icmp} from 10.14.200.245 to any -> fxp0

Box A udah ready….. next BoxB

B. setting Box B rada rada susah + bingung. untuk VPN servernya menggunakan poptop , proxy menggunakan squid . kedua paket tersebut di install dari ports. spesifikasi Box B adalah sebagai berikut:

  • terdiri dari 1 buah lan card : rl1. ip address nya 10.14.200.245 dan alias IP nya 172.16.1.1 lebih lengkapnya ada di file /etc/rc.conf :
      • defaultrouter=”10.14.200.231″
      • hostname=”dhieandz.stttelkom.ac.id”
      • ifconfig_rl1=”inet 10.14.200.245 netmask 255.255.255.0″
      • ifconfig_rl1_alias0=”inet 172.16.1.1 netmask 255.255.255.0″
      • static_routes=”jalancinta”
      • route_jalancinta=”-net 10.14.3.0/24 10.14.200.1
  • ipforwarding enabled, caranya tambahkan baris gateway_enable=”YES” di /etc/rc.conf
  • arp proxy enabled

proses intalasi dan konfigurasi nya adalah sebagai berikut :

poptop :

cd /usr/ports/net/poptop

make install clean (tungguin aja bentar.)

konfigurasi poptop akan dijelaskan sebagai berikut :

dalam file /usr/local/etc/pptpd.conf tambahkan baris berikut ini :

debug
nobsdcomp
proxyarp
localip 10.14.200.245
remoteip 172.16.1.2-172.16.1.254
pidfile /var/run/pptpd.pid
+chapms-v2
mppe-40
mppe-128
mppe-stateless
#tambahan
noipparam

dalam file /etc/ppp/ppp.conf tambahkan baris berikut :

loop:
set timeout 0
set log phase chat connect lcp ipcp command
set device localhost:pptp
set dial
set login
# Server (local) IP address, Range for Clients, and Netmask
# if you want to use NAT use private IP addresses
set ifaddr 172.16.1.1 172.16.2-172.16.1.254 255.255.255.255
add default HISADDR
set server /tmp/loop “” 0177

loop-in:
set timeout 0
set log phase lcp ipcp command
allow mode direct

pptp:
load loop
disable pap
# Authenticate against /etc/passwd
#enable passwdauth
disable ipv6cp
enable proxy
accept dns
enable MSChapV2
enable mppe
disable deflate pred1
deny deflate pred1
set dns 10.14.203.7
set device !/etc/ppp/secure

Pusing??? ehehehhehe……tenang, masih ada lagi. kali ini tambahkan baris di bawah ini di file /etc/ppp/ppp.secure :

#!/bin/sh
exec /usr/sbin/ppp -direct loop-in

nah, skarang tinggal bikin aja file buat nampung user ama password nya. file nya letakin di /etc/ppp/ppp.secret. contohnya :

#user #passoword
tunk wew

astro lala

raiden vani
sekarang tinggal tes poptopnya jalan ato kagak.cara ngetes nya tinggal jalanin aja pptpd di console kesayanganmu. biar lebih pasti cek aja pake socksat:

su-2.05b# sockstat |grep pptpd
root pptpd 2843 5 dgram -> /var/run/logpriv
root pptpd 2843 6 tcp4 *:1723 *:*

fyuuuuuuuuuuhhh………. poptopnya skarang dah jadi. skarang tinggal config squid nya aja

SQUID

proses installasinya lewat ports jugak. tinggal make install clean. enable delay pools.Yang paling penting dan harus di garis bawahi disini adalah Listen IP address nya. Settingan awalnya adalah sebagai berikut (sebelum ada poptopnya)

http_port 10.14.200.245:7777 ganti ke http_port 172.16.1.1:7777 (sesudah poptop nya jalan)

untuk konfigurasi squid lebih lanjut tidak akan di bahas disini. RTFM…………

Box C

hmmm……untuk konfigurasi clinet nya, gampang banget, tinggal set alamat VPN server ke 10.14.200.245 dengan user + password yang sesuai dengan di atas. waktu gw bikin ni VPN server, di client menggunakan windows XP Proffesional + linux + bsd, bisa semua. dan jangan lupa, ubah alamat proxy di web browser kamu menjadi 172.16.1.1:7777.

nah…. biar lebih yakin, skarang cek di sisi server ama di sisi client nya. ketika client men-dial up ke server. dibawah ini adalah output perintah ifconfig dari sisi server dan sisi client

server :

tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1398
inet 172.16.1.1 –> 172.16.1.53 netmask 0xffffffff
Opened by PID 2911
ppp0: flags=108010<POINTOPOINT,MULTICAST,NEEDSGIANT> mtu 1500
tun1: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1498
inet 172.16.1.1 –> 172.16.1.20 netmask 0xffffffff
Opened by PID 3020

client (BSD):

fxp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=8<VLAN_MTU>
inet 10.14.15.27 netmask 0xffffff00 broadcast 10.14.15.255
ether 00:11:11:01:e2:34
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
ng0: flags=88d1<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> mtu 1396
inet 172.16.1.20 –> 172.16.1.1 netmask 0xffffffff

neeh log squid nya :

1195729649.843 636 172.16.1.53 TCP_MISS/200 8149 GET http://www.detiksport.com/content_images/content/2007/10/19/75/Dudek-realmadrid.jpg – DIRECT/202.158.66.94 image/jpeg
1195729847.306 25770 172.16.1.53 TCP_MISS/200 683742 GET http://sb.google.com/safebrowsing/update? – DIRECT/216.239.51.91 text/html
1195730008.795 3164 172.16.1.53 TCP_MISS/200 414 POST http://cipitunk.wordpress.com/wp-admin/admin-ajax.php – DIRECT/66.135.48.251 text/html
1195730247.836 2186 172.16.1.53 TCP_MISS/200 414 POST http://cipitunk.wordpress.com/wp-admin/admin-ajax.php – DIRECT/66.135.48.253 text/html

hohoho……….selesai sudah, tapi… masih ada yang kurang. hmmm kalo di bikin program buat management user nya, keknya mantap tuh. ehuehueheuheue……

semoga dokumentasi tadi bisa bermanfaat buat temen temen smua… keep ngoprek..

thanks to : indofreebsd.or.id, kichung a.k.a boyfriend

sorry kalo bahasanya rada rada ngaco coz dibikin saat teler abis minum 3 botol heineken :(





NAT in FreeBSD with PF

7 11 2007

sebenernya iseng iseng doang sih nyobain NAT di jaringan STT + bandwidth management di FreeBSD 6.1. Dari pada di leb ga ada kerjaan yang jelas, ya dari situlah dapet ide bikin mini tutorial ini. NAT dan bandwidth management disini menggunakan PF (packet filter). Sebelum menggunakan PF sebaiknya kompile kernel anda terlebih dahulu. Caranya dapet dilihat di tutorial sebelumnya. Lengkap kok. skema jaringan bisa di liat di gambar.

seperti yang terlihat di gambar, terdapat BSD nat Machine yang berfungsi sebagai gateway untuk jaringan 192.168.0.0/24. terdapat 2 buah interface di BSD nat Machine, yaitu rl0 dan xl0. rl0 adalah interface ke jaringan luar, sedang xl0 adalah untuk jaringan private. IP address untuk interface rl0 adalah 10.14.3.7, sedang interface untuk xl0 adalah 192.168.0.1. Nah yang menjadi masalah sekarang, bagaimana cara client di jaringan 192.168.0.0/24 bisa mengakses jaringan internal STT ???? salah satu caranya adalah dengan menggunakan mekanisme NAT (network address translation). Untuk mekanisme NAT, silakan baca dokumen-dokumen di internet.

konfigurasi BSD nat Machine adalah sebagai berikut :

  1. pastikan dahulu ip forwarding telah di set 1. Caranya, buka file /etc/sysctl.conf, kemudian tambahkan baris berikut net.inet.ip.forwarding=1

2. setting IP address untuk kedua interface tersebut, caranya bisa pake ifconfig ato edit file /etc/rc.conf, kemudian tambahkan baris berikut :
ifconfig_rl0=”inet 10.14.3.7 netmask 255.255.255.0″
ifconfig_xl0=”inet 192.168.0.1 netmask 255.255.255.0″
defaultrouter=”10.14.3.1″

3. saat yang paling mengasyikan, yaitu setting nat dengan pf.Ini adalah konfigurasi nat dan bandwidth managementnya ( file /etc/pf.conf):

ext_if=”rl0″ #variable external interface
ext_addr=”10.14.3.7/32″ #IP address untuk ext_if
priv_addr=”192.168.0.0/24″ #subnet untuk private address

#antispoof for $ext_addr

set loginterface $ext_if #digunakan untuk mengumpulkan informasi pada interface rl0
set optimization aggressive #firewall akan menggunakan memory dan CPU time yang lebih sedikit. (llengkapnya baca manual PF)
scrub in on $ext_if all fragment reassemble (packet normalization)

altq on $ext_if priq bandwidth 10Mb queue {dns,ssh,www,chatting,other} ()
queue dns priority 14 priq(red)
queue ssh priority 13 priq(red)
queue www priority 12 priq(red)
queue chatting priority 11 priq(red)
queue other priority 1 priq(default)
#queue test_b priority 10

nat on $ext_if proto {tcp, udp, icmp} from $priv_addr to any -> $ext_addr

#pass in on xl0 all
block drop all
pass in on xl0 proto {tcp, udp, icmp} all
pass out on xl0 proto {tcp, udp,icmp} all
pass in on $ext_if proto udp from any to any port 53 keep state queue dns

pass out on $ext_if proto {tcp,udp} from any to any port 53 keep state queue dns
pass out on $ext_if proto tcp from any to any port { 80, 443 } keep state queue www
pass out on $ext_if proto tcp from any to any port {6666, 6667, 6668} keep state queue chatting
pass in on $ext_if proto tcp from any to any port 22 keep state queue ssh

penjelasan :
altq on $ext_if priq bandwidth 10Mb queue {dns,ssh,www,chatting,other} ()
queue dns priority 14 priq(red)
queue ssh priority 13 priq(red)
queue www priority 12 priq(red)
queue chatting priority 11 priq(red)
queue other priority 1 priq(default)
#queue test_b priority 10

syntax diatas menjelaskan tentang bandwidth management dengan menggunakan priq. sebenarnya ada beberapa algoritma queue management di FreeBSD, diantaranya CBQ(class-Based Queue), priq(priority), HFSC (Hierarchial Fair Service Curve). disini saya hanya menjelaskan menggunakan algoritma priq(priority queuing). Priority Queuing merupakan algoritma yang paling sederhana ketimbang CBQ maupun HFSC. Mekanismenya adalah sebagai berikut, kita memiliki alokasi bandwidth sebesar X Mb, dengan bandwidth sebesar X tsb, kita ingin membagi-bagi bandwidth tsb menjadi beberapa alokasi, misalkan untuk koneksi ssh, www, mail, chatting, dll. Nah, cara kerja PRIQ adalah dengan prioritas. Contohnya gini, koneksi ssh lebih penting daripada koneksi www, dan koneksi www lebih penting ketimbang koneksi mail. Intinya disini adalah prioritas koneksi (dapat dilihat di skrip diatas). suatu koneksi dengan prioritas yang lebih besar memiliki prioritas koneksi yang lebih tinggi pula. nilai priority mulai dari 0-14. semakin tinggi nilai priority-nya, semakin tinggi pula kemungkinan alokasi bandwidth untuk koneksi tersebut. Dari syntax firewall diatas dapat dilihat bahwa koneksi DNS memiliki prioritas paling tinggi, sedang koneksi other memiliki prioritas bandwidth paling rendah. Nah setelah kita bikin bandwidth managementnya, tinggal kita panggil aja lewat script dibawah ini:
pass out on $ext_if proto {tcp,udp} from any to any port 53 keep state queue dns
pass out on $ext_if proto tcp from any to any port { 80, 443 } keep state queue www
pass out on $ext_if proto tcp from any to any port {6666, 6667, 6668} keep state queue chatting
pass in on $ext_if proto tcp from any to any port 22 keep state queue ssh

yang ditulis tebal diatas, digunakan untuk memanggil queue yang telah dibuat.

setelah membuat bandwidth management, maka tinggal kita bikin NAT nya. untuk penjelasan NAT, silakan baca manuual di internet. settingnya gini :

nat on $ext_if proto {tcp, udp, icmp} from $priv_addr to any -> $ext_addr

dari syntax diatas, dapat diartikan bahwa semua koneksi yang lewat interface $ext_if (rl0) yang berasal dari $priv_addr(192.168.0.0/24) yang menuju ke any (bisa ke semua tujuan), akan diubah menjadi 10.14.3.7 . Gampangnya, ketika suatu host A yg memiliki IP address 192.168.0.23 yang mengakses misalkan tele.stttelkom.ac.id, maka, di tele.stttelkom.ac.id akan mengenali host A memiliki IP address 10.14.3.7. begitu prinsip NAT.

Untuk skrip yang dibawahnya, saya rasa anda sudah mengerti maksudnya. nah untuk menjalankan firewall tsb jalankan perintah berikut (jangan lupa, setiap kali menjalankan script baru flush dulu firewall nya):

  • pfctl -F all (untuk nge flush firewall)
  • pfctl -f /etc/pf.conf

setelah firewall nya jalan, anda dapat melihat settingan yang sedang berjalan, caranya adalah :

  • pfctl -s all |more

output dari rule /etc/pf.conf adalah sebagai berikut :
TRANSLATION RULES:
nat on rl0 inet proto tcp from 192.168.0.0/24 to any -> 10.14.3.7
nat on rl0 inet proto udp from 192.168.0.0/24 to any -> 10.14.3.7
nat on rl0 inet proto icmp from 192.168.0.0/24 to any -> 10.14.3.7

FILTER RULES:
scrub in on rl0 all fragment reassemble
block drop all
pass in on xl0 proto tcp all
pass in on xl0 proto udp all
pass in on xl0 proto icmp all
pass out on xl0 proto tcp all
pass out on xl0 proto udp all
pass out on xl0 proto icmp all
pass in on rl0 proto udp from any to any port = domain keep state queue dns
pass out on rl0 proto tcp from any to any port = domain keep state queue dns
pass out on rl0 proto udp from any to any port = domain keep state queue dns
pass out on rl0 proto tcp from any to any port = http keep state queue www
pass out on rl0 proto tcp from any to any port = https keep state queue www
pass out on rl0 proto tcp from any to any port = 6666 keep state queue chatting
pass out on rl0 proto tcp from any to any port = ircd keep state queue chatting
pass out on rl0 proto tcp from any to any port = 6668 keep state queue chatting
pass in on rl0 proto tcp from any to any port = ssh keep state queue ssh

ALTQ:
queue dns priority 14 priq( red )
queue ssh priority 13 priq( red )
queue www priority 12 priq( red )
queue chatting priority 11 priq( red )
queue other priq( default )

STATES:
self tcp 10.14.3.7:22 <- 10.14.5.3:45374 ESTABLISHED:ESTABLISHED
self tcp 192.168.0.3:56849 -> 10.14.3.7:60543 -> 10.14.200.231:6667 ESTABLISHED:ESTABLISHED

sebenernya outputnya banyak banget sihh, tapi saya coba mengambil yang penting penting aja.

mungkin cukup sekian dulu sedikit informasi mengenai PF dan bandwidth dengan PF. thanks to temon yang udah banyak ngajarin saya……….

semoga bermanfaat buat temen temen semua

NB : skema jaringannya :

skema_awal_1.jpg





SNMP + MRTG in FreeBSD 6.2

5 11 2007

huaaaaaaaaaahhhhhhhhhh akhirnya jadi juga configure mrtg di FreeBSD 6.2. skarang giliran bikin dokumentasinyah hehehehehheheehh………

sebenernya sih gampang gampang aja configure mrtg, tapi gara gara snmp nya ngadat :( alias ga mau jawab snmp request (gw lu apa istilahnya), ya jadinya gitu dech…. lamaaaaa!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

ga usah basa basi lagi…….. nih step by step configuring mrtg di freebsd 6.2. studi kasusnya kek gini :

install net-snmp, mrtg dari ports. web server (tanpa php) compile manual (./configure, make, make install)…

langkah langkahnya :

1. web server : compile manual. keknya udah pernah di bahas di blog sebelumnya, baca aja di artikel sebelumnya ato yang di FS. gampang pokoknya.

2. net-snmp : disini pake net-snmp versi 5.. cara install nya gampang

  • cd /usr/ports/net-mgnt/net-snmp/
  • make install clean (tinggal jalanin printah itu aja, dia bakalan nyari paketnya sendiri, thats why BSD so sexy :D )
  • buat file snmpd.conf. file tersebut di taroh di /usr/local/share/snmp/. konfigurasinya adalah sebagai berikut (very basic snmpd setting):
    # sec.name source community
    com2sec local localhost public
    com2sec mylan 10.14.200.0/24 public####
    # Second, map the security names into group names:
    # sec.model sec.name
    group Writer v1 local
    group Writer v2c local
    group Writer usm local
    group Reader v1 mylan
    group Reader v2c mylan
    group Reader usm mylan####
    # Third, create a view for us to let the groups have rights to:
    # incl/excl subtree mask
    view all included .1 80

    ####
    # Finally, grant the 2 groups access to the 1 view with different
    # write permissions:
    # context sec.model sec.level match read write notif
    access Reader “” any noauth exact all none none
    access Writer “” any noauth exact all all none

    syslocation in_her_heart

    syscontact cipitunk <cipitunk@students.stttelkom.ac.id>

  • jalanin snmp daemon dan snmptrapd nya :
    • snmp : snmpd -c /usr/local/share/snmpd/snmpd.conf
    • snmptrapd : /usr/local/etc/rc.d/snmptrapd start
  • tes aja snmp nya pake snmpwalk :
    • snmpwalk -v1 -c public localhost system (outputnya kurang lebih begini) : SNMPv2-MIB::sysDescr.0 = STRING: FreeBSD dhieandz.stttelkom.ac.id 6.2-RELEASE FreeBSD 6.2-RELEASE #1: Fri Oct 19 15:49:37 WIT 2007 indah@indah.stttelkom.ac.id:/usr/src/sys/i386/compile/sekuit i386
      SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.8
      DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (2180491) 6:03:24.91
      SNMPv2-MIB::sysContact.0 = STRING: cipitunk <cipitunk@students.stttelkom.ac.id>
      SNMPv2-MIB::sysName.0 = STRING: dhieandz.stttelkom.ac.id
      SNMPv2-MIB::sysLocation.0 = STRING: tes
      SNMPv2-MIB::sysServices.0 = INTEGER: 72
      SNMPv2-MIB::sysORLastChange.0 = Timeticks: (1) 0:00:00.01
      SNMPv2-MIB::sysORID.1 = OID: IF-MIB::ifMIB
      SNMPv2-MIB::sysORID.2 = OID: SNMPv2-MIB::snmpMIB
      SNMPv2-MIB::sysORID.3 = OID: TCP-MIB::tcpMIB
      SNMPv2-MIB::sysORID.4 = OID: IP-MIB::ip
      SNMPv2-MIB::sysORID.5 = OID: UDP-MIB::udpMIB
      SNMPv2-MIB::sysORID.6 = OID: SNMP-VIEW-BASED-ACM-MIB::vacmBasicGroup (ini hanya output sebagian aja. lebi lengkap, coba aja sendiri yeee :D )
  • fyuuuuuuuuuhhhh, seelesai jugak configure snmpnya :) . smaleman configuring kek gituan supaya keluar output kek gituuuuu. emang dasarnya gw yang geblek sih :D . lanjooot laahh…………….

3. mrtg. nginstall mrtg gampang jugak, neeh cara installnya :

  • cd /usr/ports/net-mgmt/mrtg/
  • make install clean (lagiiiiiiiiii, gampang kan??? heheheheheh)
  • cfgmaker –output=/root/mrtg-nic.cfg public@10.14.200.245 (outputnya boleh ditaro dimana ajah.)
  • edit file /root/mrtg-nic.cfg . cari baris yang ada tulisannya # WordDir : ……… ubah menjadi WorkDir: /usr/server/htdocs/mrtg (lo sesuain aja ama htdocs server kamu. jangan lupa create dulu directory mrtg – nya )
  • mrtg /root/mrtg-nic.cfg
  • pastiin web server lo nyala, biar bisa liat output nya
  • biar update teros mrtg nya, bikin aja cron buat ngeksekusi file /root/mrtg-nic.cfg. caranya kek gini
    • crontab -e
    • isiin baris berikut :
      • 0,5,10,15,20,25,30,35,40,45,50,55 * * * * /usr/local/bin/mrtg /usr/local/etc/mrtg/mrtg.cfg (satu bariss)
    • save deh ……….

huuuuuuuuhhhh….. selesai jugakkk!!! tinggal lo bikin aja file buat ngejalanin smua service diatas waktu boot. caranya??? cari tau dengan konsole mu………

cukup segitu dulu dokumentasinya, moga aja bermanfaat buat aku dan kamu

/me masi newbie…………………………………