OpenBSD PF Firewall for Small Office Web Server

Bismillah,

This is configurations setting for protect Small Office web server
from internet, for more information about OpenBSD pf:

$ man pf.conf

I use tutorial from OpenBSD website http://www.openbsd.org/faq/pf/example1.html
as a template to write tutorial. And this tutorial is focused on users
of OpenBSD 5.6

The network is setup like this:

[ COMP1 ]    [ server ]
      |            |
   ---+------+-----+------- re0 [ OpenBSD ] udav0 -------- ( Internet )
             |
         [ COMP2 ]

The objectives are:

  1. Use a “default deny” filter ruleset.
  2. Allow the following incoming traffic to the firewall from the Internal:
    • SSH (TCP port 22): this will be used for maintenance of the firewall machine (only from 192.168.0.1).
  3. Redirect TCP port https connection attempts (which are attempts to access a web server) to computer “server”. Also, permit TCP port https traffic destined for “server” through the firewall.
    • Proxy the handshake. With the handshake proxied, PF itself will complete the handshake with the client, initiate a handshake with the server, and then pass packets between the two. In the case of a TCP SYN flood attack, the attacker never completes the three-way handshake, so the attacker’s packets never reach the protected server, but legitimate clients will complete the handshake and get passed. This minimizes the impact of spoofed TCP SYN floods on the protected service, handling it in PF instead.
    • Limits the maximum number of connections per source to 100
    • Rate limits the number of connections to 15 in a 5 second span
    • Puts the IP address of any host that breaks these limits into the table
    • For any offending IP addresses, flush any states created by this rule.
    • NAT on the external interface for any packets coming from “server”.
  4. By default, reply with a TCP RST or ICMP Unreachable for blocked packets.
    • Offers a Unicast Reverse Path Forwarding (uRPF) feature.
    • Offers Protection from Reverse Telnet.
    • Block Internet access from each internal computer.
    • Do not permit remote connections to X11.
    • Block ICMP traffic.
  5. Make the ruleset as simple and easy to maintain as possible.
#	$Id: pf.conf_gateway,v 1.8 2014/12/02 21:39:58 muntaza Exp $
#	$OpenBSD: pf.conf,v 1.53 2014/01/25 10:28:36 dtucker Exp $

# macros
ext_if = "udav0"
int_if = "re0"

server = "192.168.0.3"
tcp_services = "https"

laptop_admin = "192.168.0.1"
local = "ssh"

# options
set skip on lo

# match rules
match out on $ext_if inet from $server to any nat-to $ext_if:0

# filter rules
block return	# block stateless traffic

table <abusive_hosts> persist
block in quick from <abusive_hosts>

pass in on $ext_if inet proto tcp to $ext_if \
    port $tcp_services rdr-to $server port $tcp_services \
    flags S/SA synproxy state \
    (max-src-conn 100, max-src-conn-rate 15/5, overload <abusive_hosts> flush)

pass out on $int_if inet proto tcp to $server \
    port $tcp_services


pass in on $int_if inet proto tcp from $laptop_admin to $int_if \
    port $local

pass out on $int_if inet proto tcp from $int_if to $laptop_admin \
    port $local


block in quick from urpf-failed to any	# use with care

# By default, do not permit remote connections to X11
block return in on ! lo0 proto tcp to port 6000:6010

Alhamdulillah
Semoga Allah Ta’ala, menjadikan usaha ini bermanfaat
dan memudahkan ana untuk mukim di Banjarbaru.

Abu Husnul Khatimah Muhammad Muntaza bin Hatta

Daftar Pustaka
1. http://www.openbsd.org/faq/pf/index.html
2. pf.conf(5) manual page

Auto Shutdown OpenBSD 5.6 when Battery is critical with Python

Bismillah,

Today, I will try to write in english, sorry for my bad english, he..he…

this is my script, I run it with cron every 3 minute, that script is check capasity of battery, if it less than 15%, exec /sbin/halt -p

#!/usr/local/bin/python

import os
from subprocess import Popen
from subprocess import PIPE
from subprocess import call

