PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ICQ und Firewall, wieso geht das denn?



swen1
15.12.03, 13:32
Ich hab nix gegen icq und will das auch nicht blocken. Aber ich will wissen wieso das trotz Firewall funktioniert.

Habe einen sehr guten iptables Paketfilter. Auch von innen nach außen werden nur erlaubte Verbindungen durchgelassen. Trotzdem funktioniert ICQ mit den Standard-Einstellungen (also ohne z.B. http-Tunnel oder so).

Wenn ich also ein "telnet login.icq.com 5190" eingebe, erreiche ich scheinbar einen Server. DAS KANN ABER EIGENTLICH NICHT SEIN!!! Bin mehrmals alle Regeln durchgegangen, und bin mir sicher das da kein Fehler drin ist.

Woran kann das liegen?

Danke
Gruß Swen

atomical
15.12.03, 13:37
Du müsstest vielleicht mal deine IPTables Regeln posten ;)

Liberace
15.12.03, 13:37
Ich wuerde einfach mal empfehlen dass du deine IPTABLES Regeln mal postest.

swen1
15.12.03, 14:03
Ok :)

Leicht gekürzt, aber nix wichtiges gelöscht.


# -------------------------------------------------------------------
# dynamische Kernelparameter setzen
# -------------------------------------------------------------------
echo "0" > /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 "5" > /proc/sys/net/ipv4/icmp_ratelimit

# Speicherallozierung und -timing für IP-De/-Fragmentierung
echo 262144 > /proc/sys/net/ipv4/ipfrag_high_thresh
echo 196608 > /proc/sys/net/ipv4/ipfrag_low_thresh
echo 30 > /proc/sys/net/ipv4/ipfrag_time

# TCP-FIN-Timeout zum Schutz vor DoS-Attacken setzen
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout

# Maximal 3 Antworten auf ein TCP-SYN
echo 3 > /proc/sys/net/ipv4/tcp_retries1

# TCP-Pakete maximal 15x wiederholen
echo 15 > /proc/sys/net/ipv4/tcp_retries2

for if in $IF
do
echo "1" > /proc/sys/net/ipv4/conf/$if/rp_filter
echo "0" > /proc/sys/net/ipv4/conf/$if/accept_redirects
echo "0" > /proc/sys/net/ipv4/conf/$if/accept_source_route
echo "0" > /proc/sys/net/ipv4/conf/$if/bootp_relay
echo "1" > /proc/sys/net/ipv4/conf/$if/log_martians
echo "1" > /proc/sys/net/ipv4/conf/$if/proxy_arp
done

# -------------------------------------------------------------------
# Default-Policy
# -------------------------------------------------------------------
$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT DROP

# -------------------------------------------------------------------
# Ketten leeren und löschen
# -------------------------------------------------------------------
$IPTABLES -F
$IPTABLES -t nat -F #
$IPTABLES -X

# -------------------------------------------------------------------
# Lokale Prozesse erlauben
# -------------------------------------------------------------------
$IPTABLES -A OUTPUT -o lo -j ACCEPT
$IPTABLES -A INPUT -i lo -j ACCEPT

# --------------------------------------------------------------------
# my_reject-Chain
# --------------------------------------------------------------------
$IPTABLES -N my_reject
$IPTABLES -A my_reject -p tcp -m limit --limit 7200/h -j LOG --log-prefix "REJECT_TCP "
$IPTABLES -A my_reject -p tcp -j REJECT --reject-with tcp-reset
$IPTABLES -A my_reject -p udp -m limit --limit 7200/h -j LOG --log-prefix "REJECT_UDP "
$IPTABLES -A my_reject -p udp -j REJECT --reject-with icmp-port-unreachable
$IPTABLES -A my_reject -p icmp -m limit --limit 7200/h -j LOG --log-prefix "REJECT_ICMP "
$IPTABLES -A my_reject -p icmp -j DROP
$IPTABLES -A my_reject -m limit --limit 7200/h -j LOG --log-prefix "REJECT_OTHER "
$IPTABLES -A my_reject -j REJECT --reject-with icmp-proto-unreachable


# -------------------------------------------------------------------
# my_drop-Chain
# -------------------------------------------------------------------
$IPTABLES -N my_drop
$IPTABLES -A my_drop -m limit --limit 7200/h -j LOG --log-prefix "PORTSCAN_DROP "
$IPTABLES -A my_drop -p ICMP -j LOG --log-prefix "DROP_ICMP "
$IPTABLES -A my_drop -p UDP -j LOG --log-prefix "DROP_UDP "
$IPTABLES -A my_drop -p TCP -j LOG --log-prefix "DROP_TCP "
$IPTABLES -A my_drop -j DROP

