S tem preprostim skriptom ustvarite svoj požarni zid z iptables

Nekaj ​​časa sem razmišljal o dveh stvareh glede te možnosti: večina tistih, ki iščejo te vaje, je začetnikov, drugič, mnogi že iščejo nekaj dokaj preprostega in že dodelanega.

Ta primer je za spletni strežnik, vendar lahko preprosto dodate več pravil in ga prilagodite svojim potrebam.

Ko vidite, da se za vaše ip-je spremeni "x"


#!/bin/bash

# Očistimo tabele iptables -F iptables -X # Očistimo NAT iptables -t nat -F iptables -t nat -X # tabela mangle za stvari, kot so PPPoE, PPP in ATM iptables -t mangle -F iptables -t mangle -X # Politike Mislim, da je to najboljši način za začetnike in # še vedno ni slabo, razložil bom izhod (izhod) vse, ker gre za odhodne povezave #, vhod zavržemo in noben strežnik ne bi smel naprej. iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P NAPREJ DOP #Intranet LAN intranet = eth0 #Extranet wan extranet = eth1 # Ohrani stanje. Vse, kar je že povezano (vzpostavljeno), ostane tako: iptables -A INPUT -m state -state VZPOSTAVLJENO, POVEZANO -j ACCEPT # Loop device. iptables -A INPUT -i lo -j ACCEPT # http, https, ne določimo vmesnika, ker # želimo, da so vsi iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp - dport 443 -j ACCEPT # ssh samo interno in iz tega obsega ip-ovih iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 7659 -j ACCEPT # spremljanje na primer, če imajo zabbix oz. nekatere druge snmp storitve iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 10050 -j SPREJEM # icmp, ping dobro je odvisno od vas iptables -A INPUT -p icmp -s 192.168.xx / 24 - i $ intranet -j ACCEPT #mysql z postgres je vrata 5432 iptables -A INPUT -p tcp -s 192.168.xx --sport 3306 -i $ intranet -j ACCEPT #sendmail bueeeh, če želite poslati nekaj pošte # iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT # Anti-SPOOFING 09/07/2014 # SERVER_IP = "190.xxx" # IP strežnika - pravi wan ip vašega strežnika LAN_RANGE = "192.168.xx / 21 "# Območje LAN vašega omrežja ali vašega vlan # Ip-ja, ki nikoli ne smejo vstopiti v ekstranet,je uporabiti malo logike, če imamo izključno vmesnik WAN, nikoli ne sme vnašati prometa # tipa LAN prek tega vmesnika 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 "# Privzeto dejanje - izvedljivo, ko se katero koli pravilo ujema z ACTION =" DROP "# Paketi z istim ip-om mojega strežnika prek wan iptables -A INPUT -i $ extranet -s $ SERVER_IP -j $ ACTION # iptables -A OUTPUT -o $ extranet -s $ SERVER_IP -j $ ACTION # Paketi z območjem LAN za wan, postavim tako, če imate # katero koli določeno omrežje, vendar je to odvečno z naslednjim # pravilom znotraj zanka "za" iptables -A INPUT -i $ extranet -s $ LAN_RANGE -j $ ACTION iptables -A IZHOD -o $ extranet -s $ LAN_RANGE -j $ ACTION ## Vse mreže SPOOF wan ne dovoli za ip in $ SPOOF_IPS naredi iptables -A INPUT -i $ extranet -s $ ip -j $ ACTION iptables -A IZHOD -o $ extranet -s $ ip -j $ ACTION done

Kot vedno čakam na vaše komentarje, spremljajte ta blog, hvala


12 komentarja, pustite svojega

Pustite svoj komentar

Vaš e-naslov ne bo objavljen. Obvezna polja so označena z *

*

