Seseorang mengatakan kepada saya bahwa ini mungkin, tetapi saya tidak dapat menemukan apa pun di google atau halaman manual.
Saya perlu melarang IP untuk jangka waktu tertentu, dan kemudian membatalkannya secara otomatis.
Seseorang mengatakan kepada saya bahwa ini mungkin, tetapi saya tidak dapat menemukan apa pun di google atau halaman manual.
Saya perlu melarang IP untuk jangka waktu tertentu, dan kemudian membatalkannya secara otomatis.
Jawaban:
Jika Anda bermaksud iptables untuk menghapus aturan dengan sendirinya, Anda tidak akan bisa melakukannya, sejauh yang saya tahu. Apa tujuan dari ini? Jika Anda memerlukan semacam pelarangan sementara otomatis solusi standarnya adalah fail2ban .
Atau Anda dapat menggunakan pekerjaan cron untuk menghapus aturan yang Anda tambahkan, atau, lebih baik jika Anda ingin melakukannya secara interaktif, suatu 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 yang --seconds
pilihan mungkin bisa membantu, tergantung pada kebutuhan Anda yang sebenarnya. man iptables
untuk informasi lebih lanjut.
/bin/sh
secara default. Tapi itu mungkin tidak akan menjadi masalah dalam kasus ini.
Letakkan komentar dengan cap waktu (mungkin beberapa detik sejak zamannya) dalam aturan. Sapu berkala untuk aturan kedaluwarsa.
Perhatikan bahwa kernel linux terbaru memiliki dukungan untuk pemuatan dinamis alamat IP ke dalam cache yang dikonsultasikan oleh aturan iptable dan 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"; }'
Tentu saja Anda bisa iptables -D INPUT $1
daripada mencetak perintah.
iptables -L FORWARD --line-numbers | sort -r | awk 'substr($8,1,4) == "exp@" && substr($8,5) < systime() { systems("iptables -D FORWARD " $1) }'
mana aturan dibuat seperti:iptables -A FORWARD -j DROP -m comment --comment "exp@EPOCH"
iptables -L FORWARD --line-numbers | tac | perl -walne 'system "iptables -D FORWARD $F[0]" if $F[-2] =~ /^expire=(\d+)$/ and $1<time()'
iptables memiliki metode untuk secara otomatis menambahkan alamat IP 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 setiap 60 detik.
Jika Anda ingin mengizinkan sejumlah upaya dalam rentang waktu tertentu, seperti 4 dalam 5 menit, dan jika gagal maka daftar hitam untuk jangka waktu yang lebih lama, seperti 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 "black", dan 2 daftar; "timer", dan "daftar hitam".
Secara singkat; rantai terakhir yang ditunjukkan di atas adalah "pintu" ke dalam rantai ssh.
Opsi "--reap" memberitahu kernel untuk mencari melalui daftar dan membersihkan semua item yang lebih tua dari batas waktu yang ditentukan; 5 menit untuk daftar "timer", dan 24 jam untuk daftar "blacklist".
Catatan: ruang tambahan untuk keterbacaan, dan opsional dalam skrip shell Anda.
IPTables memiliki fitur yang dibuat khusus untuk ini: IP Set. Anda membuat aturan sekali dan tetap seperti biasa tetapi memeriksa dalam satu set ips (atau port) untuk kecocokan. Yang keren adalah set ini dapat diperbarui secara dinamis dan efisien tanpa mengganggu sisa firewall.
Jadi, untuk menggunakannya, Anda masih harus menggunakan at
atau cron
untuk menjadwalkan penghapusan.
Anda dapat menggunakan fail2ban untuk mencekal alamat ip dan mengonfigurasi lamanya waktu alamat akan diblokir.
Seperti yang telah dikatakan seseorang: Anda harus menggunakan ipset untuk fitur ini.
ipset dapat menambahkan alamat ip dengan nilai batas waktu. Ketika batas waktu berakhir, catatan akan dihapus secara otomatis dari ipset.
timeout
All set types supports the optional timeout parameter when creating a set and adding entries. The value of the timeout parameter for the create command means the default timeout value (in seconds) for new entries. If a set is created with timeout support, then the same timeout option can be used to specify non-default timeout values when adding entries. Zero timeout value means the entry is added permanent to the set. The timeout value of already added elements can be changed by readding the element using the -exist option. Example:
ipset create test hash:ip timeout 300
ipset add test 192.168.0.1 timeout 60
ipset -exist add test 192.168.0.1 timeout 600
http://ipset.netfilter.org/ipset.man.html
Ini adalah cara yang lebih baik untuk mengendalikan perilaku ini.
Bergantung pada apa yang ingin Anda capai, netfilter terkini atau modul waktu dapat digunakan untuk melakukannya.
Keduanya didokumentasikan di halaman manual iptables .