Tampilkan postingan dengan label Linux. Tampilkan semua postingan
Tampilkan postingan dengan label Linux. Tampilkan semua postingan

15 Mei 2017

Instalasi SSL Gratis Dari Let's Encrypt

Beberapa waktu lalu saya sempat membahasa tentang pemasangan fitur SSL dengan metode Self-Signing. Sekarang, saya coba menggunakan Let's Encrypt. Caranya cukup sederhana karena semua dikerjakan secara auto.
• Download atau copy-paste acme.sh di https://github.com/Neilpang/acme.sh.
• Copykan di root folder, usahakan menggunakan root akses karena kita perlu merestart daemon nginx webserver dan menempatkan sertifikat di /etc/ssl/certs. Buat folder .acme.sh di root folder dan download acme.sh script.
# mkdir .acme.sh
# cd .acme.sh && fetch https://raw.githubusercontent.com/Neilpang/acme.sh/master/acme.sh
# chmod 700 acme.sh
Kita mulai mengkonfigurasi dan menginstal sertifikatnya. Saya asumsikan anda sudah mempunyai sebuah domain yang valid dan terinstall webserver.
# cd .acme.sh
# ./acme.sh --issue -d domainanda.com -w /path/to/root/webserver/document
[Mon May 15 19:28:12 WIB 2017] Registering account
[Mon May 15 19:28:15 WIB 2017] Registered
[Mon May 15 19:28:16 WIB 2017] Update success.
[Mon May 15 19:28:16 WIB 2017] ACCOUNT_THUMBPRINT='MINkdh3CiCitr1h4YesQSO2azn7bs3NIFwJOLbTSpug'
[Mon May 15 19:28:16 WIB 2017] Creating domain key
[Mon May 15 19:28:17 WIB 2017] Single domain='domainanda.com'
[Mon May 15 19:28:17 WIB 2017] Getting domain auth token for each domain
[Mon May 15 19:28:17 WIB 2017] Getting webroot for domain='domainanda.com'
[Mon May 15 19:28:17 WIB 2017] Getting new-authz for domain='domainanda.com'
[Mon May 15 19:28:19 WIB 2017] The new-authz request is ok.
[Mon May 15 19:28:19 WIB 2017] Verifying:domainanda.com
[Mon May 15 19:28:24 WIB 2017] Success
[Mon May 15 19:28:24 WIB 2017] Verify finished, start to sign.
[Mon May 15 19:28:26 WIB 2017] Cert success.
-----BEGIN CERTIFICATE-----
MIIE/DCCA+SgAwIBAgISBAb5KVD8Z+F2hCdzvVfK0cp6MA0GCSqGSIb3DQEBCwUA
MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xNzA1MTUxMTI4MDBaFw0x
NzA4MTMxMTI4MDBaMBcxFTATBgNVBAMTDHduLnNseWlwLm5ldDCCASIwDQYJKoZI
hvcNAQEBBQADggEPADCCAQoCggEBALtbiMysoSdf+7VfuiL+6vc5qscn6DPd2j2f
YbWVIki3PdsJUmr66/oj3wRXRMbzflhfVgLfnFvj9mUb+44pIChRSc5R4AboqIFo
vngilTgDAjtbpceCmeTj3DNpa1sJN9BVmrfRazLBgzg0dPQ6QJpixtKcRiwbOJsx
k5XM7SOeq1hFpNef3NPc6wyIhcv+h+e1Id8WJPWGaJgNq+QnC7AnnIRRcjuaCZsl
SKeenGBUcpHKNUKOY7AADZ2hHR74Eg7IGcbOt+LrnljE/613BXi2U8GYbL28LoIq
YrNFAxjqoKPXZtfWuIHYYxfAbiejGhnmzPPKlKsZ2rRTAREZJUMCAwEAAaOCAg0w
ggIJMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUH
AwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUbBO4xZOZeedw10ZZYg083IAcnqgw
HwYDVR0jBBgwFoAUqEpqYwR93brm0Tm3pkVl7/Oo7KEwcAYIKwYBBQUHAQEEZDBi
MC8GCCsGAQUFBzABhiNodHRwOi8vb2NzcC5pbnQteDMubGV0c2VuY3J5cHQub3Jn
LzAvBggrBgEFBQcwAoYjaHR0cDovL2NlcnQuaW50LXgzLmxldHNlbmNyeXB0Lm9y
Zy8wFwYDVR0RBBAwDoIMd24uc2x5aXAubmV0MIH+BgNVHSAEgfYwgfMwCAYGZ4EM
AQIBMIHmBgsrBgEEAYLfEwEBATCB1jAmBggrBgEFBQcCARYaaHR0cDovL2Nwcy5s
ZXRzZW5jcnlwdC5vcmcwgasGCCsGAQUFBwICMIGeDIGbVGhpcyBDZXJ0aWZpY2F0
ZSBtYXkgb25seSBiZSByZWxpZWQgdXBvbiBieSBSZWx5aW5nIFBhcnRpZXMgYW5k
IG9ubHkgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBDZXJ0aWZpY2F0ZSBQb2xpY3kg
Zm91bmQgYXQgaHR0cHM6Ly9sZXRzZW5jcnlwdC5vcmcvcmVwb3NpdG9yeS8wDQYJ
KoZIhvcNAQELBQADggEBAJad1Nm5x62oMmMNy2zsCe6bckLQaW5MhqXzez13Uz2A
DnaUTgpYC6+AIJmCaPjNkozSOcb8KDXPx2Mmdt16ZB0wjgBqcMJfcrm9EjTXafQZ
SlIXQYQuB0hsoJIXWQacAXjNlFnRUSEk9DSCBy7Xnq55qbFPrrqj3L51qjlGE6zE
s+Fbt0BIKpybBy0JGltMJtAQaVkFgYnAXj1mvKSnf3FYwBySNBciumyKDr9cSlkQ
CyjduyR7HB3GgeIlndYvPnkT0x5PEdWoiqh8ACMAWqJyfwEXWGOTxBNdtMdbGV37
zDyK/nDHeWd2LP3dXxCxaSxrhFHD0hnRv+krOzHguXU=
-----END CERTIFICATE-----
[Mon May 15 19:28:26 WIB 2017] Your cert is in  /root/.acme.sh/domainanda.com/domainanda.com.cer
[Mon May 15 19:28:26 WIB 2017] Your cert key is in  /root/.acme.sh/domainanda.com/domainanda.com.key
[Mon May 15 19:28:26 WIB 2017] The intermediate CA cert is in  /root/.acme.sh/domainanda.com/ca.cer
[Mon May 15 19:28:26 WIB 2017] And the full chain certs is there:  /root/.acme.sh/domainanda.com/fullchain.cer
# ls -laF
drwxr-xr-x   4 root  wheel     512 May 15 19:28:39 2017 .
drwxr-xr-x  12 root  wheel    1024 May 15 19:25:13 2017 ..
-rw-r--r--   1 root  wheel     196 May 15 19:28:26 2017 account.conf
-rwxr-xr-x   1 root  wheel  142712 May  3 21:04:02 2017 acme.sh
drwxr-xr-x   3 root  wheel     512 May 15 19:28:09 2017 ca
-rw-r--r--   1 root  wheel     448 May 15 19:28:26 2017 http.header
drwxr-xr-x   2 root  wheel     512 May 15 19:28:26 2017 domainanda.com
Selanjutkan kita lakukan proses instalasi sertifikatnya.
# cd .acme.sh && ./acme.sh --install-cert -d domainanda.com --key-file /etc/ssl/certs/domainanda.com.key --fullchain-file /etc/ssl/certs/domainanda.com.pem
# vim /usr/local/etc/nginx/nginx.conf
server {
    listen  domainanda.com:443 ssl default_server;
    root   /usr/local/www/data;
    add_header X-Powered-By "domainanda.com";
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-XSS-Protection "1; mode=block" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header Referrer-Policy no-referrer;
    add_header Strict-Transport-Security "max-age=31536000;" always;
    add_header Content-Security-Policy "default-src 'self'; script-src 'self' domainanda.com";
    ssl_certificate      /etc/ssl/certs/domainanda.com.pem;
    ssl_certificate_key  /etc/ssl/certs/domainanda.com.key;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    ssl_ecdh_curve secp384r1;
    ssl_session_tickets off;
    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;
    ssl_prefer_server_ciphers  on;
    ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
}
# /usr/local/etc/rc.d/nginx restart
Karena sertifikat ini berlaku maksimal cuma 3 bulan, maka kita harus merenew sebelom expired:
# cd /root/.acme.sh/ && ./acme.sh --renew -d domainanda.com --force
# cd /root/.acme.sh/ && ./acme.sh --install-cert -d domainanda.com --key-file /etc/ssl/certs/domainanda.com.key --fullchain-file /etc/ssl/certs/domainanda.com.pem
# /usr/local/etc/rc.d/nginx restart
Lakukan secara simultan dengan menggunakan crontab(5) setiap 2 bulan sekali:
# crontab -l
0       1       1       */2     *       cd /root/.acme.sh/ && ./acme.sh --renew -d domainanda.com --force && ./acme.sh --install-cert -d domainanda.com --key-file /etc/ssl/certs/domainanda.com.key --fullchain-file /etc/ssl/certs/domainanda.com.pem --reloadcmd "/usr/local/etc/rc.d/nginx reload"

05 Juni 2015

