Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

Y@kuz@

bloquer des ip variables avec iptables par un sh

Messages recommandés

Bonsoir all, voilà par moment , j'ai "besoin" de bloquer des ip qui changent, bon, j'ai trouvé le moyen de récupérer la liste à jour quand je veux , après reste à créer des rules avec cette range d'ip et en faire un "batch".

Jusque là ca "marche", sauf que je dois lancer en root le .sh , j'ai bien pensé à mettre le contenu dans /etc/rc.d/rc.local, mais ca contient qaund même 1000 ip et j'en ai pas forcemment besoin tout le temps.

 

question bête comment appeler un sh dans /etc/rc.d/rc.local ?

 

sh /path/ipfilter.sh

 

question technique , est ce que ca fera ramer ce filtrage "en dur" d'ip ? 1000 environ, le démarrage et la connection.

 

quand je fais un /sbin/iptables -L après avoir lancé le sh pour controler que ca marche.

 

ca met environ une demi-heure après à s'afficher et me pertube un peu la connection sur les autres ports permis dans mon iptables "classique" :-(

le lancement de mon sh est assez rapide.

c'est le controle par /sbin/iptables -L qui met une plombe et me pertube mon appli.

 

* si je patiente et lance mon appli qu'après, ca va, ca "marche", je ferai pas un controle à chaque fois, mais je suis pas sûr du résultat, cad => rajouter temporairement des régles, le temps de la session.

 

début de mon ipfilter.sh

 

#!/bin/bash

# Create special BLACKLST chain
/sbin/iptables -t filter -N BLACKLST
/sbin/iptables -t filter -F BLACKLST

# Create the logdrop chain to log & drop a packet
/sbin/iptables -t filter -N BLACKLST_LOGDROP
/sbin/iptables -t filter -F BLACKLST_LOGDROP
/sbin/iptables -t filter -A BLACKLST_LOGDROP -j LOG --log-prefix "BLACKLST"
/sbin/iptables -t filter -A BLACKLST_LOGDROP -j DROP

# Jump to the special BLACKLST chain at the end of the INPUT chain (commented out)
#/sbin/iptables -t nat -A INPUT -j BLACKLST

# List of ip ranges to ban
/sbin/iptables -t filter -I INPUT 1 -s 4.18.55.144/29 -j BLACKLST_LOGDROP
/sbin/iptables -t filter -I INPUT 1 -s 4.19.90.0/25 -j BLACKLST_LOGDROP
/sbin/iptables -t filter -I INPUT 1 -s 4.21.179.32/27 -j BLACKLST_LOGDROP
/sbin/iptables -t filter -I INPUT 1 -s 4.23.0.0/16 -j BLACKLST_LOGDROP
/sbin/iptables -t filter -I INPUT 1 -s 4.36.109.0/24 -j BLACKLST_LOGDROP
/sbin/iptables -t filter -I INPUT 1 -s 4.42.208.16/29 -j BLACKLST_LOGDROP

et ca sur mille ip.

 

- une meilleure idée ?

 

- le besoin: bloquer une liste variable d'ip , que je mets à jour de temps en temps et la rajouter au rules actuelles d'iptables le temps de la session, sans qu'elle s'enregistre pour de bon, en lancant le .sh sans faire /sbin/iptables-save, ca laisse mon iptables à l'état initial.

 

merci de vos remarques :P

 

 

je voudrai retester le lancement du filtre avec les applis en route pour voir, si c'est bien pris en compte, mais comment faire sans le paramètre : iptables -L

Partager ce message


Lien à poster
Partager sur d’autres sites

salut Y@k,

 

pour appeler un script en ayant besoin des privilèges root pour un moment, passe par sudo.

 

sinon, si tu as un fichier avec la liste des IP à blacklister tu peux faire un script du genre:

for in in `cat /path/vers/ton/fichier`;do; /sbin/iptables -A INPUT -s $i -j DROP; done

 

que tu appeleras en faisant sudo /path/vers/ton/script

 

/faut bien sur configurer le fichier /etc/sudoers pour déclarer que ton user a le droit d'appeler ce script en tant que root.

 

à adapter en fonction de la règle à utiliser (ici rajout à la chaine INPUT vers la cible DROP)

 

je sais pas si ça répond vraiment à ta question mais j'aurai essayé :P

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut Greywolf, j'avais remarqué qu'en tentant un sudo à l'arrache , ca avait pas marché, merci pour l'info de configurer /etc/sudoers.

 

le lancement du sh en privilège root ne me coûte qu'ouvrir un terminal , su, cd /root et sh ipfilter.sh, exit, exit.

 

que penses tu de l'appeler depuis /etc/rc.d/rc.local ?

 

ipfilter.sh contient les milles ip , j'ai pas voulu coller 1000 lignes et je l'obtiens plus où moins directement sous cette forme :

 

#!/bin/bash

# Create special BLACKLST chain
/sbin/iptables -t filter -N BLACKLST
/sbin/iptables -t filter -F BLACKLST

