Neko sam vrijeme razmišljao o dvjema stvarima o iptablesima: većina onih koji traže ove vodiče početnici su, a drugo, mnogi već traže nešto prilično jednostavno i već razrađeno.
Ovaj je primjer za web poslužitelj, ali lako možete dodati više pravila i prilagoditi ga svojim potrebama.
Kad vidite da se "x" mijenja za vaše ip-ove
#!/bin/bash
# Čistimo iptables tablice -F iptables -X # Čistimo NAT iptables -t nat -F iptables -t nat -X # mangle table za stvari poput PPPoE, PPP i ATM iptables -t mangle -F iptables -t mangle -X # Pravila Mislim da je ovo najbolji način za početnike i # još uvijek nije loše, objasnit ću izlaz sve jer su to odlazne veze #, unosom odbacujemo sve, a nijedan poslužitelj ne smije prosljeđivati. iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P NAPRIJED 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 to bude za 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 raspona ip-ovih iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 7659 -j ACCEPT # nadzor na primjer ako imaju zabbix ili neke druge snmp usluge iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 10050 -j PRIHVATI # icmp, ping dobro, na vama je iptables -A INPUT -p icmp -s 192.168. xx / 24 - i $ intranet -j ACCEPT #mysql s postgres je port 5432 iptables -A INPUT -p tcp -s 192.168.xx --sport 3306 -i $ intranet -j ACCEPT #sendmail bueeeh ako želite poslati neku poštu #iptables -A OUTPUT -p tcp --dport 25 -j PRIHVATITE # Anti-SPOOFING 09/07/2014 # SERVER_IP = "190.xxx" # IP poslužitelja - pravi wan ip vašeg servera LAN_RANGE = "192.168.xx / 21 "# LAN domet vaše mreže ili vašeg vlan # Ip-a koji nikada ne bi trebali ući u ekstranet,je koristiti malo logike ako imamo isključivo WAN sučelje, ono nikada ne bi trebalo unositi promet # LAN vrste kroz to sučelje 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 "# Zadana radnja - izvršava se kada se bilo koje pravilo podudara s ACTION =" DROP "# Paketi sa istim ip-om mog poslužitelja 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 petlja "za" iptables -A ULAZ -i $ ekstranet -i $ LAN_RANGE -j $ AKCIJA iptables -A IZLAZ -o $ ekstranet -i $ LAN_RANGE -j $ AKCIJA ## Sve SPOOF mreže nisu dopuštene wan-om za ip u $ SPOOF_IPS radi 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
Pomaže mi da nastavim učiti još malo hvala kopirano.
nema na čemu, drago mi je što smo vam od pomoći
Stvarno mi je žao, ali imam dva pitanja (i jedno na poklon 😉):
Biste li 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 raspona ip-ova
iptables -A ULAZ -p tcp -s 192.168.xx / 24 -i $ intranet -port 7659 -j PRIHVATI
Drugo pitanje: Je li 7659 port koji se koristi u SSH u ovom primjeru?
I treće i posljednje: u koju datoteku treba spremiti ovu konfiguraciju?
Puno vam hvala na tutorijalu, šteta je što ste takav newbie i ne možete ga dobro iskoristiti.
ovo je pravilo potrebno za http iz apachea
iptables -A ULAZ -p tcp –port 80 -j PRIHVATI
ali također trebate proglasiti zadane politike pada (to je u skripti)
iptables -P ULAZNA KAP
iptables -P IZLAZNI PRIHVAT
iptables -P NAPRIJED DROP
i to jer ako ste udaljeni, bacit će vas.
iptables -A ULAZ -m stanje -država USTANOVLJENA, POVEZANA -j PRIHVAĆA
ako je 7659 luka tog ssh-a u primjeru, prema zadanim je postavkama 22, iako preporučujem da promijenite u port "nije dobro poznat"
čovječe ne znam, kako želite ... firewall.sh i stavite ga u rc.local (sh firewall.sh) tako da se automatski pokreće, ovisi o tome koji operativni sustav imate, postoje datoteke u koje možete izravno staviti pravila.
Eii vrlo dobro, brate skriptu, analizirajući je ... Znate li kako bih mogao odbiti sve zahtjeve svojih korisnika na određeno web mjesto? ... ali ovo web mjesto ima puno poslužitelja….
Preporučujem druge mogućnosti:
1) Možete stvoriti lažnu zonu u svom dns-u ...
2) Možete postaviti proxy s acl
grijeh embargo
Za iptables možete ovo voljeti ... nije uvijek najbolja opcija (postoji više načina)
iptables -A INPUT -s blog.desdelinux.ne -j KAPLJITI
iptables -A IZLAZ -d blog.desdelinux.net -j KAP
Reci mi je li uspjelo
Hvala na odgovoru, sve se razbistrilo. Pitao sam za luku jer sam bio iznenađen korištenjem 7659, budući da privatne luke počinju na 49152, a mogao bi ometati neke usluge ili nešto slično.
Opet, hvala na svemu, to je lijepo!
Pozdrav.
BrodyDalle, kako mogu stupiti u kontakt s tobom? Vrlo zanimljiv vaš scenarij.
soulofmarionet_1@hotmail.com
Je li prije zadnjeg retka "iptables -A IZLAZ -o $ ekstranet -s $ ip -j $ AKCIJA" kako biste spriječili da vaš vlastiti stroj lažira? 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 !!!
ovo je moja vlastita skripta iptables, vrlo je kompletna:
# franes.iptables.airy
# doc.iptables.airoso: iptables za naslijeđene i za nft
#
# priključci vatrozida
#############################
#! / bin / bash
#
# očistite zaslon
################################ početak /etc/f-iptables/default.cfg |||||
jasno
# ostavite prazan redak
odjek
izvoz da = »» ne = »echo off»
# varijabli koje možete promijeniti da biste omogućili pristup
####################### varijable za izmjenu s $ yes ili $ no
izvoz hayexcepciones = »$ ne»
# postoje iznimke: $ yes da omogući iznimne hostove i $ no da onemogući
izvoz sijena = »$ ne»
# hayping: $ da dopustiti pingove treće strane, a $ ne zabraniti
izvoz haylogserver = »$ ne»
# haylogeosserver: $ yes da mogu prijaviti tcp $ ne da ne mogu prijaviti tcp
######
####################### varijable za izmjenu dodavanjem "," ili s rasponima od ":"
izuzeci za izvoz = »baldras.wesnoth.org»
# iznimke dopuštaju jedan ili više hostova iz vatrozida ili nemaju vrijednost
izvoz logserver = odbaci, ipp, dict, ssh
# priključci tcp poslužitelja koji se bilježe kad paketi uđu
izvozi redserver = 0/0
# redserver: mreža za poslužiteljske priključke 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 priključci tcp poslužitelja
izvoz serverudp = odbaci
#udpserver: navedeni priključci udp poslužitelja
izvoz clientudp = domena, bootpc, bootps, ntp, 20000: 45000
#udp klijent: navedeni priključci udp klijenta
izvoz clienttcp = domena, http, https, ipp, git, dict, 14999: 15002
# tcp klijent: navedeni priključci 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 datotekom .cfg
#################################################### ############################################
izvoz vatrozida = 1 USD varijable izvoza = 2 USD
############################################ automatske sistemske varijable
if ["$ firewall" = "disconnected"]; zatim jeka OTKAZAN ZIDOV;
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 activateserver = »» activateclient = »$ no» wet = »$ no»;
elif ["$ firewall" = "klijent i poslužitelj"]; zatim odjeknite KLIJENT I SERVER ZATVORNOG ZIDA;
izvoz aktiviraj poslužitelj = »»; izvoz activateclient = »»; izvoz mokri = »$ ne»;
elif ["$ firewall" = "permissive"]; zatim odjeknite DOZVOLJENI ZATVOR;
izvoz activateserver = »$ no» activateclient = »$ no» wet = »»;
drugo
$ check sudo echo iptables-legacy:
$ provjeri sudo iptables-legacy -v -L ULAZ
$ provjeri sudo iptables-legacy -v -L IZLAZ
$ check sudo echo iptables-nft:
$ provjeri sudo iptables-nft -v -L ULAZ
$ provjeri sudo iptables-nft -v -L IZLAZ
eho _____parametri____ $ 0 $ 1 $ 2
echo "cast bez parametara je na popisu iptables."
echo "Prvi parametar (omogućiti iptables): odspojen ili klijent ili poslužitelj ili klijent i poslužitelj ili dopušteno."
echo "Drugi parametar: (nije obavezno): 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 poslužitelj ili klijent i poslužitelj ili permisivne varijable ili bez upotrebe parametra za popis iptables.
echo $ 0 datoteka sadrži neke promjenjive varijable.
################################## gore aktivirane varijable
##################################
eho postavljanje varijabli iptables
eho aktivirane varijable
odjek
############################# pravila iptables
jeka 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 INPUT -j DROP
sudo / usr / sbin / ip6tables-legacy -A IZLAZ -j PAD
sudo / usr / sbin / ip6tables-legacy -A NAPRIJED -j PAD
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 $ iznimke -j PRIHVATITE> / dev / null
$ activate sudo server / usr / sbin / iptables-legacy -A INPUT -p udp -m multiport –dports $ serverudp -s $ redserver -d $ redserver -j PRIHVAĆAM> / dev / null
$ activate server sudo / usr / sbin / iptables-legacy -A INPUT -p tcp -m multiport –dports $ serverrtcp -s $ redserver -d $ redserver -j PRIHVATITE> / 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 $ iznimke -j PRIHVAĆAM> / dev / null
$ activate sudo server / usr / sbin / iptables-legacy -A IZLAZ -p udp -m multiport –sports $ serverudp -s $ redserver -d $ redserver -j PRIHVATI> / 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 PRIHVATITE> / 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 -A IZLAZ -j PAD
sudo / usr / sbin / iptables-legacy -NASPRED -J DROP
echo iptables-legacy omogućen
odjek
jeka 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 PAD
sudo / usr / sbin / ip6tables-nft -A IZLAZ -j PAD
sudo / usr / sbin / ip6tables-nft -A NAPRIJED -j PAD
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 $ iznimke -j PRIHVAĆAJ> / dev / null
$ activate server sudo / usr / sbin / iptables-nft -A INPUT -p udp -m multiport –dports $ serverudp -s $ redserver -d $ redserver -j PRIHVATITE> / dev / null
$ activate server sudo / usr / sbin / iptables-nft -A INPUT -p tcp -m multiport –dports $ serverrtcp -s $ redserver -d $ redserver -j PRIHVATI> / 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 INPUT -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 $ iznimke -j PRIHVATI> / 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 PRIHVATITE> / 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 PAD
sudo / usr / sbin / iptables-nft -APRIJED -J PAD
echo iptables-nft omogućen
odjek
$ mokro 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 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
$ mokro 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 -APRIJED -J DROP> / dev / null
############################
odjek ste bacili 0 $ 1 $ 2 $
# izlazi iz skripte
izlaz 0
Kako bih postavio pravilo da ga ovaj vatrozid koristi za moj pristupnik i da ima lignju unutar LAN-a ???