web-dev-qa-db-fra.com

iptables permet juste une connexion internet

laissez-moi vous expliquer ce que j'ai fait auparavant;

# Only INPUT policy DROP, others are ACCEPT
Sudo iptables -P INPUT DROP
Sudo iptables -A INPUT -p tcp --sport 80 -j ACCEPT

J'essaye aussi ceci; pour ces ports à 443 et 8080

Sudo iptables -A INPUT -p tcp --sport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

Puis je me suis rendu compte que je devrais aussi autoriser le serveur DNS,

Sudo iptables -A INPUT -p udp --sport 53 -j ACCEPT
Sudo iptables -A INPUT -p tcp --sport 53 -j ACCEPT

Appliquer ces règles mais je n'arrive pas à me connecter à Internet,

Mais quand j'autorise tout le port udp, je peux me connecter.

Est-ce que j'oublie quelque chose? ou faire quelque chose de mal?

2
Hasan Kaya

Comment votre ordinateur obtient-il son adresse IP? Si c'est via DHCP, vous devez autoriser les réponses UDP sur le port 68 (ou à partir du port 67, voir plus loin):

Sudo iptables -A INPUT -p udp --sport 67 --dport 68 -m state --state RELATED,ESTABLISHED -j ACCEPT

Si votre objectif est uniquement de permettre la navigation sur le site Web, la connexion sera toujours établie de votre côté. Vous ne devez donc autoriser que le trafic associé (dans cet exemple, l'hypothèse est que eth0 est votre nom NIC ):

Sudo iptables -A INPUT -i eth0 -p tcp -m multiport --sport 80,443,8080 -m state --state ESTABLISHED,RELATED -j ACCEPT

Maintenant, vous pouvez ou non autoriser l’interface locale (cela dépend de ce que vous faites avec votre ordinateur):

Sudo iptables -A INPUT -i lo -j ACCEPT

En fin de compte, vous pouvez combiner certaines de ces choses et vous retrouver avec:

Sudo iptables -A INPUT -i lo -j ACCEPT
Sudo iptables -A INPUT -i eth0 -p udp -m multiport --sport 53,67 -m state --state ESTABLISHED,RELATED -j ACCEPT
Sudo iptables -A INPUT -i eth0 -p tcp -m multiport --sport 53,80,443,8080 -m state --state ESTABLISHED,RELATED -j ACCEPT

Je l'ai codé sur l'un de mes ordinateurs de test et tout a bien fonctionné (le port 22 de SSH est fait pour moi, car je ne m'assois pas devant cet ordinateur):

#!/bin/sh
FWVER=0.01
#
# test extremely basic 2015.06.10 Ver:0.01
#
#     run as Sudo
#

echo "Loading test rule set version $FWVER..\n"

# The location of the iptables program
#
IPTABLES=/sbin/iptables

#Setting the EXTERNAL and INTERNAL interfaces and addresses for the network
#
EXTIF="eth0"
EXTIP="192.168.111.140"
UNIVERSE="0.0.0.0/0"

#Clearing any previous configuration
#
echo "  Clearing any existing rules and setting default policy to ACCEPT.."
$IPTABLES -P INPUT DROP
$IPTABLES -F INPUT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -F OUTPUT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -F FORWARD
$IPTABLES -t nat -F
# Delete user defined chains
$IPTABLES -X
# Reset all IPTABLES counters
$IPTABLES -Z

echo about to load rules.

$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A INPUT -i $EXTIF -p udp -m multiport --sport 53,67 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -i $EXTIF -p tcp -m multiport --sport 53,80,443,8080 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -i $EXTIF -p tcp --dport 22 -j ACCEPT

echo Test rule set version $FWVER done.

Je l'ai fait démarrer automatiquement via mon fichier /etc/network/interfaces:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
pre-up /home/doug/test_iptables_06

# The primary network interface
auto eth0
iface eth0 inet dhcp

Notez que plus généralement, les utilisateurs autoriseront simplement le trafic associé, avec une règle plus générique (en utilisant les noms de variables de mon script ci-dessus):

$IPTABLES -A INPUT -i $EXTIF -s $UNIVERSE -d $EXTIP -m state --state ESTABLISHED,RELATED -j ACCEPT

MODIFIER:

Parfois, pour aider à comprendre/déboguer, l’ajout d’une certaine journalisation peut aider. Par exemple:

echo about to load rules.

$IPTABLES -A INPUT -i lo -j LOG --log-prefix "ILO:" --log-level info
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A INPUT -i $EXTIF -p udp -m multiport --sport 53,67 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -i $EXTIF -p tcp -m multiport --sport 53,80,443,8080 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -i $EXTIF -p tcp --dport 22 -j ACCEPT
$IPTABLES -A INPUT -j LOG --log-prefix "IDROP:" --log-level info

echo Test rule set version $FWVER done.

puis observez /var/log/syslog pour les entrées. Faites attention à la journalisation afin de ne pas inonder le fichier journal.

2
Doug Smythies