# -------------------------------------------------------------------
# my_ssh-Chain (Inhalt gelöscht)
# -------------------------------------------------------------------


# -------------------------------------------------------------------
# Stealth Scans etc. DROPpen
# -------------------------------------------------------------------
# Keine Flags gesetzt
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j my_drop
iptables -A FORWARD -p tcp --tcp-flags ALL NONE -j my_drop

# SYN und FIN gesetzt
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j my_drop
iptables -A FORWARD -p tcp --tcp-flags SYN,FIN SYN,FIN -j my_drop

# SYN und RST gleichzeitig gesetzt
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j my_drop
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN,RST -j my_drop

# FIN und RST gleichzeitig gesetzt
iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j my_drop
iptables -A FORWARD -p tcp --tcp-flags FIN,RST FIN,RST -j my_drop

# FIN ohne ACK
iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j my_drop
iptables -A FORWARD -p tcp --tcp-flags ACK,FIN FIN -j my_drop

# PSH ohne ACK
iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j my_drop
iptables -A FORWARD -p tcp --tcp-flags ACK,PSH PSH -j my_drop

# URG ohne ACK
iptables -A INPUT -p tcp --tcp-flags ACK,URG URG -j my_drop
iptables -A FORWARD -p tcp --tcp-flags ACK,URG URG -j my_drop

# Maximum Segment Size (MSS) für das Forwarding an PMTU anpassen
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

# -------------------------------------------------------------------
# Forwarding einschalten
# -------------------------------------------------------------------
echo "1" > /proc/sys/net/ipv4/ip_forward
# echo "1" > /proc/sys/net/ipv4/ip_dynaddr

# -------------------------------------------------------------------
# ausgehende Pakete bei bereits aufgebauter Verbindung
# -------------------------------------------------------------------
$IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -i $DMZ -o $EXT -m state --state ESTABLISHED,RELATED -j ACCEPT

# -------------------------------------------------------------------
# Rückkanal: eingehende Pakete zu einer bestehenden Verbindung
# -------------------------------------------------------------------
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -m state --state NEW,INVALID -j my_drop
$IPTABLES -A FORWARD -i $EXT -o $DMZ -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -i $EXT -o $DMZ -m state --state INVALID -j my_drop

# -------------------------------------------------------------------
# ICMP Ping
# -------------------------------------------------------------------
$IPTABLES -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT
$IPTABLES -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT
$IPTABLES -A INPUT -p ICMP --icmp-type echo-request -j my_drop
$IPTABLES -A FORWARD -o $EXT -p ICMP --icmp-type echo-request -j ACCEPT

# -------------------------------------------------------------------
# DNS
# -------------------------------------------------------------------
for ns in $NS
do
$IPTABLES -A FORWARD -i $DMZ -o $EXT -m state --state NEW \
-p UDP --sport $p_high -d $ns --dport domain -j ACCEPT
$IPTABLES -A FORWARD -i $DMZ -o $EXT -m state --state NEW \
-p TCP --sport $p_high -d $ns --dport domain -j ACCEPT
done

# -------------------------------------------------------------------
# SMTP
# -------------------------------------------------------------------
$IPTABLES -A FORWARD -i $DMZ -o $EXT -s $MAILS -m state --state NEW \
-p tcp --sport $p_high --dport smtp -j ACCEPT
$IPTABLES -A FORWARD -i $EXT -o $DMZ -m state --state NEW -p tcp \
--sport $p_high -d $MAILS --dport smtp -j ACCEPT

# -------------------------------------------------------------------
# HTTP und HTTPS
# -------------------------------------------------------------------
$IPTABLES -A FORWARD -i $DMZ -o $EXT -p TCP --sport $p_high --dport http \
-m state --state NEW -j ACCEPT
$IPTABLES -A FORWARD -i $DMZ -o $EXT -p TCP --sport $p_high --dport https \
-m state --state NEW -j ACCEPT

# -------------------------------------------------------------------
# FTP
# -------------------------------------------------------------------
$IPTABLES -A FORWARD -i $DMZ -o $EXT -p TCP --sport $p_high --dport ftp \
-m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A FORWARD -i $DMZ -o $EXT -p TCP --sport $p_high --dport $p_high \
-m state --state NEW,RELATED,ESTABLISHED -j ACCEPT

# -------------------------------------------------------------------
# SSH
# -------------------------------------------------------------------
$IPTABLES -A FORWARD -o $EXT -i $DMZ -m state --state NEW -p TCP --dport 22 -j my_ssh