total = os.popen('sysctl hw.sensors.acpibat0.watthour0 | cut -b 31-35')
sisa = os.popen('sysctl hw.sensors.acpibat0.watthour3 | cut -b 31-35')

persen = round(100 * (float(sisa.read(5)) / float(total.read(5))), 2)
print 'sisa baterai ', persen, '%'

p1 = Popen(["sysctl", "hw.sensors.acpibat0"], stdout=PIPE)
p2 = Popen(["grep", "discharging"], stdin=p1.stdout, stdout=PIPE)
p1.stdout.close()  # Allow p1 to receive a SIGPIPE if p2 exits.
output = p2.communicate()[0]

if output and (persen < 15):
    print "SHUTDOWN 15%"
    call(["/sbin/halt", "-p"])

if persen < 5:
    print "SHUTDOWN 5%"
    call(["/sbin/halt", "-p"])

add to crontab:

*/3   *   *   *   *    /home/muntaza/bin/cek_shutdown.py

I also add to my /etc/rc.local, to shutdown my laptop at boot time, if it not connect to AC Adaptor and less than 15% of capasity battery

/home/muntaza/bin/cek_shutdown.py

In my mine, using python for is more fun than shell script, he..he..

I rewrite my script, and use python 3:

#!/usr/local/bin/python3.3

from subprocess import Popen, PIPE, call

p1 = Popen(["sysctl", "hw.sensors.acpibat0.watthour0"], stdout=PIPE)
p2 = Popen(["cut", "-b", "31-35"], stdin=p1.stdout, stdout=PIPE)
p1.stdout.close()
full_capacity = p2.communicate()[0]

p1 = Popen(["sysctl", "hw.sensors.acpibat0.watthour3"], stdout=PIPE)
p2 = Popen(["cut", "-b", "31-35"], stdin=p1.stdout, stdout=PIPE)
p1.stdout.close()
remaining_capacity = p2.communicate()[0]

p1 = Popen(["sysctl", "hw.sensors.acpibat0"], stdout=PIPE)
p2 = Popen(["grep", "discharging"], stdin=p1.stdout, stdout=PIPE)
p1.stdout.close()
discharging = p2.communicate()[0]

percent = round(100 * (float(remaining_capacity) / float(full_capacity)), 2)
print('battery lifetime', percent, '%')

if discharging and (percent < 15):
    print ("SHUTDOWN 15%")
    call(["/sbin/halt", "-p"])

if percent < 5:
    print ("SHUTDOWN 5%")
    call(["/sbin/halt", "-p"])

And this is script use apm to cek battery:

#!/bin/ksh

charger=`apm -a`
battery=`apm -l`

echo -n "battery lifetime "; echo -n $battery; echo " %"

if [[ $battery -le 15 && $charger == 0 ]]; then
    echo "Shutdown 15%"
    /sbin/halt -p
elif [ $battery -le 5 ]; then
    echo "Shutdown 5%"
    /sbin/halt -p
fi

Walhamdulillah

Rilis OpenBSD 5.1

OpenBSD 5.1 sudah bisa di download sejak hari ini, tanggal 2 Mei 2012. berita lengkap bisa di cek di http://openbsd.org/51.html

untuk download, dialamat ini http://ftp.openbsd.org/pub/OpenBSD/5.1/

Catatan khusus bagi user yang masih menggunakan OpenBSD PF versi 4.8 dan 4.9, yang akan mengupdrade ke OpenBSD PF versi 5.1, untuk membolehkan akses FTP dari user LAN dengan perintah “divert-to” menggantikan perintah “rdr-to” sebagai berikut:

pass in quick on $int_if inet proto tcp to port 21 divert-to 127.0.0.1 port 8021

selengkapnya ada di http://www.openbsd.org/faq/pf/ftp.html

Install Ulang atau Upgrade.
Saya memiliki cara pandang tersendiri tentang upgarade dan install ulang. Saya memilih untuk Install Ulang dalam selang 1 tahun, yaitu di Bulan Desember dengan rilis November. Adapun untuk rilis Mei, saya hanya melakukan update kernel dengan cara di http://muntaza.wordpress.com/2011/01/13/compile-kernel-openbsd-4-8-stable/

