Ergebnis 1 bis 7 von 7

Thema: Frage zu IPTables Firewall

  1. #1
    Geht ein
    Registriert seit
    Feb 2016
    Ort
    im Funkloch
    Beiträge
    307
    ngb:news Artikel
    3

    Frage zu IPTables Firewall

    Servus,

    Ich habe 'ne Maschine laufen, die mein eigenes Netzwerk aufbaut (ein Adapter klemmt am Router, der andere an nem Switch) und alle Clients vor dem Router bündelt sozusagen (via Forwarding eth0->eth1).
    Gleichzeitig hostet diese Maschine auch eine Owncloud, einen dnsmasq/DNS und einen SSH Server. Somit sind dauerhaft die Ports 67, 68, 22, 53 und 80 offen und die Dienste auf beiden Adaptern erreichbar. Da mein Router ne potenzielle Schwachstelle ist, möchte ich gegenüber dem Router die Ports schließen, weiß allerdings nicht, wie ich sie nur auf eth0 schließe.

    Hier folgt der INPUT-Teil meiner derzeitigen IPTables Firewall:
    Code (Bash):
    1. # Accept loopback
    2. /sbin/iptables -A INPUT -i lo -j ACCEPT
    3.  
    4. # === Open Ports === #
    5.  
    6. # dnsmasq
    7. /sbin/iptables -A INPUT -m state --state NEW -p udp --dport 67 -j ACCEPT
    8. /sbin/iptables -A INPUT -m state --state NEW -p udp --dport 68 -j ACCEPT
    9.  
    10. # dns
    11. /sbin/iptables -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT
    12. /sbin/iptables -A INPUT -m state --state NEW -p udp --dport 53 -j ACCEPT
    13.  
    14. # ssh
    15. /sbin/iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT
    16.  
    17. # http
    18. /sbin/iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
    19.  
    20. # === Other === #
    21.  
    22. # Accept ESTABLISHED
    23. /sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    24.  
    25. # Accept ICMP
    26. /sbin/iptables -A INPUT -p icmp -j ACCEPT
    27.  
    28. # Drop invalid
    29. /sbin/iptables -A INPUT -m state --state INVALID -j DROP
    30.  
    31. # Reject remaining
    32. /sbin/iptables -A INPUT -j REJECT
    33.  
    34.  
    35. exit 0
    36.  
    Wäre super wenn mir jemand erklären könnte, wie ich das anpasse.

    Danke schonmal und Liebe Grüße.
    >>Das Felsgestein gähnt in der freudigen Erwartung eures nächsten fabelhaften Spielzugs, Keeper<<

  2. #2
    Defender of Freedom

    Administrator

    Avatar von Metal_Warrior
    Registriert seit
    Aug 2013
    Ort
    /dev/mapper/home
    Beiträge
    3.178
    ngb:news Artikel
    6

    Re: Frage zu IPTables Firewall

    @Cazawhi: Der Schalter, eine Abfrage auf einen Adapter zu machen, ist -i für INPUT und -o für OUTPUT. Relevant wird das hauptsächlich bei Forwarding und Input:

    Code (Bash):
    1. iptables -A INPUT -i eth0 --dport 80 -j REJECT
    2. iptables -A INPUT -i eth1 --dport 80 -j ACCEPT
    Hast du Forwarding aktiv, kann sich ein Angreifer da aber immer noch Infos holen, wenn er statt der IP von eth0 die IP von eth1 anspricht. Damit lässt er sich quasi "durchstellen" und hat serverseitig als Input-Adapter eth1, der ja antworten darf. Um das zu verhindern fehlt ein:
    Code (Bash):
    1. iptables -A FORWARD -i eth0 --dport 80 -j REJECT
    Soll er von außen hingegen reinkommen können, weil etwa andere Webserver in diesem Netz erreichbar sein sollen, musst du das abändern:
    Code (Bash):
    1. iptables -A FORWARD -i eth0 -d [IP von eth1] --dport 80 -j REJECT
    Generell macht man sich das aber wesentlich einfacher, indem man nur erlaubte Verbindungen definiert und alle anderen einfach rejected. In deinem Fall würde ich sowieso deine komplette Firewall umschreiben (auch weil du ziemlich viel redundant hast):

    Code (Bash):
    1. # === General stuff ===
    2.  
    3. # Drop invalid
    4. iptables -A INPUT -m state --state INVALID -j DROP
    5.  
    6. # Accept loopback
    7. iptables -A INPUT -i lo -j ACCEPT
    8.  
    9. # Accept ESTABLISHED
    10. iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    11.  
    12. # Accept ICMP
    13. iptables -A INPUT -p icmp -j ACCEPT
    14.  
    15.  
    16. # === Open Ports === #
    17.  
    18. # dnsmasq - DHCP auf allen Adaptern
    19. iptables -A INPUT -p udp --dport 67 -j ACCEPT
    20. # ODER auf einem davon
    21. iptables -A INPUT -i eth1 -p udp --dport 67 -j ACCEPT
    22. # Port 68 ist der Clientport, denke aber auch daran, dass du OUTPUT damit richtig schreiben musst, d. h. eine Antwort auch zulassen musst.
    23.  
    24. # dns - auf allen Adaptern
    25. iptables -A INPUT -p tcp --dport 53 -j ACCEPT
    26. iptables -A INPUT -p udp --dport 53 -j ACCEPT
    27.  
    28. # ssh - auf allen Adaptern
    29. iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    30.  
    31. # http - auf allen Adaptern
    32. iptables -A INPUT -p tcp --dport 80 -j ACCEPT
    33. # ODER auf einem davon
    34. iptables -A INPUT -i eth1 -p tcp --dport 80 -j ACCEPT
    35.  
    36.  
    37. # === Final statements ===
    38.  
    39. # Reject remaining
    40. iptables -A INPUT -j REJECT
    41.  
    42.  
    43. exit 0
    Die ganzen state-NEW-Geschichten hab ich rausgeschmissen, weil du nach einem DROP von INVALID und ACCEPT von RELATED und ESTABLISHED sowieso nur noch NEW vorliegen hast - die Prüfung ist daher Zeitverschwendung. Allgemein macht es Sinn, die Pakete, die am Seltensten sind (also NEW oder INVALID), ganz am Ende abzuhandeln, sofern sie kein mögliches Sicherheitsproblem darstellen (INVALID). Merke: Je mehr Pakete bereits im zweiten Statement abgehandelt werden können, desto weniger Prüfungen musst du nachher noch machen, was dir Ressourcen schont.

    Alles in Allem hast du hier ein Drittel der Firewall, weil du OUTPUT und FORWARDING bislang völlig vernachlässigst, was auf einem routenden Device sträflich ist.
    Für diesen Beitrag bedankt sich Cazawhi
    Geändert von Metal_Warrior (23.08.18 um 13:38 Uhr)
    GCM/IT/S/O d-(--) s+:- a? C++(+++) UL+++(++++)$ P L+++>++++ W++ w@$ M--$ PS+(++) PE(-) Y+(++) PGP++(+++) t+ 5(+) R* !tv b+(++++) DI(++) G++ e+>++++ h(--) y?
    Das Ende ist nahe: Dem Harleyschen Kometen folgt der Gammablitz beim Scheißen.

  3. #3
    Geht ein

    (Threadstarter)


    Registriert seit
    Feb 2016
    Ort
    im Funkloch
    Beiträge
    307
    ngb:news Artikel
    3

    Re: Frage zu IPTables Firewall

    Erstmal danke für die Komplettlösung.

    Habe wie beschrieben eben nur den INPUT-Teil hochgeladen, weil ich mir dachte, das würde reichen um mein Problem zu lösen. Wenn das schon so ein Desaster darstellt gebe ich dir noch das Forward-Skript, bei Output gibt es nicht viel hochzuladen, der wird einfach akzeptiert.

    (enx000ec6d9e908 ist mein bisherig der Einfachheit halber "eth1")

    Code (Bash):
    1. #!/bin/bash
    2.  
    3. # Reject forwarding into webserver in localnet
    4. iptables -A FORWARD -i eth0 --dport 80 -j REJECT
    5.  
    6. # Forward eth0 enx000
    7. iptables -A FORWARD -i eth0 -o enx000ec6d9e908 -s 192.168.0.0/24 -m conntrack --ctstate NEW -j ACCEPT
    8. iptables -A FORWARD -i enx000ec6d9e908 -o eth0 -s 192.168.0.0/24 -m conntrack --ctstate NEW -j ACCEPT
    9. iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
    10. iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    11.  
    12. # Exit
    13. exit 0
    >>Das Felsgestein gähnt in der freudigen Erwartung eures nächsten fabelhaften Spielzugs, Keeper<<

  4. #4
    Defender of Freedom

    Administrator

    Avatar von Metal_Warrior
    Registriert seit
    Aug 2013
    Ort
    /dev/mapper/home
    Beiträge
    3.178
    ngb:news Artikel
    6

    Re: Frage zu IPTables Firewall

    Also was ich hier sehe ist, dass du einfach deinen Traffic aus beiden Richtungen heraus vollständig akzeptierst - das ist nett, aber nicht clever, wenn du hinterher NAT betreibst und DHCP und und und...

    Was du eigentlich möchtest, ist nur von innen nach außen, nicht von außen nach innen. Und die Conntrack-Statements kannst du dir sparen, das macht er eh (bzw. sie sind das, was er macht, wenn du --state nimmst, letzteres ist nämlich der Alias dafür).

    Basic Router setup ist etwa sowas hier:

    Code (Bash):
    1. # === General Stuff ===
    2.  
    3. # Standard
    4. iptables -A FORWARD -m state --state INVALID -j DROP
    5. iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
    6.  
    7. # Dont forward Broadcasts
    8. # Outside
    9. iptables -A FORWARD -d 192.168.0.255 -j DROP
    10. # Inside
    11. iptables -A FORWARD -d 192.168.1.255 -j DROP
    12. # Multicast
    13. iptables -A FORWARD -d 224.0.0.0/4 -j DROP
    14. # DHCP inquiry broadcast
    15. iptables -A FORWARD -d 255.255.255.255 -j DROP
    16.  
    17.  
    18. # === Special stuff ===
    19.  
    20. # Forward Inside (eth1) to Outside (eth0)
    21. iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
    22.  
    23.  
    24. # === Final statements ===
    25.  
    26. # Log REJECTs (debugging)
    27. iptables -A FORWARD -m limit --limit 2/min -j LOG --log-prefix "[iptables] FORWARD REJECT: " --log-level 4
    28. # Don't let anything else be forwarded
    29. iptables -A FORWARD -j REJECT
    30.  
    31. # NAT everything talking to Outside (eth0)
    32. iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    Wenn jetzt was nicht so läuft, wie du es dir erwartest, musst du nur das syslog nach "[iptables] FORWARD REJECT" greppen, und siehst, was auf der Forward-Chain rejected wurde.

    P.S.: OUTPUT solltest du trotzdem schreiben, gerade um zu verhindern, dass sich DHCP oder DNS an den falschen Stellen meldet, Broadcasts ins externe Netz gehen etc. Überleg dir, was genau dein Server wohin schicken dürfen soll, und lass genau das zu, alles andere rejectest du mit Log. Falls irgendwas dann nicht funktioniert, kannst du es am Log nachprüfen und ggfs. ändern.
    Für diesen Beitrag bedankt sich Cazawhi
    Geändert von Metal_Warrior (24.08.18 um 16:55 Uhr)
    GCM/IT/S/O d-(--) s+:- a? C++(+++) UL+++(++++)$ P L+++>++++ W++ w@$ M--$ PS+(++) PE(-) Y+(++) PGP++(+++) t+ 5(+) R* !tv b+(++++) DI(++) G++ e+>++++ h(--) y?
    Das Ende ist nahe: Dem Harleyschen Kometen folgt der Gammablitz beim Scheißen.

  5. #5
    Geht ein

    (Threadstarter)


    Registriert seit
    Feb 2016
    Ort
    im Funkloch
    Beiträge
    307
    ngb:news Artikel
    3

    Re: Frage zu IPTables Firewall

    Du ersparst mir grad viel zu viel Arbeit, hui!

    Wann versendet einer meiner Clients oder mein Server denn einen Broadcast?
    Ich kenne Broadcasts nur um z.B alle momentan laufenden Spiele-Server in CS zu finden, was machen die im lokalen Netz?

    Code (Bash):
    1. [iptables] FORWARD REJECT: IN=eth0 OUT=eth1 MAC=xxx SRC=172.217.17.99 DST=192.168.2.10 LEN=84 TOS=0x00 PREC=0x00 TTL=55 ID=0 PROTO=ICMP TYPE=0 CODE=0 ID=16437 SEQ=50
    Wenn ich das richtig verstehe, kommen die Antworten aus dem Internet nicht zurück.

    Sollten die Antworten nicht ESTABLISHED und RELATED sein, da ich zuerst eine Anfrage gestellt habe?
    Geändert von Cazawhi (24.08.18 um 15:39 Uhr)
    >>Das Felsgestein gähnt in der freudigen Erwartung eures nächsten fabelhaften Spielzugs, Keeper<<

  6. #6
    Defender of Freedom

    Administrator

    Avatar von Metal_Warrior
    Registriert seit
    Aug 2013
    Ort
    /dev/mapper/home
    Beiträge
    3.178
    ngb:news Artikel
    6

    Re: Frage zu IPTables Firewall

    @Cazawhi: PROTO=ICMP ist Ping. Wer ist denn 192.168.2.10, und soll er von extern gepingt werden können? Eigentlich sollte das, wenn er intern ist, nicht der Fall sein.
    GCM/IT/S/O d-(--) s+:- a? C++(+++) UL+++(++++)$ P L+++>++++ W++ w@$ M--$ PS+(++) PE(-) Y+(++) PGP++(+++) t+ 5(+) R* !tv b+(++++) DI(++) G++ e+>++++ h(--) y?
    Das Ende ist nahe: Dem Harleyschen Kometen folgt der Gammablitz beim Scheißen.

  7. #7
    Geht ein

    (Threadstarter)


    Registriert seit
    Feb 2016
    Ort
    im Funkloch
    Beiträge
    307
    ngb:news Artikel
    3

    Re: Frage zu IPTables Firewall

    Ist die Antwort auf eine Ping-Anfrage von 192.168.2.10.

    192.168.2.10 ist mein Laptop im Netzwerk mit dem ich zum Testen schnell was angepingt habe und keine Antwort bekommen habe.


    //edit

    Hab' den Übeltäter gefunden!

    War das Leerzeichen nach dem Komma bei ESTABLISHED,RELATED :P
    Geändert von Cazawhi (24.08.18 um 16:22 Uhr)
    >>Das Felsgestein gähnt in der freudigen Erwartung eures nächsten fabelhaften Spielzugs, Keeper<<

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •