OVH Cloud OVH Cloud

[OpenBSD] Nmap et Packet Filter

1 réponse
Avatar
olivier.pernet
Salut à tous,
Je fais actuellement quelques essais avec nmap, et je me suis aperçu
que dès lors que j'essayais de scanner un hôte au-delà de mon firewall
OpenBSD 3.5, les seules méthodes fonctionnelles sont les scans par
connections TCP normale (-sT) et le scan SYN (-sS). Tous les scans
plus évolués : -sX (FIN|URG|PUSH) , -sF (FIN), -sN (pas de flag actif)
ne donnent rien, et un tcpdump sur l'interface externe du firewall
m'apprend que les paquets en question sont arrêtés par le firewall.

Par ailleurs, le ping que nmap fait automatiquement a un comportement
bizarre :
- Lancé en tant que root, il ne fonctionne pas
- Lancé en tant qu'utilisateur normal, il fonctionne.

Pour finir, un scan Fin, Xmas, Null sur le firewall m'informe que tous
les ports testés sont ouverts, alors qu'il n'y a qu'un serveur SSH en
réalité.

Quelqu'un pourrait-il m'aider à comprendre le pourquoi de tout ça ? Je
soupçonnais la règle "scrub" ; la désactiver change le résultat du
scan du firewall (on passe de "tous les ports ouverts" à "tous
fermés"), mais ne change pas les résultats du ping en root.
j'ai essayé de changer aussi le "modulate state" appliqué à mes
paquets TCP en sortie en "keep state", sans résultat.
Merci de votre aide, je m'y perds vraiment là :-)
Je joins mes règles de firewall.
#######################
# PF Ruleset
# 17/08/2004
#######################

############# Macros/tables #######################
# RFC 1918/3330
table <nonroutable> const { 192.168.0.0/16, 127.0.0.0/8,
172.16.0.0/12, \
10.0.0.0/8, 0.0.0.0/8, 169.254.0.0/16,
192.0.2.0/24, \
224.0.0.0/3, 255.255.255.255/32 }

##########

extif = "tun0"
intif = "sis0"
wirelessif = "ne4"
unsafe = "{$external, $wireless}"

##########

# TCP services allowed in
# 22 : SSH 1214 : FastTrack
# 1412 : DirectConnect 2234 : SoulSeek
# 4662 : eDonkey2000 6517 : Overnet
# 6346 : Gnutella 6347 : Gnutella2
# 6699 : OpenNap 6881 : BitTorrent
# 6882 : BitTorrent


tcpserv = "{ 22,1214,1412,2234,4662,6517,6346,6347,6699,6881,6882 }"

# UDP services allowed in
# 1412 : DirectConnect 4663 : Overnet
# 4666 : eDonkey2000 6347 : Gnutella2

udpserv = "{ 1412,4663,4666,6347 }"

######### Options #################################

set block-policy drop

######### Normalization ###########################

# Normalize packets, and reassemble fragmented ones.
scrub in all

######### Translation #############################

# NAT for LAN and WLAN.
nat on $extif from $intif:network to any -> $extif
nat on $extif from $wirelessif:network to any -> $extif

######### Filtering rules ##########################
# Default deny policy.
block all

#####
# Traffic to/from loopback is allowed without restriction.
pass quick on lo0 all

#####
# Drop spoofing attemps.
block drop in quick on $extif from <nonroutable> to any
block drop out quick on $extif from any to <nonroutable>

#####
# Allow access to the upper-definied TCP and UDP services.
pass in quick on $extif inet proto tcp from any to ($extif) \
port $tcpserv flags S/SA synproxy state

pass in quick on $extif inet proto udp from any to ($extif) \
port $udpserv keep state
#####
# Allow external ping
pass in quick on $extif inet proto icmp from any to ($extif) \
icmp-type echoreq keep state

##### LAN
# Allow all incoming/responding traffic from the LAN (trusted).
pass in quick on $intif from $intif:network to any keep state

# Allow all outgoing traffic to the LAN.
pass out quick on $intif from any to $intif:network keep state

##### WLAN

pass in quick on $wirelessif from $wirelessif:network to any keep
state
pass out quick on $wirelessif from any to $wirelessif:network keep
state

#####
# Block access from the WLAN to the LAN.
block in quick on $wirelessif from $wirelessif:network \
to $intif:network

#####
# Allow external connections from our networks to the Internet.
pass out quick on $extif proto tcp all modulate state flags S/SA
pass out on $extif proto { udp, icmp } all keep state

###################################################

1 réponse

Avatar
aanriot
Quelqu'un pourrait-il m'aider à comprendre le pourquoi de tout ça ? Je
soupçonnais la règle "scrub" ; la désactiver change le résultat du
scan du firewall (on passe de "tous les ports ouverts" à "tous
fermés"), mais ne change pas les résultats du ping en root.


La directive "Scrub" normalise les packets. Elle n'est donc pas
responsable des résultats que tu obtiens. Si seuls les TCP scans et
SYN scans sont tolérés, c'est du aux "flags S/SA".

En effet, dans le cas d'une nouvelle connexion, c'est à dire avant de
créer une entrée dans la table d'états de PF, une règle doit être
validée, avec dans ton cas un flag SYN. Ainsi, envoyer un ACK, un FIN,
ou une combinaison de flags comme dans le cas d'un X-mas scan est
prohibé et refusé par PF. La condition S/SFRA est d'ailleurs encore
plus intéressante dans certains cas.

j'ai essayé de changer aussi le "modulate state" appliqué à mes
paquets TCP en sortie en "keep state", sans résultat.
Merci de votre aide, je m'y perds vraiment là :-)
Je joins mes règles de firewall.


Le "Modulate State", c'est un "Keep State" avec, en plus, le
remplacement de l'ISN par un nouveau, plus aléatoire que celui créé
par certains OS... Il n'a donc rien à voir avec les paquets bloqués
:-)