Comme je l'indique dans ce post, je suis en train de me monter un serveur qui a entre autres rôles de servir de passerelle entre mon réseau Wifi (192.168.1.0, que je considère "non sûr") et mon réseau Ethernet (192.168.0.0, que je considère "sûr). Je suis donc en train de configurer iptables. Le but est de sécuriser un minimum tout ça et d'apprendre à utiliser iptables.
Voici donc un petit schéma simplifié de l'architecture :
(PC 192.168.0.20 )---------------------------------------(192.168.0.1 Serveur 192.168.1.20) - - - - - - - - - - - - - - - - - - -(192.168.1.1 Box Web)
Il y a d'autres PC autour, du côté du réseau 192.168.1.0 principalement.
Et voici donc mon script iptables actuel :
Code : Tout sélectionner
##Variables
interne=192.168.0.0/24
externe=192.168.1.0/24
partout=0.0.0.0/0
serveur0=192.168.0.1
serveur1=192.168.1.20
portable=192.168.1.10
##Initialisation des tables
#filter
iptables -t filter -F
iptables -t filter -X
iptables -t filter -P INPUT DROP
#iptables -t filter -P OUTPUT DROP
iptables -t filter -P OUTPUT ACCEPT
iptables -t filter -P FORWARD DROP
#nat
iptables -t nat -F
iptables -t nat -X
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
#mangle
iptables -t mangle -F
iptables -t mangle -X
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P INPUT ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P FORWARD ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT
##Règles pour l'interface lo
iptables -t filter -A INPUT -i lo -j ACCEPT
##Règles pour l'interface eth0 (on accepte tout sur le réseau interne)
iptables -t filter -A INPUT -i eth0 -s $interne -d $interne -j ACCEPT
##Règles pour l'interface eth1
#Samba pour Portable
iptables -t filter -A INPUT -i eth1 -s $portable -d $serveur1 -p tcp --dport 135 -j ACCEPT
iptables -t filter -A INPUT -i eth1 -s $portable -d $serveur1 -p udp --dport 137 -j ACCEPT
iptables -t filter -A INPUT -i eth1 -s $portable -d $serveur1 -p udp --dport 138 -j ACCEPT
iptables -t filter -A INPUT -i eth1 -s $portable -d $serveur1 -p tcp --dport 139 -j ACCEPT
iptables -t filter -A INPUT -i eth1 -s $portable -d $serveur1 -p tcp --dport 445 -j ACCEPT
#plus d'autres pour Samba, NTP...)
##Suivi de connexion
#Toutes les connexions qui sortent du LAN vers le Net sont acceptées
iptables -t filter -A FORWARD -i eth0 -o eth1 -s $interne -d $partout -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
#Seules les connexions déjà établies ou en relation avec des connexions établies sont acceptées venant du Net vers le LAN
iptables -t filter -A FORWARD -i eth1 -o eth0 -s $partout -d $interne -m state --state ESTABLISHED,RELATED -j ACCEPT
##Nat
iptables -t nat -A POSTROUTING -o eth1 -s $interne -j MASQUERADE
##LOGs
iptables -t filter -A INPUT -j ULOG --ulog-prefix=DefaultDrop
Un iptables -nvL me donne :
Code : Tout sélectionner
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT 0 -- lo * 0.0.0.0/0 0.0.0.0/0
8 560 ACCEPT 0 -- eth0 * 192.168.0.0/24 192.168.0.0/24
0 0 ACCEPT tcp -- eth1 * 192.168.1.10 192.168.1.20 tcp dpt:135
0 0 ACCEPT udp -- eth1 * 192.168.1.10 192.168.1.20 udp dpt:137
0 0 ACCEPT udp -- eth1 * 192.168.1.10 192.168.1.20 udp dpt:138
0 0 ACCEPT tcp -- eth1 * 192.168.1.10 192.168.1.20 tcp dpt:139
0 0 ACCEPT tcp -- eth1 * 192.168.1.10 192.168.1.20 tcp dpt:445
0 0 ULOG 0 -- * * 0.0.0.0/0 0.0.0.0/0 ULOG copy_range 0 nlgroup 1 prefix `DefaultDrop' queue_threshold 1
Chain FORWARD (policy DROP 1 packets, 52 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT 0 -- eth0 eth1 192.168.0.0/24 0.0.0.0/0 state NEW,RELATED,ESTABLISHED
0 0 ACCEPT 0 -- eth1 eth0 0.0.0.0/0 192.168.0.0/24 state RELATED,ESTABLISHED
Chain OUTPUT (policy ACCEPT 5 packets, 580 bytes)
pkts bytes target prot opt in out source destination
Donc d'abord, j'aurais voulu savoir si vous aviez des remarques/critiques/propositions d'améliorations sur ce script ?
Ensuite mes soucis :
- il log des DROP sur du broadcast. Par ex :
Code : Tout sélectionner
Aug 7 21:26:33 Serveur DefaultDrop IN=eth1 OUT= MAC= SRC=192.168.1.20 DST=192.168.1.255 LEN=78 TOS=00 PREC=0x00 TTL=64 ID=0 DF PROTO=UDP SPT=137 DPT=137 LEN=58
Aug 7 21:29:28 Serveur DefaultDrop IN=eth0 OUT= MAC=xx:xx:xx:xx:xx:xx:xx:xx:xx SRC=192.168.0.20 DST=255.255.255.255 LEN=335 TOS=10 PREC=0x00 TTL=64 ID=0 DF PROTO=UDP SPT=68 DPT=67 LEN=315
- J'ai vu sur le wiki archlinux.org des règles types :
Code : Tout sélectionner
#iptables -t filter -A INPUT -i eth1 -p tcp -j REJECT --reject-with tcp-reset
#iptables -t filter -A INPUT -i eth1 -p udp -j REJECT --reject-with icmp-port-unreachable
#iptables -t filter -A INPUT -i eth1 -p tcp ! --syn -m state --state NEW -j DROP
#iptables -t filter -A INPUT -i eth1 -f -j DROP
#iptables -t filter -A INPUT -i eth1 -p tcp --tcp-flags ALL ALL -j DROP
#iptables -t filter -A INPUT -i eth1 -p tcp --tcp-flags ALL NONE -j DROP
#iptables -t filter -I INPUT -i eth1 -s 10.0.0.0/8 -j DROP
#iptables -t filter -I INPUT -i eth1 -s 172.16.0.0/12 -j DROP
#iptables -t filter -I INPUT -i eth1 -s 192.168.0.0/16 -j DROP
#iptables -t filter -I INPUT -i eth1 -s 127.0.0.0/8 -j DROP
- nmap ne voit pas les ports DHCP ouverts, savez-vous si c'est normal (le DHCP fonctionne).
Merci d'avance à tous.
EDIT : passage du réseau interne de 192.168.2.0 à 192.168.0.0.