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