PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : IPTABLES & offene Ports?



zbled
23.02.03, 19:18
Hallo zusammen,

ich habe mein iptables-Script dahingehend angepaßt, dass ich bei tcp, udp und icmp ein richtiges "Reject", das heißt eine Antwort zurückschicken möchte, denn laut iptables manpage verhält sich REJECT ohne ein reject-with wie ein DROP. Ich habe nun das Problem, dass anscheinend lt. diversen online scannern und einem Scan eines Bekannten mit nmap die UDP-Ports 53, 67, 111, 137-139, 445 offen sind, obwohl ich sie mittlerweile auch dezitiert als DROP eingestellt habe. Es laufen keine Services, die diese Ports eingehend öffnen würden. Ein netstat -plunt zeigt auch keine "listening Ports" - nur den des X-Servers. Ein lsof | grep 111 bringt auch nix wirklich interessantes zu tage.

Hat vielleicht von Euch noch jemand eine Ahnung, wie ich diese Ports schliessen könnte bzw. warum sie als geöffnet angezeigt werden? Ich tippe mal drauf, dass etwas mit der "abweisen"-Chain nicht stimmt.

Danke im Voraus



#!/sbin/runscript

depend() {
need net
}

start() {

ebegin "Loading iptables"

#allgemeines
modprobe ip_conntrack_ftp

IPTABLES="/sbin/iptables"

#dynamische kernelparameter setzen
#Erklärungen gibts hier: http://www.linuxguruz.org/iptables/scripts/rc.firewall_010.txt

for a in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo "1" > $a
done

echo "0" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
echo "0" > /proc/sys/net/ipv4/tcp_timestamps
echo "1" > /proc/sys/net/ipv4/conf/all/log_martians
echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects
echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route

#echo "0" > /proc/sys/net/ipv4/tcp_ignore_ack
#echo "0" > /proc/sys/net/ipv4/tcp_ignore_bogus
#echo "0" > /proc/sys/net/ipv4/tcp_ignore_synfin
echo "1" > /proc/sys/net/ipv4/tcp_restrict
echo "1" > /proc/sys/net/ipv4/icmp_restrict
echo "1" > /proc/sys/net/ipv4/tcp_syncookies

echo "30" > /proc/sys/net/ipv4/tcp_fin_timeout
echo "2400" > /proc/sys/net/ipv4/tcp_keepalive_time
echo "0" > /proc/sys/net/ipv4/tcp_window_scaling
echo "0" > /proc/sys/net/ipv4/tcp_sack

#einträge in der filter tabelle löschen
$IPTABLES -F
$IPTABLES -X
$IPTABLES -t nat -F
$IPTABLES -t nat -X

#standardregeln löschen
$IPTABLES -F INPUT
$IPTABLES -F OUTPUT
$IPTABLES -F FORWARD

#vorerst alles verbieten
$IPTABLES -A INPUT -j REJECT
$IPTABLES -A OUTPUT -j REJECT
$IPTABLES -A FORWARD -j REJECT

#syn-flood
$IPTABLES -N syn-flood
$IPTABLES -F syn-flood
$IPTABLES -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN
$IPTABLES -A syn-flood -j DROP

#reject
$IPTABLES -N abweisen
$IPTABLES -F abweisen
$IPTABLES -A abweisen -p tcp -j REJECT --reject-with tcp-reset
$IPTABLES -A abweisen -p udp -j REJECT --reject-with icmp-port-unreachable
$IPTABLES -A abweisen -p icmp -j REJECT --reject-with icmp-port-unreachable
$IPTABLES -A abweisen -j REJECT

#loopback
$IPTABLES -A INPUT -s "127.0.0.1" -i lo -d "127.0.0.1" -j ACCEPT
$IPTABLES -A OUTPUT -d "127.0.0.1" -o lo -s "127.0.0.1" -j ACCEPT

#eingehende regel
#================

$IPTABLES -A INPUT -m state --state INVALID -j REJECT
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#syn-flood
iptables -A INPUT -i eth0 -p tcp --syn -j syn-flood
iptables -A INPUT -i eth0 -p tcp ! --syn -m state --state NEW -j DROP

#icmp
$IPTABLES -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
$IPTABLES -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
$IPTABLES -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
$IPTABLES -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

#ident
$IPTABLES -A INPUT -p tcp --dport 113 -j abweisen

$IPTABLES -A INPUT -p udp --dport 53 -j DROP
$IPTABLES -A INPUT -p udp --dport 67 -j DROP
$IPTABLES -A INPUT -p udp --dport 111 -j DROP
$IPTABLES -A INPUT -p udp --dport 445 -j DROP

#netbios
$IPTABLES -A INPUT -p tcp --dport 137:139 -j DROP
$IPTABLES -A INPUT -p udp --dport 137:139 -j DROP

#rest verbieten
$IPTABLES -A INPUT -m limit --limit 1/s -j LOG --log-prefix "verboten <= "
$IPTABLES -A INPUT -j abweisen

#ausgehende regel
#================

$IPTABLES -A OUTPUT -m state --state INVALID -j REJECT
$IPTABLES -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

#dns
for dns in `gawk '/^nameserver/ { print $2 }' /etc/resolv.conf`; do $IPTABLES -A OUTPUT -p udp --dport 53 -d $dns -j ACCEPT; done

#icmp
$IPTABLES -A OUTPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
$IPTABLES -A OUTPUT -p icmp --icmp-type time-exceeded -j ACCEPT
$IPTABLES -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
$IPTABLES -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT

#time => ntpd
$IPTABLES -A OUTPUT -p udp --dport 123 -j ACCEPT

#rsync
$IPTABLES -A OUTPUT -p tcp --dport 873 -j ACCEPT

#gaim & irc
$IPTABLES -A OUTPUT -p tcp --dport 1863 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 4000:4100 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 5190 -j ACCEPT
$IPTABLES -A OUTPUT -p udp --dport 5190 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 5050 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 5222 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 6667:7000 -j ACCEPT

#http(s)
$IPTABLES -A OUTPUT -p tcp --dport 80 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 443 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 8000 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 8080 -j ACCEPT

#ftp, telnet & ssh
$IPTABLES -A OUTPUT -p tcp --dport 20 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 21 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 22 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 23 -j ACCEPT

#mail & news
$IPTABLES -A OUTPUT -p tcp --dport 25 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 110 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 119 -j ACCEPT

#rest verbieten
$IPTABLES -A OUTPUT -m limit --limit 1/s -j LOG --log-prefix "verboten => "
$IPTABLES -A OUTPUT -j REJECT

#default regel löschen
$IPTABLES -D INPUT 1
$IPTABLES -D FORWARD 1
$IPTABLES -D OUTPUT 1

eend $? "Failed to load iptables"
}

