Creëer je eigen firewall met iptables met behulp van dit eenvoudige script

Ik heb enige tijd nagedacht over twee dingen over deze iptables: de meeste van degenen die naar deze tutorials zoeken zijn beginners en ten tweede zijn velen al op zoek naar iets vrij eenvoudigs en al uitgewerkt.

Dit voorbeeld is voor een webserver, maar u kunt gemakkelijk meer regels toevoegen en deze aanpassen aan uw behoeften.

Als je "x" ziet veranderen voor je ip's


#!/bin/bash

# We schonen iptables-tabellen -F iptables -X # We schonen NAT iptables -t nat -F iptables -t nat -X # mangle-tabel voor zaken als PPPoE, PPP en ATM iptables -t mangle -F iptables -t mangle -X # Beleid Ik denk dat dit de beste manier is voor beginners en # nog steeds niet slecht, ik zal output (output) allemaal uitleggen omdat het uitgaande verbindingen zijn #, input verwijderen we alles, en geen enkele server mag doorsturen. iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP #Intranet LAN intranet = eth0 #Extranet wan extranet = eth1 # Status behouden. Alles wat al is verbonden (tot stand gebracht) blijft als volgt: iptables -A INPUT -m state --state ESTABLISHED, RELATED -j ACCEPT # Loop device. iptables -A INPUT -i lo -j ACCEPT # http, https, we specificeren de interface niet omdat # we willen dat het allemaal iptables zijn -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp - dport 443 -j ACCEPT # ssh alleen intern en van dit bereik van ip's iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 7659 -j ACCEPT # monitoring bijvoorbeeld als ze zabbix of een andere snmp service iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 10050 -j ACCEPT # icmp, ping nou, het is aan jou iptables -A INPUT -p icmp -s 192.168.xx / 24 - i $ intranet -j ACCEPTEER #mysql met postgres is poort 5432 iptables -A INPUT -p tcp -s 192.168.xx --sport 3306 -i $ intranet -j ACCEPTEER #sendmail bueeeh als je wat mail wilt sturen # iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT # Anti-SPOOFING 09/07/2014 # SERVER_IP = "190.xxx" # server IP - de echte bleke ip van uw server LAN_RANGE = "192.168.xx / 21 "# LAN-bereik van uw netwerk of uw vlan # Ip's die nooit het extranet mogen betreden,is om een ​​beetje # logica te gebruiken als we een puur WAN-interface hebben, het zou nooit # LAN-type verkeer via die interface moeten invoeren SPOOF_IPS = "0.0.0.0/8 127.0.0.0/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0 .16 / XNUMX "# Standaardactie - uit te voeren wanneer een regel overeenkomt met ACTION =" DROP "# Pakketten met hetzelfde ip-adres van mijn server via de wan iptables -A INPUT -i $ extranet -s $ SERVER_IP -j $ ACTION # iptables -A OUTPUT -o $ extranet -s $ SERVER_IP -j $ ACTION # Pakketten met het LAN-bereik voor de wan, ik stel het zo voor het geval je een bepaald netwerk hebt, maar dit is overbodig met de volgende # regel erin the loop "for" iptables -A INPUT -i $ extranet -s $ LAN_RANGE -j $ ACTION iptables -A OUTPUT -o $ extranet -s $ LAN_RANGE -j $ ACTION ## Alle SPOOF-netwerken niet toegestaan ​​door wan voor ip in $ SPOOF_IPS do iptables -A INPUT -i $ extranet -s $ ip -j $ ACTION iptables -A OUTPUT -o $ extranet -s $ ip -j $ ACTION gedaan

Zoals altijd wacht ik op uw opmerkingen, blijf op de hoogte op deze blog, bedankt


De inhoud van het artikel voldoet aan onze principes van redactionele ethiek. Klik op om een ​​fout te melden hier.

12 reacties, laat de jouwe achter

Laat je reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

*

