Selain menggunakan ModSecurity, cara alternatif untuk memblokir pengakses yang membuat permintaan
ke domain tertentu adalah dengan menggunakan iptables
. IPtables adalah utilitas linux yang memungkinkan Anda mengonfigurasi aturan firewall pada tingkat OS
seperti memblokir berdasarkan alamat IP, port dan protokol.
iptables #
Berikut adalah aturan firewall yang dapat Anda gunakan untuk memblokir IP yang membuat permintaan ke domain tertentu.
iptables -A INPUT -p tcp --match multiport --dport 80,443 \
-m string --string 'DOMAIN' --algo bm -j DROP
iptables + ipset #
Buat file index.php lalu tambahkan baris berikut.
<?php
// contents of FORBIDDEN.YourDomain.com/index.php
// spits out one UDP packet at the web visitor's port 911
// the 911 packet is intended to be detected, processed and dropped with firewall rules
$remoteaddr = $_SERVER['REMOTE_ADDR'];
$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_sendto($sock, "NOPE", 4, 0, $remoteaddr, 911);
socket_close($sock);
Kemudian buat ipset baru dengan nama ipset_temp_blocklist
lalu atur timeout selama 4 jam (14400 detik).
ipset create ipset_temp_blocklist \
hash:ip \
family inet \
hashsize 4096 \
maxelem 65536 \
timeout 14400 \
counters \
comment
Selanjutnya buat rule iptables dengan chain ADD_TEMP_BAN
seperti berikut.
iptables -N ADD_TEMP_BAN
iptables -A ADD_TEMP_BAN -j SET --add-set ipset_temp_blocklist dst
iptables -A ADD_TEMP_BAN -j DROP
iptables -A OUTPUT -p udp --dport 911 -j ADD_TEMP_BAN
Rule iptables tersebut akan membuat IP pengakses skrip PHP dapat dikumpulkan ke dalam ipset ipset_temp_blocklist
.
Lalu tambahkan rule berikut untuk memblokir akses masuk ke port 80 (http) dan 443 (https).
iptables -A INPUT -i eth0 -p tcp -m multiport --dports 80,443 -m set --match-set ipset_temp_blocklist src -j DROP
Gunakan perintah berikut untuk melihat list IP yang diblokir.
ipset list ipset_temp_blocklist
Referensi: