Untuk menggunakan iptables yang support string match, maka kernel Linux yang dipakai harus support juga. Silakan diperiksa (pada kernel 2.6.23.9) di Networking —> Networking options —> Network packet filtering framework (Netfilter) —> Core Netfilter Configuration —> string match support) atau CONFIG_NETFILTER_XT_MATCH_STRING=y (atau =m jika sebagai modul) di file .config. Download filesnya disini:
- iptables-1.3.5-1.2.1.i386.rpm
(md5: ffdbcf09c33c327f67f59a275a3e2e04) - iptables-1.3.5-1.2.1.x86_64.rpm
(md5: d2c12208c04fde63f27d7228e5d6afb7) - iptables-1.3.5-1.2.1.src.rpm
(md5: 5742fae1466a4439c4bd16654a8b24e0)
Nah, untuk mengetest iptables sudah support string atau belum tinggal dicoba diketik: iptables -m string seharusnya muncul kira-kira seperti ini:
You must specify `–string’ or `–hex-string’
Kalau muncul seperti ini berarti masih belum disupport:
Couldn’t load match `string’:/lib/iptables/libipt_string.so: cannot open shared object file: No such file or directory
Sekarang untuk mencobanya bikin sebuah rule yang sederhana, misalnya semua paket yang masuk yang mengandung string ‘coba’ akan kita log:
iptables -A INPUT -m string --algo kmp --string "coba" -j LOG
Kemudian buat suatu program yang listen di sembarang port, misalnya disini port 6789, dengan netcat:
nc -l -p 6789
Buka terminal satu lagi kemudian coba telnet ke localhost port 6789:
telnet localhost 6789
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
ini baris satu
coba
quit
^]quit
telnet> quit
Connection closed.
Kemudian coba lihat di file syslog, maka akan terdapat entry kira-kira seperti ini:
Dec 11 14:56:25 palestine kernel: IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 src=127.0.0.1 DST=127.0.0.1 LEN=58 TOS=0x10 PREC=0x00 TTL=64 ID=29877 DF PROTO=TCP SPT=62763 DPT=6789 WINDOW=65 RES=0x00 ACK PSH URGP=0
Berati iptables dengan string match support sudah sukses. Jangan lupa, rule diatas hanya mengelog saja, tinggal diubah untuk kebutuhan yang sesuai :)