PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : iptables konfiguration in gentoo


MatrixP
2005-09-18, 20:03:04
tag,

hab ein problem mit dem konfigurieren von iptables.
Bis zum letzten reboot funzte es prima.
Dann hab ich die iptables rules neu geschrieben und nun funzt es nicht mehr.

Also hier infos:

os - gentoo linux

netwerkconf:

eth0 verbindung zum dsl --> ppp0
eth1 interne verbindung

ich hab die regeln nach diesem howto (http://www.gentoo.org/doc/de/home-router-howto.xml) eingegeben.

in abgeaenderter form hab ich folgendes eingegeben:

server ~ # iptables -F
server ~ # iptables -t nat -F
server ~ # iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
server ~ # iptables -I INPUT 1 -i eth1 -j ACCEPT
server ~ #
server ~ # iptables -I INPUT 1 -i lo -j ACCEPT
server ~ # iptables -A INPUT -p UDP --dport bootps -i ! eth1 -j REJECT
server ~ # iptables -A INPUT -p UDP --dport domain -i ! eth1 -j REJECT
server ~ # iptables -A INPUT -p TCP --dport ssh -i ppp0 -j ACCEPT
server ~ # iptables -A INPUT -p TCP --dport www -i ppp0 -j ACCEPT
server ~ # iptables -A INPUT -p TCP --dport ftp -i ppp0 -j ACCEPT
server ~ # iptables -A INPUT -p TCP --dport 430 -i ppp0 -j ACCEPT
server ~ # iptables -A INPUT -p TCP -i ! eth1 -d 0/0 --dport 0:1023 -j DROP
server ~ # iptables -A INPUT -p UDP -i ! eth1 -d 0/0 --dport 0:1023 -j DROP
server ~ # iptables -I FORWARD -i eth1 -d 192.168.0.0/255.255.255.0 -j DROP
server ~ # iptables -A FORWARD -i eth1 -s 192.168.0.0/255.255.255.0 -j ACCEPT
server ~ # iptables -A FORWARD -i ppp0 -d 192.168.0.0/255.255.255.0 -j ACCEPT
server ~ # iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
server ~ # echo 1 > /proc/sys/net/ipv4/ip_forward
server ~ # for f in /proc/sys/net/ipv4/conf/*/rp_filter ; do echo 1 > $f ; done
server ~ # /etc/init.d/iptables save
* Saving iptables state ... [ ok ]
server ~ # vi /etc/sysctl.conf

hier ist meine routing tabelle:
server ~ # iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
REJECT udp -- anywhere anywhere udp dpt:bootps reje ct-with icmp-port-unreachable
REJECT udp -- anywhere anywhere udp dpt:domain reje ct-with icmp-port-unreachable
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere tcp dpt:http
ACCEPT tcp -- anywhere anywhere tcp dpt:ftp
ACCEPT tcp -- anywhere anywhere tcp dpt:430
DROP tcp -- anywhere anywhere tcp dpts:0:1023
DROP udp -- anywhere anywhere udp dpts:0:1023

Chain FORWARD (policy ACCEPT)
target prot opt source destination
DROP all -- anywhere 192.168.0.0/24
ACCEPT all -- 192.168.0.0/24 anywhere
ACCEPT all -- anywhere 192.168.0.0/24

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Problem ist, ich habe kein internetzugriff vom internen netz.

Wo liegt mein Fehler?

Danke schonmal fuers helfen.

MatrixP

ravage
2005-09-18, 21:15:27
Ich hab zwar keine Lösung, aber einen guten Tip für dich:

http://vuurmuur.sourceforge.net/

Damit kannst du dir ganz einfach sehr komplexe Firewall Regeln erstellen, mit Portweiterleitung und allem drum und dran :)

MatrixP
2005-09-18, 23:17:15
Ich hab zwar keine Lösung, aber einen guten Tip für dich:

http://vuurmuur.sourceforge.net/

Damit kannst du dir ganz einfach sehr komplexe Firewall Regeln erstellen, mit Portweiterleitung und allem drum und dran :)

wie ich mir meine regeln bastel ist schon klar.

Nur kann ich vom internen netz keine verbindung nach draussen herstellen. Evtl. hab ich einfach die interfaces verwechselt oder sonstwas. SSH Zugriff klappt gluecklicherweise ;).

MatrixP

Sephiroth
2005-09-18, 23:31:59
öhm, müsste

server ~ # iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
nicht

server ~ # iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
lauten?

