Stvorite svoj vlastiti vatrozid pomoću iptables koristeći ovu jednostavnu skriptu

Neko sam vrijeme razmišljao o dvjema stvarima o iptablesima: većina onih koji traže ove vodiče su početnici, a drugo, mnogi već traže nešto prilično jednostavno i već razrađeno.

Ovaj primjer je za web server, ali lako možete dodati više pravila i prilagoditi ga svojim potrebama.

Kada vidite da se x mijenja za vaše IP adrese


#!/bin/bash

# Čistimo iptables tablice -F iptables -X # Čistimo NAT iptables -t nat -F iptables -t nat -X # mangle tablicu za stvari poput PPPoE, PPP i ATM iptables -t mangle -F iptables -t mangle -X # Politike Mislim da je ovo najbolji način za početnike i # još uvijek nije loše, objasnit ću izlaz (izlaz) sve jer su to odlazne veze #, ulaz odbacujemo sve, a nijedan poslužitelj ne smije prosljeđivati. iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP #Intranet LAN intranet = eth0 #Extranet wan extranet = eth1 # Zadrži stanje. Sve što je već povezano (uspostavljeno) ostaje ovako: iptables -A INPUT -m state -state USTANOVLJENO, POVEZANO -j PRIHVAĆAJ # Loop uređaj. iptables -A INPUT -i lo -j PRIHVAĆAM # http, https, ne specificiramo sučelje jer # želimo da bude sve iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp - dport 443 -j ACCEPT # ssh samo interno i iz ovog opsega ip-ovih iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 7659 -j ACCEPT # praćenje, na primjer ako imaju zabbix ili neki drugi snmp service iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 10050 -j PRIHVATI # icmp, ping well to do you iptables -A INPUT -p icmp -s 192.168.xx / 24 - i $ intranet -j ACCEPT #mysql sa postgres je port 5432 iptables -A INPUT -p tcp -s 192.168.xx --sport 3306 -i $ intranet -j ACCEPT #sendmail bueeeh ako želite poslati poštu #iptables -A OUTPUT -p tcp --dport 25 -j PRIHVATITE # Anti-SPOOFING 09/07/2014 # SERVER_IP = "190.xxx" # IP servera - pravi wan ip vašeg servera LAN_RANGE = "192.168.xx / 21" # LAN opseg vaše mreže ili vašeg vlan # Ip-a koji nikada ne bi trebali ući u ekstranet,je da koristimo malo # logike ako imamo isključivo WAN sučelje, nikada ne bi trebalo unositi promet # LAN tipa kroz taj interfejs 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 "# Zadana radnja - izvršava se kada se neko pravilo podudara sa ACTION =" DROP "# Paketi sa istim ip-om mog servera kroz wan iptables -A INPUT -i $ extranet -s $ SERVER_IP -j $ ACTION # iptables -A OUTPUT -o $ extranet -s $ SERVER_IP -j $ ACTION # Paketi s LAN dometom za wan, stavim to ovako u slučaju da imate # bilo koju određenu mrežu, ali ovo je suvišno sa sljedećim # pravilom unutar petlje " za "iptables -A INPUT -i $ extranet -s $ LAN_RANGE -j $ ACTION iptables -A IZLAZ -o $ extranet -s $ LAN_RANGE -j $ ACTION ## Sve SPOOF mreže wan-u nije dozvoljeno da koriste ip u $ SPOOF_IPS do iptables -A INPUT -i $ extranet -s $ ip -j $ ACTION iptables -A IZLAZ -o $ extranet -s $ ip -j $ ACTION gotova

Kao i uvijek čekam vaše komentare, pratite ovaj blog, hvala


Sadržaj članka pridržava se naših principa urednička etika. Da biste prijavili grešku, kliknite ovdje.

12 komentara, ostavi svoj

Ostavite komentar

