Iptables c'est vraiment se prendre le choux.
Ce code autorise la boucle local:
sudo iptables -j INPUT DROP
sudo iptables -j OUTPUT DROP
sudo iptables -j FORWARD DROP
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT
Les connexions établis:
sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
Ensuite pour les connexions client -> serveur
sudo iptables -t filter -A INPUT/OUTPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -t filter -A INPUT/OUTPUT -p tcp --dport 443 -j ACCEPT
Si tu veux que ton serveur puisse créer des connexions de son propre chef je dirais que cette règle fait l'affaire:
sudo iptables -A OUTPUT -m state --state NEW,ESTABLISHED -j ACCEPT
Si ton script ne marche c'est que les règle OUTPUT autorise seulement les ports 80, 443. Or ton navigateur ouvre un port au hasard au dessus de 1024.
La preuve par cette commande: netstat -atp
tcp 0 0 192.168.1.10:35924 adresse.distante:http ESTABLISHED 3900/chromium-browser
35924 est le port utiliser par chromium.
D’ailleurs il faut que le programme qui créer socket en dessous 1024 est un uid de 0. Un uid 0 signifie généralement que root a lancé ce programme.