setelah muncul rilis November, solusi untuk upgrade dari versi genap (November) misal 4.6 ke versi 4.8, tidak disarankan dan tidak disupport oleh develover. Maka Install Ulang adalah solusinya. Catat semua konfigurasi pada server saat ini, back-up file yang dianggap penting, lalu INSTALL ULANG.

Adapun kalau saat ini server anda telah berada di versi 5.0, tidak masalah untuk melakukan UPGRADE ke versi 5.1, dan saya ucapkan selamat melakukan UPGRADE, he… he…

Bila server anda adalah versi 4.9 kebawah, INSTALL ULANG adalah solusinya, dan saya Ucapkan selamat melakukan INSTALL ULANG, he… he…

Konversi Angka Desimal, Binary, Octal, Hexadesimal dengan Python Programming

Bismillah,

Dibawah ini adalah source kode dalam bahasa Python untuk Konversi Angka ke Desimal, Binary, Octal dan Hexadesimal.

#!c:/Python32/python.exe

# Copyright 2012 @ Muhammad Muntaza bin Hatta
# Lisensi: GPL v3                             
# Program konversi Angka
# web: muntaza.wordpress.com                  
# email: muntaza@binhatta.com                 

print ("Program konversi Desimal, Binary, Octal, Hexadecimal")
print ("Angka Binary diawali 0b, Hexa diawali 0x, Oktal diawali 0o")
print ("Pilih [1] untuk Desimal ke Binary")
print ("Pilih [2] untuk Desimal ke Hexa")
print ("Pilih [3] untuk Desimal ke Octal")
print ("Pilih [4] untuk Binary ke Desimal")
print ("Pilih [5] untuk Binary ke Hexa")
print ("Pilih [6] untuk Binary ke Oktal")
print ("Pilih [7] untuk Hexa ke Binary")
print ("Pilih [8] untuk Hexa ke Desimal")
print ("Pilih [9] untuk Hexa ke Octal")
print ("Pilih [10] untuk octal ke Binary")
print ("Pilih [11] untuk octal ke Desimal")
print ("Pilih [12] untuk octal ke Hexa")

i = int(input("Masukkan pilihan anda: "))
if i == 1:
	x = int(input("masukkan angka Desimal: "))
	print (bin(x))
elif i == 2:
	x = int(input("masukkan angka Desimal: "))
	print (hex(x))
elif i == 3:
	x = int(input("masukkan angka Desimal: "))
	print (oct(x))
elif i == 4:
	x = int(input("masukkan angka Binary: "),2)
	print (x)
elif i == 5:
	x = int(input("masukkan angka Binary: "),2)
	print (hex(x))
elif i == 6:
	x = int(input("masukkan angka Binary: "),2)
	print (oct(x))
elif i == 7:
	x = int(input("masukkan angka Hexa: "),16)
	print (bin(x))
elif i == 8:
	x = int(input("masukkan angka Hexa: "),16)
	print (x)
elif i == 9:
	x = int(input("masukkan angka Hexa: "),16)
	print (oct(x))
elif i == 10:
	x = int(input("masukkan angka Octal: "),8)
	print (bin(x))
elif i == 11:
	x = int(input("masukkan angka Octal: "),8)
	print (x)
elif i == 12:
	x = int(input("masukkan angka Octal: "),8)
	print (hex(x))
else:
	print("Pilihan anda salah");

Dibawah ini screenshoot saat menjalankan program konversi:

Semoga Tulisan ini bermanfaat

Walhamdulillah. Semoga Allah Rabbuna Jalla Wa ‘Ala Memudahkan saya untuk tinggal di Banjarbaru

ditulis oleh: Al faqir ilaa maghfirati rabbihi Abu Husnul Khatimah Muhammad Muntaza bin Hatta

Mudah Belajar Sistem Digital dengan Programming Python

Bismillah,

Dibawah ini adalah Pengoperasian Operator Logika dengan Bahasa Python. Berikut daftar Operator Logika pada Python:
AND –> &
OR –> |
XOR –> ^
NOT –> not