*

  1. Za podatke odgovoren: Miguel Ángel Gatón
  2. Namen podatkov: Nadzor neželene pošte, upravljanje komentarjev.
  3. Legitimacija: Vaše soglasje
  4. Sporočanje podatkov: Podatki se ne bodo posredovali tretjim osebam, razen po zakonski obveznosti.
  5. Shranjevanje podatkov: Zbirka podatkov, ki jo gosti Occentus Networks (EU)
  6. Pravice: Kadar koli lahko omejite, obnovite in izbrišete svoje podatke.

  1.   HO2Gi je dejal

    Pomaga mi, da se še naprej učim malo več zahvaljujoč kopirani.

    1.    brodydalle je dejal

      vabljeni, veseli, da vam lahko pomagamo

  2.   Xavier je dejal

    Resnično mi je žal, ampak imam dve vprašanji (in darilo 😉):

    Bi prispeli s to konfiguracijo, da bi Apache zagnal in zaprl ostale, razen SSH?

    # Očistimo mize
    iptables-F
    iptables-X

    Očistimo NAT

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

    iptables -A INPUT -p tcp -dport 80 -j ACCEPT

    ssh samo interno in iz tega obsega ip-jev

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

    Drugo vprašanje: Ali je v tem primeru 7659 vrata, ki se uporabljajo v SSH?

    In tretji in zadnji: v katero datoteko naj se shrani ta konfiguracija?

    Najlepša hvala za vadnico, sramota je, da ste tako novinec in tega ne morete dobro izkoristiti.

    1.    brodydalle je dejal

      to je pravilo, ki ga potrebujete za http iz apache
      iptables -A INPUT -p tcp -dport 80 -j ACCEPT

      vendar morate razglasiti tudi privzete politike padca (to je v skriptu)
      iptables -P INPUT DROP
      iptables -P OUTPUT ACCEPT
      iptables -P NAPREJ PAD

      in to zato, ker če ste oddaljeni, vas bo vrgel stran.
      iptables -A INPUT -m stanje-stanje UGOTAVLJENO, POVEZANO -j ACCEPT

      če je 7659 vrata tega ssh v primeru, je privzeto 22, čeprav priporočam, da spremenite v vrata "ni dobro znano"
      človek, ne vem, kot hočeš ... firewall.sh in ga postaviš v rc.local (sh firewall.sh), da se samodejno zažene, odvisno od tega, kateri operacijski sistem imaš, so datoteke lahko postavite pravila neposredno.

  3.   jge je dejal

    Eii zelo dober bratek vaš skript, analizirajte ga ... Ali veste, kako bi lahko zavrnil vse zahteve svojih uporabnikov na določeno spletno mesto? ... vendar ima to spletno mesto veliko strežnikov….

    1.    brodydalle je dejal

      Priporočam druge možnosti:
      1) V dns-u lahko ustvarite ponarejeno območje ...
      2) Proxy lahko postavite z acl
      vendar
      Za iptable vam je to lahko všeč ... ni vedno najboljša možnost (obstaja več načinov)
      iptables -A INPUT -s blog.desdelinux.ne -j KAPLJITI
      iptables -A IZHOD -d blog.desdelinux.net -j DROP

      Povej mi, če je uspelo

  4.   Xavier je dejal

    Hvala za odgovor, vse se je razjasnilo. Spraševal sem o pristanišču, ker sem bil presenečen nad uporabo 7659, saj se zasebna vrata začnejo pri 49152 in bi lahko motila kakšno storitev ali kaj podobnega.
    Še enkrat hvala za vse, to je lepo!

    Lep pozdrav.

  5.   sic je dejal

    BrodyDalle, kako lahko stopim v stik z vami? Zelo zanimiv vaš scenarij.

  6.   Carlos je dejal

    Pred zadnjo vrstico "iptables -A OUTPUT -o $ extranet -s $ ip -j $ ACTION" je preprečiti, da bi se vaš računalnik prevaral? Ali pa je mogoče, da kakšen zastrupljen paket vstopi in lahko odide s tem zastrupljenim virom in je zato pravilo vključeno tudi v IZHOD?
    Najlepša hvala za pojasnilo !!!

  7.   Fran je dejal

    to je moj lastni skript iptables, je zelo popoln:

    # franes.iptables.airy
    # doc.iptables.airoso: iptables za zapuščino in za nft
    #
    # vrata požarnega zidu
    #############################
    #! / Bin / bash
    #
    # počistite zaslon
    ################################ začetek /etc/f-iptables/default.cfg |||||
    jasno
    # pustite prazno vrstico
    echo
    izvoz da = »» ne = »odmev»
    # spremenljivke, ki jih lahko spremenite, da omogočite dostop
    ####################### spremenljivke za spreminjanje z $ yes ali $ no
    izvoz hayexcepciones = »$ ne»
    # obstajajo izjeme: $ yes, da omogočite izjemne gostitelje, in $ ne, da onemogočite
    izvoz sena = »$ ne»
    # hayping: $ yes, da dovoli ping tretjih oseb in $ ne, da zavrne
    izvoz haylogserver = »$ ne»
    # haylogeosserver: $ da za prijavo tcp $ ne za prijavo tcp
    ######
    ####################### spremenljivke za spreminjanje dodajanja "," ali z obsegi ":"
    izjeme pri izvozu = »baldras.wesnoth.org»
    # izjem omogoča en ali več gostiteljev iz požarnega zidu ali brez vrednosti
    izvoz logserver = zavrzi, ipp, dict, ssh
    # vrata strežnika tcp, ki se zabeležijo, ko pridejo paketi
    izvoz redserver = 0/0
    # redserver: omrežje za strežniška vrata je zaželeno lokalno omrežje ali več ips
    izvozi odjemalca rdeče = 0/0
    # clientnet: omrežje za odjemalska vrata je zaželeno za vsa omrežja
    izvoz servidortcp = zavrzi, ipp, dict, 6771
    # servidortcp: določena vrata strežnika tcp
    izvoz serverudp = zavrzi
    #udpserver: določena vrata strežnika udp
    izvoz clientudp = domena, bootpc, bootps, ntp, 20000: 45000
    #udp odjemalec: določena vrata odjemalca udp
    izvoz clienttcp = domena, http, https, ipp, git, dict, 14999: 15002
    # tcp odjemalec: določena vrata odjemalca tcp
    ############################## konec /etc/f-iptables/default.cfg |||||
    ################################# konec spremenljivk za spreminjanje
    izvoz požarnega zidu = $ 1 spremenljivke = $ 2
    if ["$ variables" = "$ NULL"]; nato vir /etc/f-iptables/default.cfg;
    else source / etc / f-iptables / $ 2; fi
    ################################# ali pa boste spremenljivke prepisali z datoteko .cfg
    #################################################### ############################################
    izvoz požarnega zidu = $ 1 izvozne spremenljivke = $ 2
    ############################################ samodejne sistemske spremenljivke
    če je ["$ požarni zid" = "odklopljen"]; nato odmev FIREWALL DISCONNECTED;
    izvoz activateserver = »$ no» activateclient = »$ no» mokro = »$ ne»;
    elif ["$ firewall" = "client"]; nato echo FIREWALL CLIENT;
    izvoz activateserver = »$ no» activateclient = »» mokro = »$ ne»;
    elif ["$ firewall" = "server"]; nato odzvanja strežnik FIREWALL;
    izvoz activateserver = »» activateclient = »$ no» mokro = »$ ne»;
    elif ["$ firewall" = "odjemalec in strežnik"]; nato odmeva NAROČNIK IN STORITEV ZA POŽARNI ZID;
    izvoz aktiviraj strežnik = »»; izvoz activateclient = »»; izvoz mokri = »$ ne«;
    elif ["$ firewall" = "permissive"]; potem odmeva DOVOLJUJOČI ZARADI;
    izvoz activateserver = »$ no» activateclient = »$ no» mokro = »»;
    ostalo
    $ check sudo echo iptables-legacy:
    $ check sudo iptables-legacy -v -L INPUT
    $ check sudo iptables-legacy -v -L IZHOD
    $ check sudo echo iptables-nft:
    $ check sudo iptables-nft -v -L INPUT
    $ check sudo iptables-nft -v -L IZHOD
    echo _____parametri____ $ 0 $ 1 $ 2
    echo "oddaja brez parametrov je seznam iptables."
    echo "Prvi parameter (omogoči iptables): odklopljen ali odjemalec ali strežnik ali odjemalec in strežnik ali dovoljen."
    echo "Drugi parameter: (neobvezno): privzeta datoteka .cfg izbere /etc/f-iptables/default.cfg"
    echo "Spremenljive nastavitve:" $ (ls / etc / f-iptables /)
    izhod 0; fi
    #################
    echo
    echo Vrže $ 0 prekinjenega ali odjemalca ali strežnika ali odjemalca in strežnika ali dovoljene ali spremenljivke ali brez uporabe parametra za seznam iptables.
    echo Datoteka $ 0 vsebuje nekaj spremenljivk, ki jih je mogoče urejati.
    ################################## zgoraj aktivirane spremenljivke
    ###################################
    echo nastavitev spremenljivk iptables
    echo aktivirane spremenljivke
    echo
    ############################# pravila iptables
    echo Nastavitev 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 -SPRED -J PAD
    sudo / usr / sbin / iptables-legacy -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / 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 $ exceptions -j ACCEPT> / dev / null
    $ activate server sudo / usr / sbin / iptables-legacy -A INPUT -p udp -m multiport –dports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activate server sudo / usr / sbin / iptables-legacy -A INPUT -p tcp -m multiport –dports $ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-legacy -A INPUT -p udp -m multiport –sports $ clientudp -m state -state -state -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 -state -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ hayping sudo / usr / sbin / iptables-legacy -A INPUT -p icmp –icmp-type echo-reply -j ACCEPT> / dev / null
    sudo / usr / sbin / iptables-legacy -A INPUT -j DROP> / dev / null
    sudo / usr / sbin / iptables-legacy -A IZHOD -s 127.0.0.1 -d 127.0.0.1 -j SPREJEM> / dev / null
    $ hayexceptions sudo / usr / sbin / iptables-legacy -A IZHOD -d $ izjeme -j ACCEPT> / dev / null
    $ activate sudo server / usr / sbin / iptables-legacy -A IZHOD -p udp -m multiport –sports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activate server sudo / usr / sbin / iptables-legacy -A IZHOD -p tcp -m multiport –sports $ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-legacy -A IZHOD -p udp -m multiport –dports $ clientudp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-legacy -A IZHOD -p tcp -m multiport –dports $ clienttcp -s $ clientnet -d $ clientnet -j SPREJEM> / dev / null
    $ hayping sudo / usr / sbin / iptables-legacy -A IZHOD -p icmp –icmp-type echo-request -j ACCEPT> / dev / null
    sudo / usr / sbin / iptables-legacy -A OUTPUT -j DROP
    sudo / usr / sbin / iptables-legacy -SPRED -J PAD
    echo iptables-legacy omogočen
    echo
    echo Nastavitev 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 IZHOD -j PAD
    sudo / usr / sbin / ip6tables-nft -A NAPREJ -j PAD
    sudo / usr / sbin / iptables-nft -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / 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 $ exceptions -j ACCEPT> / dev / null
    $ activate server sudo / usr / sbin / iptables-nft -A INPUT -p udp -m multiport –dports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activate 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 –sports $ clientudp -m state -state -state -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A INPUT -p tcp -m multiport –sports $ clienttcp -m state -state -state -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ hayping sudo / usr / sbin / iptables-nft -A INPUT -p icmp –icmp-type echo-reply -j ACCEPT> / dev / null
    sudo / usr / sbin / iptables-nft -A INPUT -j DROP> / dev / null
    sudo / usr / sbin / iptables-nft -A IZHOD -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
    $ hayeexceptions sudo / usr / sbin / iptables-nft -A IZHOD -d $ izjeme -j ACCEPT> / dev / null
    $ activate server sudo / usr / sbin / iptables-nft -A IZHOD -p udp -m multiport –sports $ serverudp -s $ redserver -d $ redserver -j SPREJEM> / dev / null
    $ activate server sudo / usr / sbin / iptables-nft -A IZHOD -p tcp -m multiport –sports $ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A IZHOD -p udp -m multiport –dports $ clientudp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A IZHOD -p tcp -m multiport –dports $ clienttcp -s $ clientnet -d $ clientnet -j SPREJEM> / dev / null
    $ hayping sudo / usr / sbin / iptables-nft -A IZHOD -p icmp –icmp-type echo-request -j ACCEPT> / dev / null
    sudo / usr / sbin / iptables-nft -A IZHOD -j PAD
    sudo / usr / sbin / iptables-nft -SPRED -J PAD
    echo iptables-nft omogočen
    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 ACCEPT> / dev / null
    $ mokro sudo / usr / sbin / iptables-legacy -A INPUT -m stanje -država vzpostavljena -j SPREJEM> / 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 NAPREJ -j DROP> / dev / null
    $ mokro 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 ACCEPT> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A INPUT -m stanje –država vzpostavljena -j SPREJEM> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A INPUT -j DROP> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A IZHOD -j SPREJEM> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A NAPREJ -j PAD> / dev / null
    ############################
    echo ste vrgli $ 0 $ 1 $ 2
    # zapusti skript
    izhod 0

  8.   louis duran je dejal

    Kako bi postavil pravilo, če bi ga ta požarni zid uporabljal za moj prehod in imel v LAN-u lignje ???