# -------------------------------------------------------------------
# NTP (Zeitservice)
# -------------------------------------------------------------------
$IPTABLES -A FORWARD -i $DMZ -o $EXT -p UDP --sport 123 --dport 123 \
-m state --state NEW -j ACCEPT
$IPTABLES -A FORWARD -i $DMZ -o $EXT -p UDP --sport $p_high --dport 123 \
-m state --state NEW -j ACCEPT
$IPTABLES -A OUTPUT -p UDP --dport 123 -m state --state NEW -j ACCEPT

# -------------------------------------------------------------------
# destination unreachable
# -------------------------------------------------------------------
$IPTABLES -A OUTPUT -p ICMP --icmp-type fragmentation-needed -j ACCEPT
$IPTABLES -A OUTPUT -p ICMP --icmp-type port-unreachable -j ACCEPT
$IPTABLES -A INPUT -p ICMP --icmp-type fragmentation-needed -j ACCEPT
$IPTABLES -A INPUT -p ICMP --icmp-type port-unreachable -j ACCEPT
$IPTABLES -A FORWARD -p ICMP --icmp-type port-unreachable -j my_drop

# -------------------------------------------------------------------
# Webserver
# -------------------------------------------------------------------
for httpserver in $HTTPSERVER
do
$IPTABLES -A FORWARD -i $EXT -o $DMZ -m state -d $httpserver \
--state NEW -p tcp --sport $p_high --dport 80 -j ACCEPT
done

# -------------------------------------------------------------------
# FTPserver
# -------------------------------------------------------------------
for ftpclient in $FTPCLIENTS
do
$IPTABLES -A FORWARD -i $EXT -o $DMZ -m state \
--state NEW -p tcp --sport $p_high --dport ftp \
-d $FTPSERVER -s $ftpclient -j ACCEPT
done

# -------------------------------------------------------------------
# Abschluß (Rest verbieten und loggen)
# -------------------------------------------------------------------
$IPTABLES -A OUTPUT -j my_reject
$IPTABLES -A FORWARD -j my_reject
$IPTABLES -A INPUT -j my_reject

swen1
16.12.03, 08:47
Moin,

keiner ne Idee?? Also wenn ich eine Regel etwa "iptables -p tcp --dport 5190 -j DROP" vorranstelle, dann kann der Server so auch nicht mehr erreicht werden.

Aber ohne diese Regel erlaube ich das doch auch nirgends. Habe das vor einiger Zeit schon mal festgestellt und dachte da, daß der erste Verbindungsaufbau über Port 80 erfolgt, und erst danach auf Port 5190 gewechselt wird (Port 80 und bestehende Verbindungen sind ja erlaubt). Wie ich jetzt weiß, geht das so aber nicht, und es ist ja nach meinen Tests auch nicht so ...

... warum geht das denn nun ??? ...

Gruß Swen

PS: Mache mir echt Sorgen, daß hier noch jede Menge andere und vielleicht nicht erwünschte Sachen funktionieren :mad:

Dellerium
16.12.03, 09:57
Hi ..

Ich bin mir jetzt net absolut sicher, aber ich meine mal gelesen zu haben, das icq diverse Ports aus dem Bereich 5000 - 6000 benutzt ....

mario88
16.12.03, 17:58
Ich glaub zu dem Thema gabs hier schon mal nen ziemlich langen Thread, mit dem Ergebnis, dass man ICQ nur sehr schwer bis gar nicht blocken kann.

swen1
17.12.03, 08:24
@Dellerium
der Verbindungsaufbau scheint aber nur über Port 5190 zu gehen (laut Desktop-Firewall), aber auch alle anderen Ports sollten zu sein (das hoffe ich zumindest mal).

@mario88
hab ich damals glaube auch gelesen, aber das bezieht sich darauf, daß man ICQ auch über andere Ports wie 80 (welcher ja immer offen sein wird) laufen lassen kann, und dann gibts ja noch einen Webclient ...

Ich wills ja auch gar nicht blocken, aber ich will wissen wieso man so einfach durch die Firewalls kommt. Bei "telnet login.icq.com 5190" dürfte man nie und nimmer eine Antwort bekommen! Entweder seh ich den Wald vor lauter Bäumen nicht, oder hier ist irgendwo der Wurm drin ...


Gruß Swen

Bunkerwolf
17.12.03, 17:55
vielleicht geht es hier wie im passiven FTP ...

Kip
17.12.03, 21:10
... hör auf dich zu wundern - icq geht immer ;)
hier gibts einen seitenlangen thread wo ein lehrer seinen schülern auch icq wegnehmen wollte - keine chance. Zur Not bedient sich icq auch Port 80 ....

