62 votes

Conseils et astuces pour iptables

Je suis sûr que les administrateurs système de Linux sont assez familiers avec iptables l'interface utilisateur de l netfilter cadre de filtrage de paquets.

Maintenant, cette "Question" est censée être une Wiki communautaire pour rassembler les différents morceaux de iptables sagesse. Rien n'est trop commun ou trop obscur. Publiez tout ce que vous savez qui pourrait aider d'autres personnes à tirer le maximum de iptables .

28voto

Bart De Vos Points 17611

Utilisation de la liste blanche et de la liste noire avec iptables

#!/bin/bash

WHITELIST=/whitelist.txt
BLACKLIST=/blacklist.txt

#THIS WILL CLEAR ALL EXISTING RULES!
echo 'Clearing all rules'
iptables -F

#
## Whitelist
#

for x in `grep -v ^# $WHITELIST | awk '{print $1}'`; do
        echo "Permitting $x..."
        $IPTABLES -A INPUT -t filter -s $x -j ACCEPT
done

#
## Blacklist
#

for x in `grep -v ^# $BLACKLIST | awk '{print $1}'`; do
        echo "Denying $x..."
        $IPTABLES -A INPUT -t filter -s $x -j DROP
done

script pour ouvrir les ports

#!/bin/bash
ALLOWEDTCP="80 3128 3784"
ALLOWEDUDP="3128 3784"

#
## Permitted Ports
#

for port in $ALLOWEDTCP; do
       echo "Accepting port TCP $port..."
       $IPTABLES -A INPUT -t filter -p tcp --dport $port -j ACCEPT
done

for port in $ALLOWEDUDP; do
        echo "Accepting port UDP $port..."
        $IPTABLES -A INPUT -t filter -p udp --dport $port -j ACCEPT
done

Blocage de portscan

# Attempt to block portscans
# Anyone who tried to portscan us is locked out for an entire day.
iptables -A INPUT   -m recent --name portscan --rcheck --seconds 86400 -j DROP
iptables -A FORWARD -m recent --name portscan --rcheck --seconds 86400 -j DROP

# Once the day has passed, remove them from the portscan list
iptables -A INPUT   -m recent --name portscan --remove
iptables -A FORWARD -m recent --name portscan --remove

# These rules add scanners to the portscan list, and log the attempt.
iptables -A INPUT   -p tcp -m tcp --dport 139 -m recent --name portscan --set -j LOG --log-prefix "Portscan:"
iptables -A INPUT   -p tcp -m tcp --dport 139 -m recent --name portscan --set -j DROP

iptables -A FORWARD -p tcp -m tcp --dport 139 -m recent --name portscan --set -j LOG --log-prefix "Portscan:"
iptables -A FORWARD -p tcp -m tcp --dport 139 -m recent --name portscan --set -j DROP

Paquets usurpés/Invalides

# Reject spoofed packets
# These adresses are mostly used for LAN's, so if these would come to a WAN-only server, drop them.
iptables -A INPUT -s 10.0.0.0/8 -j DROP
iptables -A INPUT -s 169.254.0.0/16 -j DROP
iptables -A INPUT -s 172.16.0.0/12 -j DROP
iptables -A INPUT -s 127.0.0.0/8 -j DROP

#Multicast-adresses.
iptables -A INPUT -s 224.0.0.0/4 -j DROP
iptables -A INPUT -d 224.0.0.0/4 -j DROP
iptables -A INPUT -s 240.0.0.0/5 -j DROP
iptables -A INPUT -d 240.0.0.0/5 -j DROP
iptables -A INPUT -s 0.0.0.0/8 -j DROP
iptables -A INPUT -d 0.0.0.0/8 -j DROP
iptables -A INPUT -d 239.255.255.0/24 -j DROP
iptables -A INPUT -d 255.255.255.255 -j DROP

# Drop all invalid packets
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP
iptables -A OUTPUT -m state --state INVALID -j DROP

Bloquer les attaques des Schtroumpfs

# Stop smurf attacks
iptables -A INPUT -p icmp -m icmp --icmp-type address-mask-request -j DROP
iptables -A INPUT -p icmp -m icmp --icmp-type timestamp-request -j DROP
iptables -A INPUT -p icmp -m icmp -j DROP