# Create the logdrop chain to log & drop a packet
/sbin/iptables -t filter -N BLACKLST_LOGDROP
/sbin/iptables -t filter -F BLACKLST_LOGDROP
/sbin/iptables -t filter -A BLACKLST_LOGDROP -j LOG --log-prefix "BLACKLST"
/sbin/iptables -t filter -A BLACKLST_LOGDROP -j DROP

# Jump to the special BLACKLST chain at the end of the INPUT chain (commented out)
#/sbin/iptables -t nat -A INPUT -j BLACKLST

# List of ip ranges to ban
/sbin/iptables -t filter -I INPUT 1 -s 4.18.55.144/29 -j BLACKLST_LOGDROP
/sbin/iptables -t filter -I INPUT 1 -s 4.19.90.0/25 -j BLACKLST_LOGDROP
/sbin/iptables -t filter -I INPUT 1 -s 4.21.179.32/27 -j BLACKLST_LOGDROP
/sbin/iptables -t filter -I INPUT 1 -s 4.23.0.0/16 -j BLACKLST_LOGDROP
/sbin/iptables -t filter -I INPUT 1 -s 4.36.109.0/24 -j BLACKLST_LOGDROP
/sbin/iptables -t filter -I INPUT 1 -s 4.42.208.16/29 -j BLACKLST_LOGDROP
ainsi de suite ...

 

donc le copier coller dans un sh était la facon la plus simple , me reste juste à mettre le path /sbin/ pour iptables avec un éditeur.

 

sinon , c'est normal que :

 

iptables -L met une demi -heure environ après application de l'ipfilter.sh ?

 

//

 

sinon, si tu as un fichier avec la liste des IP à blacklister tu peux faire un script du genre:

CODE

 

for in in `cat /path/vers/ton/fichier`;do; /sbin/iptables -A INPUT -s $i -j DROP; done

 

 

que tu appeleras en faisant sudo /path/vers/ton/script

 

==> sous quel forme le fichier d'ip à blacklister, car je l'obtiens sous la forme :

 

XXXXXXXX :208.225.90.0-208.225.90.255

BBBBBBBBBB ENTERTAINMENT SBCIS-100111-11445 (NET-64-163-227-128-1):64.163.227.128-64.163.227.135

abcdabcd:65.247.105.240-65.247.105.255

 

==> après un converter en ligne, ca rentre dans mon sh.

 

ca répond pas vraiment mais j'ai pas été trés clair non plus.

 

en gros, j'ai mon sh et je peux le lancer manuellement par su, mais suis pas forcemment sûr de m'y prendre de la bonne manière et que ce soit le plus efficace comme soluce, la réalisation et l'incrémentation du sh ne m'embête pas.

 

mon sh te parait il correct ?

 

merci Greywolf.

 

edit : je viens de lancer mon sh , comment vérifer si les rules sont bien appliquées et rajoutées sans se servir de la commande :

/sbin/iptables -L

 

ca me met un temps fou à l'afficher et ca pertube les communications tcp/ udp.

Modifié par Y@kuz@

Partager ce message


Lien à poster
Partager sur d’autres sites

mettre le script dans /etc/rc.d/rc.local devrait l'appeler à chaque démarrage non? et ce n'est pas ce que tu veux faire d'après ce que j'ai compris.

 

ta liste d'IP faudrait la transformer avec awk pour récupérer que les adresses IP pour les obtenir sous cette forme dans un fichier blacklist:

IP1

IP2

IP3

.

.

.

IP1000

 

ensuite dans ton script ipfilter.sh, au lieu de te cogner toutes les adresses IP à recopier tu colles une boucle if qui lit chaque entrée de ton fichier blacklist et les déclarer à iptables comme ça:

#!/bin/bash

# Create special BLACKLST chain
/sbin/iptables -t filter -N BLACKLST
/sbin/iptables -t filter -F BLACKLST

# Create the logdrop chain to log & drop a packet
/sbin/iptables -t filter -N BLACKLST_LOGDROP
/sbin/iptables -t filter -F BLACKLST_LOGDROP
/sbin/iptables -t filter -A BLACKLST_LOGDROP -j LOG --log-prefix "BLACKLST"
/sbin/iptables -t filter -A BLACKLST_LOGDROP -j DROP

# Jump to the special BLACKLST chain at the end of the INPUT chain (commented out)
#/sbin/iptables -t nat -A INPUT -j BLACKLST

for i in `cat /path/to/blacklist`
{
# List of ip ranges to ban
/sbin/iptables -t filter -I INPUT 1 -s $i -j BLACKLST_LOGDROP
}

 

pour awk, j'ai encore un peu de mal avec les expressions régulières pour extraire les IP de ton fichier :-( comme séparateur les : mais ce qui m'embete ce sont les plages d'adresses déclarées:

RIAA:208.225.90.0-208.225.90.255

 

iptables n'accepte pas le -s 208.225.90.0-208.225.90.255

 

ou alors faut déterminer le masque de chaque sous-réseau pour le déclarer en 208.225.90.0/24...

 

iptables -L met une demi -heure environ après application de l'ipfilter.sh ?