core
21.12.03, 04:47
Also was mit auffällt, ist die vermischte Verwendung von "$IPTABLES" und "iptables".
Kann es sein das du die Zeile wo die Variable $IPTABLES gesetzt wird gelöscht hast?

Ansonsten - Ich weiss woher du deine iptables rules hast :P


ps: Die Aussage ICQ findet immer einen Weg ist völliger Unfug! Zeugt von Unwissen :)

mario88
21.12.03, 11:37
Original geschrieben von core
ps: Die Aussage ICQ findet immer einen Weg ist völliger Unfug! Zeugt von Unwissen :)
Such doch mal diesen langen Thread mit dem Lehrer, der seinen Schülern ICQ nehmen will. Du wirst dich wundern.
Aber du kannst uns ja gerne das Gegenteil beweisen. ;)

Kip
21.12.03, 12:14
Original geschrieben von core
ps: Die Aussage ICQ findet immer einen Weg ist völliger Unfug! Zeugt von Unwissen :)

Na dann schreib doch bitte mal einen Satz Iptables-Regeln die mich normal surfen lassen (also HTTP erlauben) aber ICQ unbrauchbar machen ....

... du bist nicht nur unwissend, sondern unverschämt noch dazu. Denk mal drüber nach :mad:

core
21.12.03, 12:45
>Na dann schreib doch bitte mal einen Satz Iptables-Regeln die mich
> normal surfen lassen (also HTTP erlauben) aber ICQ unbrauchbar machen ....

>... du bist nicht nur unwissend, sondern unverschämt noch dazu. Denk mal drüber nach


Danke da denk ich nicht drüber nach sondern sage "man iptables" und http://www.google.de/search?q=icq+protocol

core
21.12.03, 12:51
Achja nun habe ich mir doch mal die Mühe gemacht in diesen Thread mit dem unwissendem Lehrer zu schauen... Hättest du genauer hingeschaut hättest du gesehen, dass er es geschafft hat, Zitat:

....alles o.k !

Hey HangLoose,

das war die Lösung !!!

Vielen Dank fuer deinen Einwurf .

Vielen Dank auch an die anderen "Beteiligten" die
mitgeholfen haben .

Also bevor zu das nächste mal andere als unverschämt beschimpfst solltest du deine pseudo Fakten überprüfen.


MfG

swen1
21.12.03, 21:09
Hi,

nun mal keinen Streit hier, ich denke Ihr habt ja alle etwas Recht ;)

@Kip
Also Deinen Beitrag fand ich auch äußerst unproduktiv. Alles was da stand wurde weiter oben schon geklärt.

@core
Mit $IPTABLES und iptables hast Du Recht. Weiß jetzt gar nicht, ob das auf dem Rechner auch so ist (glaub ich aber nicht). Hab hier nur ein älteres Beispiel von meinem Rechner genommen, weil der Kernel vom Firewallrechner soweit abgespeckt ist, das er auch kein kopieren auf Diskette zuläßt. Genau der Absatz mit "iptables" ist von Harry's Seite, der Rest ist schon auf meinem Mist gewachsen. Ist aber alles nicht ganz vollständig, außerdem hab ich ja auch 2 Firewalls mit DMZ. Aber nichts erlaubt eine "normale" ICQ-Verbindung!

@all
Ich glaube einige haben mein Problem noch nicht verstanden. Also nochmal für alle Spätzünder - ich will ICQ nicht blocken. Ich denke aber auch, daß es mit etwas Aufwand möglich wäre. Mit iptables wäre ein Ansatz alle Zielserver zu sperren, mit einem Proxy ist es wahrscheinlich noch viel einfacher.


Gruß Swen

core
21.12.03, 21:14
Jo, also ich vermute dass es an dem $IPTABLES liegt.. ersetz einfach mal alle $IPTABLES mit iptables. Sollte zu dem Zeitpunkt noch kein $PATH gesetzt sein wo die Firewall geladen wird, muss man natürlich den Pfad zu iptables mit angeben...

Gruss

ps: zumindest hier ist es richtig angekommen, mit dem blocken oder nicht blocken :-)

swen1
21.12.03, 22:28
Hi core,

ist ne Idee, aber in $IPTABLES ist ja nur der Path zu iptables gespeichert. Wenn da was falsch wäre, würde ja beim Starten vom Skript ne Fehlermeldung kommen und die Firewall läuft ja schon ne Weile. Die Regeln gehen soweit schon alle. Nur "dieses" Problem ist mir jetzt durch Zufall aufgefallen, sonst alles ok.

Gruß Swen

