Hirdetés

Új hozzászólás Aktív témák

  • hmzs

    csendes tag

    #!/bin/sh
    #  Minden nem HU ip-ről jövő kérés eldobása  #
    #      Változók:      #
    DIR='/etc/BanIP'
    WHT='WhiteIP'   # Fehér lista
    BLK='BlackIP'   # Fekete lista
    HU4='hu_v4.ip'  # HU ip v4 lista
    URL4='http://www.bix.hu/bix-ipv4-prefixes.txt'
    REGEX='s/[#;].*\| \|\t//g;/^$/D'
    # Szöveges üzenetek:
    FIREW='Tűzfal indítása'
    FW4_T='Egyéni tűzfal szabályok betöltése'
    FW4OK='Egyéni tűzfal betöltve'
    Txt_L='        #   '
    ###########
    # Program #
    ###########
    mkdir -p $DIR && cd $DIR
    case "$1" in
        -q) GET=1; logger -s "$Txt_L${FIREW}   #";;
        log) GET=; logger -s "$Txt_L${FW4_T}   #";;
        *) GET=; echo -e "\n$FW4_T";;
    esac
    nft delete set inet fw4 white >/dev/null 2>&1
    nft delete set inet fw4 black >/dev/null 2>&1
    # Listák  létrehozása #
    [ -z $GET ] && {
        nft add set inet fw4 white{type ipv4_addr\;flags interval\;auto-merge\;comment \"whitelist\"\;}
        nft add set inet fw4 black{type ipv4_addr\;flags interval\;auto-merge\;comment \"blacklist\"\;}
        [ -s $BLK ] && nft add element inet fw4 black { $(sed "$REGEX" $BLK | awk 1 ORS=', ') }
        [ -s $WHT ] && nft add element inet fw4 white { $(sed "$REGEX" $WHT | awk 1 ORS=', ') }
        wget -q -O - $URL4 | sed "$REGEX" > $HU4
      [ -s $HU4 ] && nft add element inet fw4 white { $(awk 1 ORS=', ' $HU4) }
    # Szabályok betöltése #
        nft insert rule inet fw4 input_wan ip saddr != @white counter drop
        nft insert rule inet fw4 forward_wan ip saddr != @white counter drop
      nft insert rule inet fw4 forward_wan tcp dport 55555 accept

        nft insert rule inet fw4 input_wan ip saddr @black counter drop
      nft insert rule inet fw4 forward_wan ip saddr @black counter drop
        [ "$1" = "log" ] && logger -s "$Txt_L${FW4OK}   #" && /etc/BanList.sh log || echo -e "\n$FW4OK" && /etc/BanList.sh
    }

    Ez maga a sript, BanIP.sh nevet adtam neki. Az nft-s rész kicsit paraszt, mindent beszúr direktben a futó szabályrendszer egyes részei elé. Ellenben így ha nem megy a script, a tűzfal az alapbeállításokkal működőképes.
    Init.d firewall scriptben start, restart, reload szakaszokba beszúrtam pluszba '/etc/BanIP.sh' sort, és ennyi.
    "DIR='/etc/BanIP'" sorban megadott mappába dolgozik, az ott lévő fekete és fehér listákat figyelembe véve.

    Példaként a konkrét fehér listám, mivel nem rendkívüli a tartalma:
    # Engedélyezett IP-k listája #
    192.168.1.0/16        # Otthoni hálózat
    128.30.52.0/24        # W3C Validator

    A tiltólistából csak két sor példának:
    34.4.4.0/24        # GOOGLE - Google LLC
    34.64.0.0-34.191.255.255  # GOOGLE - Google LLC

    Az nft előnye, hogy elég szabadon meg lehet adni az ip tartományokat.

    Kb ennyi. Ha valakinek van energiája átgondolni a szabályok betöltését az nf táblába, annak örülnék. Ill biztos vagyok benne, hogy lehetne még farigcsálni.

    [ Szerkesztve ]

Új hozzászólás Aktív témák