• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Alle LAN-IPs ausperren bis auf fünf auserwählte

jk47

Newbie
Moin, Moin,

ich habe eine Linux Firewall, die ganz normal funktioniert, die zwischen userem LAN und dem Internet routet.

Das Problem ist, das ich nur einer begrenzten Anzahl von Hosts zugriff gewähren möchte (und zwar über die IP der Hosts), also ip x darf, ip y darf auch und der Rest nicht.

Meine Frage ist erstmal, was muss in den iptables für funktionierendes DSL-Routing stehen haben? Z.T. wurden Seiten nicht angezeigt.

Das ganze hat übrigens schon eine Vorgeschichte: http://www.linux-club.de/viewtopic.php?t=22831

Ich hab mir iptables.org übrigens schon durgelesen...

Vielen Dank für Hilfe

Jan
 

gaw

Hacker
Wenn du das schon durchgelesen und verstanden hast, verstehe ich deine Frage nicht. Deine Firewallregeln sind hoffentlich besser geworden denn du reduzierst durch deine Regeln die Möglichkeiten von iptables auf einen statischen Paketfilter. Wie sich so etwas mit stateful inspection einrichten lässt findest du hier:
http://www.linux-club.de/viewtopic.php?t=21303

Es gibt prinzipiell zwei Möglichkeiten bestimmte IP-Adressen in eine iptables Firewall einzubinden. Zum einen über eine Schleife, hier ein Beispiel um Webverkehr von bestimmten Rechnern aus dem LANzu erlauben, für hin und rücklaufende Pakete

Code:
ALLOW_HOSTS="192.168.100.1 192.168.100.2 10.0.0.3 10.0.0.4"

for ADRESS in $ALLOW_HOSTS; do
   /usr/sbin/iptables -A FORWARD -i $INTERFACE_EXT -o $INTERFACE_INT -m state --state NEW,ESTABLISHED,RELATED -d $ADRESS -p tcp --dport 80 --sport 1024:65535 --j ACCEPT

  /usr/sbin/iptables -A FORWARD -i $INTERFACE_INT -o $INTERFACE_EXT -m state --state ESTABLISHED,RELATED -s $ADRESS -p tcp --sport 80 --dport 1024:65535 --j ACCEPT
done

Diese Regelpaare setzen das Prinzip verbiete alles/erlaube einiges vorraus und zwar auch für den rücklaufenden Tansfer (Es gibt andere Designs, die zum Beispiel Pakete, die als established und related gelten grundsätzlich passieren lassen oder die alles erlauben und einiges verbieten).

Eine zweite Möglichkeit besteht darin mit Subnetting zu arbeiten. So kann man intern mit einer völlig normalen Nertzwerkmaske arbeiten und auf der Firewall mit einer modifizierten. Man sollte dann nur die entprechenden Netzwerk- und Broadcastadressen die mit der modifizierten Subnetmask entstehen nicht belegen, weil diese sonst durch die Firewall nicht erfasst werden würden.

Für jedes Subnetz kann man dann die Regeln explizit formulieren.

Beispiel:
Code:
/usr/sbin/iptables -A FORWARD -i $INTERFACE_EXT -o $INTERFACE_INT -m state --state NEW,ESTABLISHED,RELATED -d 192.168.100.128/25 -p tcp --dport 80 --sport 1024:65535 --j ACCEPT

/usr/sbin/iptables -A FORWARD -i $INTERFACE_INT -o $INTERFACE_EXT -m state --state ESTABLISHED,RELATED -s 192.168.100.128/25 -p tcp --sport 80 --dport 1024:65535 --j ACCEPT

Hier wird nur den Rechnern im Adressenbereich von 192.168.100.129 bis 192.168.100.253 der http-Zugang ermöglicht während Rechner des Adressenbereiches von 192.168.100.1 - 192.168.100.125 der Zugang vewehrt bleibt, immer das Design verbiete alles /erlaube einiges vorausgesetzt. Da das Subnetting nur auf der Firewall stattfindet, bleibt das interne Netz unberührt, nur dass neben den Adressen 192.168.100.0 und 192.168.100.255 auch die Adressen 192.168.100.126 und 192.168.100.127 als Broadcastadresse des 1. Subnet bzw. als Netzwerkadresse des 2. Subnet nicht belegt werden sollten.

Beide Prinzipien haben Vor- und Nachteile. Mit dem Subnetting lässt sich mit einer Regel gleich ein ganzes Bündel von Rechnern erfassen, man ist aber angewiesen die IP-Adresse entsprechend der Netzwerkmaske zu vergeben. Dagegen erzeugt die Schleife für jede Adresse eine eigene Regel, ist aber flexibler, nicht von Subnetzmasken abhängig und man kann Rechnernamen statt IP-Adressen verwenden was sich in Umgebungen mit DHCP als notwendig erweisen kann.

