Basis nftables Datei

  • Servus,


    ich habe mich die letzten Tage und Wochen immer wieder mal mit dem Absichern meines vServers beschäftigt und mit fehlt nur noch das letzte Puzzleteil, die nftables Datei. Bis jetzt habe ich mich immer darauf "verlassen", dass starke Passwörter und Kleinigkeiten wie "kein root SSH Login" mich vor dem Schlimmsten bewahren. Bevor ich aber nun meinen vServer zur finalen Neuinstallation bereit mache wollte ich mich mit nftables auseinander setzen. Leider ist das so ganz und gar nicht meine Welt und darum habe ich bis jetzt nur folgende "Basisdatei" zusammengeschustert gekriegt:


    Code
    #!/usr/sbin/nft -f
    flush ruleset
    table inet filter {        chain input {                type filter hook input priority 0;
                    # allow from loopback                iifname lo accept;
                    # established/related connections                ct state established,related accept;
                    # invalid connections                ct state invalid drop;
                    # no ping floods                ip6 nexthdr icmpv6 icmpv6 type echo-request limit rate 2/second accept;                ip protocol icmp icmp type echo-request limit rate 2/second accept;
                    tcp dport ssh ip saddr MEINEPRIVATEIP accept;                tcp dport {http, https, ftp, smtp, pop3} accept;
                    policy drop;        }        chain forward {                type filter hook forward priority 0;        }        chain output {                type filter hook output priority 0;        }}



    Auf meinem vServer werden folgende Dienste laufen (SSH, HTTP(S), POP3, SMTP, FTP (wird ev. durch SFTP ersetzt), evtl. ein Teamspeak3 und evtl. ein SVN Server).
    - Kann ich die Dienste mittels Bezeichnung in die Regel einfügen anstatt mit dem def. Port (ist das überhaupt "in Ordnung"?)

    - Habe ich irgendwas Grundlegendes vergessen, resp. muss ich noch etwas "zwingend" einfügen?


    Gruss und einen schönen Abend!
    Moritz

  • Mist, der Code wurde doof dargestellt ... hier nochmal in schön


    #!/usr/sbin/nft -f

    flush ruleset

    table inet filter {
    chain input {
    type filter hook input priority 0;

    # allow from loopback
    iifname lo accept;

    # established/related connections
    ct state established,related accept;

    # invalid connections
    ct state invalid drop;

    # no ping floods
    ip6 nexthdr icmpv6 icmpv6 type echo-request limit rate 2/second accept;
    ip protocol icmp icmp type echo-request limit rate 2/second accept;

    tcp dport ssh ip saddr $clientip accept;
    tcp dport {http, https, ftp, smtp, pop3} accept;

    policy drop;
    }
    chain forward {
    type filter hook forward priority 0;
    }
    chain output {
    type filter hook output priority 0;
    }
    }

  • Hallo,


    bin gerade zufällig über deine Frage gestoplert und habe mich gewundert, dass dort noch niemand geantwortet hat.


    Ja, sieht nicht verkehrt aus. Der einzige Punkt der mir auffällt ist, dass du für ICMPv6 nur ping akzeptierst. Damit wirst du Probleme bekommen. Für IPv6 sind ICMP Nachrichten essentiell und für den Betrieb notwendig.


    Bei mir sieht das so aus:


    # routers may also want: mld-listener-query, nd-router-solicit

    ip6 nexthdr icmpv6 icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert, echo-reply, echo-request } accept


    Für IPv4 habe ich:

    ip protocol icmp icmp type { destination-unreachable, router-advertisement, time-exceeded, parameter-problem, echo-reply, echo-request } accept


    Gruß,

    Majestix

  • Das Thema IPv6 habe ich noch gar nicht angeschaut, ist für mich völliges Neuland. Habe heute festgestellt das mein ProFTPD Server keine Verbindung zugelassen hat. Mittels

    Code
    tcp dport 30000-30500 accept comment "FTP-Passiv-Ports"

    klappts, aber ich muss mir das nochmals genau anschauen. Danke für dein Feedback!