situation : Deux ordinateurs connectés à une box.
Un ordinateur fixe avec un serveur nfs, iptables acceptent toutes les chaînes, le client est monté avec autofs, câblé par Ethernet, adresse 192.168.1.63
Un ordinateur portable avec un client nfs, se connecte soit avec Ethernet soit en Wifi, adresse 192.168.1.83, iptables configurées d'après https://wiki.archlinux.org/title/Simple ... le_machine et modifié pour accepter les paquets entrant avec eth0 (enp1s0) et les paquets entrant avec les protocoles UDP et TCP sur les ports 111 et 2049 pour NFS
iptables.rules
Code : Tout sélectionner
# Generated by iptables-save v1.8.7 on Sun May 16 19:02:34 2021
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [328:42992]
:TCP - [0:0]
:UDP - [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i enp1s0 -j ACCEPT
-A INPUT -p ipv6 -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
-A TCP -p tcp -m tcp --dport 80 -j ACCEPT
-A TCP -p tcp -m tcp --dport 443 -j ACCEPT
-A TCP -p tcp -m tcp --dport 8000 -j ACCEPT
-A TCP -p tcp -m tcp --dport 111 -j ACCEPT
-A TCP -p tcp -m tcp --dport 2049 -j ACCEPT
-A TCP -p tcp -m tcp --dport 22 -j ACCEPT
-A TCP -p tcp -m tcp --dport 53 -j ACCEPT
-A UDP -p udp -m udp --dport 111 -j ACCEPT
-A UDP -p udp -m udp --dport 2049 -j ACCEPT
-A UDP -p udp -m udp --dport 53 -j ACCEPT
COMMIT
# Completed on Sun May 16 19:02:34 2021
Code : Tout sélectionner
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT ipv6 -- anywhere anywhere
DROP all -- anywhere anywhere ctstate INVALID
ACCEPT icmp -- anywhere anywhere icmp echo-request ctstate NEW
UDP udp -- anywhere anywhere ctstate NEW
TCP tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW
REJECT udp -- anywhere anywhere reject-with icmp-port-unreachable
REJECT tcp -- anywhere anywhere reject-with tcp-reset
REJECT all -- anywhere anywhere reject-with icmp-proto-unreachable
Chain FORWARD (policy DROP)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain TCP (1 references)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:http
ACCEPT tcp -- anywhere anywhere tcp dpt:https
ACCEPT tcp -- anywhere anywhere tcp dpt:irdmi
ACCEPT tcp -- anywhere anywhere tcp dpt:sunrpc
ACCEPT tcp -- anywhere anywhere tcp dpt:shilp
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere tcp dpt:domain
Chain UDP (1 references)
target prot opt source destination
ACCEPT udp -- anywhere anywhere udp dpt:sunrpc
ACCEPT udp -- anywhere anywhere udp dpt:shilp
ACCEPT udp -- anywhere anywhere udp dpt:domain
Donc si je connecte le portable à la box avec un câble Ethernet, il est bien monté comme client sur le serveur.
Mais en Wifi le serveur retourne ce message :
Code : Tout sélectionner
$showmount -e 192.168.1.83
rpc mount export: RPC: Unable to receive; errno = Connection refused
Code : Tout sélectionner
sudo rpcinfo -p 192.168.1.83
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100005 1 udp 20048 mountd
100005 1 tcp 20048 mountd
100024 1 udp 57286 status
100024 1 tcp 47175 status
100005 2 udp 20048 mountd
100005 2 tcp 20048 mountd
100005 3 udp 20048 mountd
100005 3 tcp 20048 mountd
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 3 tcp 2049
100021 1 udp 39058 nlockmgr
100021 3 udp 39058 nlockmgr
100021 4 udp 39058 nlockmgr
100021 1 tcp 33933 nlockmgr
100021 3 tcp 33933 nlockmgr
100021 4 tcp 33933 nlockmgr
Elles bloquent la demande de connexion du serveur sur la chaîne INPUT quand il est connecté en Wifi.
Il y aurait une erreur sur les lignes suivantes ...
-A TCP -p tcp -m tcp --dport 111 -j ACCEPT
-A TCP -p tcp -m tcp --dport 2049 -j ACCEPT
-A UDP -p udp -m udp --dport 111 -j ACCEPT
-A UDP -p udp -m udp --dport 2049 -j ACCEPT
ou bien il manque des règles pour ouvrir les ports aux services mountd, nlockmgr, status ?
ou bien les règles relatives à l'état sont trop strictes sur les lignes.
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
Cette dernière ligne est le résultat de la commande :
# iptables -A INPUT -p tcp --syn -m conntrack --ctstate NEW -j TCP
Voici comment je comprends le tutoriel (lien ci dessus).
Maintenant nous allons attacher les chaînes TCP et UDP à la chaîne INPUT pour gérer les nouvelles connexions entrantes. Une fois que la connexion est acceptée elle est gérée par les règles RELATED/ESTABLISHED (qui acceptent la cible). Les chaînes TCP et UDP vont soit accepter les nouvelles connexions entrantes, soit les rejeter poliment (ça veut dire qu'on peut en trouver une trace ?). Et après je n'y comprends rien :
Est ce quelqu'un peut m'aider à y voir plus clair ?New TCP connections must be started with SYN packets.
Note: NEW but not SYN is the only invalid TCP flag not covered by the INVALID state. This is because they are rarely malicious packets and should not just be dropped. Instead, they are simply rejected with a TCP RESET by the next rule.Code : Tout sélectionner
# iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
Question subsidiaire, peut on modifier directement le fichier iptables.rules ou est il plus correct d'utiliser les options de iptables -R/-I/-D en ligne de commande ?
J'ai essayé d'être le plus complet possible, merci de m'avoir lu.