it-swarm.com.de

iptables erlauben nur eine Internetverbindung

lass mich erklären, was ich vorher getan habe;

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

Ich versuche das auch; für diese Ports zu 443 und 8080

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

Dann erkannte ich, dass ich DNS-Server auch zulassen sollte,

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

Wende diese Regeln an, aber ich kann keine Verbindung zum Internet herstellen.

Aber wenn ich alle UDP-Ports zulasse, kann ich eine Verbindung herstellen.

Vergesse ich etwas oder etwas falsch machen?

2
Hasan Kaya

Wie erhält Ihr Computer seine IP-Adresse? Wenn dies über DHCP erfolgt, müssen Sie UDP-Antworten auf Port 68 zulassen (oder von Port 67 aus, siehe später):

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

Wenn Sie nur das Surfen auf Websites zulassen möchten, wird die Verbindung immer von Ihrem Ende aus hergestellt, sodass Sie nur den zugehörigen Datenverkehr wieder zulassen müssen (in diesem Beispiel wird davon ausgegangen, dass eth0 Ihr NIC-Name ist ):

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

Jetzt müssen Sie möglicherweise die lokale Schnittstelle zulassen oder nicht (abhängig davon, was Sie mit Ihrem Computer tun):

Sudo iptables -A INPUT -i lo -j ACCEPT

Am Ende können Sie einige dieser Dinge kombinieren und am Ende mit:

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

Ich habe dies auf einem meiner Testcomputer codiert und es hat einwandfrei funktioniert (das Zeug zu SSH-Port 22 ist für mich, da ich eigentlich nicht an diesem Computer sitze):

#!/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.

Ich habe es automatisch über meine /etc/network/interfaces -Datei gestartet:

# 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

Beachten Sie, dass Benutzer in der Regel lediglich zulassen, was auch immer für Datenverkehr zurückkommt, und zwar mit einer allgemeineren Regel (unter Verwendung der Variablennamen meines obigen Skripts):

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

BEARBEITEN:

Manchmal kann es hilfreich sein, die Protokollierung zu verstehen/zu debuggen. Zum Beispiel:

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.

dann beobachte /var/log/syslog für die Einträge. Gehen Sie bei der Protokollierung vorsichtig vor, damit Sie die Protokolldatei nicht überschwemmen.

2
Doug Smythies