Ci-dessous, les différences entre deux révisions de la page.
| Prochaine révision | Révision précédente | ||
|
anthony_messe:banana_pi:iptables_ipv4_classe_c [2018/05/07 10:52] Anthony Messé créée |
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 long en policy drop ==== | ||
| <code=bash> | <code=bash> | ||
| Ligne 15: | Ligne 22: | ||
| _dns_port="5353" | _dns_port="5353" | ||
| _interface_wifi="wlx503eaa3d7d6c" | _interface_wifi="wlx503eaa3d7d6c" | ||
| - | #Adresse du router (adresse de la machine ayant le point d'accès wifi) | + | _tor_uid=`id -u debian-tor` |
| - | _router="192.168.0.254" | + | _router="192.168.0.254" #Adresse du router (adresse de la machine ayant le point d'accès wifi) |
| _reseau_wifi="192.168.0.0/24" | _reseau_wifi="192.168.0.0/24" | ||
| - | #Adresse dont on empêche l'accès | + | _interface_phy="eth0" |
| - | _unreachable="192.168.18.0/24" | + | |
| #On efface toutes les règles iptables | #On efface toutes les règles iptables | ||
| iptables -F | iptables -F | ||
| Ligne 27: | Ligne 34: | ||
| iptables -t mangle -F | iptables -t mangle -F | ||
| iptables -t mangle -X | iptables -t mangle -X | ||
| - | iptables -P INPUT ACCEPT | + | |
| + | #On met les policy | ||
| + | iptables -P INPUT DROP | ||
| iptables -P FORWARD DROP | iptables -P FORWARD DROP | ||
| - | iptables -P OUTPUT ACCEPT | + | iptables -P OUTPUT DROP |
| + | ip6tables -P INPUT DROP | ||
| + | ip6tables -P FORWARD DROP | ||
| + | ip6tables -P OUTPUT DROP | ||
| + | #On redirige le traffic TCP vers Tor | ||
| 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 tcp --syn -j REDIRECT --to-ports $_trans_port | ||
| + | #On redirige les requêtes DNS vers Tor | ||
| iptables -t nat -A PREROUTING -i $_interface_wifi -p udp --dport 53 -j REDIRECT --to-ports $_dns_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 | + | |
| + | #On log le trafic entrant | ||
| + | iptables -A INPUT -i $_interface_wifi -m state --state NEW -j LOG --log-prefix "New input connection: " | ||
| + | #On autorise les requêtes DHCP à entrer | ||
| + | iptables -A INPUT -i $_interface_wifi -p udp --dport 67:68 --sport 67:68 -j ACCEPT | ||
| + | #On autorise les connexions déja établies | ||
| + | iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT | ||
| + | #On autorise la boucle locale | ||
| + | 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 | ||
| + | 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 drop le paquet si il n'est pas dans l état new, established, ou related | ||
| + | iptables -A OUTPUT -m state --state INVALID -j DROP | ||
| + | #On autorise ls connexions déja établies | ||
| + | iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT | ||
| + | #On autorise les requêtes DHCP à sortir | ||
| + | iptables -A OUTPUT -o $_interface_wifi -p udp --dport 67:68 --sport 67:68 -j ACCEPT | ||
| + | #On autorise le traffic issu de la carte | ||
| + | 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 48: | 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 | ||