Serrvus,
On Tue, 04 Sep 2012 04:30:50 +0000 (UTC), Juergen P. Meier wrote:
>> [...]
>> DNS="192.168.167.2"
>
> Dein DNS-Server steht innen?
Jupp, zumindest als Weiterleitung. In diesem Fall sogar auf meiner
Maschine. Das Linux l�uft in einer VM und die IP des VM-Hosts wird per DHCP
als GW- und DNS-Adresse dem Gast �bergeben.
Das Setup hier dient lediglich als Testinstallation. Ich arbeite mit einem
Azubi daran aber nat�rlich sollen die Regeln stimmen, der Sinn ist manchmal
zweifelhaft, sollte hier und dort lediglich zur Demonstration dienen.
>> # Spoofing verhindern
>> for ip in $SPOOFING ;
>> do
>> $IPTABLES -A INPUT -s $ip -j LOG --log-prefix "Spoofing detected:"
>> # $IPTABLES -A INPUT -s $ip -j DROP
>> done
>
> Sofern du RFC1918-Addressen verwendest, hast du dir gerade die Fuesse
> weggeschossen.
Ja verwende ich aber ich verstehe nicht warum. Ist im adressbereich
192.168.0.0/16 der Bereich
192.168.0.0/24 includiert? Denn im
192.168.0.0/24 befindet sich die IP des Systems.
> Kannst du das nicht auf das Interface einschraenken, dass "aussen"
> anliegt? (-i ppp*
o.ae.)
Im Moment nicht, da ich nur ein Interface (eth0) habe. Da ist sie schon
mal, die Geschichte mit dem Demosystem in einer VM. Ich muss zugeben, dass
ich das aber so nicht gewusst habe (sonst h�tte ich es ja hier nicht als
Frage gestellt ;) und bin jetzt mal so verblieben, dass die ganze Spoofing
Geschichte erst dann Sinn macht, wenn ich mehrere Interfaces habe und wei�
welche Art Pakete an welchem Interface zu erwarten sind.
>> # Neue TCP Sessions nur mit SYN erlauben
>> #
http://www.smythies.com/~doug/network/iptables_syn/index.html
>> $IPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -j LOG /
>> --log-prefix "New but SYN-Flag not set:"
>> $IPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
>
> Hae? Ich will dir ja nicht zu nahe treten, aber das ist ueberfluessig.
>
> Entweder du verwendest das conntrack_tcp state modul, oder du filterst
> auf Flags. Beides ist jedoch sinnfrei (--staet NEW limitiert bereits
> auf SYN-only flag - genauer auf den 3-way handshake, den du mit
> billigen Flags garnicht so abbilden kannst).
Ich habe mich an dieses Konzept noch aus den Tagen erinnert, wo man mit
Ipchains gearbeitet hat (Das war mein letzter unixoider Paketfilter den ich
gebaut habe <urgs>) auch wenn die Umsetzung etwas anders gewesen ist. Hier
wurde AFAIR zu jeder Verbindung explizit der Hin- und R�ckkanal und der
Hin-Kanal mit dem -y Flag f�r SYN-only konfiguriert.
> Ausserdem erlaubt das *alles* was TCP ist.
Warum? Die Pakete werden ja geLOGgt und geDROPt.
>> # Erlaube abgehende Pings
>> $IPTABLES -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
>
> Du solltest das in jede Richtung erlauben. Deine Fuesse haben schon
> Loecher, ICMP Echo (und die fuer IP notwendigen anderen 4 Typen) zu
> erlauben gehoert genauso dazu wie Stahlkappen beim Heben schwerer
> Lasten).
Jupp, an anderer Stelle im Thread habe ich schon mal darauf hingewiesen,
dass ich mir hier der Konsequenzen schon bewusst war und auch noch so
einige Probleme in Erinnerung habe, die Serveradmins mit g�nzlich
abgeschalteten ICMP verursacht haben (oder es immer noch tun)
Ich wollte hier im Beispiel nur den vielen Beispielkonfiguration aus dem
Internet, welche Ping mit ICMP verwechseln, den Wind aus den Segeln nehmen.
Hier an dieser Stelle wollte ich zum Ausdruck bringen, dass es
verschiednene ICMP Typen gibt und manche davon sinnvoll andere sogar
wichtig sein k�nnen. Das h�tte ich vielleicht erw�hnen sollen.
>> # Erlaube DNS
>> $IPTABLES -A OUTPUT -p udp --dport 53 -d $DNS -m state --state NEW -j
>> ACCEPT
>
> Zu Spaet. Dein Spoofing-filter filtert dir deinen DNS-server bereits weg.
Hm, schon wieder. Mit der Spoofing Regel ging wirklich gar nichts mehr,
deshalb habe ich die DROP Regel dann in eine LOG Regel umgewandelt, um zu
schauen was davon erfasst wird (sp�ter habe ich dann beides kombiniert).
Aber die og Frage mit den Subnetzmasken /16 /24 bleibt noch offen. Kann
aber nur daran liegen, denn ohne dem Netz
192.168.0.0/16 hat die
Spoofingregel keinen Totalzusammenbruch der Verbindung verursacht.
>> # Erlaube NTP
>> $IPTABLES -A OUTPUT -p udp --dport 123 -m state --state NEW -j ACCEPT
>
> Kannst du das nicht auf deine NTP peers einschraenken? NTP besticht
> jetzt nicht gerade durch extreme Stabilitaet der Implementierungen
> bezueglich Bufferoverflows und anderer Fuzzing-Methoden. Und zu
> erraten, wer deine NTP-Server sind, ist nur dann trivial, wenn du die
> ueblichen (ntp-pool, PTB, Microsoft) verwendest.
Gute Idee, nat�rlich k�nnte ich das. Auch hier haben wir interne.
>> # Allow incoming SSH
>> $IPTABLES -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT
>
> Von aussen. Nur von Aussen (s.O.). Und auch noch auf dem standard
> Port. (SSH sollte man aussenseitig nicht auf dem Standardport
> betreiben - schon um sich dem DoS-Angriff gegen die Authentication Logs
> zu entziehen. [damit meine ich die myriaden von Fehlversuchen die
> deine Auth-logs vollmuellen])
Ja die Regel ist bislang nur von aussen, anders rum sollte der Azubi
mittlerweile in der Lage sein, den fehler zu erkennen und wissen, wo er was
einstellen muss, damit es auch vom Testsystem aus funktioniert.
Das mit dem Standardport ist ein Gedanke den man aufgreifen k�nnte, in der
Tat. Wobei ich gerade an dieser Stelle (zu gegebener Zeit) fail2ban ins
Spiel bringen wollte, was ebenfalls auf das Auth-Logfile zur�ckgreift und
Iptables verwendet. Aber das eine schlie�t das andere ja nicht aus, wir
werden an dieser Stelle dann (Brute-Force und gegenma�nahmen) eh eine Weile
verbringen. Da gibts dann auch noch Blockhosts, was aber erstmal nichts mit
Iptables zu tun hat.
>> # Erlaube HTTP
>> $IPTABLES -A OUTPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
>> $IPTABLES -A OUTPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT
>
> HTTP wird im Internet auf vielen verschiedenen Ports betrieben. Wenn
> du diese per Whitelist freigeben willst, wirst du nicht froh (oder
> deine Anwender). Ueblich ist es, alle Ports bis auf eine Blackliste
> freizugeben (z.B. 1-79, 81-442, 444-1023, 2094, 3128, 6666-6670, ...)
Jupp, da bin auch hier und da mal �ber Multiport-Regeln gesto�en. Diese
Regel hier ist sicherlich f�r den Praxisbetrieb deutlich zu erweitern.
>> # Erlaube Whois
>> $IPTABLES -A OUTPUT -p tcp --dport 43 -m state --state NEW -j ACCEPT
>
> Okay, nicht dass es nicht Webfrontends dafuer gaebe.
Testsystem hat kein X ;-)
>> # Erlaube FTP (ausgehend)
>> $IPTABLES -A OUTPUT -p tcp --dport 21 -m state --state NEW -j ACCEPT
>
> Den FTP Steuerkanal freizugeben wird nicht reichen (solange du nicht
> die grobe Sicherheitsluecke namens "conntrack_ftp" als modul nachlaedst
> - was in der Praxis eine nicht besonders kluge Idee ist)
Aha, das ist mir neu, wobei mir auch das Kdernelmodul erst seit gestern
bekannt ist. Ich habs *mit* dem Kernel-Modul eingerichtet (steht irgendwo
weit oben im Skript). Gibt es zu den Problemen mit dem Modul was zum
nachlesen?
Ohne den Modul m�sste ich den Port 20 dann auch noch konfigurieren und mich
vermutlich auf passives FTP beschr�nken, wobei aktives FTP in den meisten
F�llen wegen fehlendem Portforwarding auf den meisten SOHO Routern eh nicht
mehr funktioniert wird. Aber villeicht haben die sogar auch noch ein
Stafeul-Inspection Modul, was das dann wieder m�glich machen k�nnte.
>> [...]
>> ganz so verstanden, dachte jedoch, dass die localhost Adresse nichts mit
>
> Das loopback interface ist im prinzip ein Netzwerkinterface wie jedes
> andere auch. Der Hauptunterschied zu einem Ethernet-Interface (oder
> auch Dummy-interface) ist der, dass bei loopback jede Kommunikation
> zwischen zwei (nur lokalen) Prozessen per Mem-copy direkt zwischen den
> Pufferspeichern beider Prozesse ablaeuft. Das war insbsondere frueher
> bei Systemen mit langsamen I/O-Subsystemen von entscheidendem
> GEschwindigkeitsvorteil.
>
> Dass die Loopback-IP Addresse ueberall die selbe ist, ist konvention,
> damit man diese in Applikationen, die nur lokal aber trotzdem ueber
> TCP/IP-Methoden kommunizieren sollen, Hardcoden kann.
>
> Deer entscheidende Vorteil von TCP/IP Interprozesskommunikation (fuer
> die Loopback erfunden wurde) geenueber allen anderen (lokalen)
> Interprozesskommunikationsmethoden (wie z.B. IPC, Pipes, Semaphores,
> Streams etc.) ist die Portabilitaet. TCP/IP ist Systemunabhaengig.
>
>> dem Loopbackadapter zu tun hat. Ist dieses Verhalten von nmap auf dem
>> lokalen Host mit dem Loopbackadapter erkl�rbar?
>
> Loopback ist bei Linux z.B. so hoch optimiert, dass praktisch gar kein
> Netzwerkspezifischer Code mehr abgearbeitet wird - Daten werden direkt
> vom Puffer eines Prozesses in den des anderen kopiert, auch findet
> keinerlei Layer-2 bis 3 Code statt (du konntest zeitweise sogar
> beliebige IP-Addressen setzen, solange der Loopback-Adapter verwendet
> wird wurde der Code, der sonst IP-Addressen verifiziert einfach
> ausgelassen - der PErformance zu Liebe). Es findet auch nur ein
> Bruchteil der Bearbeitung auf Schicht-4 statt, wenn du Loopback statt
> eines "richtigen" Interfaces verwendest. (alles, was Flowcontrol und
> Error-correction/detection ist wird uebersprungen weil da unnoetig und
> nur eine Performancebremse).
>
> Um zum Testen und debugging ein lokales Interface zu haben, dass diese
> TCP/IP Codeteile dennoch (wnen auch nur virtuell) durchlaeuft, wurde
> unter Linux das dummy-interface erfunden. Das ist ein loopback ohne
> die Optimierungen.
Okay, auch wenn ich jetzt nach ein-, zwei-maligem lesen nicht alles
verstanden habe, wei� ich worauf du hinaus m�chtest. Diese Art Erkl�rung
habe ich so jetzt nicht gefunden, bei meiner Recherche. Danke hierf�r, ich
nehme das als Grundlage weiter nachzuforschen, scheint nicht uninteressant
und auch nicht ganz unwichtig zu sein...
>> 2 Frage: Im Skript befindet sich eine Spoofing Log-Regel, die Drop-Regel
>> dazu ist auskommentiert, weil ich auch dort ein Problem ermittelt habe, von
>
> Ach.
Tja... ;-)
>> dem ich jetzt aber nicht wei� woher es kommt. Beim Starten des Skripts wird
>> ein Log-Eintrag nach /var/log/syslog geschrieben:
>
> Du filterst dein eigenes Netz per Anti-spoofing.
Siehe oben...
BTW: Ich h�tte vielleicht das Posting erst ganz lesen sollen bevor ich
schon mit dem kommentieren angefangen habe, dann h�tte ich an dieser Stelle
mit meinem Problem mit Klasse B und Klasse C Netzen anbringen k�nnen ;-)
>> [...]
>> Frage 3) Bei meinen ganzen Recherchen bzgl. Iptables bin ich nirgens auf
>> eine Regel gestossen, welche die initiale DHCP-Prozedur des DHCP-Clients
>
> DHCP ist UDP.
>
>> erfasst. Gewundert habe ich zwar schon, dass der Rechner auch ohne Regel
>> eine IP-Adresse bekommt aber in diversen Forenbeitr�gen wurde gemutma�t,
>> dass der ganze DHCP Prozess noch vor dem aktivieren der Firewall
>
> Kaffeesatzleser... Nein. Das ist falsch. DHCP muss natuelrich auch
> durch die Netfilter-Regeln hindurch.
>
> DHCP verwendet UDP. Und UDP ausgehend ist bei dir erlaubt (DHCP
> Request), und du erlaubst die "Antworten" auf UDP, also die DHCP
> offers. DA du antispoofing erst danach machst, sabotiert dir das
> nicht auch diese Kommunikation.
>
>> Muss man DHCP in seinem Regelsatz doch irgendwie ber�cksichtigen?
>
> Ja, natuerlich. Aber das wird bei dir schon gemacht, auch wenn du
> nicht weist wo.
Nein wei� ich wirklich, wo?
Wobei ich aber gerade alle meinen Regeln geflusht habe, also gar keine
Regel mehr in den Tabellen habe, jedoch immer noch die Default DROP Policy
aktiv ist und ich nach einem Neustart immer noch eine DHCP Adresse bekomme,
kann es doch eigentlich nicht an den Regeln gelegen haben, dass zumindest
die initialie DHCP Kommunkikation immer noch funktioniert. Von den sp�teren
Lease-Erneuerungen mal abgsehen, die jetzt vermutlich gegen die Wand
fahren.
H�tte ich in meinem Regelwerk jetzt zuf�llig DHCP erlaubt ohne es zu
wissen, dann sollte es ohne Regeln doch jetzt nicht mehr gehen, isn,t it?
>> Ansonsten bitte ich noch um Hinweise, wenn im Skript Fehler vorhanden sind,
>> weil ich die nat�rlich ungern weitergegeben m�chte ;-)
>
> Das ganze Script sieht danach aus, als ob du aus verschiedenen Quellen
> jewiels Schnippsel von Beispielen herausgezogen und zusammengeklebt
> hast.
Jetzt sei nicht so streng, ich fand das Skript gut, mift ;-)
> Das funktioniert nur zufaellig (meistens nicht), birgt mangels des
> gesamtheitlichen VErstaendnisses aber immer die Gefahr, dass es nicht
> das umsetzt, was du eigentlich erreichen willst.
Die Gefahr besteht nat�rlich, wobei ich aber schon dachte zu wissen, was
die regeln da tun. Gut die DHCP Geschichte ist nat�rlich noch ein R�tsel,
l�ftest du es...? ;-)
> Sinnvoller ist es, sich erst mal aufzumalen, was fuer
> Kommunikationsbeziehungen ueberhaupt bestehen (inkl. so elemntare oder
> auch fluechtige Dinge wie DHCP, DNS oder auch ident). Sowas nennt man
> dann auch "Kommunikationsmatrix", aus der ein Regelwerk fuer eine
> Firewall wie iptables/netfilter fast von alleine rausfaellt.
Okay...
> [...]
> Auch solltest du dir genau ueberlegen, ob du ausgehenden Verkehr
> einschraenken moechtest, und ob du dafuer einen White-list oder einen
> Blacklist-Approach waehlst.
Ausgehenden Verkehr zu filtern halte nach wie vor f�r sinnvoll, wenn auch
nicht unbedingt auf einem Client System, wie hier demonstriert aber wie
gesagt, ist nur eine Demonstration...
Anyway, hier im Haus wird die Philosophie vertreten, dass wenn wir einen
Mailserver haben, nur dieser SMTP ins Internet darf, die Clients d�rfen das
nicht. Selbes gilt zB f�r NTP und DNS. Wobei diese Regeln dann am
Perimetergateway greifen.
Ist die Default Policy "Verbiete erst mal alles" dann muss man eben
hergehen und St�ck f�r St�ck die notwendigen Dienste wieder �ffnen. Ich
halte das zumindest am Perimeter weiterhin f�r eine sinnvolle Einstellung.
> Wenn du einen DHCP-Server auf deinem netfilter-rechner betreiben
> willst, musst du die BOOTP/DHCP-DISCOVER Pakete explizit erlauben.
Im LAN ist keiner vorhanden (Nur die lokalen VMs haben einen) aber wir
werden das sicherlich auch noch behandeln und da kommt das dann ins Spiel.
> loopback-Regel zu oberst.
Ist der Fall, naja nicht ganz die ESTABLISHED,RELATED Geschichte mogelt
sich noch davor...
> Antispoofing (nur) auf Interfaces zu fremden Netzen beschraenkt ganz
> oben direkt danach.
Okay, die lasse ich mangels zweiten Interface jetzt mal ganz weg.
> Dann die ESTABLISHED,RELATED-State-Accept regeln um bestehende
> Verbindungen zu erlauben.
> Dann fuer die Funktion von IP notwendige ICMP typen erlauben
Dann w�re hier ein '-I <CHAIN> 2' besser.
> Bei whitelisting dann die whiteliste, danach REJECTs. Wer DROP
> verwendet, macht sich unnoetig auffaellig.
>
> Bei blacklisting die Blackliste, danach ACCEPT.
Die letzten zwei habe ich jetzt nicht ganz verstanden. Die Whitelist soll
GeDROPt (bzw. REJECTed) werden bzw eine Blacklist ACCEPTed? Warum nicht
anders herum?
> Zum Troubleshooten die counter (iptables-save -c) beachten.
>
> HTH,
> Juergen
Ja sehr und Danke f�r deine Geduld. Ich hoffe du findest noch die Geduld,
die noch offenen Fragen zu beantworten.
Thx & Bye Tom
--