Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 07/07/2012, à 07:03

dancom

[résolu] Iptables: lire un fichier des ip à allouer

Bonjour. J'ai trouvé un petit script pour bloquer une liste de IP qui se situe dans un fichier (voir un exemple plus bas), J'aimerais faire le contraire, au lieux de faire DROP, je veux faire une liste de IP que j'accepte.

Quelqu'un peut m'aider à modifier ce fichier en conséquence?

Pour le port 80.

#!/bin/bash
#
# assumes that the IP addresses you wish to block are put in file /etc/firewall.blocks
# this file can contain comments starting with ; or #
# but these must not be included on the end of IP addresses
# #comment allowed
# ;comment allowed
# 192.168.1.2 ;NOT ALLOWED
# 192.168.1.2 #NOT ALLOWED
# firewall blocks can be single IP OR CIDR
# 192.168.1.1
# 192.168.1.0/24
#
BLOCK_LIST=/etc/firewall.blocks
if [ ! -f $BLOCK_LIST ]
        then
                echo "Unable to add blocks to IPTABLES because file $BLOCK_LIST is missing"
                exit
        fi
CURRENT_RULES=`iptables -nL`

while read entries ;do
        # skip comment lines starting with ; or #
        case $entries in
                \#*|\;*)
                continue
                ;;
        esac

                if [[ $CURRENT_RULES =~ $entries ]]
                then
                printf "%-20s %20s\n" $entries 'already referenced in iptable - skipping'
                else
                printf "%-20s %20s %1s %1s\n" 'ADDING RULE:' 'iptables -A FIREWALL -s' $entries '-j DROP'
                iptables -A FIREWALL -s $entries -j DROP
                fi
done < $BLOCK_LIST

Un exemple de liste dans un fichier :

fichier: firewall.blocks

...
70.33.204.224/27
70.33.205.32/25
70.33.205.160/27
70.33.205.192/29
70.33.205.224/25
70.33.206.96/26
70.33.206.160/27
70.33.206.192/29
70.33.206.240/25
70.33.207.112/27
70.33.207.144/28
70.33.207.160/29
70.33.207.176/28
70.33.207.200/28
70.33.207.216/29
70.33.208.0/21
70.33.216.0/24
70.33.217.128/26
70.33.217.192/28
70.33.217.224/27
70.33.219.0/20
70.33.235.0/22
70.33.239.0/24
...

de l'aide me serait bien utile.

Dernière modification par dancom (Le 10/07/2012, à 08:32)


Ubuntu server 12.04.1

Hors ligne

#2 Le 07/07/2012, à 07:38

Tarlak

Re : [résolu] Iptables: lire un fichier des ip à allouer

Et bien perso je fais comme ceci :

        echo "Lecture de la Whitelist"

        for x in `grep -v ^# $WHITELIST | awk '{print $1}'`; do
                echo "    Autorisation accordee a $x..."

                for wport in $WHITE_ALLOWED; do
                        echo "        Pour le port $wport"
                                iptables -A INPUT -t filter -s $x -p tcp --dport $wport -j ACCEPT

                done
        done

A adapter car mon fichier whitlist est ecrite de cette facon

XXX.XXX.XXX.XXX #Machine de machin

Et je gère aussi une liste de port autorisé, donc pour une IP x j'ouvre n wport

Hors ligne

#3 Le 07/07/2012, à 17:50

dancom

Re : [résolu] Iptables: lire un fichier des ip à allouer

Bonjour. Si on veut donner accès à notre serveur à quelques adresses IP, c'est une solution.

#!/bin/bash
#
# assumes that the IP addresses you wish to block are put in file /etc/firewall.blocks
# this file can contain comments starting with ; or #
# but these must not be included on the end of IP addresses
# #comment allowed
# ;comment allowed
# 192.168.1.2 ;NOT ALLOWED
# 192.168.1.2 #NOT ALLOWED
# firewall blocks can be single IP OR CIDR
# 192.168.1.1
# 192.168.1.0/24
#
ALLOW_LIST=/etc/ip.allow
if [ ! -f $ALLOW_LIST ]
        then
                echo "Unable to add allow to IPTABLES because file $ALLOW_LIST is missing"
                exit
        fi
CURRENT_RULES=`iptables -nL`

while read entries ;do
        # skip comment lines starting with ; or #
        case $entries in
                \#*|\;*)
                continue
                ;;
        esac

                if [[ $CURRENT_RULES =~ $entries ]]
                then
                printf "%-20s %20s\n" $entries 'already referenced in iptable - skipping'
                else
                printf "%-20s %20s %1s %1s\n" 'ADDING RULE:' 'iptables -A FIREWALL -s' $entries '-j ACCEPT'

                iptables -A FIREWALL -p tcp -m tcp -m limit -m state -s $entries --dport 80 --limit 1/second --state NEW,ESTABLISHED,RELATED -j ACCEPT
                iptables -A INPUT -j FIREWALL

                fi
done < $ALLOW_LIST

puis créer le fichier "ip.allow" pour allouer ces ips qui donne accès à votre serveur :

192.168.1.0/24
123.123.123.0/24
123.123.0.0/16
123.0.0.0/8
123.123.123.123

Cmmentaires :

- On ne pas pas ajouter de commentaire à la suite des Ip pour commenter.
- Limiter le nombre de ligne pour les ip range si non surcharge de ressources.
- Il faut enlever dans iptables.up.rule, l'accès au port 80
- fiter doit être à DROP pour tout interdire dabord.