stop() {
ebegin "Unloading iptables"
iptables -F
iptables -X
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
eend $?
}

xmarvel
24.02.03, 12:09
hi

ohne jetzt dein script genau gelesen zu haben. Setze mal die Regeln für die "offene" Ports am Anfang von deinem Script. iptables geht von oben bis unten die regeln durch ist vorher schon eine regel zutreffend geht er nicht weiter. Denke mal darran liegt es.

MFG
xmarvel

zbled
24.02.03, 12:17
du meinst, dass ich diesen teil einfach an den schluss stelle (eingehende regel)?

$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

ansonsten sind eingehend keine ports offen, ausser die 4 icmp ports

xmarvel
24.02.03, 12:32
jep das meine ich und das die


$IPTABLES -A INPUT -p udp --dport 53 -j DROP
$IPTABLES -A INPUT -p udp --dport 67 -j DROP
$IPTABLES -A INPUT -p udp --dport 111 -j DROP
$IPTABLES -A INPUT -p udp --dport 445 -j DROP

am anfang setzt natürlich noch nach dem flushen der Regeln ;)

zbled
24.02.03, 14:07
okay, danke, ich werd das heute abend mal ausprobieren ;-)

zbled
24.02.03, 22:17
okay, ich hab das versucht, jedoch mit dem gleichen ergebniss wie zuvor.. ich hab jetzt mittlerweile auch den vanilla kernel kompiliert und es damit versucht, dennoch bleiben die ports "offen" - schön langsam kenne ich mich wirklich nicht mehr aus

ich habe am script noch etwas verändert.. es liegt hier (http://members.chello.at/marscha/save/iptables)

HangLoose
24.02.03, 22:32
du kannst mir deine ip ja mal per pn schicken, dann scanne ich dich mal

zbled
25.02.03, 09:28
danke für eure hilfe, das thema hat sich gerade erledigt. die ports werden von meinem provider geblockt, warum auch immer.