Contoh Pengoperasian:
A AND B –> A & B
A OR B –> A | B
A XOR B –> A ^ B
NOT A –> not A

Dibawah ini contoh source kode python:
1. sd1.py:

#!c:/Python32/python.exe

# Copyright 2012 @ Muhammad Muntaza bin Hatta
# Lisensi: GPL v3                             
# Program dengan Operator LOGIKA
# web: muntaza.wordpress.com                  
# email: muntaza@binhatta.com                 

print ("A  \t| B  \t\t| A.B");
print ("=================================================================");

for i in range(2):
	if i == 0:
		A = False
	else:
		A = True
	for j in range(2):
		if j == 0:
			B = False
		else:
			B = True
		print (A, " \t|", B, "  \t| ", A & B);

1. sd2.py:

#!c:/Python32/python.exe

# Copyright 2012 @ Muhammad Muntaza bin Hatta
# Lisensi: GPL v3                             
# Program dengan Operator LOGIKA
# web: muntaza.wordpress.com                  
# email: muntaza@binhatta.com                 

print ("A  \t| B  \t\t| - A \t\t | - B");
print ("=================================================");

for i in range(2):
	if i == 0:
		A = False
	else:
		A = True
	for j in range(2):
		if j == 0:
			B = False
		else:
			B = True
		print (A, " \t|", B, " \t| ", not A, "  \t | ", not B);

3. sd3.py:

#!c:/Python32/python.exe

# Copyright 2012 @ Muhammad Muntaza bin Hatta
# Lisensi: GPL v3                             
# Program dengan Operator LOGIKA
# web: muntaza.wordpress.com                  
# email: muntaza@binhatta.com                 

print ("A  \t| B  \t\t| - A \t\t | - B \t\t| -A + -B");
print ("=================================================================");

for i in range(2):
	if i == 0:
		A = False
	else:
		A = True
	for j in range(2):
		if j == 0:
			B = False
		else:
			B = True
		print (A, " \t|", B, " \t| ", not A, "  \t | ", not B, "\t| ", (not A) | (not B));

4. sd4.py:

#!c:/Python32/python.exe

# Copyright 2012 @ Muhammad Muntaza bin Hatta
# Lisensi: GPL v3                             
# Program dengan Operator LOGIKA
# web: muntaza.wordpress.com                  
# email: muntaza@binhatta.com                 

print ("A  \t| B  \t\t| -(-A + -B)");
print ("=================================================================");

for i in range(2):
	if i == 0:
		A = False
	else:
		A = True
	for j in range(2):
		if j == 0:
			B = False
		else:
			B = True
		print (A, " \t|", B, "  \t| ", not ((not A) | (not B)));

screnshoot program setelah dijalankan:

5. sd5.py:


#!c:/Python32/python.exe

# Copyright 2012 @ Muhammad Muntaza bin Hatta
# Lisensi: GPL v3                             
# Program dengan Operator LOGIKA
# web: muntaza.wordpress.com                  
# email: muntaza@binhatta.com                 

print ("A  \t| B  \t\t| A XOR B");
print ("=================================================================");

for i in range(2):
	if i == 0:
		A = False
	else:
		A = True
	for j in range(2):
		if j == 0:
			B = False
		else:
			B = True
		print (A, " \t|", B, "  \t| ", A ^ B);

6. sd6.py:

#!c:/Python32/python.exe

# Copyright 2012 @ Muhammad Muntaza bin Hatta
# Lisensi: GPL v3                             
# Program dengan Operator LOGIKA
# web: muntaza.wordpress.com                  
# email: muntaza@binhatta.com                 

print ("A  \t| B  \t\t| C \t\t|\t (A XOR B) XOR C ");
print ("=================================================================");

for i in range(2):
	if i == 0:
		A = False
	else:
		A = True
	for j in range(2):
		if j == 0:
			B = False
		else:
			B = True
		for k in range(2):
			if k == 0:
				C = False
			else:
				C = True
			print (A, " \t|", B, "  \t| ", C, "   \t |"
			, (A ^ B) ^ C);