Remarques:

- Si on pouvait obtenir les IP des localités par ville, serait une bonne chose.
- Par pays, mais c'est trop de lignes et ça surcharge de ressources.
- N'est pas une solution si votre serveur est pour le grand public.

J’opterais pour pour les IP par ville ou bien définir les range ip plus large.
Genre: 123.123.0.0/16 en considérant que j'aurais peut-etre des Ip étrangers
qui ne font pas parti de ma ville. Mais de toute manière, dans une ville, on peut
très bien avoir des ip d'une autre.

Voilà.

Si quelqu'un sait comment obtenir les ip par ville au lieu par pays, je suis preneur.


Ubuntu server 12.04.1

Hors ligne

#4 Le 08/07/2012, à 19:47

Yann

Re : [résolu] Iptables: lire un fichier des ip à allouer

Bonjour, si je puis me permettre tu devrais jeter un oeil du coté de ipset, tu gagneras en performance je pense - et tu peux enregistrer/restore directement sans avoir à réinventer la roue smile
Bonne chance!


Et pourtant moi, jsuis pas du genre délicat,
Dans un coin de la musse, j'ai posé mon matelas
- Paulo Anarkao

Hors ligne

#5 Le 10/07/2012, à 08:32

dancom

Re : [résolu] Iptables: lire un fichier des ip à allouer

Merci pour vos interventions. Cela m'a aiguiller vers une solution viable.

Solution:
iptables.up.rule de base avec INPUT et FORWARD à DROP.
Ensuite, un script avec IPSET comme ceci :

#!/bin/bash

ipset --create feckonn nethash
ipset --add feckonn 192.168.1.0/24
ipset --add feckonn 123.123.123.0/26
 (liste à allouer ici)

ipset --create feckoff nethash
ipset --add feckoff 0.0.0.0/8
 (liste à refuser ici)

iptables -I INPUT 14 -m set --set feckonn src -p tcp --dport 80 -j ACCEPT

iptables -A INPUT    -m set --set feckoff src -p tcp --dport 80 -j DROP

iptables -A INPUT -m geoip --src-cc XX -p tcp --dport 80 -j ACCEPT

exit 0

Du coup, j'ai résolu concernant GEOIP. Mon problème était situé dans le fait que
je refusais à la base et que je refusais aussi tout ce qui n'était pas XX. Alors, qu'en faite,
je devais accepter étant donné que je refusais à la base.  L'ordre INPUT à 14 est la séquence
vers la fin après mes politique d'acceptation.

Résumé:
Protection en premier de fail2ban et de Mod_security. Ensuite, les protections de base de
IPtables. Puis les IP que j'accepte par groupes, puis ensuite les IP que je refuse par groupe.
Après, ce sont les IP du pays que j'accepte.

Maintenant, je pense avoir une bonne configuration que je vais surement améliorer.
Et surtout constituer les IP à bannir suite aux tentatives de hack.

Le fait de passer par un virtuelhost pour ses sites et de bannir complètement via l'accès par
le IP du FAI donne un plus pour se protéger des scannes qui sont systématiques et non ciblés.

Parfais pour se faire un serveur personnel. La seule chose qui me reste à trouver, c'est de
trouver une base CIDR par ville.

Bonne journée!


Ubuntu server 12.04.1

Hors ligne

#6 Le 10/07/2012, à 12:23

Yann

Re : [résolu] Iptables: lire un fichier des ip à allouer

Bonjour dancom, ravi de t'avoir mis sur la voie. Il me semble que fail2ban (si tu utilises deja ca) est capable de rajouter une IP a un ipset. En gros, si quelqu un essaie par exemple de se loguer 3 fois par ssh sans succes, fail2ban le rajouterais à un ipset - et l'ipset serait banni par iptables. Ca pourrais etre intéressant pour toi.


Et pourtant moi, jsuis pas du genre délicat,
Dans un coin de la musse, j'ai posé mon matelas
- Paulo Anarkao

Hors ligne

#7 Le 10/07/2012, à 14:12

dancom

Re : [résolu] Iptables: lire un fichier des ip à allouer

Yann a écrit :

...fail2ban le rajouterais à un ipset - et l'ipset serait banni par iptables...

Bonjour Yann.

Ça pourrait être intéressant comme possibilité. Ça serait plus facile à configurer et différent?

J'ai configuré fail2ban selon l'installation. Et en allant dans des tutos, j'ai ajouté d'autres options comme apache-dosevasive à fail2ban. Mais, si y a de meilleurs possibilités avec ipset, ça m'intéresse.


Ubuntu server 12.04.1

Hors ligne

#8 Le 10/07/2012, à 14:25

Yann

Re : [résolu] Iptables: lire un fichier des ip à allouer

Bonjour dancom, je ne l'ai pas fait moi même, mais j'ai entendu un ami dire qu'il avait réussi à ce que fail2ban rentre l'ip d'un attaquand dans un ipset. Ca te permettrait de bannir les IPs d'attaquants (tels que détectés par fail2ban) directement au niveau de ton firewall - ce qui amha peut être intéressant.


Et pourtant moi, jsuis pas du genre délicat,
Dans un coin de la musse, j'ai posé mon matelas
- Paulo Anarkao

Hors ligne

#9 Le 10/07/2012, à 18:22

dancom

Re : [résolu] Iptables: lire un fichier des ip à allouer

Ça serait intéressant de pouvoir le faire. Si quelqu'un en connait la possibilité.


Ubuntu server 12.04.1

Hors ligne