Interdire automatiquement les adresses IP qui demandent certaines pages

1

Je veux interdire les IP qui demandent certaines pages, par exemple, example.com/weird.phpet celles qui envoient une POSTdemande à example.com/weirder.php.

J'ai beaucoup cherché et appris plusieurs choses, iptablesmais il semble que certaines soient des instructions pour CentOS. Je crains aussi d'être en lock-out. Je cherche donc une réponse un peu détaillée et sûre.

J'utilise AWS EC2, Ubuntu et nginx.

Point-virgule redouté
la source
Lien vers les instructions dont vous parlez? (Notez qu'il n'y a aucun moyen de faire cela dans nginx)
Thomas Ward
Je ne sais pas de quel lien je parlais dans la question. mais j'ai encore cherché et vu cette page: stackoverflow.com/questions/19576040/… Je suppose que cela devrait fonctionner indépendamment de nginx et d'apache. droite?
Point-virgule

Réponses:

1

Commencez par essayer ceci sur une machine à laquelle vous avez un accès physique.

Tables IP

Premièrement, trouvons les règles des tables IP pour bloquer une adresse IP. Pour des instructions détaillées, consultez ce guide. Supposons toutes les connexions entrantes à partir d’une adresse IP donnée:

iptables -A INPUT -s A.B.C.D -j DROP

Après cela, redémarrez iptables comme d'habitude. Essayez cette commande pour vérifier si cela fonctionne bien pour vous, familiarisez-vous avec la syntaxe, puis continuez.

Script Bash

Créons un script Bash pour bloquer une adresse IP. Cela ressemblerait à quelque chose comme ceci (avertissement: vous devrez peut-être jouer avec les permissions de l'utilisateur et sudo pour que cela fonctionne). Créez un nouveau fichier, par exemple blockip.sh.

#! /usr/bin/env bash
iptables -A INPUT -s $1 -d DROP
<other stuff you want to do when you block an IP>
<note: the IP address is in variable $1>

Exécuter chmod +x blockip.shpour rendre le script exécutable. Maintenant, vous pouvez le lancer en tant que /path/to/file/blockip.sh 1.2.3.4.

Sudo Permissions

Si votre script doit disposer d'autorisations d'utilisateur root, vous devez configurer sudo pour vous fournir un accès sans mot de passe. En vous référant à cette question de débordement de pile , exécutez sudo visudoet ajoutez la ligne suivante:

nobody ALL = NOPASSWD: /your/script

Enregistrez le fichier et quittez. En guise d'avertissement de sécurité, assurez-vous que vous seul pouvez modifier le fichier de script. Sinon, une personne peut potentiellement exécuter du code préjudiciable en tant qu'utilisateur root en modifiant le script.

Code PHP

Exécutez ce petit bijou de code chaque fois que vous souhaitez bloquer quelqu'un.

exec("sudo /path/to/file/blockip.sh ".$_SERVER['REMOTE_ADDR']);

Conclusion

Commencez par tester ce code sur une machine à laquelle vous avez un accès physique. Sachez également que plusieurs utilisateurs situés derrière un réseau local partageraient la même adresse IP externe et que le blocage de l'un d'eux entraînerait le blocage de tous. Faites attention. Upvote si la réponse vous a aidé.

Rohitt Vashishtha
la source
C'est peut-être ce que je vais faire. Merci. bien que je voulais le faire via une règle automatique à partir d'un serveur web ou d'iptables en vérifiant la requête sans avoir besoin de php. mais c'est peut-être le plus facile. Ceux que je veux interdire sont des machines infectées envoyées par des spammeurs vers une page inexistante. ce sont surtout des machines zombies avec un code malveillant.
Point-virgule
Fondamentalement, si le script est créé avec succès, vous pouvez également trouver une autre méthode pour l'exécuter.
Rohitt Vashishtha
De plus, si vous découvrez que cela fonctionne, marquez ma réponse comme étant la réponse acceptée. Je vous en prie.
Rohitt Vashishtha
mais je cherche un moyen de le faire sans php. Mais merci quand même.
Point-virgule
Votre question pointe vers php avec tous les doigts. Littéralement, "qui demande certaines pages, par exemple exemple.com/weird.php" ..... Donc, il est logique de mettre tout code bloquant dans php également. Mais si vous le souhaitez, comme je l'ai dit plus haut, vous pouvez exécuter ce script avec un autre script bash basé sur netstat.
Rohitt Vashishtha