Iptables

De Avided.info
Aller à : navigation, rechercher


Affiches les regles

  • -L : affiche les regles
  • -n : evite de faire la resolution inverse des adresses ip ( gain de temps )
iptables -L -n

Ajoutes des stats par regles

iptables-L -n -v

config

Sur certaine distributions il n'existe pas de mecanisme de gestion d'iptables . Il faut donc créer un script et ajouter ce script dans un service qui qui ce chargera d'exectuter ce script au demarrage

Sur les distribution de la famille RedHat, Fedora, Centos, il existe un service iptables. Cela permet de gerer correctement un tas de choses. L'arret, le demmarage et le redemarrage du service, ainsi que bien d'autre chose. Le service utilise le format de fichier de la commande iptables-save.

Se service ce base sur 2 fichiers. Un fichier qui permet d’agir sur le comportement du service iptables Il permet de charger des modules iptables. Il permet d'indiquer si il doit sauvegarder les regles en cours

/etc/sysconfig/iptables-config

l'autre contient les regles iptables a charger dans les autres distribution, il faut soit utiliser un service developper a cette effet qui est souvent un outils a part entiere ou ecrire un script contenant les régles et lui demander d’exécuter ce script au demarrage.

/etc/sysconfig/iptables

Vous remarquerez que la grande partie des regles garde la meme syntaxe qu'avec la commande iptables. Il ne manque que la commande iptables devant chaque ligne commença par -A pour créer une script

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT

## tous les session etablie sont autorisé
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Log et drop tous les paquets ayant un etat INVALID
-A INPUT -m state --state INVALID -j LOG --log-level debug --log-prefix "#IPT#LOG#INVALID#"
-A INPUT -m state --state INVALID -j DROP 

# tous les acces depusi la machine d'Admin machine
-A INPUT -m state --state NEW -s IP_MACHINE_D'ADMIN -j LOG --log-level debug --log-prefix "#IPT#ACT#MACHINE_D'ADMIN#"
-A INPUT -m state --state NEW -s IP_MACHINE_D'ADMIN -j ACCEPT
# ou juste ssh pour la machine d'admin
## Acces en ssh depuis la machine d'admin
#-A INPUT -m state --state NEW -m tcp -p tcp -s IP_MACHINE_D'ADMIN --dport 22 -j LOG --log-level debug --log-prefix "#IPT#ACT#SSH#"
#-A INPUT -m state --state NEW -m tcp -p tcp -s IP_MACHINE_D'ADMIN --dport 22 -j ACCEPT

# SSH pour tous
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j LOG --log-level debug --log-prefix "#IPT#ACT#SSH#"
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

## acces au serveur FTP pour tous
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j LOG --log-level debug --log-prefix "#IPT#ACT#FTP#"
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 20 -j ACCEPT

## acces pour 8080 a  pour tous
#-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j LOG --log-level debug --log-prefix "#IPT#ACT#ORACLE#"
#-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT

## acces a http et https  pour tous
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j LOG --log-level debug --log-prefix "#IPT#ACT#HTTP#"
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j LOG --log-level debug --log-prefix "#IPT#ACT#HTTPS#"
-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT

## DHCPD
# tcp
-A INPUT -m state --state NEW -m tcp -p tcp --dport 67 -j LOG --log-level debug --log-prefix "#IPT#ACT#BOOTTP-T#"
-A INPUT -m state --state NEW -m tcp -p tcp --dport 67 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 68 -j LOG --log-level debug --log-prefix "#IPT#ACT#DHCP-T#"
-A INPUT -m state --state NEW -m tcp -p tcp --dport 68 -j ACCEPT
# udp
-A INPUT -m state --state NEW -m udp -p udp --dport 67 -j LOG --log-level debug --log-prefix "#IPT#ACT#BOOTTP-U#"
-A INPUT -m state --state NEW -m udp -p udp --dport 67 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 68 -j LOG --log-level debug --log-prefix "#IPT#ACT#DHCP-U#"
-A INPUT -m state --state NEW -m udp -p udp --dport 68 -j ACCEPT

# DNS NAMED
-A INPUT -m state --state NEW -m tcp -p tcp --dport 53 -j LOG --log-level debug --log-prefix "#IPT#ACT#DNS-T#"
-A INPUT -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 53 -j LOG --log-level debug --log-prefix "#IPT#ACT#DNS-U#"
-A INPUT -m state --state NEW -m udp -p udp --dport 53 -j ACCEPT

## regle de blocage par defaut : tous ce qui reste doit etre dropé.
-A INPUT -j LOG --log-level debug --log-prefix "#IPT#DRP#DEFAUT#"
-A INPUT -j DROP

# Tous ce qui doit eter forwardé, sera rejeté avec un reponse.
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

Les logs

les fait de metre les options de log permet de recuperer les log des packets qui sont passé par ces regeles pour les recuperer soit dans votre syslog ou rsyslog vous recuperer ce qui viens du kernel au nioveau debug, mais cela mellange trop les log iptables avec le reste rsysylog permet d'etre un peux plus fin si vous avez comme moi utiliser un prefix commun a toute vos regle "#IPT#" dans mont cas, vous pouvez jouter cette ligne dasn votre fichier /etc/rsyslog.conf

:msg, regex, ".*#IPT#.*#.*#.*"                                       /var/log/iptables

Outils

Il existe certaint outils permettant de gerer iptables. De mon coté j'utilise le plus souvent le fichier de conf. Mais il existe aussi des outils complementaire :

fail2ban => permet de creer des regles dynamiquement en fonction du contenue des fichiers de logs.