Bagaimana cara memblokir alamat IP di HAProxy?

8

Apakah ada sesuatu seperti Apache "deny from ip" di haproxy?

Marcin
sumber

Jawaban:

21

Anda dapat menjatuhkan IP pada level tcp dengan membuat ACL lalu menggunakan koneksi tolak jika ACL cocok:

    acl bad_ip src 10.10.10.0
    tcp-request connection reject if bad_ip

Anda juga dapat mengatur backend 403 dan mengirimkannya jika Anda ingin melakukannya di tingkat HTTP:

frontend foo
        ...
        acl bad_ip src 10.10.10.0
        use_backend bad_guy if bad_ip
...

backend bad_guy
        mode http
        errorfile 403 /etc/haproxy/errors/403.http

ACL ini bisa sangat fleksibel, dan Anda bisa membuatnya sehingga beberapa kondisi dalam ACL, atau beberapa ACL dalam tindakan harus dipenuhi. Lebih lanjut di http://haproxy.1wt.eu/download/1.5/doc/configuration.txt .

Kyle Brandt
sumber
4
Anda hanya perlu backend terpisah jika Anda ingin menggunakan halaman kesalahan 403 khusus. Kalau tidak, Anda bisa lolos dengan "http-request deny if bad_ip"
sh-beta
1
Apakah Anda tahu cara membaca ips dari toko yang lebih fleksibel, seperti db atau file flat terpisah?
UpTheCreek
1
Bad_guy backend itu tidak berfungsi seperti yang diharapkan, karena tidak memiliki server yang ditentukan, itu dianggap "turun" dan akan selalu mengembalikan 503 - layanan tidak tersedia. Saya hanya fould Anda bisa menulis "blok jika bad_ip" untuk konfigurasi frontend dan itu akan membuang 403 halaman dengan benar. EDIT: http-request deny jika bad_ip berfungsi seperti yang diiklankan oleh @ sh-beta - pada dasarnya melakukan hal yang sama, tapi mungkin hanya untuk permintaan http?
Dalibor Filus
Ada sedikit perbedaan lain antara penolakan blok dan permintaan http dan itu adalah ini: "aturan 'blok' yang ditempatkan setelah aturan 'use_backend' masih akan diproses sebelumnya."
Dalibor Filus
2
Jika Anda memberi orang "jahat" 403 maka ia tahu bahwa ia diblokir dan akan mencari vektor lain. Jika Anda memberi pria "jahat" 503 .. lalu ia berpikir ia berhasil menyebabkan DOS dan menghentikan serangan itu. Tentu saja ia mungkin mengetahuinya tetapi itu akan membuatnya jauh lebih lama.