bizarre, je vois pas trop pourquoi (mis à part le fait que le fichier d'iptables a pris plus de 1000 lignes supplémentaires) :P

 

le script me parait bon... mais je suis pas une référence en scripting shell ;-p

la façon de s'y prendre également, je vois pas trop comment y arriver autrement que comme ça...

 

 

// edit:

 

A quoi te sert ta nouvelle chaine BLACKLST dans ton script, elle ne fait pas l'objet d'une redirection.

c'est pour "protéger" ta machine bastion ou une machine derrière la passerelle?

 

INPUT c'est la chaine de filtrage en entrée de la machine bastion

FORWARD c'est la chaine de filtrage en entrée et sortie des machines "NATées"

 

peut être avec l'option match ça serait moins lourd en terme de charge de filtrage, plutôt que d'avoir une entrée par adresse IP à rediriger vers BLACKLST_LOGDROP

 

Avec le script tel qu'il est, les connexions autorisées doivent se cogner les 1000 et quelques lignes de filtrage de la chaine INPUT (-I INPUT 1) avant d'arriver aux règles qui vont les autoriser sur ton réseau <= peut être que ça vient de là

Modifié par Greywolf

Partager ce message


Lien à poster
Partager sur d’autres sites

"ou alors faut déterminer le masque de chaque sous-réseau pour le déclarer en 208.225.90.0/24..."

 

c'est ce que me fait le converter en ligne => http://bluetack.co.uk/convert.html

 

je lui donne la liste en brute :

 

RIAA:208.225.90.0-208.225.90.255

 

et le converter me donne cà ==>

 

/sbin/iptables -t filter -I INPUT 1 -s 208.225.90.0/24 -j BLACKLST_LOGDROP

 

 

ben , oui à part les 1000 lignes, moi non plus pas d'explication pour le temps de iptables -L.

 

oui le mettre dans /etc/rc.d/rc.local était une de mes idées, mais bon vu que j'en ai pas besoin tout le temps, continuer de le lancer en su est pas un problème.

 

me reste le truc de pouvoir controller que ca marche et que ca écrase pas les autres rules.

Modifié par Y@kuz@

Partager ce message


Lien à poster
Partager sur d’autres sites

autre approche:

 

avec la table mangle, tu marque chaque paquet dont la source correspond à une des adresses IP, que tu droppes ensuite dans la table filter

iptables -t mangle -A prerouting -s $i -j MARK --set-mark blacklst
iptables -t filter -A INPUT -m mark --mark blacklst -j DROP

 

ça déplace le problème dans mangle, y'aura toujours mille lignes à se cogner pour comparer les adresses sources des paquets afin de les marquer ou non.

Modifié par Greywolf

Partager ce message


Lien à poster
Partager sur d’autres sites

#!/bin/bash

# Create special BLACKLST chain
/sbin/iptables -t filter -N BLACKLST
/sbin/iptables -t filter -F BLACKLST

# Create the logdrop chain to log & drop a packet
/sbin/iptables -t filter -N BLACKLST_LOGDROP
/sbin/iptables -t filter -F BLACKLST_LOGDROP
/sbin/iptables -t filter -A BLACKLST_LOGDROP -j LOG --log-prefix "BLACKLST"
/sbin/iptables -t filter -A BLACKLST_LOGDROP -j DROP

# Jump to the special BLACKLST chain at the end of the INPUT chain (commented out)
#/sbin/iptables -t nat -A INPUT -j BLACKLST

for i in `cat /path/to/blacklist`
{
# List of ip ranges to mark
/sbin/iptables -t mangle -I PREROUTING 1 -s $i -MARK --set-mark blacklst
}

#Ajout du filtrage dans INPUT
/sbin/iptables -t filter -I INPUT 1 -m mark --mark blacklst -j BLACKLST_LOGDROP

 

ça devrait te donner ça :P

Partager ce message


Lien à poster
Partager sur d’autres sites

Voila ce que j'ai mis dans mon Smoothwall pour ne pas logger les attaques contre 135 and co (y'en avait beaucoup trop...) :

 

/sbin/iptables -P FORWARD DROP
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -A INPUT -p TCP -i $RED_DEV --dport 135 -s 0/0 -j DROP
/sbin/iptables -A INPUT -p UDP -i $RED_DEV --dport 137 -s 0/0 -j DROP
/sbin/iptables -A INPUT -p UDP -i $RED_DEV --dport 138 -s 0/0 -j DROP
/sbin/iptables -A INPUT -p TCP -i $RED_DEV --dport 139 -s 0/0 -j DROP
/sbin/iptables -A INPUT -p TCP -i $RED_DEV --dport 445 -s 0/0 -j DROP

 

Cela je l'ai mis dans le fichier /etc/rc.d/rc.firewall.up.

Partager ce message


Lien à poster
Partager sur d’autres sites

Votre contenu devra être approuvé par un modérateur

Invité
Vous postez un commentaire en tant qu’invité. Si vous avez un compte, merci de vous connecter.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.


  • En ligne récemment   0 membre est en ligne

    Aucun utilisateur enregistré regarde cette page.

×