Menggunakan daftar putih dan daftar hitam dengan iptables
#!/bin/bash
WHITELIST=/whitelist.txt
BLACKLIST=/blacklist.txt
#THIS WILL CLEAR ALL EXISTING RULES!
echo 'Clearing all rules'
iptables -F
#
## Whitelist
#
for x in `grep -v ^# $WHITELIST | awk '{print $1}'`; do
echo "Permitting $x..."
$IPTABLES -A INPUT -t filter -s $x -j ACCEPT
done
#
## Blacklist
#
for x in `grep -v ^# $BLACKLIST | awk '{print $1}'`; do
echo "Denying $x..."
$IPTABLES -A INPUT -t filter -s $x -j DROP
done
Script untuk membuka port
#!/bin/bash
ALLOWEDTCP="80 3128 3784"
ALLOWEDUDP="3128 3784"
#
## Permitted Ports
#
for port in $ALLOWEDTCP; do
echo "Accepting port TCP $port..."
$IPTABLES -A INPUT -t filter -p tcp --dport $port -j ACCEPT
done
for port in $ALLOWEDUDP; do
echo "Accepting port UDP $port..."
$IPTABLES -A INPUT -t filter -p udp --dport $port -j ACCEPT
done
Memblokir portscan
# Attempt to block portscans
# Anyone who tried to portscan us is locked out for an entire day.
iptables -A INPUT -m recent --name portscan --rcheck --seconds 86400 -j DROP
iptables -A FORWARD -m recent --name portscan --rcheck --seconds 86400 -j DROP
# Once the day has passed, remove them from the portscan list
iptables -A INPUT -m recent --name portscan --remove
iptables -A FORWARD -m recent --name portscan --remove
# These rules add scanners to the portscan list, and log the attempt.
iptables -A INPUT -p tcp -m tcp --dport 139 -m recent --name portscan --set -j LOG --log-prefix "Portscan:"
iptables -A INPUT -p tcp -m tcp --dport 139 -m recent --name portscan --set -j DROP
iptables -A FORWARD -p tcp -m tcp --dport 139 -m recent --name portscan --set -j LOG --log-prefix "Portscan:"
iptables -A FORWARD -p tcp -m tcp --dport 139 -m recent --name portscan --set -j DROP
Paket palsu / tidak valid
# Reject spoofed packets
# These adresses are mostly used for LAN's, so if these would come to a WAN-only server, drop them.
iptables -A INPUT -s 10.0.0.0/8 -j DROP
iptables -A INPUT -s 169.254.0.0/16 -j DROP
iptables -A INPUT -s 172.16.0.0/12 -j DROP
iptables -A INPUT -s 127.0.0.0/8 -j DROP
#Multicast-adresses.
iptables -A INPUT -s 224.0.0.0/4 -j DROP
iptables -A INPUT -d 224.0.0.0/4 -j DROP
iptables -A INPUT -s 240.0.0.0/5 -j DROP
iptables -A INPUT -d 240.0.0.0/5 -j DROP
iptables -A INPUT -s 0.0.0.0/8 -j DROP
iptables -A INPUT -d 0.0.0.0/8 -j DROP
iptables -A INPUT -d 239.255.255.0/24 -j DROP
iptables -A INPUT -d 255.255.255.255 -j DROP
# Drop all invalid packets
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP
iptables -A OUTPUT -m state --state INVALID -j DROP
Blokir serangan Smurf
# Stop smurf attacks
iptables -A INPUT -p icmp -m icmp --icmp-type address-mask-request -j DROP
iptables -A INPUT -p icmp -m icmp --icmp-type timestamp-request -j DROP
iptables -A INPUT -p icmp -m icmp -j DROP
# Drop excessive RST packets to avoid smurf attacks
iptables -A INPUT -p tcp -m tcp --tcp-flags RST RST -m limit --limit 2/second --limit-burst 2 -j ACCEPT
Blokir ICMP (alias ping)
# Don't allow pings through
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j DROP
iptables
di baris 8, dan kemudian di$IPTABLES
kemudian hari. Apakah cukup hanya dengan digunakan diiptables
mana-mana? Kalau tidak, saya kira Anda perlu menetapkan sesuatu sepertiIPTABLES=/sbin/iptables
benar?Optimalkan Performa netfilter Menggunakan
ipset
Jika Anda menulis banyak aturan serupa hanya berdasarkan IP, port, atau keduanya, pertimbangkan
ipset
untuk mengoptimalkan kinerja netfilter.Sebagai contoh:
Ini berarti bahwa sebuah paket dengan alamat sumber 192.168.251.177 harus terlebih dahulu melewati ratusan aturan sebelum bisa mendapatkan putusan ACCEPT.
Tentu saja, sysadmin yang berpengalaman akan membagi aturan dengan subnet. Tapi itu tetap berarti ratusan aturan.
ipset
untuk menyelamatkan!Pertama, tentukan IP Set
ipmap
jenis:Kemudian, isi dengan alamat:
Akhirnya, ganti ratusan aturan iptables di atas dengan satu aturan:
Ketika sebuah paket tiba, netfilter akan melakukan pencarian bitmap sangat cepat untuk IP sumber paket (src) terhadap
Allowed_Hosts
IP Set. Semua paket yang berasal dari 192.168.0.0/16 akan mengalami satu aturan. Dan percayalah bahwa pencarian bitmap setidaknya dua urutan besarnya lebih cepat daripada melakukan ratusan iptables memeriksa aturan.ipset
tidak terbatas pada alamat IP. Ia juga dapat mencocokkan berdasarkan port, IP-port tuple, alamat jaringan / subnet, IP-MAC tuple, dan seterusnya dan seterusnya. Dan itu dapat mencocokkan kriteria tersebut sebagai sumber atau tujuan atau campuran keduanya (dalam kasus tupel).Dan akhirnya, dengan
ipset
Anda dapat secara otomatis memasukkan alamat IP dalam daftar hitam / daftar putih. Daftar hitam / daftar putih ini juga dapat 'menua', sehingga secara otomatis menghapus alamat IP setelah jumlah waktu yang dapat dikonfigurasi berlalu.Silakan merujuk ke
ipset
halaman manual untuk lebih jelasnya.CATATAN SANGAT PENTING:
Beberapa distro Linux mungkin tidak memiliki dukungan 'out-of-the-box' untuk
ipset
(misalnya Ubuntu 10,04 memiliki masalah ini). Pada sistem ini satu metode adalah menginstalipset
dari kode sumber.Sebagai gantinya, unduh
ipset
sumber dari situs webnya: http://ipset.netfilter.org/install.htmlAtau, jika Anda menggunakan
xtables-addons
, ipset yang termasuk dalam sumbernya: http://xtables-addons.sourceforge.net/sumber
Tambahkan komentar ke aturan Anda:
sumber
Blokir Serangan TCP yang Terkenal
Tambahkan aturan berikut, sebaiknya di
-t raw -A PREROUTING
Serangan yang diblokir adalah, masing-masing:
(jangan ragu untuk mengedit nama serangan di atas)
sumber
-p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP
bisa dihapus, karena-p tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
akan menangkap setiap paket yang bisa diblokir.Mengaktifkan NAT
echo 1 > /proc/sys/net/ipv4/ip_forward
/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Langkah 1 mengatur parameter kernel untuk memungkinkan penerusan ip, langkah 2 mengatur aturan iptables yang memungkinkan NAT pada antarmuka eth0.
sumber
/etc/sysctl.conf
net.ipv4.ip_forward = 1
. (Dengan asumsi Red Hat atau turunannya.)Blokir serangan ICMP
Tambahkan aturan berikut, sebaiknya di
-t raw -A PREROUTING
Aturan pertama memblokir semua paket ICMP yang "bendera fragmentasi" bukan 0. (ICMP tidak boleh difragmentasi; mereka harus membawa muatan kecil)
Aturan kedua memblokir paket ICMP unfragmented yang terlalu besar.
sumber
menggunakan FireHOL - pembungkus iptables yang nyaman
Saya menemukan itu jauh lebih intuitif daripada perintah iptables langsung. Khusus untuk orang-orang dengan pengalaman masa lalu dengan firewall lain:
sumber
(dari file iptables_tricks.txt saya, dikompilasi ulang dari banyak tempat: P)
Membuat iptables menunggu 15 detik antara koneksi baru dari IP yang sama pada port 22 (SSH):
sumber
-A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
-A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 5 --rttl --name SSH -j DROP
Tutorial video IPTABLES
Episode 1 http://www.youtube.com/watch?v=ldB8kDEtTZA&feature=player_embedded
Episode 2 http://www.youtube.com/watch?v=aDaEXxRHeXY&feature=related
Episode terakhir
http://www.youtube.com/watch?v=JojqHKcSxpo&feature=player_embedded
Akan menjadi awal yang baik untuk pemula.
sumber
Set IP ditinjau kembali
Sudah ada jawaban yang menyebutkan set IP. Namun, ini agak satu dimensi karena berfokus pada perolehan kinerja dibandingkan aturan klasik dan fakta bahwa set IP mengurangi masalah yang dimiliki seseorang dengan banyak alamat IP individual yang tidak dapat dengan mudah dinyatakan sebagai subnet dalam notasi CIDR.
Notasi digunakan di bawah ini
Karena
ipset
saya akan menggunakan notasi yang dibacaipset restore
dan ditulis olehipset save
.Sejalan dengan
iptables
(danip6tables
) aturan, saya akan menggunakan notasi yang dibacaiptables-restore
dan ditulis olehiptables-save
. Ini menghasilkan notasi yang lebih pendek dan memungkinkan saya untuk menyoroti aturan IPv4-only (prefixed-4
) atau only-IPv6 (prefixed-6
).Dalam beberapa contoh kita akan mengalihkan aliran paket ke rantai lain. Rantai diasumsikan ada pada saat itu, sehingga garis-garis untuk membuat rantai tidak diproduksi (juga tidak ada nama tabel yang disebutkan atau perintah-perintah
COMMIT
di akhir).Set IP tingkat lanjut
Set IP dapat melakukan lebih banyak daripada yang disebutkan dalam jawaban lain dan Anda harus membaca dokumentasi set IP (
ipset(8)
) bersama denganiptables-extensions(8)
tambahan entri singkat ini di sini.Sebagai contoh saya akan terutama berfokus pada tiga jenis set:
hash:ip
,hash:net
danlist:set
, tetapi ada lebih dari mereka dan mereka semua memiliki kasus penggunaan valid.Misalnya, Anda juga dapat mencocokkan nomor port, bukan hanya alamat IP .
Menyimpan dan memulihkan set IP seperti dengan
iptables-save
daniptables-restore
Anda dapat membuat deklarasi set IP secara massal dan mengimpornya dengan memasukkannya ke dalam pip
ipset restore
. Jika Anda ingin membuat perintah Anda lebih tangguh terhadap entri yang sudah ada, gunakanipset -exist restore
.Jika aturan Anda ada dalam file yang disebut
default.set
Anda akan menggunakan:File seperti itu dapat berisi entri untuk
create
ditetapkan danadd
entri ke dalamnya. Tetapi umumnya sebagian besar perintah dari baris perintah tampaknya memiliki versi yang sesuai dalam file. Contoh (membuat satu set server DNS):Di sini satu set dibuat untuk IPv4 (
dns4
) dan satu set untuk IPv6 (dns6
).Timeout pada set IP
Timeout dalam set IP dapat ditetapkan sebagai default per set dan juga per entri. Ini sangat berguna untuk skenario di mana Anda ingin memblokir seseorang untuk sementara waktu (mis. Untuk pemindaian port atau berusaha memaksa server SSH Anda dengan kasar).
Cara kerjanya adalah sebagai berikut (default selama pembuatan set IP):
Kami akan kembali ke set khusus di bawah ini dan alasan mengapa mereka mengaturnya.
Jika Anda ingin mengatur batas waktu Anda untuk alamat IP tertentu, Anda bisa mengatakan:
Untuk memblokir IP 1.2.3.4 selama dua jam, alih-alih setengah (standar) default.
Jika Anda melihatnya
ipset save ssh_dynblock4
setelah beberapa saat, Anda akan melihat sesuatu seperti:Peringatan batas waktu
Kernel error received: Unknown error -1
).sudo ipset add ssh_dynblock4 1.2.3.4 timeout $((120*60))
Memeriksa apakah ada entri dalam set IP yang diberikan
Di dalam skrip Anda dapat bermanfaat untuk melihat apakah entri sudah ada. Ini dapat dicapai dengan
ipset test
yang mengembalikan nol jika entri ada dan bukan nol sebaliknya. Jadi cek biasa dapat diterapkan dalam skrip:Namun, dalam banyak kasus Anda lebih suka menggunakan
-exist
sakelaripset
untuk mengarahkannya agar tidak mengeluh tentang entri yang ada.Mengisi set IP dari
iptables
aturanIni, menurut saya, adalah salah satu fitur pembunuh set IP. Anda tidak hanya dapat mencocokkan dengan entri set IP, Anda juga dapat menambahkan entri baru ke set IP yang ada.
Misalnya dalam jawaban untuk pertanyaan ini, Anda memiliki:
... dengan tujuan untuk menilai batas upaya koneksi ke SSH (TCP port 22). Modul yang digunakan
recent
melacak upaya koneksi terbaru. Alih-alihstate
modul, saya lebih sukaconntrack
modul.Dalam hal ini saya mengarahkan aliran ke
SSH
rantai sedemikian rupa sehingga saya tidak perlu mengulangi sendiri-p tcp --dport ssh
untuk setiap aturan tunggal.Untuk mengulangi:
-m set
membuatiptables
sadar bahwa kita sedang menggunakan switch dariset
modul (yang menangani IP set)--match-set ssh_dynblock4 src
memberitahuiptables
agar mencocokkan sumber (src
) alamat dengan set bernama (ssh_dynblock4
)sudo ipset test ssh_dynblock4 $IP
(di mana$IP
berisi alamat IP sumber untuk paket)-j SET --add-set ssh_dynblock4 src --exist
menambah atau memperbarui alamat sumber (src
) dari paket ke dalam set IPssh_dynblock4
. Jika ada entri (--exist
) itu hanya akan diperbarui.sudo ipset -exist add ssh_dynblock4 $IP
(di mana$IP
berisi alamat IP sumber untuk paket)Jika Anda ingin mencocokkan alamat target / tujuan, Anda akan menggunakannya
dst
sebagai gantinyasrc
. Konsultasikan manual untuk opsi lebih lanjut.Set set
Set IP dapat berisi set lainnya. Sekarang jika Anda mengikuti artikel sampai di sini Anda akan bertanya-tanya apakah mungkin untuk menggabungkan set. Dan tentu saja. Untuk set IP dari atas kita dapat membuat dua set gabungan
ssh_dynblock
danssh_loggedon
masing - masing berisi set IPv4-only dan IPv6-only:Dan pertanyaan berikutnya yang harus muncul dalam pikiran Anda adalah apakah ini memungkinkan kami untuk mencocokkan dan dan memanipulasi set IP dalam mode IP versi-agnostik.
Dan jawabannya adalah: Ya! (Sayangnya, ini tidak didokumentasikan secara eksplisit terakhir kali saya periksa)
Akibatnya aturan dari bagian sebelumnya dapat ditulis ulang untuk dibaca:
yang jauh lebih ringkas. Dan ya, ini dicoba dan diuji dan bekerja seperti pesona.
Menyatukan semuanya: SSH brute-force defense
Di server saya, saya memiliki skrip yang dijalankan sebagai
cron
pekerjaan yang mengambil banyak nama host dan menyelesaikannya ke alamat IP, kemudian memasukkannya ke dalam set IP untuk "host tepercaya". Idenya adalah bahwa host tepercaya mendapatkan lebih banyak upaya untuk masuk ke server dan tidak harus diblokir selama orang lain.Sebaliknya, saya memiliki seluruh negara yang diblokir dari menghubungkan ke server SSH saya, dengan pengecualian (potensial) dari host tepercaya (yaitu urutan aturan masalah).
Namun, itu dibiarkan sebagai latihan untuk pembaca. Di sini saya ingin menambahkan solusi yang rapi yang akan menggunakan set yang terkandung dalam
ssh_loggedon
set untuk memungkinkan upaya koneksi berikutnya untuk diberikan dan tidak menjadi subyek pengawasan yang sama dengan paket lainnya.Penting untuk mengingat batas waktu default 90 menit
ssh_loggedon
dan 30 menitssh_dynblock
ketika melihatiptables
aturan berikut :Sekarang Anda harus bertanya pada diri sendiri bagaimana alamat IP yang menghubungkan berakhir di
ssh_loggedon
sub-set. Jadi baca terus ...Bonus: menambahkan IP yang Anda masuk dengan selama SSH masuk
Jika Anda telah bereksperimen dengan
sshrc
dan berteman, Anda akan mengetahui kekurangannya. Tapi PAM datang untuk menyelamatkan. Modul bernamapam_exec.so
memungkinkan kita untuk memanggil skrip selama masuk SSH pada titik di mana kita tahu bahwa pengguna diterima.Di
/etc/pam.d/sshd
bawahpam_env
danpam_selinux
entri menambahkan baris berikut:dan pastikan versi skrip Anda (di
/path/to/your/script
atas) ada dan dapat dieksekusi.PAM menggunakan variabel lingkungan untuk mengomunikasikan apa yang terjadi, sehingga Anda dapat menggunakan skrip sederhana seperti ini:
Sayangnya
ipset
utilitas tersebut tampaknya tidak memiliki kecerdasan netfilter bawaan. Jadi kita perlu membedakan antara set IP IPv4 dan IPv6 saat menambahkan entri kita. Kalau tidakipset
akan menganggap kita ingin menambahkan set lain ke set set, bukan IP. Dan tentu saja itu tidak mungkin bahwa akan ada satu set bernama setelah IP :)Jadi kami memeriksa
:
alamat IP dan menambahkan6
nama yang ditetapkan dalam kasus tersebut dan4
sebaliknya.Tamat.
sumber
GUI lain yang dapat digunakan untuk mengkonfigurasi iptables adalah Firewall Builder . Itu memungkinkan pengguna membuat elemen aturan sebagai objek dalam database dan kemudian drag-and-drop objek ini ke editor aturan untuk membuat kebijakan firewall yang diinginkan. Aplikasi kemudian menghasilkan file skrip dengan semua perintah iptables yang diperlukan untuk mengimplementasikan aturan.
Tidak seperti beberapa solusi GUI iptables lain di mana Anda hanya dapat mengelola satu konfigurasi iptables pada satu waktu, dengan Firewall Builder Anda dapat mengelola sejumlah besar konfigurasi iptables semua dari satu aplikasi. Firewall Builder berjalan di Linux, Windows dan Mac OS X, telah ada selama lebih dari 10 tahun dan memiliki ribuan pengguna aktif di seluruh dunia.
Pengungkapan Penuh - Saya adalah pendiri NetCitadel yang merupakan perusahaan yang mengembangkan Firewall Builder.
sumber
log koneksi keluar dengan uid
port / penerusan koneksi:
sumber
NFLOG
target. Ini memungkinkan awalan garis yang lebih panjang dan daemon mode pengguna dapat masuk ke basis data juga.Cocokkan beberapa nama antarmuka dengan wildcard
Contoh: Anda memiliki
eth0
daneth1
ingin mengizinkan lalu lintas di antara mereka?Saya telah menggunakan ini di masa lalu untuk mencocokkan
veth<something>
antarmuka yang dibuat dan dinamai secara dinamis oleh LXC. Jadi saya bisa mencocokkan semuanya sekaligusveth+
.Saya juga sengaja menamai beberapa antarmuka
_<something>
agar sesuai_+
.sumber
Blokir nilai MSS yang tidak biasa
SYNPROXY target untuk perlindungan DDos
Setel paket syn ke tabel pelacakan koneksi di tabel mentah
Aktifkan synproxy untuk server http:
Sumber: target SYNPROXY dari blog RHEL
sumber
Membatasi semua alamat IP individu menjadi kuota bandwidth keluar dengan Set IP
Anda dapat mengonfigurasikan server Anda untuk hanya mengizinkan setiap IP 15GiByte penggunaan bandwidth per bulan, dengan harapan dapat mencerminkan atau menghindari serangan penggunaan bandwidth, mungkin untuk kuota bandwidth terukur Anda di ISP Anda. Ini dapat dicapai sebagai berikut:
Pertama-tama buat set IP untuk IPv4 dan IPv6:
Sekarang tambahkan aturan iptables Anda. Baris pertama akan menambahkan IP ke set jika belum ada di sana. Baris kedua tidak akan cocok jika byte yang ditransfer untuk IP dalam set lebih besar dari jumlah yang ditentukan. Kemudian hal yang sama dilakukan untuk IPv6.
Ini akan mencegah serangan seperti pengguna yang meminta file besar dari server web Anda untuk jangka waktu yang lama, atau dari layanan apa pun dalam hal ini. Hal yang sama dapat dilakukan untuk rantai INPUT.
sumber
Sesuatu yang saya lakukan, terutama karena ketidaktahuan saya akan solusi yang lebih elegan, adalah memeriksa secara manual log Nginx saya setiap 4 jam dan server mail mencatat setiap 2 menit untuk akses berlebihan oleh masing-masing IP. Saya menjalankan beberapa skrip bersama bahwa:
access.log
dan daftarkan 10 IP teratas yang diorganisasikan oleh berapa banyak hit yang mereka miliki ke serveriptables.save
Begini tampilannya:
autoBanIPs_mail.sh checkBadIPs_mail.shSatu hal yang SANGAT penting untuk dicatat di sini adalah bahwa Anda PERLU untuk menyiapkan daftar putih atau Anda akan mulai memblokir banyak IP asli dari server yang Anda baru saja menerima banyak email dari atau dalam kasus log lain, IP itu tekan saja server Anda banyak untuk alasan yang sah. Daftar putih saya baru saja dibangun ke dalam skrip ini dengan menambahkan pipa grep tepat setelah | grep ']' | yang terlihat seperti ini "grep -v 127.0 |" .
BlockIPAnda perlu meluangkan waktu untuk mengajar server Anda tentang IP lalu lintas tinggi mana yang sah dan mana yang tidak. Bagi saya ini berarti saya harus menghabiskan minggu pertama atau lebih memeriksa log saya secara manual setiap beberapa jam, mencari ip lalu lintas tinggi di iplocation.net dan kemudian menambahkan yang sah seperti amazon, box.com atau bahkan rumah / kantor saya Rentang IP ke daftar putih ini. Jika tidak, kemungkinan besar Anda akan diblokir dari server Anda sendiri atau Anda akan mulai memblokir mail / server web yang sah dan menyebabkan gangguan pada email atau lalu lintas.
Sekali lagi saya tahu ini sangat kasar dan mungkin ada protokol efisien bersih yang bagus yang melakukan semua ini tetapi saya tidak tahu tentang hal ini dan hal ini telah berlangsung selama satu atau dua tahun sekarang dan menjaga orang-orang jahat di teluk. Satu hal yang saya akan sangat SERIUS merekomendasikan adalah bahwa Anda memiliki proxy atau server lain di sayap yang dapat Anda gunakan untuk mengakses server utama Anda .. Alasannya adalah bahwa jika Anda melakukan pengembangan web suatu hari tiba-tiba dan Anda ping diri Anda 2000 kali dalam 5 jam untuk beberapa pengujian Anda bisa diblokir tanpa jalan kembali kecuali untuk proxy.
Anda dapat melihat bahwa di
checkBadIPs.sh
saya telah meletakkan grep -v 127.0 dan dalam file saya yang sebenarnya, saya memiliki banyak aturan abaikan untuk IP saya sendiri dan rentang IP tepercaya lainnya, tetapi terkadang IP Anda berubah, Anda lupa memperbarui dan kemudian Anda terkunci keluar dari server Anda sendiri.Bagaimanapun, harapan itu membantu.
MEMPERBARUI
Saya telah mengubah hal-hal sedikit sehingga sekarang alih-alih memeriksa setiap beberapa jam, saya memiliki beberapa log diperiksa setiap 2 menit, terutama log ssh auth dan log mail saat mereka ditumbuk :(.
Saya menyiapkan skrip khusus untuk setiap file log meskipun akan cukup mudah dari skrip manual yang saya gunakan sendiri ketika ingin memeriksa log. Terlihat seperti ini:
Ini membutuhkan 2 input saat dijalankan, file log yang ingin Anda pindai dan seberapa jauh ke masa lalu yang ingin Anda pindai.
Jadi jika saya ingin memeriksa mail.log untuk hitungan ip katakan 75 menit ke masa lalu saya akan menjalankan:
sumber
ipset
daripada memperpanjang rantai iptables, tetapi idenya bagus dan saya pikir saya akan menerapkannya ke server produksi saya. Terima kasih telah berbagi!Saya setuju dengan komentar tentang ipset dan bendera tcp, tetapi masih banyak yang hilang:
Gunakan xtables-addons yang cocok dengan geoip sebagai ganti ipsets untuk daftar negara. Perbarui data geoip secara rutin (setidaknya sekali sebulan). Data lebih dinamis dari daftar ipset api-dan-lupa.
Pertimbangkan pelacakan status koneksi dengan flag tcp. Sebagai contoh, tcp RST atau ACK hanya masuk akal untuk koneksi yang dibuat. SYN hanya masuk akal untuk koneksi baru dan terkait. SYN untuk koneksi yang dibuat berarti SYN + ACK Anda hilang atau upaya hack dan harus diatur ulang karena kedua sisi koneksi tidak setuju untuk menyatakan.
Meskipun tidak ada, SYN + RST dan FIN + RST adalah kombinasi ilegal, SYN + FIN sekarang valid di bawah TCP fast-open (opsi TCP 34), terutama untuk DNS. Paket SYN, bahkan dengan buka cepat, tidak boleh difragmentasi. Saya tidak menganggap aturan dengan flag PSH dan URG bermanfaat. Jangan bingung kondisi pelacakan koneksi dengan status TCP: Respons RST terhadap paket SYN dibuat untuk tujuan pelacakan.
SYNPROXY adalah untuk paket yang diteruskan dan tidak menambahkan apa pun untuk yang dikirimkan secara lokal di luar dukungan sinkronisasi.
Paket kesalahan ICMP akan selalu berada dalam status terkait dan panjang 48: 576 jika valid. Durasi 84: 1280 untuk IPv6. Semua yang lain harus diabaikan. Karena ukuran maksimumnya juga merupakan MTU minimum, mereka tidak boleh terfragmentasi. Permintaan ICMP (ping, cap waktu, dll.) Akan selalu baru, dan balasan akan dibuat. Jatuhkan paket ICMP di negara bagian lain.
Seperti contoh SSH dengan daftar terbaru dan hanya menerima paket SYN berikutnya, hal yang sama harus dilakukan untuk SMTP, dan mirip dengan "greylisting" pada datum alamat IP saja.
Dalam tabel filter, aturan pertama (atau kedua, jika menerima paket state yang ditetapkan terlebih dahulu) dalam rantai input dan output harus menerima semua yang ada di antarmuka loopback. Anda harus mempercayai paket internal Anda sendiri. Jika tidak bisa, Anda memiliki masalah yang lebih besar di luar solusi firewall.
Terakhir, jangan menyalin aturan secara membabi buta kecuali Anda benar-benar mengerti apa yang mereka lakukan. Begitu banyak daftar aturan serupa yang melakukan itu, dan sebagian besar waktu, hasilnya menggelikan.
sumber
sumber