Kip
22.12.03, 17:29
Original geschrieben von core
Achja nun habe ich mir doch mal die Mühe gemacht in diesen Thread mit dem unwissendem Lehrer zu schauen... Hättest du genauer hingeschaut hättest du gesehen, dass er es geschafft hat

... bevor du Aussagen wie "zeugt von Unwissenheit" machst solltest du erstmal lesen lernen ... und wenn du das gelernt hast gehste nochmal in den Thread und liest ihn von Anfang an ... dann verstehst du auch worauf sich das von dir gepostete Zitat bezieht.

So, und da du jetzt hoffentlich lesen kannst, darf ich jetzt noch ein Zitat posten, von harry hier aus dem Forum:



Mein erster Versuch: Den Standard-ICQ-Serverport sperren (welcher das war, weiß ich nicht mehr genau)
Erstes Ergebnis: ICQ lief auf den Clients munter weiter. Nach einer kurzen Recherche habe ich nur noch die Hände über den Kopf schlagen können, da das Mistdingens (der Windows ICQ-Client) die Pakete über 25/tcp an den Server weiterreichte -> ICQ hat einfach mal so getan, als wäre es ein Mailclient.

Mein zweiter Versuch: Den Port 25/tcp sperren, allerdings mit der unangenehmen Nebenwirkung, dass dann auch keine Mails mehr in das Internet verschickt werden können.
Zweites Ergebnis: ICQ lief munter weiter und tat nun so, als wäre er ein Web-Client und ließ die Pakete nun Richtung Server auf dem Port 80/tcp durchlaufen

Einen dritten Versuch meinerseits gab es dann nicht mehr, da mit diesem ICQ-Client-Verhalten sowieso alle Möglichkeiten der Paketfiltersperrung ad absurdum getrieben werden. Somit blieb nur noch die Lösung, für HTTP und SMTP (und auch die ganzen anderen benötigten Protokolle) in der Firewallumgebung Proxy-Server aufzusetzen und das IP-Forwarding generell zu verbieten. Danach war dann auch endlich Ruhe mit ICQ, bis zu dem Zeitpunkt, an dem sich ICQ vielleicht in Zukunft auch die Proxy-Informationen aus der lokalen Client-Konfiguration holt und dann über die Proxy-Server mit dem ICQ-Server weiterquatscht.


Und glaub mir, wenn Harry sagt es geht net, dann gehts net! Aber wie gesagt, ich warte immernoch auf deine Filterregeln die ICQ aussprren?

Ansonsten würd ich dir folgendes ans Herz legen: Wenn man keine Ahnung hat, lieber mal Fresse halten.

@swen1: Ich wollte dich auf den "Lehrer,Schüler,ICQ-Thread" aufmerksam machen ... wenn man natürlich zu faul ist die SuFu zu benutzen ist das nicht mein Problem.

edit: ich gebe zu das der versuch alle ICQ-Login-Server zu blocken vielleicht zum Erfolg führen würde, aber bei der erheblichen Menge an Login-Servern empfinde ich das nicht als akzeptable Lösung...

core
22.12.03, 17:48
Also Kip, deine Beleidigungen kannst du dir nach wie vor sonstwohin schieben. Bin nicht bereit mich auf dieser Basis weiter mit dir zu unterhalten.
Solange man auf IP Basis die ICQ Loginserver blockt, ist es völlig schnurz, dass die server eine vielzahl an ports offen haben.

Also halt selbst die Fresse, um es dir in deinem Tonfall zu erwiedern.


/edit/
> empfinde ich das nicht als akzeptable Lösung

Wen interessieren deine Empfindungen bei der Lösung eines Problems das hier eh nicht zur Debatte stand.

Kip
22.12.03, 18:02
mit den Beleidigungen habe ich nicht angefangen - aber da das nirgends hinführt lassen wirs lieber.

Svenny
22.12.03, 18:37
man blocke folgende ips:

login.login-grt.messaging.aol.com. 557 IN A 64.12.161.185
login.login-grt.messaging.aol.com. 557 IN A 64.12.200.89
login.login-grt.messaging.aol.com. 557 IN A 205.188.179.233
login.login-grt.messaging.aol.com. 557 IN A 64.12.161.153

core
22.12.03, 19:54
>mit den Beleidigungen habe ich nicht angefangen

Oh doch. Ich sagte lediglich dass es von Unwissen zeugt, zu behaupten es wäre nicht möglich ICQ mittels iptables zu blocken. Das ist keine Beleidigung, sondern ein Fakt.
"Fresse halten" und "du bist unverschämt" ist allerdings beleidigend.
MfG

Flightbase
23.12.03, 12:54
leute, leute.

mir gefällt das gepöbel garnicht. thread dicht.

greets, Nik