*

  1. Verantwoordelijk voor de gegevens: Miguel Ángel Gatón
  2. Doel van de gegevens: Controle SPAM, commentaarbeheer.
  3. Legitimatie: uw toestemming
  4. Mededeling van de gegevens: De gegevens worden niet aan derden meegedeeld, behalve op grond van wettelijke verplichting.
  5. Gegevensopslag: database gehost door Occentus Networks (EU)
  6. Rechten: u kunt uw gegevens op elk moment beperken, herstellen en verwijderen.

  1.   HO2Gi zei

    Het helpt me om een ​​beetje meer te leren dankzij gekopieerd.

    1.    BrodyDalle zei

      graag gedaan, graag van dienst

  2.   Xavier zei

    Het spijt me echt, maar ik heb twee vragen (en een geschenk regalo):

    Zou je aankomen met deze configuratie om Apache te laten draaien en de rest te sluiten behalve SSH?

    #Wij maken tafels schoon
    iptables-F
    iptables-X

    We maken NAT schoon

    iptables -t nat -F
    iptables -t nat -X

    iptables -A INPUT -p tcp –dport 80 -j ACCEPTEREN

    ssh alleen intern en vanuit deze reeks ip's

    iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet –dport 7659 -j ACCEPTEREN

    Tweede vraag: is 7659 de poort die in dit voorbeeld in SSH wordt gebruikt?

    En ten derde en laatste: in welk bestand moet deze configuratie worden opgeslagen?

    Heel erg bedankt voor de tutorial, het is jammer dat je zo'n nieuweling bent en er niet goed van kunt profiteren.

    1.    BrodyDalle zei

      dit is de regel die je nodig hebt voor http van apache
      iptables -A INPUT -p tcp –dport 80 -j ACCEPTEREN

      maar je moet ook het standaard drop-beleid aangeven (het staat in het script)
      iptables -P INPUT DROP
      iptables -P OUTPUT ACCEPT
      iptables -P VOORUIT DROP

      en dit omdat als je afgelegen bent, het je zal weggooien.
      iptables -A INPUT -m state –state GEVESTIGD, GERELATEERD -j ACCEPT

      als 7659 de poort is van die ssh in het voorbeeld, is dit standaard 22, hoewel ik je aanraden om te wijzigen naar een poort "niet goed bekend"
      Man, ik weet het niet, zoals je wilt ... firewall.sh en je plaatst het in rc.local (sh firewall.sh) zodat het automatisch draait, het hangt af van welk besturingssysteem je hebt, er zijn bestanden waar je de regels direct kunt plaatsen.

  3.   Jge zei

    Hé, je script is erg goed, je analyseert het… Weet je hoe ik alle verzoeken van mijn gebruikers aan een specifieke website kon weigeren?…. maar deze website heeft veel servers….

    1.    BrodyDalle zei

      Ik raad andere opties aan:
      1) U kunt een nepzone in uw dns maken ...
      2) U kunt een proxy plaatsen met acl
      zonde embargo
      Voor iptables kun je dit leuk vinden ... het is niet altijd de beste optie (er zijn meer manieren)
      iptables -A INPUT -s blog.desdelinux.ne -j DROP
      iptables -A UITGANG -d blog.fromlinux.net -j DROP

      Zeg me of het heeft gewerkt

  4.   Xavier zei

    Bedankt voor het antwoord, alles is opgelost. Ik vroeg naar de poort omdat ik verrast was om de 7659 te gebruiken, aangezien de privépoorten beginnen in de 49152, en het zou kunnen interfereren met een service of zoiets.
    Nogmaals bedankt voor alles, dat is fijn!

    Groeten.

  5.   sic zei

    BrodyDalle, hoe kan ik contact met je opnemen? Zeer interessant uw script.

  6.   Carlos zei

    Is de voorlaatste regel "iptables -A OUTPUT -o $ extranet -s $ ip -j $ ACTION" om te voorkomen dat je eigen machine spoofing? Of is het mogelijk dat een vergiftigd pakket binnenkomt en kan vertrekken met die vergiftigde bron en daarom is de regel ook opgenomen bij OUTPUT?
    Heel erg bedankt voor de opheldering !!!

  7.   fran zei

    dit is mijn eigen iptables-script, het is erg compleet:

    # franes.iptables.airoso
    # doc.iptables.airoso: iptables voor legacy en voor nft
    #
    # firewall-poorten
    ############################
    #! / Bin / bash
    #
    # maak het scherm leeg
    ############################# begin van /etc/f-iptables/default.cfg |||||
    duidelijk
    # laat een lege regel achter
    echo
    export yes = »» nee = »echo uit»
    # de variabelen die u kunt wijzigen om toegang toe te staan
    ###################### variabelen om te wijzigen met $ yes of $ no
    export hayexcepciones = »$ nee»
    # er zijn uitzonderingen: $ yes om uitzonderlijke hosts toe te staan ​​en $ no om uit te schakelen
    export hayping = »$ nee»
    # hayping: $ yes om pings naar derden toe te staan ​​en $ nee om te weigeren
    export haylogserver = »$ nee»
    # haylogeosserver: $ yes om tcp te kunnen loggen $ no om tcp niet te kunnen loggen
    ######
    ###################### variabelen om te wijzigen door «,» toe te voegen of met bereiken van «:»
    export uitzonderingen = »baldras.wesnoth.org»
    # uitzonderingen staan ​​enkele of meerdere hosts van firewall toe of geen waarde
    export logserver = negeren, ipp, dict, ssh
    # tcp-serverpoorten die worden gelogd wanneer pakketten binnenkomen
    export redserver = 0/0
    # redserver: het netwerk voor serverpoorten bij voorkeur lokaal netwerk of meerdere ips
    export client rood = 0/0
    #clientnet: het netwerk voor clientpoorten heeft de voorkeur boven alle netwerken
    export servidortcp = negeren, ipp, dict, 6771
    # servidortcp: de opgegeven tcp-serverpoorten
    export serverudp = negeren
    #udpserver: de opgegeven udp-serverpoorten
    export clientudp = domein, bootpc, bootps, ntp, 20000: 45000
    #udp client: de opgegeven udp-clientpoorten
    export clienttcp = domein, http, https, ipp, git, dict, 14999: 15002
    # tcp client: de opgegeven tcp client-poorten
    ############################# einde van /etc/f-iptables/default.cfg |||||
    ############################### einde van te wijzigen variabelen
    export firewall = $ 1 variabelen = $ 2
    if ["$ variables" = "$ NULL"]; bron dan /etc/f-iptables/default.cfg;
    anders bron / etc / f-iptables / $ 2; fi
    ############################## of overschrijft de variabelen met een .cfg-bestand
    ################################################## #########################################
    export firewall = $ 1 export variabelen = $ 2
    ########################################## automatische systeemvariabelen
    if ["$ firewall" = "verbinding verbroken"]; echo dan FIREWALL DISCONNECTED;
    export activateserver = »$ no» activateclient = »$ no» wet = »$ no»;
    elif ["$ firewall" = "client"]; echo dan FIREWALL CLIENT;
    export activateserver = »$ no» activateclient = »» wet = »$ no»;
    elif ["$ firewall" = "server"]; echo dan de FIREWALL SERVER;
    export activateserver = »» activateclient = »$ no» wet = »$ no»;
    elif ["$ firewall" = "client en server"]; echo dan FIREWALL CLIENT EN SERVER;
    export activeren server = »»; export activateclient = »»; export wet = »$ no»;
    elif ["$ firewall" = "toelaatbaar"]; echo dan PERMISSIVE FIREWALL;
    export activateserver = »$ no» activateclient = »$ no» wet = »»;
    anders
    $ check sudo echo iptables-legacy:
    $ check sudo iptables-legacy -v -L INPUT
    $ check sudo iptables-legacy -v -L OUTPUT
    $ check sudo echo iptables-nft:
    $ check sudo iptables-nft -v -L INPUT
    $ check sudo iptables-nft -v -L OUTPUT
    echo _____parameters____ $ 0 $ 1 $ 2
    echo "cast zonder parameters is om iptables weer te geven."
    echo "De eerste parameter (iptables inschakelen): verbroken of client of server of client en server of toegestaan."
    echo "De tweede parameter: (optioneel): het bestand default.cfg kiest /etc/f-iptables/default.cfg"
    echo "Variabele instellingen:" $ (ls / etc / f-iptables /)
    afrit 0; fi
    #################
    echo
    echo Gooit $ 0 losgekoppeld of client of server of client en server of tolerant of variabelen of zonder parameter te gebruiken om iptables weer te geven.
    echo Het $ 0-bestand bevat een aantal bewerkbare variabelen.
    ################################ de bovenstaande variabelen geactiveerd
    #################################
    echo instellen van de iptables-variabelen
    echo geactiveerde variabelen
    echo
    ########################### de iptables regels
    echo Instelling iptables-legacy
    sudo / usr / sbin / iptables-legacy -t filter -F
    sudo / usr / sbin / iptables-legacy -t nat -F
    sudo / usr / sbin / iptables-legacy -t mangle -F
    sudo / usr / sbin / ip6tables-legacy -t filter -F
    sudo / usr / sbin / ip6tables-legacy -t nat -F
    sudo / usr / sbin / ip6tables-legacy -t mangle -F
    sudo / usr / sbin / ip6tables-legacy -A INPUT -j DROP
    sudo / usr / sbin / ip6tables-legacy -A OUTPUT -j DROP
    sudo / usr / sbin / ip6tables-legacy -A FORWARD -j DROP
    sudo / usr / sbin / iptables-legacy -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPTEREN> / dev / null
    $ haylogserver sudo / usr / sbin / iptables-legacy -A INPUT -p tcp -m multiport -dports $ logserver -j LOG> / dev / null
    $ hayeexceptions sudo / usr / sbin / iptables-legacy -A INPUT -s $ uitzonderingen -j ACCEPT> / dev / null
    $ activeer server sudo / usr / sbin / iptables-legacy -A INPUT -p udp -m multiport –dports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activeer server sudo / usr / sbin / iptables-legacy -A INPUT -p tcp -m multiport –dports $ serverrtcp -s $ redserver -d $ redserver -j ACCEPTEREN> / dev / null
    $ activateclient sudo / usr / sbin / iptables-legacy -A INPUT -p udp -m multiport -sport $ clientudp -m state -state gevestigd -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-legacy -A INPUT -p tcp -m multiport -sports $ clienttcp -m state -state gevestigd -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ hayping sudo / usr / sbin / iptables-legacy -A INPUT -p icmp –icmp-type echo-reply -j ACCEPTEREN> / dev / null
    sudo / usr / sbin / iptables-legacy -A INPUT -j DROP> / dev / null
    sudo / usr / sbin / iptables-legacy -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPTEREN> / dev / null
    $ hayeexceptions sudo / usr / sbin / iptables-legacy -A OUTPUT -d $ uitzonderingen -j ACCEPT> / dev / null
    $ activeer server sudo / usr / sbin / iptables-legacy -A OUTPUT -p udp -m multiport -sports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activeer server sudo / usr / sbin / iptables-legacy -A OUTPUT -p tcp -m multiport –sports $ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-legacy -A OUTPUT -p udp -m multiport -dports $ clientudp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-legacy -A OUTPUT -p tcp -m multiport –dports $ clienttcp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ hayping sudo / usr / sbin / iptables-legacy -A OUTPUT -p icmp –icmp-type echo-request -j ACCEPT> / dev / null
    sudo / usr / sbin / iptables-legacy -A OUTPUT -j DROP
    sudo / usr / sbin / iptables-legacy -A FORWARD -j DROP
    echo iptables-legacy ingeschakeld
    echo
    echo Instelling iptables-nft
    sudo / usr / sbin / iptables-nft -t filter -F
    sudo / usr / sbin / iptables-nft -t nat -F
    sudo / usr / sbin / iptables-nft -t mangle -F
    sudo / usr / sbin / ip6tables-nft -t filter -F
    sudo / usr / sbin / ip6tables-nft -t nat -F
    sudo / usr / sbin / ip6tables-nft -t mangle -F
    sudo / usr / sbin / ip6tables-nft -A INPUT -j DROP
    sudo / usr / sbin / ip6tables-nft -A OUTPUT -j DROP
    sudo / usr / sbin / ip6tables-nft -A FORWARD -j DROP
    sudo / usr / sbin / iptables-nft -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPTEREN> / dev / null
    $ haylogserver sudo / usr / sbin / iptables-nft -A INPUT -p tcp -m multiport –dports $ logserver -j LOG> / dev / null
    $ hayeexceptions sudo / usr / sbin / iptables-nft -A INPUT -s $ uitzonderingen -j ACCEPTEREN> / dev / null
    $ activeer server sudo / usr / sbin / iptables-nft -A INPUT -p udp -m multiport –dports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activeer server sudo / usr / sbin / iptables-nft -A INPUT -p tcp -m multiport –dports $ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A INPUT -p udp -m multiport -sport $ clientudp -m state -state gevestigd -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A INPUT -p tcp -m multiport -sport $ clienttcp -m state -state gevestigd -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ hayping sudo / usr / sbin / iptables-nft -A INPUT -p icmp –icmp-type echo-reply -j ACCEPTEREN> / dev / null
    sudo / usr / sbin / iptables-nft -A INPUT -j DROP> / dev / null
    sudo / usr / sbin / iptables-nft -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPTEREN> / dev / null
    $ hayeexceptions sudo / usr / sbin / iptables-nft -A OUTPUT -d $ uitzonderingen -j ACCEPT> / dev / null
    $ activeer server sudo / usr / sbin / iptables-nft -A OUTPUT -p udp -m multiport -sports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activeer server sudo / usr / sbin / iptables-nft -A OUTPUT -p tcp -m multiport –sports $ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A OUTPUT -p udp -m multiport –dports $ clientudp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A OUTPUT -p tcp -m multiport –dports $ clienttcp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ hayping sudo / usr / sbin / iptables-nft -A OUTPUT -p icmp –icmp-type echo-request -j ACCEPT> / dev / null
    sudo / usr / sbin / iptables-nft -A OUTPUT -j DROP
    sudo / usr / sbin / iptables-nft -A FORWARD -j DROP
    echo iptables-nft ingeschakeld
    echo
    $ wet sudo / usr / sbin / iptables-legacy -F> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPTEREN> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A INPUT -m state –state gevestigd -j ACCEPT> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A INPUT -j DROP> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A OUTPUT -j ACCEPT> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A FORWARD -j DROP> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -F> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPTEREN> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A INPUT -m state –state gevestigd -j ACCEPT> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A INPUT -j DROP> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A OUTPUT -j ACCEPTEREN> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A FORWARD -j DROP> / dev / null
    ###########################
    echo dat je $ 0 $ 1 $ 2 hebt gegooid
    # verlaat het script
    verlaat 0

  8.   Luis Duran zei

    Hoe zou ik een regel instellen als deze firewall het voor mijn gateway gebruikte en een inktvis binnen het LAN had ???