Transparent Proxy Squid SSL/HTTPS Support

Setelah mentok gara² certificate error akhirnya bisa sukses juga menggunakan transparent proxy untuk protocol HTTPS. Saya coba jelaskan secara garis besar dan singkat yah :-).

1. Update koleksi ports di FreeBSD untuk mendapatkan versi terbaru dan terupdate:
# portsnap fetch
# portsnap extract
# portsnap update
atau via SVN
# svn checkout svn://svn.freebsd.org/ports/head /usr/ports
2. Install squid seri versi 3.x yang sudah medukung SSLBump:
# cd /usr/ports/www/squid
# make menu
Pastikan opsi untuk SSL dan ssl_crtd support dicentang!
# make install clean
3. Konfigurasi post-install untuk direktori, permission etc:
# mkdir /usr/local/squid/ssl_db (Untuk penyimpanan cert-cache)
# chown -R squid:squid /usr/local/squid/ssl_db
# mkdir /usr/local/etc/squid/certs (Untuk penyimpanan cert self-signing)
# chown -R squid:squid /usr/local/etc/squid/certs
4. Pembuatan ceritificate self-signing yang akan digunakan oleh squid:
# cd /usr/local/etc/squid/certs
# openssl req -new -newkey rsa:1024 -days 1365 -nodes -x509 -keyout squid.pem -out squid.pem
# openssl x509 -in squid.pem -outform DER -out squid.der (DER Format)
# openssl x509 -in squid.pem -outform DER -out squid.crt (CRT Format)
5. Konfigurasi squid.conf:
# grep ssl /usr/local/etc/squid/squid.conf        
https_port yyy.yyy.yyy.yyy:xxxx transparent ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/usr/local/etc/squid/certs/squid.pem 
ssl_bump splice localhost        
ssl_bump server-first all        
ssl_bump bump all        
sslproxy_cert_error deny all        
sslproxy_flags DONT_VERIFY_PEER        
sslcrtd_program /usr/local/libexec/squid/ssl_crtd -s /usr/local/squid/ssl_db -M 4MB    
sslcrtd_children 32 startup=5 idle=1     

# /usr/local/libexec/squid/ssl_crtd -c -s /usr/local/etc/squid/certs/ssl_db  (Initialized SSLdb)     
# /usr/local/etc/rc.d/squid start
6. Redirect semua traffic port HTTP/HTTPS ke port squid:
# vim /etc/rc.firewall
${fwcmd} add 10 fwd ${ipproxy},${porthttpsproxy} tcp from ${ipclient} to any dst-port ${porthttps} in via ${ifint0}
ipproxy="ip_proxy_server"
porthttpsproxy="port_squid_for_https"   // See squid.conf.manual for detail
ipclient="ip_client"                    // For example: 192.168.0.0/24
porthttps="443"                         // HTTPS port default
ifint0="LAN_eth"                        // Ethernet connected to LAN directly
Atau jika menggunakan packet filter OpenBSD:
# vim /etc/pf.conf
rdr pass on $ifint0 proto tcp from $ipclient to any port 443 -> $ipproxy port $porthttpsproxy
7. Import sertifikat squid.der (Windows aja) atau squid.crt (untuk format Android/Windows):
C:\> certmgr.msc (Simpan di bagian CA certificate, klik2 aja deh sendiri...)
8. DONE!

22 April 2014

Self Signing SSL Certificate

