Solusi 1:
Jika Anda bermaksud agar iptables menghapus aturan dengan sendirinya, Anda tidak akan dapat melakukannya, sejauh yang saya tahu. Apa tujuan dari ini? Jika Anda memerlukan semacam pelarangan sementara otomatis, solusi standarnya adalah fail2ban.
Atau Anda dapat menggunakan tugas cron untuk menghapus aturan yang Anda tambahkan, atau, lebih baik jika Anda ingin melakukannya secara interaktif, sebuah at
pekerjaan:
iptables -I INPUT -s 192.168.1.100 -j DROP
echo "iptables -D INPUT -s 192.168.1.100 -j DROP" | at @10pm
Lihat juga recent
modul iptables. Ini dengan --seconds
opsi mungkin bisa membantu, tergantung pada kebutuhan Anda yang sebenarnya. man iptables
untuk informasi lebih lanjut.
Solusi 2:
Beri komentar dengan stempel waktu (mungkin beberapa detik sejak zaman) di aturan. Sapu secara berkala untuk aturan yang kedaluwarsa.
Perhatikan bahwa kernel linux terbaru mendukung pemuatan dinamis alamat IP ke dalam cache yang dikonsultasikan oleh aturan iptable, bukan sebagai aturan iptables langsung.
Contoh:
iptables -A INPUT -s 192.168.200.100/32 -m comment --comment "expire=`date -d '+ 5 min' +%s`" -j DROP
iptables -L INPUT -n --line-numbers | tac | perl -ne 'next unless /(^\d+).*expire=(\d+)/; if ($2 < time) { print "iptables -D INPUT $1\n"; }'
Anda tentu saja dapat iptables -D INPUT $1
alih-alih mencetak perintah.
Solusi 3:
iptables memiliki metode untuk menambahkan alamat IP secara otomatis ke daftar jika kondisi yang ditentukan pengguna terpenuhi. Saya menggunakan yang berikut ini untuk membantu menghindari upaya peretasan otomatis ke port ssh saya:
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --name ssh --seconds 60 --reap -j DROP
Ini membantu membatasi upaya otomatis untuk mendapatkan akses ke server dengan membatasi upaya koneksi dari alamat IP yang sama ke satu setiap 60 detik.
Jika Anda ingin mengizinkan sejumlah percobaan dalam jangka waktu tertentu, misalnya 4 dalam 5 menit, dan jika gagal, lalu memasukkannya ke daftar hitam untuk jangka waktu yang lebih lama, misalnya 24 jam, Anda dapat melakukan sesuatu seperti:
iptables -X black
iptables -N black
iptables -A black -m recent --set --name blacklist -j DROP
iptables -X ssh
iptables -N ssh
iptables -I ssh 1 -m recent --update --name blacklist --reap --seconds 86400 -j DROP
iptables -I ssh 2 -m recent --update --name timer --reap --seconds 600 --hitcount 4 -j black
iptables -I ssh 3 -m recent --set --name timer -j ACCEPT
iptables -A INPUT -p TCP --dport ssh -m state --state NEW -j ssh
Di atas, kami membuat 2 rantai; "ssh" dan "hitam", dan 2 daftar; "pewaktu", dan "daftar hitam".
Secara singkat; rantai terakhir yang ditunjukkan di atas adalah "pintu masuk" ke dalam rantai ssh.
- Aturan 1 dalam rangkaian ssh memeriksa apakah IP sumber ada dalam daftar "daftar hitam". Jika demikian, sambungan terputus dan penghitung waktu daftar hitam 24 jam dimulai ulang. Jika aturan 1 salah, maka kita lanjut ke aturan 2.
- Aturan 2 dalam rangkaian ssh memeriksa apakah IP sumber telah melakukan lebih dari 4 upaya koneksi dalam 5 menit. Jika demikian, ia mengirimkan paket ke rantai "hitam" di mana ia ditambahkan ke daftar "daftar hitam". Rantai "hitam" lalu MENGHENTIKAN sambungan, dan selesai.
- Aturan 3 dalam rantai "ssh" hanya tercapai jika aturan 1 dan 2 salah. Jika demikian, paket DITERIMA dan IP sumber ditambahkan ke daftar "timer" sehingga kami dapat memantau frekuensi upaya koneksi.
Opsi "--reap" memberi tahu kernel untuk mencari melalui daftar dan membersihkan item apa pun yang lebih tua dari batas waktu yang ditetapkan; 5 menit untuk daftar "timer", dan 24 jam untuk daftar "blacklist".
catatan:spasi ekstra untuk keterbacaan, dan bersifat opsional dalam skrip shell Anda.
Solusi 4:
IPTables memiliki fitur yang dibuat khusus untuk ini:Kumpulan IP. Anda membuat aturan sekali dan tetap seperti biasa tetapi memeriksa dalam satu set ips (atau port) untuk kecocokan. Kerennya, set ini dapat diperbarui secara dinamis dan efisien tanpa mengganggu firewall lainnya.
Situs web utama, contoh.
Jadi, untuk menggunakannya, Anda tetap harus menggunakan at
atau cron
untuk menjadwalkan penghapusan.
Solusi 5:
Anda dapat menggunakan fail2ban untuk mencekal alamat ip dan mengonfigurasi lamanya waktu larangan alamat.