Bagaimana cara mendaftar alamat IP yang diblokir oleh iptables?

16

Untuk mencegah serangan brute force terhadap ssh, saya telah menambahkan beberapa aturan iptables (di bawah). Pertanyaannya adalah: Bagaimana saya bisa mendaftar alamat IP yang diblokir?

(1)
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 8 --rttl --name SSH -j DROP
Eddie
sumber
1
iptables -L INPUT -v -nmenunjukkan semua ip diblokir
dinamis

Jawaban:

16

Salah satu opsi adalah untuk mencatat paket Anda yang terjatuh dengan aturan seperti:

iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 8 --rttl -j LOG --log-prefix "FW_DROPPED: "

Masukkan itu segera sebelum DROPaturan. Kemudian, Anda dapat mengambil file syslog untuk apa pun dengan "FW_DROPPED" di dalamnya dan daftar IP akan ada di sana. Entri dalam file log terlihat seperti ini:

Jun  3 08:05:57 some-machine kernel: [15852451.420557] FW_DROPPED: IN=eth0 OUT= MAC=00:50:ba:4a:d9:e3:00:12:17:3a:e3:64:08:00 SRC=228.23.45.189 DST=192.168.1.1 LEN=48 TOS=0x00 PREC=0x00 TTL=106 ID=10941 PROTO=TCP SPT=58212 DPT=22 WINDOW=65535 RES=0x00 SYN URGP=0

Jadi, menghapus apa yang mengikuti "SRC =" akan menunjukkan kepada Anda IP yang dijatuhkan. Sortir itu, hilangkan duplikat, dan Anda akan memiliki daftar.

Saya telah menemukan Tutorial Iptables menjadi dokumentasi yang paling berguna untuk iptables / netfilter.

Yukondude
sumber
Ya, ini cara untuk melakukannya.
Brent
Ini akan mengharuskan Anda untuk menduplikasi aturan Anda karena Anda tidak masuk dan masukkan aturan yang sama.
David Pashley
3
Akan lebih baik jika dia membuat rantai pengguna tempat dia mencatat dan menjatuhkan paket-paket yang menyinggung. Dengan melakukan ini, duplikasi yang tidak perlu dihapus. Ini dapat dilakukan seperti ini: iptables -N serangan; iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m baru-baru ini --update --seconds 60 --hitcount 8 --rttl --name SSH -j serangan; iptables -Serang -j LOG --log-awalan "FW_DROPPED:"; iptables
-Serang
1
Sepakat. Tabel / rantai adalah cara untuk pergi; seluruh titik iptables, sungguh. Saya membuat tabel terpisah untuk diterima, dijatuhkan diam-diam, ditolak dengan suara bulat, dibuang, diduga banjir, ilegal, dugaan penyelidikan, dugaan pindaian, jenis yang tidak diketahui, dan pantau lalu lintas. FW saya didasarkan pada skrip lama ini (peringatan: promosi sendiri): code.google.com/p/klondike-firewall/source/browse/trunk/…
yukondude
1
Modul ipt_recent yang direferensikan ipozgaj dan David Pashley adalah tambahan yang cukup bagus, meskipun itu tidak dapat memberikan alasan yang sama-halus mengapa IP tertentu dijatuhkan (seperti yang Anda bisa dengan pengaturan --log-awalan yang berbeda) atau melacak sejarah panjang serangan dengan stempel waktu. Pasti ide yang bagus untuk menggunakan kedua teknik dalam konser sekalipun.
yukondude
5

Anda dapat menemukan detailnya di / proc / net / ipt_recent / SSH.

Artikel ini memiliki informasi lebih lanjut.

David Pashley
sumber
Artikel ini sepertinya tidak ada lagi.
Dan Metheus
4

Melihat

/proc/net/ipt_recent/YOURNAME

di mana YOURNAME adalah nama yang Anda gunakan dengan opsi --name dalam aturan iptables Anda.

ipozgaj
sumber
Pada beberapa distro (misalnya Debian), jalur yang valid adalah:/proc/net/xt_recent/[list-name]
itachi
3

Ini adalah liner sederhana:

$ iptables -L -n --line
giorgio79
sumber
1

Apa yang saya lakukan, misalnya untuk spoofing alamat input, adalah mendefinisikan rantai SPOOF_REJECT:

iptables -N SPOOF_REJECT
iptables -A SPOOF_REJECT -j LOG --log-prefix "Input spoof detected: "
iptables -A SPOOF_REJECT -j REJECT

kemudian mengirim paket ke rantai ini jika mereka palsu:

iptables -A INPUT -i $EXT_DEV1 -s $INT_NET -j SPOOF_REJECT
iptables -A INPUT -i $EXT_DEV2 -s $INT_NET -j SPOOF_REJECT

Anda bisa melakukan sesuatu seperti ini untuk setiap kategori paket yang Anda jatuhkan atau tolak untuk mendapatkan garis di syslog untuk dicari, lalu secara berkala ambil, potong, urutkan, untuk mendapatkan alamat IP dari baris log ini.

Manfaat menggunakan rantai individual untuk setiap kategori adalah konfigurasi Anda menjadi lebih mudah dan lebih mudah untuk membaca iptableskonfigurasi Anda . Saat Anda menambahkan semakin banyak aturan, Anda akan senang bahwa Anda menggunakan rantai individual untuk tindakan berbeda yang spesifik.

Eddie
sumber
Bagaimana tepatnya, apakah Anda mendeteksi paket palsu? Dalam pengalaman saya ini tidak mungkin dalam kasus umum.
MarkR
Di atas hanyalah sebuah contoh. Di sini, saya sedang mencari paket yang tiba di rantai INPUT yang berasal dari perangkat eksternal namun mengklaim berasal dari alamat IP internal ke jaringan saya. Dalam hal ini, saya benar-benar dapat mendeteksi spoofing alamat, tetapi ya, dalam kasus umum semuanya berbeda.
Eddie
1

"Pertanyaannya adalah: Bagaimana saya bisa mendaftar alamat IP yang diblokir?"

Buat rantai DILARANG:

iptables -N BANNED
iptables -F BANNED

Buat rantai logging:

iptables -N BANNEDLOG
iptables -F BANNEDLOG
iptables -A BANNEDLOG -j LOG --log-prefix "BANNED:" --log-level 6
iptables -A BANNEDLOG -j DROP

Tambahkan lompatan ke rantai terlarang di rantai INPUT sebelum sebagian besar aturan lainnya

...
iptables -A INPUT -j BANNED
...

Sekarang tambahkan alamat ip ke rantai yang terlarang:

flock -w 5 /var/lock/iptables -c 'iptables -A BANNED -s 140.130.20.202/32 -i eth0 -m comment --comment "2012-03-19 23:49:33 accesslog" -j BANNEDLOG'
etc...

Anda juga dapat menggunakannya seperti database dengan opsi komentar, sehingga Anda dapat mengetahui kapan dan mengapa dll. Kawanan penting ketika iptables sedang sering diperbarui oleh banyak proses - tampaknya iptables tidak memiliki penguncian bawaan untuk itu.

Untuk melihat alamat dan aturan yang dicekal di rantai yang dicekal:

iptables -S BANNED

Untuk melihat hanya alamat ip unik yang diurutkan:

iptables -S BANNED | egrep -o '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | sort -u

Saya memiliki sejumlah daemon yang berjalan di server saya memeriksa file syslog dan weblog, jadi jika ada sesuatu yang jahat sedang dicoba oleh siapa pun, alamat mereka secara otomatis akan diblokir selama beberapa hari, tergantung pada jenis dan tingkat keparahan dan jumlah serangan sebelumnya. Info ini masuk ke dalam database mysql, dan secara berkala kedaluwarsa. Alamat-alamat tersebut juga didistribusikan ke setiap mesin lain di cluster melalui replikasi mysql sehingga mereka juga dilindungi dan tetap sinkron. Perangkat lunak saya juga mencari pemilik jaringan dan mengirimkan keluhan ke ISP.

Setelah 10 tahun bekerja, saya berharap membuatnya tersedia untuk semua orang untuk segera digunakan. Saat ini saya memiliki sekitar 1,5 juta riwayat alamat ip dan ratusan ribu serangan surat dan ssh yang dilaporkan, membantu membersihkan internet. Jika lebih banyak akan menggunakannya maka saya berharap itu akan berdampak lebih.

Andy Lee Robinson
sumber