7. sd7.py:

#!c:/Python32/python.exe

# Copyright 2012 @ Muhammad Muntaza bin Hatta
# Lisensi: GPL v3                             
# Program dengan Operator LOGIKA
# web: muntaza.wordpress.com                  
# email: muntaza@binhatta.com                 

print ("A  \t| B  \t\t| C  \t\t|\t  D \t | (A & B) & (C & D) ");
print ("====================================================================");

for i in range(2):
	if i == 0:
		A = False
	else:
		A = True
	for j in range(2):
		if j == 0:
			B = False
		else:
			B = True
		for k in range(2):
			if k == 0:
				C = False
			else:
				C = True
			for l in range(2):
				if l == 0:
					D = False
				else:
					D = True
				print (A, " \t|", B, "  \t| ", C, "   \t |"
				, D, "   \t| ", (A & B) & (C & D));

Screenshoot dari program diatas:

Dari Contoh-contoh diatas, terlihat betapa mudahnya pengoperasian LOGIKA dengan Python. Namun harus diperhatikan urutan Operasinya dengan menggunakan tanda kurung, Misalnya:

(A AND B) OR (C XOR (NOT D))

Urutan Operasinya adalah:
1. A di AND kan dengan B (A AND B)
2. D di NOT kan (NOT D)
3. (NOT D) di XOR kan dengan C
4. (A AND B) di OR kan dengan (C XOR (NOT D))

Bila diterjemahkan kedalam Python menjadi:
(A & B) | (C ^ (not D))

Semoga Tulisan ini bermanfaat

Walhamdulillah. Semoga Allah Rabbuna Jalla Wa ‘Ala Memudahkan saya untuk tinggal di Banjarbaru

ditulis oleh: Al faqir ilaa maghfirati rabbihi Abu Husnul Khatimah Muhammad Muntaza bin Hatta

Mudah Belajar Kalkulus dengan Programming Bahasa C

Bismillah

ini adalah program dalam Bahasa C yang di tujukan untuk mencari turunan dari suatu fungsi dan anti turunannya. Berikut ini source dari program untuk mencari turunan

/* Copyright 2012 @ Muhammad Muntaza bin Hatta *
 * Lisensi: GPL v3                             *
 * Program mencari Turunan suatu Fungsi        *
 * web: muntaza.wordpress.com                  *
 * email: muntaza@binhatta.com                 */


#include <stdio.h>

int main() {
        float k, n;
        printf("Program untuk menghitung Turunan Fungsi f(x) => f\'(x)\n");
        printf("Masukkan konstanta: ");
        scanf("%f", &k);
        printf("Masukkan pangkat: ");
        scanf("%f", &n);

        printf("f(x) = %.2f x^%.2f\n", k, n);
        printf("f\'(x) = %.2f . %.2f x^(%.2f - 1)\n", k, n, n);
        printf("f\'(x) = %.2f x^%.2f\n", k * n, n - 1);
}

Dibawah ini adalah source code untuk mencari anti turunan suatu fungsi

/* Copyright 2012 @ Muhammad Muntaza bin Hatta *
 * Lisensi: GPL v3                             *
 * Program mencari Anti Turunan suatu Fungsi   *
 * web: muntaza.wordpress.com                  *
 * email: muntaza@binhatta.com                 */


#include <stdio.h>

int main() {
        float k, n;
        printf("Program untuk menghitung Anti Turunan f\'(x) => f(x)\n");
        printf("Masukkan konstanta: ");
        scanf("%f", &k);
        printf("Masukkan pangkat: ");
        scanf("%f", &n);

        printf("f\'(x) = %.2f x^%.2f\n", k, n);
        printf("f(x) = ((%.2f / (%.2f + 1)) . (x^(%.2f + 1))) + C \n", k, n, n);
        printf("f(x) = ((%.2f / (%.2f)) . (x^%.2f))  + C\n", k, n + 1, n + 1);
        printf("f(x) = (%.2f . (x^%.2f)) + C  \n", k / (n + 1), n + 1);
}

Pada kedua program ini, konstanta Harus di isi, bila fungsi itu adalah f(x)=X^3, berarti konstantanya bernilai 1.

