Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
|
anthony_messe:banana_pi:iptables_ipv4_classe_c [2018/05/11 09:16] Anthony Messé |
anthony_messe:banana_pi:iptables_ipv4_classe_c [2018/06/12 13:28] (Version actuelle) Anthony Messé |
||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | Lien vers [[anthony_messe:anthony_messe|l'accueil]] | ||
| + | |||
| ====== Redirection du trafic avec iptables pour une classe C IPv4 ====== | ====== Redirection du trafic avec iptables pour une classe C IPv4 ====== | ||
| + | |||
| + | Tor ne supporte pas le protocole UDP, excepté les requêtes DNS sur un port spécialement créé pour cela par le service Tor. | ||
| ===== Rediriger uniquement le trafic de l'interface wifi ===== | ===== Rediriger uniquement le trafic de l'interface wifi ===== | ||
| Créez un nouveau fichier bash | Créez un nouveau fichier bash | ||
| - | nano bridge.sh | + | nano iptables_access_point.sh |
| Placez-y le code ci-dessous | Placez-y le code ci-dessous | ||
| > ctrl + c pour copier et ctrl + maj + v pour coller dans nano dans un terminal | > ctrl + c pour copier et ctrl + maj + v pour coller dans nano dans un terminal | ||
| - | |||
| - | ==== Script court en policy accept ==== | ||
| - | <code=bash> | ||
| - | #!/bin/sh | ||
| - | #Variables | ||
| - | _trans_port="9040" | ||
| - | _dns_port="5353" | ||
| - | _interface_wifi="wlx503eaa3d7d6c" | ||
| - | #Adresse du router (adresse de la machine ayant le point d'accès wifi) | ||
| - | _router="192.168.0.254" | ||
| - | _reseau_wifi="192.168.0.0/24" | ||
| - | #Adresse dont on empêche l'accès | ||
| - | _unreachable="192.168.18.0/24" | ||
| - | #On efface toutes les règles iptables | ||
| - | iptables -F | ||
| - | iptables -X | ||
| - | iptables -t nat -F | ||
| - | iptables -t nat -X | ||
| - | iptables -t mangle -F | ||
| - | iptables -t mangle -X | ||
| - | iptables -P INPUT ACCEPT | ||
| - | iptables -P FORWARD DROP | ||
| - | iptables -P OUTPUT ACCEPT | ||
| - | |||
| - | iptables -t nat -A PREROUTING -i $_interface_wifi -p tcp --syn -j REDIRECT --to-ports $_trans_port | ||
| - | iptables -t nat -A PREROUTING -i $_interface_wifi -p udp --dport 53 -j REDIRECT --to-ports $_dns_port | ||
| - | iptables -A INPUT -s $_reseau_wifi -d $_unreachable -j DROP | ||
| - | </code> | ||
| ==== Script long en policy drop ==== | ==== Script long en policy drop ==== | ||
| - | <code> | + | <code=bash> |
| #!/bin/sh | #!/bin/sh | ||
| #Variables | #Variables | ||
| Ligne 47: | Ligne 23: | ||
| _interface_wifi="wlx503eaa3d7d6c" | _interface_wifi="wlx503eaa3d7d6c" | ||
| _tor_uid=`id -u debian-tor` | _tor_uid=`id -u debian-tor` | ||
| - | _router="10.255.255.254" #Adresse du router (adresse de la machine ayant le point d'accès wifi) | + | _router="192.168.0.254" #Adresse du router (adresse de la machine ayant le point d'accès wifi) |
| - | _reseau_wifi="10.0.0.0/8" | + | _reseau_wifi="192.168.0.0/24" |
| - | _unreachable="192.168.16.20/24" #Adresse dont on empêche l'accès | + | _interface_phy="eth0" |
| - | _eth0_ip=`ip -4 addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}'` | + | |
| #On efface toutes les règles iptables | #On efface toutes les règles iptables | ||
| Ligne 77: | Ligne 52: | ||
| #On autorise les requêtes DHCP à entrer | #On autorise les requêtes DHCP à entrer | ||
| iptables -A INPUT -i $_interface_wifi -p udp --dport 67:68 --sport 67:68 -j ACCEPT | iptables -A INPUT -i $_interface_wifi -p udp --dport 67:68 --sport 67:68 -j ACCEPT | ||
| - | #On autorise les connexion SSH | ||
| - | iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -j ACCEPT | ||
| #On autorise les connexions déja établies | #On autorise les connexions déja établies | ||
| iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT | iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT | ||
| #On autorise la boucle locale | #On autorise la boucle locale | ||
| - | iptables -A INPUT -i lo -j ACCEPT | ||
| - | #On autorise les requêtes vers le routeur et le port DNS | ||
| iptables -A INPUT -d $_router -i $_interface_wifi -p udp -m udp --dport $_dns_port -j ACCEPT | iptables -A INPUT -d $_router -i $_interface_wifi -p udp -m udp --dport $_dns_port -j ACCEPT | ||
| #On autorise les requêtes vers le routeur pour le traffic TCP | #On autorise les requêtes vers le routeur pour le traffic TCP | ||
| iptables -A INPUT -d $_router -i $_interface_wifi -p tcp -m tcp --dport $_trans_port --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT | iptables -A INPUT -d $_router -i $_interface_wifi -p tcp -m tcp --dport $_trans_port --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT | ||
| + | #On autorise le trafic vers eth0 | ||
| + | iptables -A INPUT -i $_interface_phy -j ACCEPT | ||
| + | ip6tables -A INPUT -i $_interface_phy -j ACCEPT | ||
| - | #On log le trafic sortant | ||
| - | iptables -I OUTPUT -m owner --uid-owner $_tor_uid -j LOG --log-prefix "New output connection: " | ||
| #On drop le paquet si il n'est pas dans l état new, established, ou related | #On drop le paquet si il n'est pas dans l état new, established, ou related | ||
| iptables -A OUTPUT -m state --state INVALID -j DROP | iptables -A OUTPUT -m state --state INVALID -j DROP | ||
| Ligne 97: | Ligne 69: | ||
| iptables -A OUTPUT -o $_interface_wifi -p udp --dport 67:68 --sport 67:68 -j ACCEPT | iptables -A OUTPUT -o $_interface_wifi -p udp --dport 67:68 --sport 67:68 -j ACCEPT | ||
| #On autorise le traffic issu de la carte | #On autorise le traffic issu de la carte | ||
| - | iptables -A OUTPUT ! -s $_reseau_wifi -m owner --uid-owner 0 -j ACCEPT | + | iptables -A OUTPUT -o $_interface_phy -j ACCEPT |
| + | ip6tables -A OUTPUT -o $_interface_phy -j ACCEPT | ||
| </code> | </code> | ||
| Rendez-le exécutable | Rendez-le exécutable | ||
| - | chmod +x bridge.sh | + | chmod +x iptables_access_point.sh |
| Exécutez-le | Exécutez-le | ||
| - | ./bridge.sh | + | ./iptables_access_point.sh |
| ==== Vérification ==== | ==== Vérification ==== | ||
| Ligne 113: | Ligne 86: | ||
| {{ :anthony_messe:android_tor.png?250 |}} | {{ :anthony_messe:android_tor.png?250 |}} | ||
| - | ==== Explications sur le code ==== | + | Par la suite on [[anthony_messe:banana_pi:lancement_script_au_demarrage|automatise le script iptables]]. |
| - | <code=bash> | + | |
| - | iptables -A INPUT -s $_reseau_wifi -d $_unreachable -j DROP | + | |
| - | </code> | + | |
| - | > On bloque l'accès à l'adresse de notre interface eth0 : 192.168.18.0/24. | + | |
| - | + | ||
| - | <code=bash> | + | |
| - | iptables -t nat -A PREROUTING -i $_interface_wifi -p udp --dport 53 -j REDIRECT --to-ports $_dns_port | + | |
| - | </code> | + | |
| - | > On redirige le trafic DNS vers le port DNS de Tor | + | |
| - | + | ||
| - | <code=bash> | + | |
| - | iptables -t nat -A PREROUTING -i $_interface_wifi -p tcp --syn -j REDIRECT --to-ports $_trans_port | + | |
| - | </code> | + | |
| - | > On redirige le trafic TCP | + | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | Par la suite on [[anthony_messe:lancement_script_au_demarrage|automatise le script iptables]]. | + | |
| ===== Ressources ===== | ===== Ressources ===== | ||
| * * Fournie par Trinity Pointard : https://trac.torproject.org/projects/tor/wiki/doc/TransparentProxy#AnonymizingMiddlebox | * * Fournie par Trinity Pointard : https://trac.torproject.org/projects/tor/wiki/doc/TransparentProxy#AnonymizingMiddlebox | ||