Banyak bertebaran tentang tutorial ini di Google, Inc tapi saya ingin merangkumnya agak lebih efesien dan efektif. Awalnya saya menggunakan protocol HTTP untuk link download karena banyaknya app yg beredar bisa nge-sniff `clear URL
', maka saya harus bermigrasi ke protocol HTTPS yg pastinya di-encrypt, tapi untuk menggunakan protocol HTTPS ini sudah dipastikan harus ada verifikasi dari public SSL provider spt DigiCert, Verisign dsb, berupa sertifikat yg valid. Tapi berhubung saya cuma UKM so pasti keberatan kalo beli hehe...
Maka saya coba dengan metode Self-Sign Certificate meski tidak sesempurna sertifikat beli ya lumayan lah... OK, langkah awal pastikan webserver support dgn SSL, saya menggunakan Lighttpd + OpenSSL, saya tidak menjelaskan instalasinya yah...
root:~# lighttpd -v
lighttpd/1.4.35 (ssl) - a light and fast webserver
Build-Date: Apr 22 2014 13:54:26
root:~# cat /usr/local/etc/lighttpd/lighttpd.conf
1. Konfigurasi webserver agar support HTTPS.
$SERVER["socket"] == "xxx.xxx.xxx.xxx:443" {
        ssl.engine  = "enable"
        ssl.pemfile = "/etc/ssl/certs/server.pem"
        ssl.ca-file = "/etc/ssl/certs/server.crt"
        ssl.honor-cipher-order = "enable"
        ssl.use-sslv2 = "disable"
        ssl.use-sslv3 = "disable"
}
Redirect semua HTTP ke HTTPS
$HTTP["scheme"] == "http" {
        $HTTP["host"] =~ "domain.tld" {
            url.redirect = ( "/.*" => "https://%0$0" )
        }
}
2. Pembikinan sertifikat.
2.1 Pembikin sertifikat CA (Certificate Authority)
root:~# cd /etc/ssl
root:/etc/ssl# mkdir certs
root:/etc/ssl/certs# openssl genrsa -out ca.key 4096
root:/etc/ssl/certs# openssl req -x509 -new -sha256 -nodes -key ca.key -days 2555 -out ca.pem
root:/etc/ssl/certs# openssl x509 -outform der -in ca.pem -out ca.crt
2.2 Pembikinan sertifikat untuk server/site
root:/etc/ssl/certs# openssl genrsa -out server.key 4096
root:/etc/ssl/certs# openssl req -new -sha256 -key server.key -out server.csr
2.3 Pembikinan CRT dan PEM sertifikat
root:/etc/ssl/certs# cat v3.ext
authorityKeyIdentifier = keyid,issuer
basicConstraints = CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
root:/etc/ssl/certs# openssl x509 -req -sha256 -days 730 -extfile v3.ext -in server.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out server.crt
root:/etc/ssl/certs# cat server.key server.crt > server.pem
root:/etc/ssl/certs# chmod 600 *
root:/etc/ssl/certs# /usr/local/etc/rc.d/lighttpd restart
Agar ter-verify silahkan dishare *.crt filenya, kalo client/browser kita sudah install *.crt pasti status Verified.

13 Maret 2014

Setup DNSSEC-BIND di FreeBSD

Untuk menambah keamanan Bind sebagai resolver saya coba implementasikan DNSSEC di FreeBSD
1. Buat direktori untuk key & private file:
# mkdir /etc/namedb/key
# cd /etc/namedb/key
# dnssec-keygen -f KSK -a RSASHA1 -b2048 -n ZONE example.com
# dnssec-keygen -a RSASHA1 -b 768 -n ZONE example.com
2. Append isi dari kedua file *.key ke file db domain zone:
# cd /etc/namedb/
# cat key/Kexample.com.+005+*.key >> master/example.com.db 
3. Sign untuk db domain zone, sehingga terbetuk file example.com.db.signed di direktori master
# dnssec-signzone -o example.com -k Kexample.com.+005+15439.key ../master/example.com.db Kexample.com.+005+26382.key
4. Edit named.conf untuk menggunakan db domain yang telah di signed
zone "example.com" {
     type master;
     file "master/example.com.db.signed"
}
5. Untuk fingerprint bisa dicoba dengan command
# cd /etc/namedb/master/
# dnssec-dsfromkey -1 -f example.com.db.signed example.com example.com. IN DS 51367 5 1 527EE9DED3B1DC3F7FE9C7F3CE08E8E56674D6A8
6. Silahkan ditest outputnya kurang lebih seperti ini
# dig +dnssec +short example.com
A 5 2 3600 20140411175317 20140312175317 26382 example.com. hmBbAz1245O6tVLuXjnlKLqCH0JKguISPn3vTPI+ju8Kp8aBcgTI10tTQ7gtm5Xe7KJn60ggLnPIpnQN0GpVD5APbnOnsXi4QL0YKxJDp+yVcXbryG0svDaYaGtixhEp

08 Juli 2013

ipfw_WF2Q+

1. Jika anda ingin menimplementasikan WF2Q+ dengan ipfw di mesin dengan tujuan:
- Sharing bandwidth antar client misalnya untuk ratio 1:4.
- Sharing bandwidth evenly/rata diantara client tersebut (Tapi bukan garansi/CIR).
- Adanya bandwidth peak/burst diantara client jika client yg lain idle.
2. Untuk sharing bandwidth dengan ratio 1:4 bisa anda kelompokan client anda dalam satu group misalnya:
- Host A, B, C, D diberi bandwidth rebutan/sharing sebesar 128 Kbit/s, dengan IP Address:
* Host A : 192.168.0.1/32
* Host B : 192.168.0.2/32
* Host C : 192.168.0.3/32
* Host D : 192.168.0.4/32
Asumsi subnet yg anda pilih /24 atau 255.255.255.0, jika anda ingin menggunakan subnetting juga itu lebih bagus.

3. Bikin rule di /etc/rc.firewall dan letakan sebelom rule permit/deny:
ipcl_grup01="192.168.0.0/24{1,2,3,4}"
bw_share01="128Kbit/s"
bw_down_share01="128Kbit/s"
bw_up_share01="64Kbit/s"
ifint="inside_interface"

# Sample format 1 - Limiting downstream saja.
${fwcmd} add 1 queue 1 ip from any to ${ipcl_group01} out via ${ifint} // Downstream
${fwcmd} queue 1 config weight 50 queue 4 pipe 1 mask dst-ip 0xffffffff
${fwcmd} pipe 1 config queue 4 bw ${bw_down_share01}

# Sampel format 2 - Limiting upstream saja.
${fwcmd} add 1 queue 1 ip from ${ipcl_group01} to any in  via ${ifint} // Upstream
${fwcmd} queue 1 config weight 50 queue 4 pipe 1 mask src-ip 0xffffffff
${fwcmd} pipe 1 config queue 4 bw ${bw_up_share01}

# Sample format 3 - Limiting downstream/upstream menjadi satu flow.
${fwcmd} add 1 queue 1 ip from any to ${ipcl_group01} out via ${ifint} // Downstream
${fwcmd} add 2 queue 1 ip from ${ipcl_group01} to any in  via ${ifint} // Upstream
${fwcmd} queue 1 config weight 50 queue 4 pipe 1 mask all
${fwcmd} pipe 1 config queue 4 bw ${bw_share01}

# Sample format 4 - Limiting upstream/downstream dengan masing2 flow terpisah.
${fwcmd} add 1 queue 1 ip from any to ${ipcl_group01} out via ${ifint} // Downstream
${fwcmd} add 2 queue 2 ip from ${ipcl_group01} to any in  via ${ifint} // Upstream
${fwcmd} queue 1 config weight 50 queue 4 pipe 1 mask dst-ip 0xffffffff
${fwcmd} queue 2 config weight 50 queue 4 pipe 2 mask src-ip 0xffffffff
${fwcmd} pipe 1 config queue 4 bw ${bw_down_share01}
${fwcmd} pipe 2 config queue 4 bw ${bw_up_share01}
WF2Q+ merupakan varian dari sistem quering policy, dan jangan lupa setelah di assign via queue mesti terhubung ke pipe.
Keterangan:
- queue [Dibagian rule : ${fwcmd} add 1 queue...] : Assign untuk rule WF2Q+.
- weight                                          : Nilei pembanding flow quering (Bukan priority).
                                                    Default 1, allow [1 s/d 100].
- queue [Dibagian rule : ${fwcmd} queue 1 config weight 50 queue...] : Ukuran/jumlah dari "queue/slot" sbg pembanding terhadap jumlah bandwidth. Default 50.
- queue [Dibagian rule : ${fwcmd} pipe 1 config queue...] : Ukuran/jumlah dari "queue/slot" sbg pembanding terhadap jumlah bandwidth. Default 50
- pipe : Assign rule untuk ukuran bandwidth yg terkoneksi.
- mask dst-ip/src-ip : Digunakan untuk masking IP Address/subneting dan port. "dst-ip" digunakan untuk "downstream", "src-ip" digunakan untuk "upstream" dari sample rule diatas (Tergantung dari posisi IP client/port). 0xffffffff adalah value subnet, sama dengan "0.0.0.0/0" (Match all IP Address). Untuk port default "0x0000" artinya tidak menspesifikan/pembatasan port.
4. Perhitungan:
bw_perclient = (w_client / w_jumlah_) * bw_total
Sample diatas perclient mempunyai weight masing2 50, total bw 128 Kbit/s. Katakanlah untuk host A bisa dikalkulasikan sbb:
bw_host_A = (50 / (50*4)) * 128 Kbit/s
          = (50 / 200) * 128 Kbit/s
          = 32 Kbit/s
Jika semua host aktif maka dummynet akan berusaha membagi rata sejumlah 32 Kbit/s per hostnya. Nah contoh diatas mempunyai weight yg sama besarnya, gimana kalo contohnya begini:
w_host_A = 30
w_host_B = 50
w_host_C = 50
w_host_D = 50
Maka bisa kita kalkulasikan bw yg didapat oleh host A dan host B sbb:
bw_host_A = (30 / (30+50+50+50)) * 128 Kbit/s
          = (30 / 180) * 128 Kbit/s
          = 21.333 Kbit/s

bw_host_B = (50 / (30+50+50+50)) * 128 Kbit/s
          = (50 / 180) * 128 Kbit/s
          = 35.55 Kbit/s
Contoh lain:
w_host_A = 10
w_host_B = 20
w_host_C = 30
w_host_D = 40

bw_host_A = (10 / (10+20+30+40)) * 128 Kbit/s
          = (10 / 100) * 128 Kbit/s
          = 12.8 Kbit/s

bw_host_B = (20 / (10+20+30+40)) * 128 Kbit/s
          = (20 / 100) * 128 Kbit/s
          = 25.6 Kbit/s
Perhitungan queue slot. Dalam hal ini queue di rule diatas adalah 4, maka bisa dikalkulasikan:
bw_perclient = bw_total/slot_queue
Dari sample diatas bisa dihitung untuk host A sbb:
bw_host_A = 128 Kbit/s / 4 
          = 32 Kbit/s
Jika semua host aktif maka dummynet akan berusaha membagi rata bandwidth 32 Kbit/s per slot-nya (1 slot = 32 Kbit/s). IMHO, queue slot mendingan disesuaikan dengan jumlah client yg share, contoh diatas 1:4 berarti queue slot-nya

4. Jika kita rubah misalnya queue slot menjadi 8 slot maka ada kemungkinan host A akan menggunakan lebih dari 1 slot, artinya bisa cenderung ngerebut slot jatah host lain.
root:~# uname -srnm
FreeBSD gw-core-introuter.kumprang.com 4.10-STABLE i386
root:~# ipfw queue show
00001:  24.000 Kbit/s    0 ms   50 sl. 1 queues (1 buckets) droptail
   mask: 0x00 0x00000000/0x0000 -> 0x00000000/0x0000
BKT Prot ___Source IP/port____ ____Dest. IP/port____ Tot_pkt/bytes Pkt/Byte Drp
  0 tcp      74.6.68.227/42040   202.146.228.9/80    5535  3192733  0   0   0
00002:  68.000 Kbit/s    0 ms    6 sl. 0 queues (1 buckets) droptail
   mask: 0x00 0x00000000/0x0000 -> 0x00000000/0x0000
00003:  36.000 Kbit/s    0 ms    6 sl. 0 queues (1 buckets) droptail
   mask: 0x00 0x00000000/0x0000 -> 0x00000000/0x0000
q00001: weight 50 pipe 2    6 sl. 6 queues (64 buckets) droptail
   mask: 0x00 0x00000000/0x0000 -> 0xffffffff/0x0000
BKT Prot ___Source IP/port____ ____Dest. IP/port____ Tot_pkt/bytes Pkt/Byte Drp
 17 ip           0.0.0.0/0         192.168.1.1/0     81105 53885327  0   0  2960
 26 ip           0.0.0.0/0        192.168.1.10/0     121939 96279102  0  0  3719
 27 ip           0.0.0.0/0        192.168.1.11/0     134476 96276870  0  0  6141
 28 ip           0.0.0.0/0        192.168.1.12/0     35325 17986730  0   0  1243
 29 ip           0.0.0.0/0        192.168.1.13/0     43479 35034555  0   0  1247
 34 ip           0.0.0.0/0        192.168.1.50/0     154963 152289033  0  0 8521
q00002: weight 50 pipe 3    6 sl. 6 queues (64 buckets) droptail
   mask: 0x00 0xffffffff/0x0000 -> 0x00000000/0x0000
BKT Prot ___Source IP/port____ ____Dest. IP/port____ Tot_pkt/bytes Pkt/Byte Drp
 12 ip      192.168.1.50/0             0.0.0.0/0     128724 17526438  0  0  211
 42 ip       192.168.1.1/0             0.0.0.0/0     71625  8097141  0   0  592
 48 ip      192.168.1.12/0             0.0.0.0/0     28546  2747603  0   0  131
 50 ip      192.168.1.13/0             0.0.0.0/0     32582  3594117  0   0  29
 60 ip      192.168.1.10/0             0.0.0.0/0     102737 10325047  0  0  73
 62 ip      192.168.1.11/0             0.0.0.0/0     89624  8851578  0   0  100
Kolom paling kanan pertanda paket yg sudah didrop, uji gampangnya lihat saja jika kita download gede2an (pake getright/flashget) pasti banyak yg didrop sesuai dengan perhitungan diatas. Dan silahkan coba download dengan cara dilimit di client (pake getright/flashget misalnya) sesuei dengan perhitungan diatas, nah gimana hasilnya tuh :-).

Sistem kerjanya, andaikata host A menggunakan bandwidth melebihi kapasitas sharing bandwidth bedasarkan perhitungan diatas dan host B pada saat bersamaan mulai ngeload bandwidth (katakanlah mulai ngeclick browser) maka host A akan didrop secara random untuk memberikan kesempatan kepada host B sampai kedudukannya seimbang (katakanlah jika bandwidth 128 Kbit/s maka host A akan mendapatkan 64 Kbit/s dan host B akan mendapatkan 64 Kbit/s), dan ketika host B tidak ngeload bandwidth (idle) maka host A akan mendapatkan bandwidth 128 Kbit/s kembali.

04 Juni 2013

Merubah Tipe File Windows Ke UNIX

1. Caranya beginoh:
# perl -i.bak -npe 's/\r\n/\n/g' file ...
2. Atau bisa kita pake:
# tr -d '\r' < dos-text-file > unix-file
3. Atau bisa juga:
# col -b < dos-text-file > unix-text-file

26 Mei 2013

Console UNIX Berwarna

1. Silahkan porting:
# cd /usr/ports/misc/gnuls/
# make ; make install
2. Bikin alias di ~/, kalo root pake .bashrc, sedangkan user pake .bash_profile.
# cat .bashrc
alias ls='gnuls --color=auto -a'
$ cat .bash_profile
alias ls='gnuls --color=auto -a'

07 Maret 2013

ARCHIVER dan COMPRESSION di UNIX

Untuk create archiver di UNIX menggunakan perintah tar, untuk aplikasi kompresi menggunakan gzip/gunzip.

1. Misalnya kita akan bikin archive file maka:
  $ tar cvf file.tar .
Note: c=[c]reate, v=[v]erbose, f=[f]ile, titik[.] menunjukan current directory atau direktori aktif sekarang. Jadi jika anda pengen bikin archive dng nama direktori "coba", anda bikin dulu direktori "coba" setelah itu anda masukan file2 yg hendak anda archiving ke direktori itu (coba), selanjutnya anda masuk ke direktori "coba" lalu lakukan perintah diatas. karena defaultnya tar ngebackup (melihat) device (tape) /dev/sa0, padahal kita sebenernya ingin bikin archive di darektori aktif sehingga otomatis proses kita akan gagal dengan itu maka kita perlu pake option [f]ile untuk mengarahkan archive kita. output errornya: tar: can't open /dev/sa0 : Device not configured

2. Setelah terbentuk file.tar maka kita lakukan pengecekan:
  $ tar tf file.tar atau $tar tf file.tar | more
Note: Untuk option [f]ile sama halnya dng kejadian diatas, kalo nggak maka akan nampilin error yg sama persis.

3. Nah sekarang archive kita ingin kita kompres sbg contoh:
  $ gzip -c9v file.tar > file.tar.gz
4. Sebetulnya tar juga sudah membawa untuk "filtering" direct ke bentuk file compression cuma untuk customize kompresi tidak selengkap jika kita pisah dng 2 proses (proses tar dan proses gzip). Misalnya untuk proses tar langsung difilter thd kompresi:
  $ tar zcvf foo.tgz * atau
  $ tar zcvf foo.tar.gz *
Secara otomatis foo.tgz dan foo.tar.gz akan terbentuk, jangan lupa untuk mengecheck kalo2 archivenya rusak. dengan cara mirip dengan langkah diatas:
  $ tar ztvf foo.tgz atau
  $ tar ztvf foo.tar.gz
5. Untuk mengecheck apakah proses yg kita lakukan benar, kita check dng cara:
  $ tar tfzv file.tar.gz atau $tar tfzv file.tar.gz | more
Note: Kita lakukan kompresi dng menggunakan gzip/gunzip. untuk options c=[c]reate, 9=kompresi paling baik, v=[v]erbose, z=untuk nampilin kompresi, untuk f sama keterangannya ama yg diatas.

6. Jika anda menggunakan archiver sekaligus kompresi model *.zip, maka di UNIX telah disediakan toolnya yaitu zip dan unzip untuk sebaliknya. Misalnya kita akan create test.zip di direktori /etc maka:
  $ cd /etc
  $ zip -r -v -9 test.zip *
Jika anda ingin menencrypt isi arsip bisa gunakan -e [encrypt]
  $ zip -r -v -e -9 test.zip *
Note: Opsi -r[ecrusive], -v[erbose], -9 [Best Compression], dan untuk Asterik (*) menunjukan "current directory". Untuk membuka anda bisa gunakan "unzip" misalanya:
  $ cd /tmp
  $ unzip test.zip
Jika anda ingin membuat archive "hanya untuk file tertentu", anda bisa gunakan beberapa options, sebagai contoh:
  $ zip -c -v -9 /hasil/file/foo.zip -j /target/config/source.conf
Dengan perintah diatas maka kita akan meletakan foo.zip di dalam direktori /hasil/file/ dengan mengambil source.conf (file yang mau dizip) di direktori /target/config/, dengan option -j maka "full path dari source.conf direktori tidak akan di zip".

7. Menggunakan compresi bzip/bzip2, Anda bisa menggunakan ekstensi *.tar.bz, *.tar.bz2, *.tbz sebagai contoh.
  $ tar -cvf backup.tar *
  $ bzip -cvf backup.tar > backup.tar.bz atau
  $ bzip2 -cvf backup.tar > backup.tar.bz2
Untuk bzip hasil akhir berekstensi *.bz, sedangkan untuk bzip2 hasil akhir berekstensi *.bz2, nah selain itu ada beberapa contoh dengan fasilitas "filtering" via kompresi misalnya:
  $ tar -ycvf backup.tbz * atau
  $ tar -ycvf backup.tar.bz *
Dan untuk bzip2:
  $ tar -ycvf backup.tar.bz2 *
Untuk pengechekan kita bisa gunakan perintah spt:
  $ tar ytvf backup.tbz
  $ tar ytvf backup.tar.bz
  $ tar ytvf backup.tar.bz2
Untuk pengekstrakan *.tbz, *.bz, *.bz2 lakukan spt:
  $ tar yxvf backup.tbz
  $ tar yxvf backup.tar.bz
  $ tar yxvf backup.tar.bz2
PS: Untuk options dan keterangan lebih lanjut anda bisa baca manual gzip/gunzip, bzip/bzip2, zip, unzip dan tar.

09 Januari 2013

Intisari IPFILTER

ipf melihat rule yg dilist secara berurutan dari atas ke bawah. Misalnya:
block in all....(1)
pass in all.....(2)
Pertama akan dijalankan rule (1), setelah itu rule (2). Jadi otomatis hasilnya rule (2) alias paket boleh masuk. Rule2 yg bertumpuk seperti. Misalnya:
block in all....(1)
block in all....(2)
block in all....(3)
block in all....(4)
block in all....(5)
pass in all.....(6)
Rule (1) s/d (4) tidak ada faedahnya. Dengan quick kita dapat meyederhanakan rule2 kita. Misalnya:
block in quick all...(1)
pass in all..........(2)
Bisa kita artikan rule (1) akan dilihat pertama, selanjutnya ipf melaksanakan ketentuan semua rule tsb sampe selesai baru rule (2). Penulisan subnet IP yg diperbolehkan adalah 255.255.0.0 atau /16. Misalnya:
block in quick from 192.168.0.0/16 to any
atau
block in quick from 192.168.0.0/255.255.0.0 to any
Kita dapat mengunakan keyword on untuk menspesifikan interface yg kita pake. Misalnya:
block in quick on xl0 all
atau
block in quick on xl0 from 192.168.0.0/16 to any
Kita dapat menentukan juga outgoing paket dng nama keyword out. Misalnya:
pass out quick on xl0 from 192.168.0.0/16 to any
Jika kita ingin melogkan apa yg terjadi, maka ada baiknya kita gunakan keyword log. Misalnya:
block in log quick on xl0 from 192.168.0.0/24 to any
Keyword proto dapat kita gunakan untuk menspesifikan protocol yg kita pake berikut dengan tipe protocolnya. Backslash (\) dapat kita pake untuk menyambung perintah pada line berikutnya. Misalnya:
block in log quick on xl0 proto icmp from any to any
atau
pass in quick on xl0 proto icmp from any to 192.168.0.0/24 \
icmp-type 0
Pengunaan keyword port lebih menitik beratkan kepada port yg dilalui. Misalnya:
block in log quick on tun0 proto tcp from any to \
192.168.0.0/24 port = 22
Untuk membangun rule2 yg sangat kuat ada baiknya kita kompile kernel dengan default deny all, shg kita list rule yg kita perlu (This my fav). Kita mulai dengan rule deny kayak gini. Misalnya:
block in all
block out all
Nah baru kita listing rule2 yg diperbolehkan. Misalnya:
pass in quick on xl0 proto tcp from any to 192.168.0.1/24 \
port = 80
Arti rule tsb adalah membolehkan paket yg masuk di ethernet xl0 dengan jenis protocol tcp dari mana saja ke 192.168.0.1/24 lewat port 80 (www). Jika ada respon dari 192.168.0.1/24 akan tetep ditolak juga, maka agar terjadi komunikasi (tidak pincang) maka kita listing juga rule sebaliknya. Misalnya:
pass out quick on tun0 proto tcp from 20.20.20.1/32 \
port = 80 to any
Ada keyword yg sangat menarik disini yaitu keep-state, jika rule kita dibubuhi keep-state ini berati rule tersebut dah masuk ke state table ipf, sehingga ipf tidak perlu lagi mengecek ulang validasi rule tersebut alias jika terjadi handshake di kemudian hari ipf akan langsung mengijinkan masuk. Misalnya:
pass out quick on xl0 proto tcp from 192.168.0.1/24 to any \
keep state
Artinya adalah mengijinkan paket yg keluar di xl0 dengan protocol tcp dari 192.168.0.1/24 ke mana saja, dengan keep-state ini rule yg bersangkutan langsung di apply ke state table dan ipf tidak akan ikut campur nggak akan ngecheck ulang lagi validasi. ini terjadi pas pertama kali SYN paket menyentuh hand shake server kita. Sangat delematis kita menggunakan keep-state, coba kita pikirkan baik2 akan muncul pertanyaan dibenak kita "Oh..kalo gitu ipf hanya mengenal SYN yg dulu dung, dengan kata lain SYN pas entry ke state table pertama kali..?", yups memang benar meski ipf akan close (idle)selama 60 detik (1 menit) tapi bukan refresh. dengan kata lain paket SYN-nya basi. ini pun berlaku untuk koneksi TCP selanjutnya misalnya yg lainya (FIN, XMAS etc) setelah handshake terjadi. Untuk masalah diatas tentunya ada solusi tersendiri. dengan penambahan keyword flags alias menspesifikan flags untuk TCP. Misalnya:
pass in quick on tun0 proto tcp from any to 192.168.0.1/24 \
port = 23 flags S keep state
Artinya rule diatas akan hanya melihat flags TCP SYN saja untuk flags lainya (FIN, XMAS etc) tentunya akan keblock.
 Berikut 6 flags TCP:
  +----------------------------------+--------------+
  |Singkatan dari koneksi TCP/IP     |     Flags    |
  +----------------------------------+--------------+
  |         SYN                      |       S      |
  |         URG                      |       U      |
  |         PUSH                     |       P      |
  |         FIN                      |       F      |
  |         RST                      |       R      |
  |         ACK                      |       A      |
  +----------------------------------+--------------+
Jika kita menulis flags S bisa kita tulis S/SUPFRA. dengan kata lain paket hanya cocok flags S. Misalnya: Jika kita tulis flags S/SA artinya match dengan S dan
flags "UPFR"...(1)
Jika kita tulis flags S/SAUP artinya match dengan S dan
flags "FR".....(2)
Dalam perjalan paket tersebut tidak jarang terpecah-pecah (fragmention) Untuk mengatisipasi tentunya ipf telah menyediakan, yaitu dengan keyword keep frags (tanpa tanda '-'). Misalnya:
pass in quick on xl0 proto tcp from any to 192.168.0.1/32 \
port = 23 flags S keep state keep frags
Keyword return-rst berguna untuk merespon jika service tidak tersedia. return-rst hanya berlaku untuk jenis protocol TCP. Misalnya:
block return-rst in log proto tcp from any to 192.168.0.0/24 \
port = 23
Hasilnya untuk rule diatas adalah connection refused. Ada keyword return-icmp(jenis_error). Misalnya:
block return-icmp(port-unr) in log quick on tun0 proto udp \
from any to 192.168.0.0/24 port = 111
Untuk jenis_error kita pake port-unr (port unreachable). Selain respone block paket spt diatas ipf menyediakan keyword return-icmp-as-desta. Misalnya:
block return-icmp-as-dest(port-unr) in log on tun0 proto udp \
from any to 192.168.0.1/24 port = 111
Jika anda ingin mengatur log, kita bisa gabungkan dengan Syslog. ada keyword log level. Misalnya:
block in log level auth.info quick on xl0 from 192.168.0.1/24 to 
any port = 22
Jika anda mau mendapatkan informasi log header gunakan keyword log body pada proses ini ipf akan memberikan 128 bytes pertama dari paket. Untuk mempersingkat/efesiensi rule, kita bisa bikin kelas2 nah dengan mengunakan pasangan keyword head dan group. Misalnya:
block out quick on xl0 all head 10 ...(1)
pass out quick proto tcp from any to 192.168.0.1/24 port = \
80 flags S keep state group 10 .......(2)
Jika paket bukan untuk xl0, make nggak akan match dengan rule (1) dan rule (2) dan sebaliknya jika match maka akan dieksekusi rule (2) dan rule2 lainya yg mempunyai keyword group 10. artinya jika kita mempunyai network yg cukup besar dengan macam2 rule tentunya kita sedikit kewalahan dengan head dan group kita bisa membagi rule tersebut menjadi tree style. Misalnya:
block out quick on xl0 all head 1 ...(1a)
pass out quick proto tcp from any to 192.168.0.1/24 port = \
80 flags S keep state group 1 .......(2a)

block out quick on xl1 all head 2 ...(1b)
pass out quick proto tcp from any to 192.168.0.2/24 port = \
80 flags S keep state group 2 .......(2b)
Jika ada paket dengan cocok dengan rule (xa) make untuk kelompok rule (xb) akan diabaikan, dan sebaliknya tentunya ini akan menambah efesiensi kerja ipf kita. Jika kita lakukan traceroute dari mesin luar ke mesin kita secara default kita mendapatkan hop2 routing tersebut, ada yg menarik dari ipf ini salah satunya keyword fastroute, dengan keyword ini kita bisa menyembunyikan informasi2 hop tersebut. Misalnya:
block in quick on xl0 fastroute proto udp from any to any \
port 33434 >< 33465
Hal ini terjadi karena ada proses penurunan Time To Live (TTL) dari paket Acknowledging (ACK). Catatan:
<     : Lebih kecil
>     : Lebih besar
=     : Sama dengan
<=    : Lebih kecil sama dengan
>=    : Lebih besar sama dengan
!=    : Tidak sama dengan
<>    : Kurang dari X, lebih dari X
><    : Lebih besar dari X, kurang dari X

25 September 2012

Twitter Webbase Client

Bermula dari permintaan si cinta @DiahEstiani yg meminta via/from custom dari apps twitter, maka yang terpikir oleh saya adalah bagaimana menyajikan bentuk webbase yang kompatibel dan mudah digunakan. Sebelomnya saya sudah membikinnya tapi hanya posting saja tentunya ini bikin ribet dan sulit untuk pemakai.

Maka saya iseng-iseng mencari webbase untuk client webbase dan tentunya bertajuk Open Source, setelah berhari-hari saya mendapatkan Dabr, untuknya bukan cuma webbase untuk digunakan di Desktop saja, featurenya bisa untuk mobile juga. Setup Dabr ini tidaklah terlalu sulit, hanya 3 langkah saja (Register Apps di dev.twitter.com, setup webserver di hostingan, dan Dabr itu sendiri).

Yang dibutuhkan untuk register API Twitter:
  • Name: (yg selanjutnya menjadi nama app anda, via/from di twitter)
  • Website: (Jika diklik di apps via/from akan dilinkan kemana)
  • Application type: Read, Write and Access direct messages
  • Consumer key:
  • Consumer secret:
Selanjutnya kita siapkan hostingan, Dabr tidak menyimpan Username/Password, melainkan langsung diproses oleh Oauth twitter. System yang dibikin oleh dev Twitter untuk keamanan dan menghindari pihak ke 3 untuk mencuri data-data yang bersifat privasi. Beberapa persyaratan yg harus dipenuhi untuk ngehosting Dabr adalah:
dsb) Setup Dabr, yg diperlukan hanya Consumer key dan Consumer secret, kita letakan di config.php.
budsz:~/a$ fetch http://dabr.googlecode.com/files/dabr-r430.zip dabr-r430.zip
budsz:~/a$ ls -l
total 88
drwxr-xr-x   3 budsz  poison    512 Sep 25 14:31:38 2012 .
drwxr-xr-x  26 budsz  poison   1536 Sep 25 14:30:47 2012 ..
drwxr-xr-x   5 budsz  poison    512 Sep 25 14:31:34 2012 dabr
-rw-r--r--   1 budsz  poison  82709 Aug 16 19:15:20 2011 dabr-r430.zip
budsz:~/a$ unzip dabr-r430.zip
Archive:  dabr-r430.zip
d dabr
extracting: dabr/.htaccess
extracting: dabr/.project
extracting: dabr/about.html
d dabr/browsers
extracting: dabr/browsers/bigtouch.css
extracting: dabr/browsers/bigtouch.php
extracting: dabr/browsers/blackberry.php
extracting: dabr/browsers/desktop.php
extracting: dabr/browsers/list.csv
extracting: dabr/browsers/text.php
extracting: dabr/browsers/touch.css
extracting: dabr/browsers/touch.js
extracting: dabr/browsers/touch.php
extracting: dabr/browsers/worksafe.php
d dabr/common
extracting: dabr/common/advert.php
extracting: dabr/common/Autolink.php
extracting: dabr/common/browser.php
extracting: dabr/common/Embedly.php
extracting: dabr/common/Extractor.php
extracting: dabr/common/HitHighlighter.php
extracting: dabr/common/lists.php
extracting: dabr/common/menu.php
extracting: dabr/common/OAuth.php
extracting: dabr/common/Regex.php
extracting: dabr/common/settings.php
extracting: dabr/common/theme.php
extracting: dabr/common/twitter.php
extracting: dabr/common/user.php
extracting: dabr/config.sample.php
d dabr/images
extracting: dabr/images/dabr.png
extracting: dabr/images/dm.png
extracting: dabr/images/dmL.png
extracting: dabr/images/map.png
extracting: dabr/images/mapL.png
extracting: dabr/images/q.png
extracting: dabr/images/qL.png
extracting: dabr/images/reply.png
extracting: dabr/images/replyall.png
extracting: dabr/images/replyallL.png
extracting: dabr/images/replyL.png
extracting: dabr/images/retweet.png
extracting: dabr/images/retweeted.png
extracting: dabr/images/retweetedL.png
extracting: dabr/images/retweetL.png
extracting: dabr/images/star.png
extracting: dabr/images/starL.png
extracting: dabr/images/star_grey.png
extracting: dabr/images/star_greyL.png
extracting: dabr/images/trash.gif
extracting: dabr/images/trashL.png
extracting: dabr/images/twitter_button_2_lo.gif
extracting: dabr/index.php
Rubah permission untuk setiap filenya dulu:
budsz:~/a/$ cd dabr
budsz:~/a/dabr$ find . -type f -exec chmod 644 *.* {} \;
budsz:~/a/dabr$ cp config.sample.php config.php
Edit file config.php, isi dengan data-data yg sudah didapatkan ketika kita registrasi apps di Twitter:
// OAuth consumer and secret keys. Available from http://twitter.com/oauth_clients
define('OAUTH_CONSUMER_KEY', 'Isi_dengan_Consumer_key_anda');
define('OAUTH_CONSUMER_SECRET', 'Isi_dengan_Consumer_secret_anda');
Sisanya bisa anda setting sesuai dengan kebutuhan anda seperti
// API key for Twitpic - sign up at http://dev.twitpic.com/
define('TWITPIC_API_KEY', '');
// bit.ly login and API key for URL shortening
define('BITLY_LOGIN', '');
define('BITLY_API_KEY', '');
Setelah itu kita perlu melakukan Rewrite dari webserver kita, tergantung webserver apa yang anda pake, saya menggunakan Lighttpd dengan syntax sbb:
$HTTP["host"] =~ "subdomain\.domain\.tld" {
    dir-listing.exclude = ( "favicon.ico" )
    server.document-root = "/path/to/wwwdir"
    url.rewrite-if-not-file = (
                                "^/w/(.*)\?(.*)$"   => "/w/index.php?q=$1&$2",
                                "^/w/(.*)$"         => "/w/index.php?q=$1",
    )
}
DONE!

22 Juli 2012

Shell Scripting Twitter's Bot

Iseng-iseng gak ada kerjaan, saya coba untuk ngetwit auto dengan menggunakan scripting sederhana digabung dengan Python Twitter Tools, ujungnya menghasilkan kinerja yang lumayan memuaskan. Berikut deskripsinya: "The Minimalist Twitter API for Python is a Python API for Twitter, everyone's favorite Web 2.0 Facebook-style status updater for people on the go".

Pertama login di shell lalu lakukan download dan pengekstrakan:
budsz:~$ fetch http://pypi.python.org/packages/source/t/twitter/twitter-1.8.0.tar.gz
budsz:~$ tar zxvf  twitter-1.8.0.tar.gz
Sehingga terbentuk direktori twitter-1.8.0
budsz:~$ ls -ld twitter-*
drwxr-xr-x  6 budsz  poison  512 Jul 22 15:27:08 2012 twitter-1.8.0
Ada beberapa hal yang perlu anda edit, jika anda menggunakan Twitter API, yaitu file-file yang digunakan untuk autentifikasi Oauth twitter. Disini saya tidak akan menjelaskan pembuatan Twitter API, silahkan ngerefer ke site Twitter Developers. Pertama silahkan edit file:
budsz:~$ vim twitter-1.8.0/twitter/cmdline.py
Edit bagian CONSUMER_KEY dan CONSUMER_SECRET, isi nilainya dengan Apps yang sudah anda buat sebelomnya.
CONSUMER_KEY='your_consumer_key'
CONSUMER_SECRET='your_consumer_secret'
Untuk penginstallan dibutuhkan SetupTools, silahkan sesuaikan dengan kebutuhan anda. Selanjutnya tinggal lakukan proses penginstalan dengan root access untuk SetupTools/twitter-1.8.0.tar.gz:
root:~# cd /usr/ports/devel/py-setuptools
root:~# make install clean
root:~# pkg_info | grep py26
py26-setuptools-0.6c11_3 Download, build, install, upgrade, and uninstall Python packages
root:~# easy_install ~budsz/twitter-1.8.0
Note: Jika anda tidak mempunyai Apps silahkan langsung loncat proses instalasi saja yang anda kerjakan.

Uji coba, login kembali menggunakan user biasa:
budsz:~$ twitter -h (Untuk command line help)
budsz:~$ twitter (Login spt diweb, masukan user/password, setelah itu exit maka akan diminta PIN cukup tekan enter saja, defaultnya disimpan di ~$HOME/$USER/.twitter_oauth)
Untuk menggunakan di console/shell:
budsz:~$ twitter set "Hello World!" (Posting new twit)
budsz:~$ twitter search "cinta" (Seaching keyworld di public)
budsz:~$ twitter rate
Remaining API requests: 350 / 350 (hourly limit)
Next reset in 3544s (Sun Jul 22 17:38:01 2012)
Implementasi untuk auto posting anda tinggal gabungin dengan fasilitas cron(8) dan Shell scripting.

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 :-)

17 November 2011

Debian 6.0 Squeeze

Cukup terkesima setelah sekian tahun tidak install Debian GNU Linux. Terakhir saya menggunakan Debian 2.2 Potato dengan versi kernel 2.0.39 untuk sebuah desktop jadul pas waktu kos di Bandung. Sekarang cukup mencengangkan, karena instalasi begitu mudah, tampilan grafisnya cukup sedap dipadang mata, dan menambah pernak-perniknya pun simple banget.

Saat instalasi Debian 6.0 Squeeze via USB (Karena tidak punya CD-ROM), langsung BIOS diarahkan booting ke USB dan proses instalasi berjalan dengan baik, update source langsung diarahkan ke Mirror terdekat cdn.debian.org. Dengan dukungan:
  • kernel: linux 2.6.32
  • X-server: Xorg R 7.5
  • Desktop ENV: Xfce
  • Instant Messenger: Pidgin
  • X-Console: LXTerminal
  • Mail Client: Icedove
  • Browser: Iceweasel 
Saya sudah cukup untuk melaksanakan sebagian hobby saya :).
budsz@pccl22:~$ uname -a
Linux pccl22 2.6.32-5-686 #1 SMP Thu Nov 3 04:23:54 UTC 2011 i686 GNU/Linux
budsz@pccl22:~$ dmesg | grep Linux | head -n 1
[    0.000000] Linux version 2.6.32-5-686 (Debian 2.6.32-39) (dannf@debian.org) (gcc version 4.3.5 (Debian 4.3.5-4) ) #1 SMP Thu Nov 3 04:23:54 UTC 2011
budsz@pccl22:~$ dmesg | grep AMD
[    0.000000] AMD AuthenticAMD
[    0.000000] RAMDISK: 17624000 - 180339d7
[    0.000000]   #4 [0017624000 - 00180339d7]          RAMDISK ==> [0017624000 - 00180339d7]
[    0.004237] Performance Events: AMD PMU driver.
[    0.070726] CPU0: AMD Sempron(tm) Processor 2800+ stepping 02

05 Juli 2009

Pembatasan bandwidth static lebih pasti!

Setelah sekian lama menggunakan dinamic queue ternyata permasalah klasik tetep ada yaitu: Jika ada user menggunakan download accelerator spt Free Internet Download Manager, Flashget dsb, user laen tetep ketarik jatah bandwidthnya.

Jadi mau tidak mau saya mesti mengakali menggunakan scripting, dan paduan static limiter. Dan hasilnya cukup memuaskan mestipun tidak terlalu sempurna pada layer application. Idenya adalah mengecek jumlah host yg online dan memodif rule di limiter bandwidth per satuan waktu.

Alhasil hasil kerja ini cukup puas :-)

24 Februari 2008

Ubuntu 7.10 - GutsyGibbon

Akhirnya pesanan CD Ubuntu Gutsy Gibbon dateng juga, rasanya kurang afdol, puas kalo online tidak menggunakan Linux. Setelah saya coba install ternyata cukup tercengang juga dengan Linux jaman skg, mudah, praktis, dsb. Saya pikir phone modem sony ericsson-ku malah nda keditek, atau setidaknya mesti insert modules kernel. Ternyata langsung jalan deh.

Dilengkapi dengan fasilitas IM (Internet Messenger) Pidgin 2.2.1, Firefox 2.0.0.6, Xmms, kVIRC, Evolution Email Client, Filezilla dan aplikasi pendukung lainnya, membuat saya makin betah berjam-jam didepan komputer. Banyak hal yg baru untuk distro yang satu ini. Ada baiknya lihat-lihat : http://www.ubuntu.com/getubuntu/releasenotes/710. Untuk fasilitas desktop rasanya distro ini sangat familiar.

07 Agustus 2007

Ngepop Email Dari Gmail & Gmail Hosting

1. Persiapan aplikasi yg dipake:
 - Install OpenSSL
# cd /usr/ports/security/openssl
# make install USE_NONDEFAULT_X11BASE=yes
# make clean USE_NONDEFAULT_X11BASE=yes
- Install fetchmail pastikan support SSL.
# cd /usr/ports/mail/fetchmail
# make install USE_NONDEFAULT_X11BASE=yes
# make clean USE_NONDEFAULT_X11BASE=yes
- Install mutt.
# cd /usr/ports/mail/fetchmail
# make install USE_NONDEFAULT_X11BASE=yes
# make clean USE_NONDEFAULT_X11BASE=yes
- Install maildrop.
# cd /usr/ports/mail/maildrop
# make install USE_NONDEFAULT_X11BASE=yes
# make clean USE_NONDEFAULT_X11BASE=yes
- Install ssmtp.
# cd /usr/ports/mail/ssmtp
# make USE_NONDEFAULT_X11BASE=yes
Modifikasi biar sedikit tampil lebih gaya:
# cd /usr/ports/mail/ssmtp/work/ssmtp-2.61
# vim ssmtp.c
  ...
  smtp_write(sock,
  "Received: by %s (sSMTP by Internet and Game PC Kumprang); %s", hostname, arpadate);
  ...
# make install USE_NONDEFAULT_X11BASE=yes FORCE_PKG_REGISTER=yes
# make clean USE_NONDEFAULT_X11BASE=yes
2. Pengechekan dan konfigurasi:
# openssl version
OpenSSL 0.9.7d 17 Mar 2004
# fetchmail -V
...
This is fetchmail release 6.3.8+RPA+SDPS+SSL+OPIE+NLS.
...
# cat /usr/local/etc/ssmtp/ssmtp.conf
root=postmaster
mailhub=smtp.gmail.com:465
rewriteDomain=indofreebsd.or.id
hostname=mx1.kumprang.com
FromLineOverride=YES
UseTLS=YES
3. Pembuatan hash sertifikat untuk GMAIL:
 - Pertama-tama kita check gmail sertifikat terlebih dahulu:
$ openssl s_client -connect pop.gmail.com:995 -showcerts
CONNECTED(00000003)
---
Certificate chain
 0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=pop.gmail.com
   i:/C=US/O=Google Inc/CN=Google Internet Authority G2
-----BEGIN CERTIFICATE-----
MIIEfjCCA2agAwIBAgIIc6+f0G5AAmEwDQYJKoZIhvcNAQELBQAwSTELMAkGA1UE
BhMCVVMxEzARBgNVBAoTCkdvb2dsZSBJbmMxJTAjBgNVBAMTHEdvb2dsZSBJbnRl
cm5ldCBBdXRob3JpdHkgRzIwHhcNMTcwMzA5MDIxOTAwWhcNMTcwNjAxMDIxOTAw
WjBnMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwN
TW91bnRhaW4gVmlldzETMBEGA1UECgwKR29vZ2xlIEluYzEWMBQGA1UEAwwNcG9w
LmdtYWlsLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANQWel+P
tZJMDO5GLIL11CxxLCbG9VF1JNh8l4KQksGki+UyAByxWgxRPwCkwizTv9O5exTx
hv2lAkhgrbDPRZZy+luaa+rbTcByvmxTGbM8GaQqjFP2gdXloWitbzQndhRAXIv2
y6ByG1NZiuj3bhxT2DnCBlhlajdWfSzkKJZOQ+LK4qfVWFigQykxOfLwU1luO1dN
sEE9HwuTSm4FQVzqwCmmuRNQxeTU731Nlu9J7O5e1p8PId7+79baMQ+CFAhSO28D
uFz/7CCS+gjfd5kMpryNydEQJbElwMUILmHn/HfGRJPqpv++ncxhUT7HyoE3X0va
Ou0frknAIJewQ9UCAwEAAaOCAUowggFGMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggr
BgEFBQcDAjAYBgNVHREEETAPgg1wb3AuZ21haWwuY29tMGgGCCsGAQUFBwEBBFww
WjArBggrBgEFBQcwAoYfaHR0cDovL3BraS5nb29nbGUuY29tL0dJQUcyLmNydDAr
BggrBgEFBQcwAYYfaHR0cDovL2NsaWVudHMxLmdvb2dsZS5jb20vb2NzcDAdBgNV
HQ4EFgQUaEXyUuABRO2N/eyuBvKTjvcRw4MwDAYDVR0TAQH/BAIwADAfBgNVHSME
GDAWgBRK3QYWG7z2aLV29YG2u2IaulqBLzAhBgNVHSAEGjAYMAwGCisGAQQB1nkC
BQEwCAYGZ4EMAQICMDAGA1UdHwQpMCcwJaAjoCGGH2h0dHA6Ly9wa2kuZ29vZ2xl
LmNvbS9HSUFHMi5jcmwwDQYJKoZIhvcNAQELBQADggEBAAOVpxxXr1HH0Go+nlOI
e8zvrKbI/kpynd6RnXtpGHnJ34ROJm6DSE9t8JqjfXUs+Uh5seO4ebK7IUgu7guL
rq8y6/Lu23kRO2YFVtG+CcyauUkCUMEYqDTqnXORN/SgZkhlNbh3wAvK97drkO0W
+5rmmhYcDCag75dxiaqhnhs2Wz78jliXUFYgLmYI/8P+o77TzKZew/FrnNZZM8aO
LJBAkNGNFGUx65ihtsLN8zTxj97SvRLUEg6aQIzDI3WPVOJFg/ClJdBTOdqPEAfb
JZrAyt0TYxxpRAWGUyWgCuVt9xsmt8FoP8eG9iDTQ/1YnstJIsLzzCG6qPYPv1ei
73s=
-----END CERTIFICATE-----
 1 s:/C=US/O=Google Inc/CN=Google Internet Authority G2
   i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
-----BEGIN CERTIFICATE-----
MIID8DCCAtigAwIBAgIDAjqSMA0GCSqGSIb3DQEBCwUAMEIxCzAJBgNVBAYTAlVT
MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
YWwgQ0EwHhcNMTUwNDAxMDAwMDAwWhcNMTcxMjMxMjM1OTU5WjBJMQswCQYDVQQG
EwJVUzETMBEGA1UEChMKR29vZ2xlIEluYzElMCMGA1UEAxMcR29vZ2xlIEludGVy
bmV0IEF1dGhvcml0eSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
AJwqBHdc2FCROgajguDYUEi8iT/xGXAaiEZ+4I/F8YnOIe5a/mENtzJEiaB0C1NP
VaTOgmKV7utZX8bhBYASxF6UP7xbSDj0U/ck5vuR6RXEz/RTDfRK/J9U3n2+oGtv
h8DQUB8oMANA2ghzUWx//zo8pzcGjr1LEQTrfSTe5vn8MXH7lNVg8y5Kr0LSy+rE
ahqyzFPdFUuLH8gZYR/Nnag+YyuENWllhMgZxUYi+FOVvuOAShDGKuy6lyARxzmZ
EASg8GF6lSWMTlJ14rbtCMoU/M4iarNOz0YDl5cDfsCx3nuvRTPPuj5xt970JSXC
DTWJnZ37DhF5iR43xa+OcmkCAwEAAaOB5zCB5DAfBgNVHSMEGDAWgBTAephojYn7
qwVkDBF9qn1luMrMTjAdBgNVHQ4EFgQUSt0GFhu89mi1dvWBtrtiGrpagS8wDgYD
VR0PAQH/BAQDAgEGMC4GCCsGAQUFBwEBBCIwIDAeBggrBgEFBQcwAYYSaHR0cDov
L2cuc3ltY2QuY29tMBIGA1UdEwEB/wQIMAYBAf8CAQAwNQYDVR0fBC4wLDAqoCig
JoYkaHR0cDovL2cuc3ltY2IuY29tL2NybHMvZ3RnbG9iYWwuY3JsMBcGA1UdIAQQ
MA4wDAYKKwYBBAHWeQIFATANBgkqhkiG9w0BAQsFAAOCAQEACE4Ep4B/EBZDXgKt
10KA9LCO0q6z6xF9kIQYfeeQFftJf6iZBZG7esnWPDcYCZq2x5IgBzUzCeQoY3IN
tOAynIeYxBt2iWfBUFiwE6oTGhsypb7qEZVMSGNJ6ZldIDfM/ippURaVS6neSYLA
EHD0LPPsvCQk0E6spdleHm2SwaesSDWB+eXknGVpzYekQVA/LlelkVESWA6MCaGs
eqQSpSfzmhCXfVUDBvdmWF9fZOGrXW2lOUh1mEwpWjqN0yvKnFUEv/TmFNWArCbt
F4mmk2xcpMy48GaOZON9muIAs0nH5Aqq3VuDx3CQRk6+0NtZlmwu9RY23nHMAcIS
wSHGFg==
-----END CERTIFICATE-----
 2 s:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
   i:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority
-----BEGIN CERTIFICATE-----
MIIDfTCCAuagAwIBAgIDErvmMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT
MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0
aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDIwNTIxMDQwMDAwWhcNMTgwODIxMDQwMDAw
WjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UE
AxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9m
OSm9BXiLnTjoBbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIu
T8rxh0PBFpVXLVDviS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6c
JmTM386DGXHKTubU1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmR
Cw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5asz
PeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo4HwMIHtMB8GA1UdIwQYMBaAFEjm
aPkr0rKV10fYIyAQTzOYkJ/UMB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrM
TjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjA6BgNVHR8EMzAxMC+g
LaArhilodHRwOi8vY3JsLmdlb3RydXN0LmNvbS9jcmxzL3NlY3VyZWNhLmNybDBO
BgNVHSAERzBFMEMGBFUdIAAwOzA5BggrBgEFBQcCARYtaHR0cHM6Ly93d3cuZ2Vv
dHJ1c3QuY29tL3Jlc291cmNlcy9yZXBvc2l0b3J5MA0GCSqGSIb3DQEBBQUAA4GB
AHbhEm5OSxYShjAGsoEIz/AIx8dxfmbuwu3UOx//8PDITtZDOLC5MH0Y0FWDomrL
NhGc6Ehmo21/uBPUR/6LWlxz/K7ZGzIZOKuXNBSqltLroxwUCEm2u+WR74M26x1W
b8ravHNjkOR/ez4iyz0H7V84dJzjA1BOoa+Y7mHyhD8S
-----END CERTIFICATE-----
---
Server certificate
subject=/C=US/ST=California/L=Mountain View/O=Google Inc/CN=pop.gmail.com
issuer=/C=US/O=Google Inc/CN=Google Internet Authority G2
---
No client certificate CA names sent
---
SSL handshake has read 3238 bytes and written 432 bytes
---
New, TLSv1/SSLv3, Cipher is AES128-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : AES128-SHA
    Session-ID: A87773B6BC8885E8A62FFDDBCEBDB3AC501D9CE1F2F568E51987E6841589986C
    Session-ID-ctx: 
    Master-Key: 78822452907D22E8C051732040DF144935917C1222DB1FCA67DA0548B974FC2AD228AF0D0B4222BA53453D8DAB10939B
    Key-Arg   : None
    Start Time: 1490021678
    Timeout   : 300 (sec)
    Verify return code: 20 (unable to get local issuer certificate)
---
+OK Gpop ready for requests from 110.136.134.23 u30mb12032308oof
Atau biar lebih gampang download saja: Biar default $PATH bisa digunakan untuk semua user dalam 1 box lebih baik ada simpan di /usr/src/crypto/openssl/certs/.
$ su -
# cd /usr/src/crypto/openssl/certs/
# wget --no-check-certificate -O Equifax_Secure_Certificate_Authority.pem https://www.geotrust.com/resources/root_certificates/certificates/Equifax_Secure_Certificate_Authority.cer
# chmod 644 Equifax_Secure_Certificate_Authority.pem
# openssl x509 -in Equifax_Secure_Certificate_Authority.pem -fingerprint -subject -issuer -serial -hash -noout 
SHA1
Fingerprint=D2:32:09:AD:23:D3:14:23:21:74:E4:0D:7F:9D:62:13:97:86:63:3A
subject= /C=US/O=Equifax/OU=Equifax Secure Certificate Authority
issuer= /C=US/O=Equifax/OU=Equifax Secure Certificate Authority
serial=35DEF4CF594f1775
# c_rehash .
# file 594f1775.*
594f1775.0: symbolic link to `Equifax_Secure_Certificate_Authority.pem'
4. File² yg diperlukan $HOME, diataranya ~/.fetchmailrc:
$ cat .fetchmailrc
poll pop.gmail.com
proto POP3
user budsz@indofreebsd.or.id
password xxxxxx
options nokeep ssl sslcertpath /usr/src/crypto/openssl/certs smtp smtp.gmail.com
mda "formail -bcYzq- | /usr/local/bin/maildrop"
$ grep "set sendmail" .muttrc
set sendmail="/home/budsz/gmail-smtp.sh"
$ cat gmail-smtp.sh
#!/bin/sh
/usr/local/sbin/ssmtp -au "budsz@indofreebsd.or.id" -ap "xxxxxx" $@
$ chmod 700 gmail-smtp.sh
$ cat .mailfilter
PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
SENDMAIL="/usr/local/sbin/ssmtp"
SHELL="/bin/sh"
VERBOSE="0"
LOGNAME="$HOME/Mail/Log"
LOG="$HOME/Mail/log"
DEFAULT="$HOME/Mail/Inbox"
MAILDIR="$HOME/Mail"

