Comment bloquer les adresses IP abusives avec pf dans OpenBSD?

14

Nous pouvons voir dans les journaux nginx qu'il y a une adresse IP qui fait des choses désagréables.

Comment pouvons-nous le bloquer avec une pfcommande, puis plus tard de manière permanente avec le /etc/pf.log? Comment pouvons-nous bloquer un x.x.x.x/24pour cette IP? C'est un exemple: 1.2.3.4

MISE À JOUR: non, il semble qu'OpenBSD n'ait pas le fichier autoriser / refuser dans / etc. Et AFAIK le meilleur conseil pour bloquer les adresses IP abusives utilise pf.

# cd /etc 
# ls -la|egrep -i 'deny|allow'
# uname -a
OpenBSD foo.com 5.4 GENERIC.MP#0 amd64
# 
somelooser28533
la source
Avez-vous un fichier hosts.deny dans le répertoire / etc?
ryekayo

Réponses:

13

La meilleure façon de le faire est de définir une table et de créer une règle pour bloquer les hôtes, dans pf.conf:

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

Et puis ajoutez / supprimez dynamiquement des adresses IP:

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

Les autres commandes «table» incluent flush(supprimer tout) replaceet show. Voirman pfctl pour en savoir plus.

Si vous voulez une liste plus permanente, vous pouvez la conserver dans un (ou plusieurs) fichiers. Dans pf.conf:

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

Vous pouvez également ajouter des noms d'hôtes au lieu d'adresses IP. Voir la section "Tables" de man pf.confet man pfctl.

Remarque : Les exemples ci-dessus supposent que l'interface Internet est fxp0, veuillez modifier en fonction de votre configuration. Gardez également à l'esprit que les règles dans pf.confsont évaluées de manière séquentielle et pour blockou les passrègles sont la dernière règle de correspondance qui s'applique. Avec cet ensemble de règles

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

et après avoir ajouté 1.2.3.4 et 192.168.0.10 au badhoststableau

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

tout le trafic de 1.2.3.4 et 192.168.0.10 sera bloquée , mais le second hôte sera en mesure d'établir des connexions au port d'autres machines 80 parce que les passmatchs de la règle et les exceptions à la blockrègle.

Zé Loff
la source
4
La règle de blocage peut être plus facilement spécifiée comme block in from <badhosts>. Vous n'avez pas besoin de spécifier l'interface ou la to anypièce.
kurtm
4

Il n'est pas clair d'après les autres réponses que vous devez créer un tableau réel des badhosts que vous essayez de bloquer.

Cela va dans le fichier pf.conf, par exemple j'ai deux fichiers badguys, 1 & 2 badguys1 est pour ceux qui vont et viennent, et badguys2 est pour la liste noire permanente.

Donc, si vous devez ajouter une adresse IP de quelqu'un qui est une nuisance pendant un certain temps, ajoutez-les à badguys1.

Maintenant, dans votre fichier pf.conf, vous avez ceci. Dans mon exemple, j'utilise en1, car c'est mon interface WiFi. Réglez-le sur l'interface de votre réseau.

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

Vous pouvez maintenant ajouter des adresses temporaires à badguys1. (PAS de mauvais hôtes, c'est un nom pour les tables)

sudo pfctl -t badguys1 -T add 185.130.5.160

1 table created.
1/1 addresses added.

Bien qu'il indique 1 table créée - il ajoute en fait l'ip, pas la création d'une nouvelle table. Maintenant, si vous regardez dans badguys1, vous verrez la nouvelle IP.

sudo pfctl -t badhosts -T show
user160328
la source
3

J'ai obtenu ces informations sur le site Web et pardonnez-moi de ma mauvaise connaissance OpenBSD, mais ça y est. Jetez un œil à cette URL . Selon lui, il déclare que pour bloquer une adresse IP, vous devez:

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

Ensuite, vous redémarreriez le pare-feu:

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

Ou, pour ajouter sans redémarrer le type de pare-feu:

pfctl -t blockedips -T add 111.222.333.444

Maintenant, pour vérifier s'il a été ajouté, tapez:

pfctl -t blockedips -T show

Mise à jour: Peut-être que cela aiderait.

  • Ouvrez le fichier suivant dans vi:

    vi /etc/pf.conf

  • Ajoutez la ligne de code suivante:

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

  • Après ce point, j'essayerais de redémarrer le pare-feu et de confirmer que l'adresse IP est bloquée en tapant:

    pfctl -d
    pfctl -e -f /etc/pf.conf
    pfctl -t blockedips -T show
    
ryekayo
la source
1
Je pense que la table doit être réglée pour bloquer, mais cette partie n'est pas claire dans le howto, je l'ai suivie, mais l'IP n'est toujours pas bloquée
somelooser28533
Permettez-moi de voir si je peux chercher comment le faire.
ryekayo
2
Il n'est pas nécessaire de désactiver et de réactiver pf pour recharger pf.conf. pfctl -f /etc/pf.confest assez.
Zé Loff du
1
Les (mauvais) HOWTO découragent la réflexion et encouragent la copie. Lisez man pf.conf, vous serez surpris de la qualité des pages de manuel d'OpenBSD. De plus, les pf.conffichiers doivent être lus dans leur ensemble (l'ordre dans lequel les règles sont mises est crucial), donc copier et coller des lignes simples est généralement une mauvaise idée. Créez le fichier et la tablerègle (c'est vrai), mais vous partagez tout votre pf.conffichier ou c'est à vous de déterminer la blockrègle appropriée et son emplacement dans le fichier.
Zé Loff
1
@ryekayo Sauf si vous pouvez justifier l'inclusion de la ext_if="bge0"macro et pourquoi vous ne disposez pas d' une règle de blocage alors je ne critiquez pas votre réponse, parce qu'elle est incomplète ( et non une réponse appropriée), quel que soit l'effort que vous y mettez. De plus, mon commentaire concernant les HOWTO a été adressé au PO, pas vous (excuses, j'aurais dû le préciser).
Zé Loff