Étiquette : iptables

11 août 2018 /
1. Lister les règles iptables avec numéros de ligne
iptables -L -n --line-numbers

Explication :

  • -L : liste les règles.
  • -n : affiche les IP en numérique (pas de résolution DNS, plus rapide).
  • –line-numbers : ajoute le numéro de chaque règle (indispensable pour la suppression).

Tu cherches la chaîne utilisée par Fail2Ban (ex. f2b-sshd, f2b-sshd-ddos, f2b-recidive, etc.) et tu repères le numéro de ligne correspondant à l’IP que tu veux libérer.

2. Supprimer la règle qui bloque l’IP (exemple avec la règle n°1)
iptables -D f2b-sshd-ddos 1
Attention : après un redémarrage de Fail2Ban ou un nouveau ban, les règles iptables sont régénérées, donc la suppression manuelle est temporaire.
Au lieu de manipuler directement iptables, on peut utiliser la commande officielle :
Lister les jails
fail2ban-client status
Status
|- Number of jail:      5
`- Jail list:           sshd, apache-auth, apache-badbots, postfix, dovecot
Les noms des jails sont ceux listés après Jail list: (ici : sshd, apache-auth, apache-badbots, postfix, dovecot).Le plus courant est sshd (pour les tentatives de connexion SSH bruteforce).
Comment voir le détail d’une jail spécifique (et vérifier quelle IP est bloquée), ici sshd:
fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     42
|  `- File list:        /var/log/auth.log
`- Actions
   |- Currently banned: 3
   |- Total banned:     12
   `- Banned IP list:   203.0.113.42 198.51.100.23 192.168.1.100
Tu vois directement les IP actuellement bannies par cette jail.
Pour débloquer une IP (récapitulatif) une fois que tu as le nom du jail (ex. sshd) et l’IP (ex. 203.0.113.42) :
fail2ban-client set sshd unbanip 203.0.113.42
Avec ça, tu peux gérer Fail2Ban proprement sans toucher à iptables manuellement.
18 avril 2016 /

Dans IPtables, les règles sont gérées par ligne par ligne, donc lorsque qu l’on ajoute une nouvelle règle, elle se mettra à la suite des autres.
Il est donc préférable de lister nos règles en spécifiant leur numéro de ligne avec l’option « –line-numbers« , sinon cela pourrait devenir un vrai casse tete en cas d’erreur.

iptables

:

Pour afficher les tables « INPUT« , « FORWARD » et « OUTPUT » avec les numeros de ligne:

iptables -L --line-numbers

Pour les tables « PREROUTING » et « POSTROUTING » avec les numeros de ligne:

iptables -L -t nat --line-numbers

Maintenant que l’on peut facilement identifier la règle à supprimer, on la supprime (ici la numéro 4 dans la table INPUT):

iptables -D INPUT 4

18 janvier 2016 /

1 – Création d’un script de démarrage

On commence par écrire nos règles de démarrage d’iptables dans un fichier texte, ici /etc/iptables/start.sh :

#!/bin/sh

# Réinitialise les règles
iptables -t filter -F
iptables -t filter -X

# Bloque tout le trafic
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP

# Autorise les connexions déjà établies et localhost
iptables -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT

# DNS entrée/sortie
iptables -t filter -A OUTPUT -p tcp –dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p udp –dport 53 -j ACCEPT
iptables -t filter -A INPUT -p tcp –dport 53 -j ACCEPT
iptables -t filter -A INPUT -p udp –dport 53 -j ACCEPT

# SSH
iptables -t filter -A INPUT -p tcp –dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp –dport 22 -j ACCEPT

# HTTP/HTTPS
iptables -t filter -A OUTPUT -p tcp –dport 80 -j ACCEPT
iptables -t filter -A INPUT -p tcp –dport 80 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp –dport 443 -j ACCEPT
iptables -t filter -A INPUT -p tcp –dport 443 -j ACCEPT

# Ping – ICMP
iptables -t filter -A OUTPUT -p icmp -j ACCEPT
iptables -t filter -A INPUT -p icmp -j ACCEPT

On oublie pas de rendre exécutable le script:

chmod +x /etc/iptables/start.sh

2 – Création d’un script d’arrêt

Puis nos règles d’arrêt iptables, ici /etc/iptables/stop.sh :

#!/bin/sh

# Flush all rules
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

on rend le script exécutable:

chmod +x /etc/iptables/stop.sh

3 – Création d’un service

Il ne nous reste plus qu’a créé le service dans /etc/init.d/, dans l’exemple il porte le nom « iptables_service ».

#!/bin/sh

SERVICE_NAME=iptables_service
SERVICE_DIRECTORY=/etc/iptables/
SERVICE_STARTUP_SCRIPT=start.sh
SERVICE_SHUTDOWN_SCRIPT=stop.sh

## Functions ##
usage()
{
echo « ———————–« 
echo « Usage: $0 (stop|start|restart) »
echo « ———————–« 
}
service_start()
{
echo « Starting service ‘${SERVICE_NAME}’… »
OWD=`pwd`
cd ${SERVICE_DIRECTORY} ./${SERVICE_STARTUP_SCRIPT}
cd $OWD
echo « Service ‘${SERVICE_NAME}’ started successfully »
}
service_stop()
{
echo « Stopping service ‘${SERVICE_NAME}’… »
OWD=`pwd`
cd ${SERVICE_DIRECTORY} && ./${SERVICE_SHUTDOWN_SCRIPT}
cd $OWD
echo « Service ‘${SERVICE_NAME}’ stopped »
}

## Main ##
if [ -z $1 ]; then
usage
fi

case $1 in
stop)
service_stop
;;
start)
service_start
;;
restart)
service_stop
service_start
;;
*)
usage
esac
exit 0

On le rend exécutable:

chmod +x /etc/init.d/iptables_service

Maintenant, pour démarrer le service:

service iptables_service start

ou

/etc/init.d/iptables_service start

Le redémarrer:

service iptables_service restart

ou

/etc/init.d/iptables_service restart

L’arrêter:

service iptables_service stop

ou

/etc/init.d/iptables_service stop