`reformail -D 8000 duplicate.cache`
if ( $RETURNCODE ==0 )
exit
Silakan isikan filter mail selengkapnya, kita test nge-pop skg:
$ fetchmail -va -f ~/.fetchmailrc
fetchmail: 6.3.8 querying pop.gmail.com (protocol POP3) at Sun Jul  1 19:44:58 2007: poll started
Trying to connect to 72.14.253.109/995...connected.
fetchmail: Issuer Organization: Equifax
fetchmail: Unknown Issuer CommonName
fetchmail: Server CommonName: pop.gmail.com
fetchmail: pop.gmail.com key fingerprint: 59:51:61:89:CD:DD:B2:35:94:BB:44:97:A0:39:D5:B4
fetchmail: POP3< +OK Gpop ready for requests from 125.163.77.180 y11pf4448332pod
fetchmail: POP3> CAPA
fetchmail: POP3< +OK Capability list follows
fetchmail: POP3< USER
fetchmail: POP3< RESP-CODES
fetchmail: POP3< EXPIRE 0
fetchmail: POP3< LOGIN-DELAY 300
fetchmail: POP3< X-GOOGLE-VERHOEVEN
fetchmail: POP3< UIDL
fetchmail: POP3< .
fetchmail: POP3> USER budsz@indofreebsd.or.id
fetchmail: POP3< +OK send PASS
fetchmail: POP3> PASS *
fetchmail: POP3< +OK Welcome.
fetchmail: POP3> STAT
fetchmail: POP3< +OK 1 1835
1 message for budsz@indofreebsd.or.id at pop.gmail.com (1835 octets).
fetchmail: POP3> LIST 1
fetchmail: POP3< +OK 1 1835
fetchmail: POP3> RETR 1
fetchmail: POP3< +OK message follows
reading message budsz@indofreebsd.or.id@gmail-pop.l.google.com:1 of 1 (1835 octets)
#*********** flushed
fetchmail: POP3> DELE 1
fetchmail: POP3< +OK marked for deletion
fetchmail: POP3> QUIT
fetchmail: POP3< +OK Farewell.
fetchmail: 6.3.8 querying pop.gmail.com (protocol POP3) at Sun Jul  1 19:45:02 2007: poll completed
fetchmail: normal termination, status 0
5. Dah segitu aja, skg ambil coke dingin + rokok Djarum Super sambil dengerin MP3 Megadeth :-). 
Sumber :
http://www.google.com/
http://souptonuts.sourceforge.net/postfix_tutorial.html http://mogrify.homelinux.org/2006/01/03/using-mutt-with-gmail/

22 Maret 2001

Custom Debian kernel

Download and install kernel-source-2_2_1_2_2_1-1.deb and other needed files with dselect. Note - this assumes you are upgrading from a 2.0.38 kernel.
# cd /usr/src
# tar xvzf kernel-source-2.2.1.tar.gz -C /usr/src
# mv /usr/src/linux /usr/src/2.0.38
# mv /usr/src/kernel-source-2.2.1/ /usr/src/linux/
# cd linux
# make menuconfig
The following details the selected kernel switches (M = as module, * = in kernel). Code maturity level options. Exclude Prompt for development and/or incomplete code/drivers.
Processor type and features
586/k5/5x86/6x86
* Symmetric multiprocessing support

Loadable module support
* Enable loadable module support
* Kernel module loader

General Setup
* Networking support
* PCI support
* PCI quirks
* Backward compatible /proc/pci
* System V IPC
* Sysctl support
M Kernel support a.out libraries
* Kernel support for ELF binaries
* Kernel support for MISC binaries
M Parallel port support

Plug and Play Support None

Block Devices
* Normal PC floppy disk support
* Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support
* Include IDE/ATA-2 DISK support
* Include IDE/ATAPI CDROM support
* Generic PCI IDE chipset support
* Generic PCI bus-master DMA supprt
* Use DMA by defualt when available

