PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : iptables lässt alleslarm werden



LuisMiguel
11.11.02, 12:30
hi user,
hab ein kleines problem hab!
hab eine kleine firewall zusammen erstellt!

mein system:

internes-netz <------>router(iptables)<-------->internet
eth1 eth0


bin mit eine kabelmodem (ish) im netz eigentlich ganz schnell aber ich hab jetzt den router
(suse 7.3)mit iptables dazwischen (der soll später als ftp,web oder game server laufen)

wenn ich nur masquerade anschmeise und alles erlaube ist er ziemlich schnell(2Mbit leitung)
aber sobald ich die iptables hochlade läuft er ziemlich larm bzw verbindungsprobleme!
find den fehler auch irgendwie nicht!
(strenge regeln)
würd mich freuen wenn ihr euch das mal ansieht und vielleicht verbesserungs vorschläge geben könnt.
vielen dank schon mal.

p.s was muss ich machen damit die iptables direkt beim starten des servers hochgeladen werden???
und welche ports sind wichtig???(ftp,games...)



#IPTABLES

ip=/usr/local/sbin/iptables

#interfaces

EXT=eth0

INT=eth1


#ip
ipintern=10.1.10.1 #eth1


#port

externport=22,53,80
internport=7,20,21,22,25,53,80,110,443,563,3306


case "$1" in
start)

clear

echo -n "Setting up IPTABLES"


#module in den Kernel einkompiliert

modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_nat_ftp
modprobe ip_conntrack
modprobe ip_conntrack_ftp


#dynamische Kernelparameter setzen
#Dokumentation /usr/src/linux/Documentation/networking/ip-sysctl.txt

echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

echo 1 > /proc/sys/net/ipv4/conf/eth0/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/eth0/accept_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth0/accept_source_route
echo 0 > /proc/sys/net/ipv4/conf/eth0/bootp_relay
echo 1 > /proc/sys/net/ipv4/conf/eth0/log_martians


#bestehende Regeln, leere Chains und der Counter werden geflusht

$ip -F
$ip -X
$ip -t nat -F


#default policy

$ip -P INPUT DROP
$ip -P OUTPUT DROP
$ip -P FORWARD DROP




#ICMP
#ping

$ip -A INPUT -i $EXT -p ICMP --icmp-type echo-reply -m limit --limit 1/s -j ACCEPT

$ip -A INPUT -i $EXT -p ICMP -j DROP

$ip -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT

$ip -A FORWARD -o $EXT -p ICMP --icmp-type echo-request -j ACCEPT
$ip -A FORWARD -i $EXT -p ICMP --icmp-type echo-reply -m limit --limit 1/s -j ACCEPT


#source quench

$ip -A INPUT -p ICMP --icmp-type source-quench -j DROP

$ip -A OUTPUT -p ICMP --icmp-type source-quench -j ACCEPT


#hier werden versteckte Portscans oder Pingflooding verhindert

$ip -A INPUT -i $EXT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT


#Fragmentierte Pakete verwerfen

$ip -A INPUT -i $EXT -f -j DROP


#ssh fuer Fernwartung

$ip -A INPUT -i $INT -s $ipintern -p tcp --sport 22 --dport ssh -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$ip -A OUTPUT -o $INT -d $ipintern -p tcp --dport 22 --sport ssh -m state --state ESTABLISHED,RELATED -j ACCEPT


#kontrolle des verbindungzustandes

$ip -A INPUT -i $EXT -m state --state RELATED,ESTABLISHED -j ACCEPT
$ip -A INPUT -i $EXT -m state --state NEW,INVALID -j DROP

$ip -A INPUT -i $EXT -p tcp --syn -j DROP

$ip -A OUTPUT -o $EXT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT

$ip -A FORWARD -i $INT -o $EXT -m state --state ESTABLISHED,RELATED -j ACCEPT
$ip -A FORWARD -i $EXT -o $INT -m state --state ESTABLISHED,RELATED -j ACCEPT

$ip -A FORWARD -i $EXT -o $INT -m state --state NEW,INVALID -j DROP

#ports

$ip -A INPUT -i $EXT -p tcp -m multiport --port $externport -j ACCEPT
$ip -A OUTPUT -o $EXT -p tcp -m multiport --port $externport -j ACCEPT

$ip -A FORWARD -i $EXT -o $INT -p tcp -m multiport --port $externport -j ACCEPT
$ip -A FORWARD -i $INT -o $EXT -p tcp -m multiport --port $externport -j ACCEPT

$ip -A INPUT -i $INT -p tcp -m multiport --port $internport -j ACCEPT
$ip -A OUTPUT -o $INT -p tcp -m multiport --port $internport -j ACCEPT


#eth1

$ip -A INPUT -i $INT -j ACCEPT
$ip -A OUTPUT -o $INT -j ACCEPT
$ip -A FORWARD -o $EXT -i $INT -j ACCEPT
$ip -A FORWARD -o $INT -i $EXT -j ACCEPT


#eth0

$ip -A INPUT -i $EXT -j DROP
$ip -A OUTPUT -o $EXT -j DROP
$ip -A FORWARD -i $EXT -o $INT -j DROP
$ip -A FORWARD -i $INT -o $EXT -j DROP

#NAT

$ip -t nat -A POSTROUTING -o $EXT -j MASQUERADE


#default policy

$ip -P INPUT DROP
$ip -P OUTPUT DROP
$ip -P FORWARD DROP

Jinto
11.11.02, 18:47
Wenn ich mir nur deine ICMP Regeln anschaue, habe ich so das Gefühl, du schießt dir selbst ins Bein. :D
Zudem gilt: "first match wins"

Schau dir mal den folgenden Generator an: http://www.harry.homelinux.org/

HTH

LuisMiguel
12.11.02, 18:06
aber wo liegt der fehler???
denn sonst lernt man ja nichts dabei!

Harry
13.11.02, 00:14
Hallo,

wie Jinto schon angedeutet hat. Möglicherweise liegt das Problem hier:


$ip -A INPUT -i $EXT -p ICMP -j DROP

Aus welchem Grund die Verbindung nun genau träge wird, kann niemand nachvollziehen, solange Du nicht irgendwelche sinnvollen Log-Regeln einführst und dann das Logfile im laufenden Betrieb analysierst.

Harry

Jinto
13.11.02, 08:58
Ich sage es nochmals: FIRST MATCH WINS
Oder auf Deutsch: Die erste zutreffende Regel wird verwendet.

Dein Script sieht so aus, als hättest du wahllos Regeln aneinander gehängt, ohne zu verstehen warum und wie diese Funktionieren. Das kann Funktionieren, muss aber nicht.

Zudem verwirfst du fragmentierte Pakete, diese sind aber u. U. notwendig.

HTH

LuisMiguel
14.11.02, 13:41
nö,eigentlich habe ich nicht wahrlos regeln benutzt und ein bischen kenne ich mich auch aus!
icmp hab ich nur verboten weil ich zuvor nur begrenzt pingen erlaubt habe. sonst benötigt man das icmp protokol ja fast garnicht da das meiste mit tcp/ip macht!

Harry
14.11.02, 16:06
Soso - trotzt dessen, dass wir Dir den Ratschlag gegeben haben, ICMP etwas mehr durchzulassen, da es möglicherweise die Ursachen für Deine Probleme darstellt, bist Du der Meinung, dass man ICMP eigentlich fast nicht benötigt.
Diese Logik verstehe ich jetzt nicht so ganz. :rolleyes:

Harry