Und ich tät die Pakete nicht verschlucken, sondern lieber eine ordentliches reject zurücksenden bei
server ~ # iptables -A INPUT -p TCP -i ! eth1 -d 0/0 --dport 0:1023 -j DROP
server ~ # iptables -A INPUT -p UDP -i ! eth1 -d 0/0 --dport 0:1023 -j DROP
dropppen/verschlucken ist nicht nett ;(
server ~ # iptables -A INPUT -p TCP -i ! eth1 -d 0/0 --dport 0:1023 -j REJECT --reject-with tcp-reset
server ~ # iptables -A INPUT -p UDP -i ! eth1 -d 0/0 --dport 0:1023 -j REJECT --reject-with icmp-port-unreachable

(RFC konform :p)

p.s.
die port range kannst ja auch weglassen, dann werden alle ports abgewiesen, außer die die zugelassen sind.

MatrixP
2005-09-18, 23:35:01
öhm, müsste

server ~ # iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
nicht

server ~ # iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
lauten?

Und ich tät die Pakete nicht verschlucken, sondern lieber eine ordentliches reject zurücksenden bei
server ~ # iptables -A INPUT -p TCP -i ! eth1 -d 0/0 --dport 0:1023 -j DROP
server ~ # iptables -A INPUT -p UDP -i ! eth1 -d 0/0 --dport 0:1023 -j DROP
dropppen/verschlucken ist nicht nett ;(
server ~ # iptables -A INPUT -p TCP -i ! eth1 -d 0/0 --dport 0:1023 -j REJECT --reject-with tcp-reset
server ~ # iptables -A INPUT -p UDP -i ! eth1 -d 0/0 --dport 0:1023 -j REJECT --reject-with icmp-port-unreachable



ok, ich glaub das isses. fuck (sry).......

Mal sehen ob ich es dieses WE noch testen kann ;)

MatrixP

aedit: kann ich das nachtraeglich irgendwo editieren?

aedit2: iptables stoppen, und /var/lib/iptables/rules-save editieren, iptables wieder starten. weiss nur nicht ob es funzt :-/

Sephiroth
2005-09-18, 23:58:39
aedit: kann ich das nachtraeglich irgendwo editieren?
wozu?
$ iptables -F
$ iptables -t nat -F
und neu eintragen (script ahoi) :|

/edit
huch, mal wieder zu lange mit dem abschicken gebraucht :frown:

aedit2: iptables stoppen, und /var/lib/iptables/rules-save editieren, iptables wieder starten. weiss nur nicht ob es funzt :-/
tjo, ausprobieren ;D

MatrixP
2005-09-19, 00:05:09
wozu?
$ iptables -F
$ iptables -t nat -F
und neu eintragen (script ahoi) :|

/edit
huch, mal wieder zu lange mit dem abschicken gebraucht :frown:

tjo, ausprobieren ;D

ausprobieren. der war gut ;)

Kannst ma eben vorbeigehen und checken obs funzt? Danke :>

MatrixP

Harleckin
2005-09-19, 11:05:43
Also grundsätzlich finde ich den Ansatz schon falsch und würde das Problem demnach angehen..

Ausgangslage:

* zwei Netzwerke (WAN, LAN)
* sicherheitskritisch ppp0
* vertrauensvoll eth1
* masquerade ppp0
* keine öffentlichen Dienste

Regeln:

* verbiete alles was reinkommt, außer eth1 (LAN) und lo
* masquiere alle ausgehenden Verbindungen über ppp0 (WAN)
* erlaube Verbindungen mit dem Statien established/related (siehe Stateful Inspection)
* weise alle ICMP Typen zurück, außer 0, 3, 11, 12


# reset ip tables
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -X
$IPTABLES -Z

# default rules
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT ACCEPT

# Loopback
$IPTABLES -A INPUT -i lo -j ACCEPT

# LAN (eth1)
$IPTABLES -A INPUT -i eth1 -j ACCEPT

# ICMP Traffic
#
# 0 - Echo Reply
# 3 - Dst Unreachable
# 8 - Echo Request "ping"
# 11 - Time Exceeded
# 12 - Parameter Problem

$IPTABLES -A INPUT -i ppp0 -p icmp --icmp-type 0 -j ACCEPT
$IPTABLES -A INPUT -i ppp0 -p icmp --icmp-type 3 -j ACCEPT
#$IPTABLES -A INPUT -i ppp0 -p icmp --icmp-type 8 -j ACCEPT
$IPTABLES -A INPUT -i ppp0 -p icmp --icmp-type 11 -j ACCEPT
$IPTABLES -A INPUT -i ppp0 -p icmp --icmp-type 12 -j ACCEPT
$IPTABLES -A INPUT -i ppp0 -p icmp -j RETURN

$IPTABLES -A INPUT -i eth1 -p icmp -j ACCEPT

# /etc/sysctl.conf (?)
# Kernel IP Spoof Protection

# enable TCP SYN Cookie Protection
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
echo 0 > /proc/sys/net/ipv4/conf/default/accept_source_route
# log truly weird packets:
echo 1 > /proc/sys/net/ipv4/conf/all/log_martians
# source address protection:
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
# ignores all icmp, do you want to IGNORE or FIREWALL all ICMP.
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# only by slip/dhcp/ppp
echo 1 > /proc/sys/net/ipv4/ip_dynaddr

# Stateful Connecting Tracking
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Simple IP Masquerading
echo 1 > /proc/sys/net/ipv4/ip_forward
$IPTABLES -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

Somit wird jeglicher Verbindungsaufbau von außen über ppp0 (WAN) geblockt!
Allerdings werden Verbindungen, die von deiner Seite initialisiert werden, aufgrund des Verbindungsstatuses "ESTABLISHED/RELATED" durch gelassen.

Meinetwegen kann man auch noch zusätzlich den ausgehenden Verkehr, wie du es bereits getan hast, filtern.

Grundsätzlich sollte man eigentlich alles verbieten und nacheinander , entsprechend den Anforderungen, die Ausnahmeregeln erstellen.