Networking options
* Packet socket
* Socket Filtering
* Kernel/user netlink socket
* Netlink device emulation
* Network firewall
* Unix domain sockets
* TCP/IP networking
* IP: firewalling
* IP: always defragment
* IP: transparent proxy support
* IP: Masquerading
* IP: ICMP Masquerading
* IP: TCP syncookie support
* IP: Drop source routed frames
* IP: Allow large windows

SCSI Support None

Network device support
* Network device support
M Dummy net driver support
* Ethernet (10 or 100Mbit)
* Other ISA cards
* NE2000/NE1000 support
M PPP (point to point) support

Amateur radio support None
ISDN subsystem None
CD-ROM drivers None

Character devices
* Virtual terminal
* Support for console on virtual terminal
* Standard/generic (dumb) serial support
* Unix98 PTY support
(256) maximum number of Unix98 PTY's
M Parallel printer support

Filesystems
* Kernel automounter support
M DOS FAT fs support
M MSDOS fs support
M VFAT (windows95) fs support
* ISO 9660 CDROM filesystem support
* /proc filesystem support
* /dev/pts filesystem for Unix98 PTYs
* Second extended fs support

Network File Systems
* NFS Filesystem support
M SMB filesystem support
M SMB Win95 bug work-around

Partition Types None

Native Language Support
M Codepage 850 (Europe)

Console drivers
* VGA Text console
* Video mode selection support

Sound None

Kernel Hacking None

Exit, Yes to 'Save Changes'
Put a floppy disk in A:, then type:
# make dep && make clean && make modules && make modules_install && make bzdisk
The compilation takes around 40 minutes on my PC (P100). After compilation, a bzImage is placed in /usr/src/linux/arch/i386/boot and a copy put onto a floppy disk. The file /vmlinuz is the kernel that will be booted when the PC is started with no floppy boot disk in. So, once the version on the floppy disk is working correctly, save a copy of the old kernel:
# cp /vmlinuz /vmlinuz.2.0.38
Then copy the new one over it:
# cp /usr/src/linux/arch/i386/boot/bzImage /vmlinuz
Then run the linux loader program:
# lilo
Now reboot!