# Drop excessive RST packets to avoid smurf attacks
iptables -A INPUT -p tcp -m tcp --tcp-flags RST RST -m limit --limit 2/second --limit-burst 2 -j ACCEPT

Bloquer ICMP (alias ping)

# Don't allow pings through
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j DROP

26voto

Zsolt Sz. Points 347

Optimiser les performances de netfilter en utilisant ipset

Si vous écrivez un lote de règles similaires basées sur une simple IP, un port, ou les deux, envisagez l'utilisation de ipset pour optimiser les performances de netfilter.

Par exemple :

iptables -s 192.168.1.11 -j ACCEPT
iptables -s 192.168.1.27 -j ACCEPT
iptables -s 192.168.1.44 -j ACCEPT
... hundreds of similar rules ...
iptables -s 192.168.251.177 -j ACCEPT

Cela signifie qu'un paquet avec l'adresse source de 192.168.251.177 doit d'abord traverser des centaines de règles avant de pouvoir obtenir son verdict d'ACCEPTATION.

Bien sûr, les administrateurs système expérimentés diviseront les règles par sous-réseau. Mais cela toujours signifie des centaines de règles.

ipset à la rescousse !

Tout d'abord, définissez un ensemble IP de ipmap type :

ipset -N Allowed_Hosts ipmap --network 192.168.0.0/16

Ensuite, remplissez-le avec les adresses :

for ip in $LIST_OF_ALLOWED_IP; do ipset -A Allowed_Hosts $ip; done

Enfin, remplacez les centaines de règles iptables ci-dessus par règle :

iptables -m set --match-set Allowed_Hosts src -j ACCEPT

Lorsqu'un paquet arrive, netfilter va effectuer un très rapide recherche bitmap de l'IP source (src) du paquet par rapport au Allowed_Hosts Set IP. Tous les paquets en provenance de 192.168.0.0/16 vont connaître règle. Et croyez-moi, la recherche d'un bitmap est au moins deux ordres de grandeur plus rapide que la vérification de centaines de règles iptables.

ipset ne se limite pas aux adresses IP. Elle peut aussi se baser sur les ports, le n-uplet IP-port, les adresses de réseau/sous-réseau, le n-uplet IP-MAC, et ainsi de suite. Et il peut faire correspondre ces critères en tant que source ou destination ou un mélange des deux (dans le cas des tuples).

Et enfin, avec ipset vous pouvez placer automatiquement des adresses IP dans des listes noires/blanches. Ces listes noires/blanches peuvent également "vieillir", c'est-à-dire supprimer automatiquement l'adresse IP après un laps de temps configurable.

Veuillez vous référer à ipset Page de manuel de l'utilisateur pour plus de détails.

NOTE TRÈS IMPORTANTE :

Certaines distributions Linux peuvent no ont un support "prêt à l'emploi" pour ipset (par exemple, Ubuntu 10.04 avait ce problème). Sur ces systèmes, une méthode consiste à installer ipset à partir du code source.

Au lieu de cela, téléchargez ipset de son site web : http://ipset.netfilter.org/install.html

Alternativement, si vous utilisez xtables-addons , ipset est inclus dans sa source : http://xtables-addons.sourceforge.net/

23voto

hamstergene Points 141

Ajoutez des commentaires à vos règles :

-m comment --comment "Comments help to read output of iptables -nvL"

18voto

Zsolt Sz. Points 347

Bloquer les attaques TCP connues

Ajoutez les règles suivantes, de préférence dans -t raw -A PREROUTING

-p tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
-p tcp --tcp-flags SYN,RST SYN,RST -j DROP
-p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP
-p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN -j DROP
-p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
-p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP

Les attaques bloquées sont, respectivement :

  • Attaque SYN-FIN
  • Attaque SYN-RST
  • Attaque de Noël
  • nmap FIN scan
  • Attaque NULLflags
  • ALLflags attaque

(n'hésitez pas à modifier les noms des attaques ci-dessus)

7voto

Kenny Rasschaert Points 8737

Activer le NAT

  1. echo 1 > /proc/sys/net/ipv4/ip_forward
  2. /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

L'étape 1 définit le paramètre du noyau pour autoriser le transfert d'IP, l'étape 2 définit une règle iptables qui active le NAT sur l'interface eth0.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X