Berikut ini screenshoot dari program yang dijalankan:

Walhamdulillah. Semoga Allah Rabbuna Jalla Wa ‘Ala Memudahkan saya untuk tinggal di Banjarbaru

ditulis oleh: Al faqir ilaa maghfirati rabbihi Abu Husnul Khatimah Muhammad Muntaza bin Hatta

Minix 3 dengan Qemu diatas Slackware 13.37

Bismillah

Setelah sebelumnya saya menulis tentang Minix 2, saat ini saya ingin menulis tentang proses instalasi Minix 3 dengan Mesin Virtual Qemu. langkah pertama adalah mendownload iso minix 3, dalam hal ini saya memilih versi 3.1.8, karena masih cukup sederhana, dibanding minix 3.2.0 yang baru rilis.

1. download iso minix 3.1.8

bash-4.1$ wget -c http://www.minix3.org/iso/minix3_1_8_ide_r8165.iso.bz2
.........

2. extrack file bz2

bash-4.1$ ls
minix3_1_8_ide_r8165.iso.bz2
bash-4.1$ bunzip2 minix3_1_8_ide_r8165.iso.bz2 
bash-4.1$ ls
minix3_1_8_ide_r8165.iso

3. buat hardisk virtual ukuran 500M

bash-4.1$ qemu-img create -f qcow2 minix3_1_8.hd 500M       
Formatting 'minix3_1_8.hd', fmt=qcow2 size=524288000 encryption=off cluster_size=65536 

keterangan perintah:
qemu-img create (untuk membuat image hardirsk)
-f qcow2 (type image hardisk)
minix3_1_8.hd (nama file hardisk yang dibuat)
500M (ukuran file virtual hardisk 500 MB)

4. jalankan qemu untuk menginstall minix 3

bash-4.1$ qemu-system-i386 -m 128 -cdrom minix3_1_8_ide_r8165.iso -boot d -monitor stdio minix3_1_8.hd 

QEMU 1.0,1 monitor - type 'help' for more information
(qemu)

keterangan:
-m 128 (memory untuk mesin virtual 128 MB)
-cdrom minix3_1_8_ide_r8165.iso (cdrom menggunakan file iso ini)
-boot d (urutan pertama booting pada cdrom)
-monitor stdio (tampilkan command line dari qemu)
minix3_1_8.hd (nama file virtual hardisk tempat minix akan di install)

berikut ini gambar screen shoot dari minix 3.1.8 yang ada di tempat saya.

untuk login, ketik root pada username, lalu tekan enter (tanpa password). hasil setelah login, seperti gambar diatas.

selanjutnya, proses instalasi minix 3. ketik “setup” untuk memulai instalasi. silakan baca setiap pertanyaan dengan seksama, dan biasanya cuma tekan “enter” beberapa kali, kecuali ada pilihan “yes” atau “no” maka harus mengetik “yes” untuk melanjutkan. Tekan pula “Y” ketika diminta.

setelah proses instalasi selesai, ketik “halt” lalu ketik “q” pada command line qemu untuk keluar dari qemu. contohnya:

QEMU 1.0,1 monitor - type 'help' for more information
(qemu) q
bash-4.1$ 

Baik. saat ini telah diluar qemu. kita jalankan qemu langsung dengan virtual hardisk yang telah terinstall minix 3.1.8 tadi.

bash-4.1$ qemu-system-i386 -monitor stdio minix3_1_8.hd 
QEMU 1.0,1 monitor - type 'help' for more information
(qemu) 

tampilan screen shoot seletah di install ke hardisk

selesai. Walhamdulillah. Semoga Allah Rabbuna Jalla Wa ‘Ala Memudahkan saya untuk tinggal di Banjarbaru

ditulis oleh: Al faqir ilaa maghfirati rabbihi Abu Husnul Khatimah Muhammad Muntaza bin Hatta

daftar pustaka:
http://www.minix3.org/ (diakses tanggal 22 maret 2012)
http://minix1.woodhull.com/ (diakses tanggal 22 maret 2012)