mfG
gaw
 
OP
J

jk47

Newbie
Mal andersrum gefragt: Warum funktioniert folgendes Skript nicht?


Code:
#! /bin/sh

############-- INIT  --###############
# flush
echo "flushing tables"
iptables -F
iptables -F -t nat

# policies

echo "setup policies"
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

echo "accepting ESTBLISHED, RELATED"
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

#+++++++++++++++++++++++++   INPUT   ++++++++++++++++++++++++++++++

#DSL
#iptables -A INPUT -i PPP0 -j ACCEPT
iptables -A INPUT -i lo -s 127.0.0.1/255.0.0.0 -j ACCEPT
iptables -A FORWARD -i lo -s 127.0.0.1/255.0.0.0 -j ACCEPT 

echo "input"
####################################################################
iptables -A INPUT -s 10.238.0.28 -i eth0 -j ACCEPT	#MARC
####################################################################
iptables -A INPUT -s 10.238.103.100 -i eth0 -j ACCEPT	#PUHA
iptables -A INPUT -s 10.238.105.125 -i eth0 -j ACCEPT
####################################################################
iptables -A INPUT -s 10.238.105.102 -i eth0 -j ACCEPT	#JK47
####################################################################
iptables -A INPUT -s 10.238.184.105 -i eth0 -j ACCEPT	#PRYO
iptables -A INPUT -s 10.238.106.31 -i eth0 -j ACCEPT
####################################################################
iptables -A INPUT -s 10.238.111.31 -j ACCEPT		#rauder
iptables -A INPUT -s 0/0 -i ppp0 -j ACCEPT
####################################################################
#iptables -A INPUT -j DROP
#++++++++++++++++++++++++++++ OUTPUT  ++++++++++++++++++++++++++
echo "output"
####################################################################
iptables -A OUTPUT -d 10.238.0.28 -j ACCEPT		#MArc
####################################################################
iptables -A OUTPUT -d 10.238.103.100 -j ACCEPT		#PUHA
iptables -A OUTPUT -d 10.238.105.125 -j ACCEPT
####################################################################
iptables -A OUTPUT -d 10.238.105.102 -j ACCEPT		#JK47
####################################################################
iptables -A OUTPUT -d 10.238.184.105 -j ACCEPT		#PRYO
iptables -A OUTPUT -d 10.238.106.31 -j ACCEPT
####################################################################
iptables -A OUTPUT -s 10.238.111.31 -j ACCEPT		#rauder
iptables -A OUTPUT -d 10.238.111.31 -j ACCEPT
####################################################################
#iptables -A OUTPUT -j DROP


#++++++++++++++++++++++++++++++++++ forward ++++++++++++++++++++++++++

echo "forward"
iptables -A FORWARD -s 10.238.0.28 -i eth0 -j ACCEPT	#MARC
iptables -A FORWARD -s 10.238.103.100 -i eth0 -j ACCEPT	#PUHA
iptables -A FORWARD -s 10.238.105.125 -i eth0 -j ACCEPT	#PUHA
iptables -A FORWARD -s 10.238.105.102 -i eth0 -j ACCEPT	#JK47
iptables -A FORWARD -s 10.238.106.31 -i eth0 -j ACCEPT	#PRYO
iptables -A FORWARD -s 10.238.184.105 -i eth0 -j ACCEPT	#PRYO

iptables -A FORWARD -d 10.238.0.28 -i eth0 -j ACCEPT	#MARC
iptables -A FORWARD -d 10.238.103.100 -i eth0 -j ACCEPT	#PUHA
iptables -A FORWARD -d 10.238.105.125 -i eth0 -j ACCEPT	#PUHA
iptables -A FORWARD -d 10.238.105.102 -i eth0 -j ACCEPT	#JK47
iptables -A FORWARD -d 10.238.106.31 -i eth0 -j ACCEPT	#PRYO
iptables -A FORWARD -d 10.238.184.105 -i eth0 -j ACCEPT	#PRYO

iptables -A FORWARD -s 10.238.111.31 -j ACCEPT
iptables -A FORWARD -d 10.238.111.31 -j ACCEPT 
iptables -A FORWARD -s 10.238.111.31 -j ACCEPT
iptables -A FORWARD -d 10.238.111.31 -j ACCEPT 

iptables -A FORWARD -s 0/0 -i ppp0 -j ACCEPT		# dat indernet
#iptables -A FORWARD -j DROP



###########################################################
iptables -L -n
#iptables -L OUTPUT
#iptables -L FORWARD
echo "firewall up..."
#eof


Aus irgendeinem Grund funktioniert es entweder garnicht, oder es werden nicht alle Seiten geöffnet. Ich möchte eigentlich die "Was nicht erlaubt ist, ist verboten" Variante eistellen.

Danke für Hilfe!

Jan
 
Oben