Vaša e-mail adresa neće biti objavljena. Obavezna polja su označena sa *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obavezi.
  5. Pohrana podataka: Baza podataka koju hostuje Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   HO2Gi rekao je

    Pomaže mi da nastavim učiti još malo hvala kopirano.

    1.    BrodyDalle rekao je

      nema na čemu, drago mi je što vam možemo pomoći

  2.   Javier rekao je

    Zaista mi je žao, ali imam dva pitanja (i jedno na poklon 😉):

    Da li biste stigli s ovom konfiguracijom da Apache pokrene i zatvori ostale osim SSH-a?

    # Čistimo stolove
    iptables -F
    iptables -X

    Čistimo NAT

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

    iptables -A ULAZ -p tcp –port 80 -j PRIHVATI

    ssh samo interno i iz ovog opsega ip-ova

    iptables -A ULAZ -p tcp -s 192.168.xx / 24 -i $ intranet –port 7659 -j PRIHVATI

    Drugo pitanje: Da li se 7659 port koristi u SSH u ovom primjeru?

    I treće i posljednje: u koju datoteku treba spremiti ovu konfiguraciju?

    Puno vam hvala na vodiču, šteta je što ste takav novak i ne možete ga dobro iskoristiti.

    1.    BrodyDalle rekao je

      ovo je pravilo koje vam treba za http iz apache-a
      iptables -A ULAZ -p tcp –port 80 -j PRIHVATI

      ali također trebate proglasiti zadane politike ispuštanja (to je u skripti)
      iptables -P INPUT DROP
      iptables -P IZLAZNI PRIHVAT
      iptables -P NAPRIJED DROP

      i to zato što ako ste udaljeni, bacit će vas.
      iptables -A ULAZ -m stanje -država USTANOVLJENA, POVEZANA -j PRIHVAĆA

      ako je 7659 port tog ssh-a u primjeru, po defaultu je 22, iako preporučujem da promijenite u port "nije dobro poznat"
      Čovječe, ne znam, kako hoćeš ... firewall.sh i postaviš ga u rc.local (sh firewall.sh) tako da se automatski pokreće, ovisi o tome koji operativni sistem imaš, postoje datoteke na kojima možete direktno postaviti pravila.

  3.   Jge rekao je

    Eii, jako dobro, brate skriptu, analizirajući je ... Znate li kako bih mogao odbiti sve zahtjeve svojih korisnika prema određenoj web stranici? ... ali ova web stranica ima puno servera….

    1.    BrodyDalle rekao je

      Preporučujem druge opcije:
      1) Možete stvoriti lažnu zonu u svom dns-u ...
      2) Možete postaviti proxy sa acl
      greh embargo
      Za iptables možete ovo voljeti ... nije uvijek najbolja opcija (postoji više načina)
      iptables -A INPUT -s blog.desdelinux.ne -j DROP
      iptables -A IZLAZ -d blog.fromlinux.net -j DROP

      Reci mi je li uspjelo

  4.   Javier rekao je

    Hvala na odgovoru, sve se razbistrilo. Pitao sam za luku jer sam bio iznenađen korištenjem 7659, jer privatni portovi počinju 49152, i mogao bi ometati neke usluge ili nešto slično.
    Opet, hvala na svemu, to je lijepo!

    Pozdrav.

  5.   Sic rekao je

    BrodyDalle, kako mogu stupiti u kontakt s tobom? Vrlo zanimljiv vaš scenarij.

  6.   Carlos rekao je

    Prethodni redak "iptables -A IZLAZ -o $ ekstranet -s $ ip -j $ AKCIJA" postoji da bi spriječio da se vaš računar prevara? Ili je moguće da neki otrovani paket uđe i može izaći s tim otrovanim izvorom i zato je pravilo također uključeno u IZLAZ?
    Puno hvala na pojašnjenju !!!

  7.   fran rekao je

    ovo je moja vlastita skripta iptables, vrlo je kompletna:

    # franes.iptables.airoso
    # doc.iptables.airoso: iptables za legacy i za nft
    #
    # priključci vatrozida
    #############################
    #! / bin / bash
    #
    # očistite ekran
    ################################ početak /etc/f-iptables/default.cfg |||||
    jasno
    # ostavite prazan red
    odjek
    izvoz da = »» ne = »echo off»
    # varijabli koje možete promijeniti kako biste omogućili pristup
    ####################### varijable koje treba modifikovati sa $ yes ili $ no
    izvoz hayexcepciones = »$ ne»
    # postoje izuzeci: $ yes za omogućavanje izuzetnih hostova i $ no za onemogućavanje
    izvoz sijena = »$ ne»
    # hayping: $ yes da dozvoli pingove treće strane, a $ ne da odbije
    izvoz haylogserver = »$ ne»
    # haylogeosserver: $ yes da mogu prijaviti tcp $ ne da ne mogu prijaviti tcp
    ######
    ###################### varijable koje treba modifikovati dodavanjem "," ili s opsezima ":"
    izuzeci za izvoz = »baldras.wesnoth.org»
    # iznimke dopuštaju pojedinačne ili višestruke hostove iz zaštitnog zida ili nemaju vrijednost
    izvoz logserver = odbaci, ipp, dict, ssh
    # tcp portovi servera koji se evidentiraju kada paketi uđu
    izvoz redserver = 0/0
    # redserver: mreža za poslužiteljske portove poželjna lokalna mreža ili nekoliko ips-a
    izvoz klijenta crveno = 0/0
    #clientnet: mreža za klijentske portove poželjnija od svih mreža
    izvoz servidortcp = odbaci, ipp, dict, 6771
    # servidortcp: navedeni portovi tcp poslužitelja
    izvoz serverudp = odbaci
    #udpserver: navedeni portovi udp servera
    izvoz clientudp = domena, bootpc, bootps, ntp, 20000: 45000
    #udp klijent: navedeni portovi udp klijenta
    izvoz clienttcp = domena, http, https, ipp, git, dict, 14999: 15002
    # tcp klijent: navedeni portovi tcp klijenta
    ############################### kraj /etc/f-iptables/default.cfg |||||
    ################################ kraj varijabli za izmjenu
    izvoz vatrozida = $ 1 varijable = $ 2
    if ["$ variables" = "$ NULL"]; zatim izvor /etc/f-iptables/default.cfg;
    else izvor / etc / f-iptables / $ 2; fi
    ################################ ili će prebrisati varijable sa .cfg datotekom
    #################################################### ############################################
    izvoz vatrozida = 1 USD varijable izvoza = 2 USD
    ########################################### automatske sistemske promenljive
    if ["$ firewall" = "disconnected"]; zatim odjek FIROWALL DISCONNECTED;
    izvoz activateserver = »$ no» activateclient = »$ no» wet = »$ no»;
    elif ["$ firewall" = "client"]; zatim eho KLIJENT ZATVORA;
    izvoz activateserver = »$ no» activateclient = »» wet = »$ no»;
    elif ["$ firewall" = "server"]; zatim odjekni SERVER ZATVORA;
    izvoz aktiviraj server = »» aktiviraj klijenta = »$ ne» mokro = »$ ne»;
    elif ["$ firewall" = "klijent i server"]; zatim odjeknite KLIJENT I SERVER ZATVORNOG ZIDA;
    izvoz aktiviraj server = »»; izvoz activateclient = »»; izvoz mokri = »$ ne»;
    elif ["$ firewall" = "dozvoljeno"]; zatim odjekne DOZVOLJENI ZATVOR;
    izvoz activateserver = »$ no» activateclient = »$ no» mokro = »»;
    drugo
    $ check sudo echo iptables-legacy:
    $ check sudo iptables-legacy -v -L INPUT
    $ check sudo iptables-legacy -v -L IZLAZ
    $ check sudo echo iptables-nft:
    $ check sudo iptables-nft -v -L ULAZ
    $ check sudo iptables-nft -v -L IZLAZ
    eho _____parametri____ $ 0 $ 1 $ 2
    echo "cast bez parametara je na popisu iptables."
    echo "Prvi parametar (omogući iptables): odspojen ili klijent ili server ili klijent i server ili permisivni."
    echo "Drugi parametar: (neobavezno): zadana .cfg datoteka odabire /etc/f-iptables/default.cfg"
    echo "Postavke varijable:" $ (ls / etc / f-iptables /)
    izlaz 0; fi
    #################
    odjek
    echo Baci 0 $ isključeno ili klijent ili server ili klijent i server ili permisivne varijable ili bez korištenja parametra za popis iptables.
    echo $ 0 datoteka sadrži neke promjenjive varijable.
    ################################## gore navedene varijable su aktivirane
    #################################
    echo postavljanje varijabli iptables
    eho aktivirane varijable
    odjek
    ############################# pravila iptables
    echo Postavljanje 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 ULAZ -j DROP
    sudo / usr / sbin / ip6tables-legacy -A IZLAZ -j DROP
    sudo / usr / sbin / ip6tables-legacy -NASPRED -j DROP
    sudo / usr / sbin / iptables-legacy -A ULAZI -s 127.0.0.1 -d 127.0.0.1 -j PRIHVATI> / 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 ULAZI -s $ izuzeci -j PRIHVATITE> / dev / null
    $ activate sudo server / 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 ULAZ -p udp -m multiport –sports $ clientudp -m stanje -država uspostavljena -s $ clientnet -d $ clientnet -j PRIHVATI> / dev / null
    $ activateclient sudo / usr / sbin / iptables-legacy -A ULAZ -p tcp -m multiport –sports $ clienttcp -m stanje –država uspostavljena -s $ clientnet -d $ clientnet -j PRIHVATI> / dev / null
    $ hayping sudo / usr / sbin / iptables-legacy -A INPUT -p icmp –icmp-type echo-reply -j PRIHVATI> / dev / null
    sudo / usr / sbin / iptables-legacy -A INPUT -j DROP> / dev / null
    sudo / usr / sbin / iptables-legacy -A IZLAZ -s 127.0.0.1 -d 127.0.0.1 -j PRIHVATI> / dev / null
    $ hayeexceptions sudo / usr / sbin / iptables-legacy -A IZLAZ -d $ izuzeci -j PRIHVATITE> / dev / null
    $ activate sudo server / usr / sbin / iptables-legacy -A IZLAZ -p udp -m multiport –sports $ serverudp -s $ redserver -d $ redserver -j PRIHVATITE> / dev / null
    $ activate server sudo / usr / sbin / iptables-legacy -A IZLAZ -p tcp -m multiport –sports $ serverrtcp -s $ redserver -d $ redserver -j PRIHVATI> / dev / null
    $ activateclient sudo / usr / sbin / iptables-legacy -A IZLAZ -p udp -m multiport –dports $ clientudp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-legacy -A IZLAZ -p tcp -m multiport –dports $ clienttcp -s $ clientnet -d $ clientnet -j PRIHVATI> / dev / null
    $ hayping sudo / usr / sbin / iptables-legacy -A IZLAZ -p icmp –icmp-type echo-request -j PRIHVATI> / dev / null
    sudo / usr / sbin / iptables-legacy -IZLAZ -j DROP
    sudo / usr / sbin / iptables-legacy -NASPRED -J DROP
    echo iptables-legacy omogućen
    odjek
    echo Postavljanje 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 ULAZ -j DROP
    sudo / usr / sbin / ip6tables-nft -A IZLAZ -j DROP
    sudo / usr / sbin / ip6tables-nft -NASPRED -J DROP
    sudo / usr / sbin / iptables-nft -A ULAZI -s 127.0.0.1 -d 127.0.0.1 -j PRIHVATI> / dev / null
    $ haylogserver sudo / usr / sbin / iptables-nft -A ULAZ -p tcp -m multiport –dports $ logserver -j LOG> / dev / null
    $ hayeexceptions sudo / usr / sbin / iptables-nft -A ULAZI -s $ izuzeci -j PRIHVATITE> / 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 ULAZ -p udp -m multiport –sports $ clientudp -m stanje -država uspostavljena -s $ clientnet -d $ clientnet -j PRIHVATI> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A ULAZ -p tcp -m multiport –sports $ clienttcp -m stanje –država uspostavljena -s $ clientnet -d $ clientnet -j PRIHVATI> / dev / null
    $ hayping sudo / usr / sbin / iptables-nft -A INPUT -p icmp –icmp-type echo-reply -j PRIHVATI> / dev / null
    sudo / usr / sbin / iptables-nft -A ULAZ -j DROP> / dev / null
    sudo / usr / sbin / iptables-nft -A IZLAZ -s 127.0.0.1 -d 127.0.0.1 -j PRIHVATI> / dev / null
    $ hayeexceptions sudo / usr / sbin / iptables-nft -A IZLAZ -d $ izuzeci -j PRIHVAĆAJ> / dev / null
    $ activate server sudo / usr / sbin / iptables-nft -A IZLAZ -p udp -m multiport –sports $ serverudp -s $ redserver -d $ redserver -j PRIHVATI> / dev / null
    $ activate server sudo / usr / sbin / iptables-nft -A IZLAZ -p tcp -m multiport –sports $ serverrtcp -s $ redserver -d $ redserver -j PRIHVATI> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A IZLAZ -p udp -m multiport –dports $ clientudp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A IZLAZ -p tcp -m multiport –dports $ clienttcp -s $ clientnet -d $ clientnet -j PRIHVATI> / dev / null
    $ hayping sudo / usr / sbin / iptables-nft -A IZLAZ -p icmp –icmp-type echo-request -j PRIHVATI> / dev / null
    sudo / usr / sbin / iptables-nft -A IZLAZ -j DROP
    sudo / usr / sbin / iptables-nft -NASPRED -J DROP
    echo iptables-nft omogućen
    odjek
    $ wet sudo / usr / sbin / iptables-legacy -F> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A ULAZI -s 127.0.0.1 -d 127.0.0.1 -j PRIHVATI> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A INPUT -m stanje -država uspostavljena -j PRIHVATI> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A INPUT -j DROP> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A IZLAZ -j PRIHVATI> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -NASPRED -j DROP> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -F> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A ULAZI -s 127.0.0.1 -d 127.0.0.1 -j PRIHVATI> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A ULAZ -m stanje -država uspostavljena -j PRIHVATI> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A INPUT -j DROP> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A IZLAZ -j PRIHVATI> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A NAPRED -j DROP> / dev / null
    ############################
    jeka ste bacili 0 $ 1 $ 2 $
    # izlazi iz skripte
    izlaz 0

  8.   Luis Duran rekao je

    Kako bih postavio pravilo ako ga ovaj zaštitni zid koristi za moj pristupnik i ima lignju unutar LAN-a ???