Bagaimana cara memblokir alamat IP yang kasar dengan pf di OpenBSD?

14

Kita dapat melihat dari log nginx bahwa ada alamat IP yang melakukan hal-hal buruk.

Bagaimana kita bisa memblokirnya dengan pfperintah dan kemudian secara permanen dengan /etc/pf.log? Bagaimana kita bisa memblokir x.x.x.x/24IP untuk itu? Ini adalah contoh: 1.2.3.4

PEMBARUAN: tidak, sepertinya OpenBSD tidak memiliki izinkan / tolak file di / etc. Dan AFAIK saran terbaik untuk memblokir alamat IP yang kasar menggunakan pf.

# cd /etc 
# ls -la|egrep -i 'deny|allow'
# uname -a
OpenBSD foo.com 5.4 GENERIC.MP#0 amd64
# 
somelooser28533
sumber
Apakah Anda memiliki file hosts.deny di direktori / etc?
ryekayo

Jawaban:

13

Cara terbaik untuk melakukan ini adalah dengan mendefinisikan tabel dan membuat aturan untuk memblokir host, di pf.conf:

table <badhosts> persist
block on fxp0 from <badhosts> to any

Dan kemudian secara dinamis menambahkan / menghapus alamat IP dari itu:

$ pfctl -t badhosts -T add 1.2.3.4
$ pfctl -t badhosts -T delete 1.2.3.4

Perintah 'tabel' lainnya termasuk flush(hapus semua), replacedan show. Lihat man pfctllebih lanjut.

Jika Anda menginginkan daftar yang lebih permanen, Anda dapat menyimpannya dalam satu (atau lebih) file. Dalam pf.conf:

table <badhosts> persist file "/etc/badguys1" file "/etc/badguys2"
block on fxp0 from <badhosts> to any

Anda juga dapat menambahkan nama host alih-alih alamat IP. Lihat bagian "Tabel" dari man pf.confdan man pfctl.

Catatan : Contoh di atas menganggap bahwa antarmuka yang menghadap internet adalah fxp0, silakan ubah sesuai pengaturan Anda. Juga, perlu diingat bahwa aturan di pf.confdievaluasi secara berurutan dan untuk blockatau passaturan itu aturan pencocokan terakhir yang berlaku. Dengan aturan ini

table <badhosts> persist
block on fxp0 from <badhosts> to any
pass inet tcp from 192.168.0.0/24 to any port 80

dan setelah menambahkan 1.2.3.4 dan 192.168.0.10 ke badhoststabel

$ pfctl -t badhosts -T add 1.2.3.4
$ pfctl -t badhosts -T add 192.168.0.10

semua lalu lintas dari 1.2.3.4 dan 192.168.0.10 akan diblokir tetapi tuan rumah kedua akan dapat membuat koneksi ke port 80 mesin lain karena passaturan cocok dan mengesampingkan blockaturan.

Zé Loff
sumber
4
Aturan blok dapat lebih mudah ditentukan sebagai block in from <badhosts>. Anda tidak perlu menentukan antarmuka atau to anybagiannya.
kurtm
4

Tidak jelas dari jawaban lain bahwa Anda perlu membuat tabel sebenarnya dari badhost yang ingin Anda blokir.

Ini berlaku di file pf.conf, misalnya saya memiliki dua file badguys, 1 & 2 badguys1 adalah untuk mereka yang datang dan pergi, dan badguys2 untuk daftar hitam permanen.

Jadi, jika Anda perlu menambahkan ip seseorang yang merupakan gangguan untuk jangka waktu tertentu, tambahkan mereka ke badguys1.

Sekarang, dalam file pf.conf Anda, Anda memilikinya. Dalam contoh saya, saya menggunakan en1, karena itu antarmuka WiFi saya. Tetapkan itu ke antarmuka apa saja yang digunakan jaringan Anda.

table <badhosts> persist file "/etc/badguys1" file "/etc/badguys2"
block on en1 from <badhosts> to any

Sekarang Anda dapat menambahkan alamat sementara ke badguys1. (BUKAN badhosts, itu nama untuk tabel)

sudo pfctl -t badguys1 -T add 185.130.5.160

1 table created.
1/1 addresses added.

Meskipun dikatakan 1 tabel dibuat - sebenarnya menambahkan ip, bukan membuat tabel baru. Sekarang jika Anda melihat badguys1, Anda akan melihat IP baru.

sudo pfctl -t badhosts -T show
pengguna160328
sumber
3

Saya mendapat informasi ini dari situs web dan memaafkan saya karena pengetahuan saya yang buruk tentang OpenBSD, tetapi ini dia. Lihatlah URL ini . Menurutnya, ini menyatakan untuk memblokir IP yang Anda inginkan:

echo '123.123.123.123' >> /etc/pf.blocked.ip.conf

Maka Anda akan me-restart firewall:

pfctl -d
pfctl -e -f /etc/pf.conf

Atau, untuk menambah tanpa memulai ulang jenis firewall:

pfctl -t blockedips -T add 111.222.333.444

Sekarang untuk memeriksa apakah sudah ditambahkan ketik:

pfctl -t blockedips -T show

Pembaruan: Mungkin ini akan membantu.

  • Buka file berikut di vi:

    vi /etc/pf.conf

  • Tambahkan baris kode berikut:

    table <blockedips> persist file "/etc/pf.blocked.ip.conf" ext_if="bge0" # interface connected to internet

  • Setelah itu, saya akan mencoba me-restart firewall dan memastikan bahwa IP diblokir dengan mengetik:

    pfctl -d
    pfctl -e -f /etc/pf.conf
    pfctl -t blockedips -T show
    
ryekayo
sumber
1
Saya pikir tabel perlu diatur untuk memblokir, tetapi bagian itu tidak jelas dalam howto, saya mengikutinya, tetapi IP masih belum diblokir
somelooser28533
Biarkan saya melihat apakah saya bisa mencari cara melakukannya.
ryekayo
2
Tidak perlu menonaktifkan dan mengaktifkan kembali pf untuk memuat kembali pf.conf. pfctl -f /etc/pf.confcukup.
Zé Loff
1
(Buruk) HOWTO tidak mendukung pemikiran dan mendorong penyalinan. Baca man pf.conf, Anda akan terkejut melihat betapa baiknya halaman manual OpenBSD. Selain itu, pf.conffile harus dibaca secara keseluruhan (urutan aturan sangat penting) sehingga menyalin dan menempelkan satu baris biasanya merupakan ide yang buruk. Buat file dan tableaturannya (banyak yang benar) tetapi Anda harus membagikan seluruh pf.conffile atau terserah Anda untuk mencari tahu blockaturan yang sesuai dan lokasinya di dalam file.
Zé Loff
1
@ryekayo Kecuali jika Anda dapat membenarkan dimasukkannya ext_if="bge0"makro dan mengapa Anda tidak memiliki aturan pemblokiran maka saya akan mengkritik jawaban Anda, karena itu tidak lengkap (yaitu bukan jawaban yang tepat), terlepas dari usaha yang Anda lakukan. Ditambah komentar saya tentang HOWTO dialamatkan di OP, bukan Anda (permintaan maaf, saya seharusnya menjelaskannya).
Zé Loff