Mandriva
Page précédente | Menu | Page suivante

Page 2: Méthode de configuration

Les règles par défaut

Tout d'abord, il nous faut vider les règles pour partir sur des bases saines et définir une politique à appliquer par défaut et,comme convenu au départ, ce qui n'est pas autorisé est interdit, donc nous jetons par défaut tous les paquets:

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X 
iptables -t mangle -F
iptables -t mangle -X

Configurons les règles nécessaires de log

  • Pour logguer tout ce qu'on jette, on crée une chaine LOG_DROP et, ensuite plutôt que de mettre -j DROP, il faut mettre -j LOG_DROP
iptables -N LOG_DROP
iptables -A LOG_DROP -j LOG --log-prefix '[IPTABLES DROP] : '
iptables -A LOG_DROP -j DROP
Donc on ajoute:
iptables -A FORWARD -j LOG_DROP
iptables -A INPUT -j LOG_DROP
iptables -A OUTPUT -j LOG_DROP
  • on peut en faire de même si on veut logger tout ce qui est accepté, on crée une chaine LOG_ACCEPT et, ensuite plutôt que de mettre -j ACCEPT, il faut mettre -j LOG_ACCEPT
iptables -N LOG_ACCEPT
iptables -A LOG_ACCEPT -j ACCEPT --log-prefix '[IPTABLES ACCEPT] : '
iptables -A LOG_ACCEPT -j ACCEPT

Configurer les règles nécessaires de filtrage :

Nous allons maintenant proposer différentes règles à mettre en place suivant les services à fournir. Elles seront utilisables indifférement l'une de l'autre.

  • Pour surfer sur le web en sachant que eth0 est l'interface internet. On autorise l'accès aux données d'un PC exterieur de son port 80 si cela vient d'une connexion déjà existante (évite ainsi une attaque rso). On autorise la sortie vers un PC distant sur son port 80 pour une nouvelle connexion ou une connexion existante.
modprobe ip_conntrack
iptables -A INPUT -i eth0 --protocol tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 --protocol tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
  • De cette manière, une erreur ICMP passera, mais votre passerelle ne répondra pas aux pings, ni à aucune autre interrogation provenant de l'exterieur (eth0 étant l'interface connectée à internet).
iptables -A INPUT -i eth0 -p icmp  -m state --state RELATED -j ACCEPT
  • serveur SSH
iptables -A INPUT -p tcp --dport ssh -i ppp0 -j ACCEPT
iptables -A OUTPUT -p tcp --sport ssh -o ppp0 -j ACCEPT
  • serveur SMTP
iptables -A OUTPUT -o ppp0 -p tcp --sport 1024: -d smtp.wanadoo.fr --dport 25 -m state --state ! INVALID -j ACCEPT
iptables -A INPUT -i ppp0 -p tcp -s smtp.wanadoo.fr --sport 25 --dport 1024: -m state --state RELATED,ESTABLISHED -j ACCEPT
  • servuer DNS
iptables -A OUTPUT -o ppp0 -p udp --sport 1024: --dport 53 -m state --state ! INVALID -j ACCEPT
iptables -A INPUT -i ppp0 -p udp --sport 53 --dport 1024: -m state --state RELATED,ESTABLISHED -j ACCEPT
  • Serveur FTP
Pour cette connexion, il faut charger le module "conntrack_ftp". Eth0 est l'interface internet.

On autorise la reception de paquet provenant d'une machine exterieur protocole tcp, port de départ 21 avec une connexion déjà établie.

On autorise l'emission de paquet vers une machine exterieur protocole tcp port d'arrivé 21 pour une connection déjà établie ou une nouvelle connexion

On autorise la reception de paquet provenant d'une machine exterieur protocole tcp, port de départ 20 avec une connexion déjà établie.

On autorise l'emission de paquet vers une machine exterieur protocole tcp port d'arrivé 20 pour une connection déjà établie ou provenant d'une autre connexion

On autorise la reception de paquet provenant d'une machine exterieur protocole tcp, port de départ et arrivée entre 1024 et 65535 avec une connexion déjà établie.

On autorise l'emission de paquet vers une machine exterieur protocole tcp port de départ et arrivée 1024 et 65535 pour une connection déjà établie ou provenant d'une autre connexion.

modprobe ip_conntrack_ftp
iptables -A INPUT -i eth0 -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT 
iptables -A INPUT -i eth0 -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT 
iptables -A INPUT -i eth0 -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT

Configurer les règles nécessaires de NATage:

Commandes permettant d'auditer la configuration

  • Lecture de toutes les règles et chaines
iptables -L
  • Liste les règles concernant des SNAT/DNAT
iptables –t nat –L

Règles suplémentaire de sécurité

  • Pour se protéger des scan de port
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
  • Protection contre le ping de la mort
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

Sauvegarde et relance du service iptables

  • TCP est un protocole orienté connexion, iptables permet de lire les marqueurs inscrits dans l’ en-tête du paquet. Il existe six marqueurs: SYN, ACK, FIN, RST, URG, PSH.
iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN SYN -j ACCEPT

*L’option -tcp-flags prend deux argument, d’abord une liste des marqueurs à reconnaître puis la liste de leur état (1 ou 0). Ici, on vérifie que c’est un paquet où le marqueur SYN est à 1 et les deux marqueurs ACK et FIN sont à 0.

iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
  • Pour le protocole ICMP, nous allons pouvoir reconnaître les différents types.
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
iptables -A INPUT -p icmp --icmp-type echo-reply -j DROP
ou
iptables -A INPUT -p icmp --icmp-type 8 -j DROP
  • Iptables est un pare-feu dit "full state", c’est-à-dire que même sur des protocoles, comme udp, qui ne sont pas orientés connexion, on va pouvoir vérifier l’état de la connexion. Maintenant nous acceptons les nouvelles connexions (eg : SYN) , les connexions déjà établies (eg : ACK) et les connexions en relation avec une connexion déjà établis (eg : FTP-data, IRC-dcc, …)
iptables -A INPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state INVALID -j DROP
  • L’option --dport désigne le port de destination du paquet. Ici, nous acceptons les connexions sortantes vers un serveur DNS et les connexions entrantes sur notre serveur Web.
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
  • L’option -sport désigne le port source du paquet, ici nous acceptons que notre serveur Web réponde aux requêtes des clients.
iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
  • Ce module permet de vérifier l’adresse mac de l’expéditeur.
iptables -A INPUT -m mac --mac-source 00:09:99:45:34:34 -j DROP
  • Changer l'adresse source en 1.2.3.4.
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 1.2.3.4
  • Changer l'adresse source en 1.2.3.4, 1.2.3.5 ou 1.2.3.6
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 1.2.3.4-1.2.3.6
  • Changer l'adresse source en 1.2.3.4, port 1-1023
iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to 1.2.3.4:1-1023
  • Changer l'adresse de destination en 5.6.7.8
iptables -t nat -A PREROUTING -i eth1 -j DNAT --to 5.6.7.8
  • Changer l'adresse de destination en 5.6.7.8, 5.6.7.9 ou 5.6.7.10.
iptables -t nat -A PREROUTING -i eth1 -j DNAT --to 5.6.7.8-5.6.7.10
  • Changer l'adresse de destination du traffic web en 5.6.7.8, port 8080.
iptables -t nat -A PREROUTING -p tcp --dport 80 -i eth1 -j DNAT --to 5.6.7.8:8080
  • Rediriger les paquets locaux destinés à 1.2.3.4 en loopback.
iptables -t nat -A OUTPUT -d 1.2.3.4 -j DNAT --to 127.0.0.1
  • enregistrement(log) des messages icmp sur l'entrée eth0
iptables -A INPUT -i eth0 -p icmp -j LOG
  • Autorise l'accès au serveur SSH depuis le net
iptables -A INPUT -p tcp --dport ssh -i ppp0 -j ACCEPT
iptables -A OUTPUT -p tcp --sport ssh -o ppp0 -j ACCEPT
  • Autorise l'accès au serveur http depuis le net

                  
  • Autorise l'accès à MSN
iptables -A OUTPUT --protocol tcp --dport 1863 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT --protocol tcp --sport 1863 -m state --state ESTABLISHED -j ACCEPT
  • De cette manière, une erreur ICMP passera, mais votre passerelle ne répondra pas aux pings, ni à aucune autre interrogation ICMP.
iptables -A INPUT -p icmp  -m state --state RELATED -j ACCEPT
  • Autorise l'accès au serveur FTP depuis le net

                  
  • Autorise l'accès au serveur DNS depuis le net
iptables -A OUTPUT -o ppp0 -p udp --sport 1024: --dport 53 -m state --state ! INVALID -j ACCEPT
iptables -A INPUT -i ppp0 -p udp --sport 53 --dport 1024: -m state --state RELATED,ESTABLISHED -j ACCEPT
  • Autorise le transfert P2P sur le réseau

                  
  • Autorise le chat avec Xchat

                  
  • Autorise l'accès de notre machine au serveur POP au serveur de messagerie

                  
  • Autorise l'accès de notre machine au serveur SMTP au serveur de messagerie
iptables -A OUTPUT -o ppp0 -p tcp --sport 1024: -d smtp.wanadoo.fr --dport 25 -m state --state ! INVALID -j ACCEPT
iptables -A INPUT -i ppp0 -p tcp -s smtp.wanadoo.fr --sport 25 --dport 1024: -m state --state RELATED,ESTABLISHED -j ACCEPT
  • Autorise l'accès à la messagerie instantanée MSN

                  
  • Autorise l'accès de notre machine au serveur HTTP sur le net

                  
  • Autorise l'accès de notre machine au serveur FTP sur le net

                  

Refuse les connections de la machine 12.13.14.15

iptables –I INPUT –s 12.13.14.15 –j DROP
  • Liste succinte des adresses de ports:
Pour plus d'info, voir /etc/services
port service
20 ftp
21 ftp
22 ssh
25 smtp
80 http
110 pop3
143 imap
220 imap3
443 https
2401 cvs
6667 irc

Page précédente | Menu | Page suivante

KB - Welcome to Mandriva Club Knowledge Base > Security > Page 2: Méthode de configuration
Wersja 1.31 ostatnio modyfikowane przez mushu-petit-dragon w 22/02/2007 przy 14:10

 


fr

RSS

Autor: mushu-petit-dragon w 2005/08/21 16:59
(c) Mandriva 2007
18888888