Proveo sam neko vrijeme razmišljajući o dvije stvari u vezi sa ovom iptables stvari: većina onih koji traže ove tutorijale su početnici i 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 još pravila i prilagoditi ih svojim potrebama.
Kada vidite "x" promijenite svoje IP adrese
#!/bin/bash
#Čistimo iptables tablice -F iptables -X # Čistimo NAT iptables -t nat -F iptables -t nat -X # mangle tablicu za stvari kao što su PPPoE, PPP i ATM iptables -t mangle -F iptables -t mangle -X # Politika Mislim da je ovo najbolji način za početnike i # i dalje nije loš, objašnjavam sve izlazne veze jer su to # odlazne konekcije, unos odbacujemo sve, i nijedan server ne bi trebao raditi naprijed. iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P PROSLJEDITI DROP #Intranet LAN intranet=eth0 #Extranet wan extranet=eth1 # Zadrži stanje. Sve što je već povezano (uspostavljeno) ostavlja se ovako: iptables -A INPUT -m stanje --state ESTABLISHED,RELATED -j ACCEPT # Loop uređaj. iptables -A INPUT -i lo -j PRIHVATI # http, https, ne specificiramo interfejs jer # želimo da bude za sve iptables -A INPUT -p tcp --dport 80 -j PRIHVATI iptables -A INPUT -p tcp -- dport 443 -j PRIHVATI # ssh samo interno i iz ovog opsega iptables IP-a -A INPUT -p tcp -s 192.168.xx/24 -i $intranet --dport 7659 -j PRIHVATI # nadgledanje na primjer ako imaju zabbix ili nešto drugo snmp servis iptables -A INPUT -p tcp -s 192.168.xx/24 -i $intranet --dport 10050 -j PRIHVATI # icmp, ping pa to je tvoja odluka iptables -A INPUT -p icmp -s 192.168. xx/24 - i $intranet -j PRIHVATI #mysql sa postgres je port 5432 iptables -A INPUT -p tcp -s 192.168.xx --sport 3306 -i $intranet -j PRIHVATI #sendmail bueeeh ako želite poslati neku poštu #iptables -A OUTPUT -p tcp --dport 25 -j PRIHVATI #Anti-SPOOFING 09. # SERVER_IP="07.xxx" # IP servera - pravi wan IP vašeg servera LAN_RANGE="2014.xx/ 190" # LAN opseg vaše mreže ili vaše vlan # IP adrese koje nikada ne bi trebale ulaziti preko ekstraneta, treba koristiti malo # logike ako imamo čisto WAN sučelje nikada ne bi trebalo ulaziti u promet # LAN tipa preko tog interfejsa SPOOF_IPS=" 192.168/21 0.0.0.0/8 127.0.0.0/8 10.0.0.0/8 172.16.0.0/12" # Podrazumevana radnja - koja će se izvršiti kada uskladim bilo koje pravilo ACTION="DROP" # Paketi sa istim IP-om mog servera za wan iptables -A INPUT -i $extranet -s $SERVER_IP -j $ACTION #iptables -A OUTPUT -o $extranet -s $SERVER_IP -j $ACTION # Paketi sa LAN opsegom kroz wan, ja postavite to ovako u slučaju da imate # određenu mrežu, ali ovo je suvišno sa sljedećim # pravilom unutar "for" petlje iptables -A INPUT -i $extranet -s $LAN_RANGE -j $ACTION iptables -A IZLAZ -o $extranet -s $LAN_RANGE -j $ACTION ## Sve SPOOF mreže nisu dozvoljene od strane wan za ip u $SPOOF_IPS rade iptables -A INPUT -i $extranet -s $ip -j $ACTION iptables -A OUTPUT -o $extranet -s $ip -j $ AKCIJA obavljena
Kao i uvijek, radujem se vašim komentarima, ostanite sa nama na ovom blogu, hvala
Pomaže mi da nastavim da učim još malo, hvala kopirano.
Nema na čemu, drago mi je da sam od pomoći.
Jako mi je žao, ali imam dva pitanja (i jedno na poklon 😉):
Da li bi ova konfiguracija bila dovoljna da pokrene Apache i zatvori sve ostalo osim SSH?
#Č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 IP raspona
iptables -A INPUT -p tcp -s 192.168.xx/24 -i $intranet –dport 7659 -j PRIHVATI
Drugo pitanje: Da li se 7659 port koristi u SSH-u u ovom primjeru?
I treće i posljednje: u koji fajl treba sačuvati ovu konfiguraciju?
Hvala vam puno na tutorijalu, šteta što sam tako novajlija i ne mogu to iskoristiti.
ovo je pravilo koje vam je potrebno za apache http
iptables -A ULAZ -p tcp –port 80 -j PRIHVATI
ali također morate deklarirati zadane politike ispuštanja (to je u skripti)
iptables -P INPUT DROP
iptables -P IZLAZ PRIHVAT
iptables -P NAPRIJED DROP
A to je zato što ako ste udaljeni, to će vas odbaciti.
iptables -A ULAZ -m stanje –stanje UTVRĐENO, POVEZANO -j PRIHVATI
Ako je 7659 port tog ssh-a u primjeru, po defaultu je 22, iako preporučujem promjenu na "nepoznati" port
Čovječe ne znam šta hoćeš... firewall.sh i stavi u rc.local (sh firewall.sh) da radi automatski, zavisi koji operativni sistem imaš, ima fajlova gdje si može direktno postaviti pravila.
Hej brate, tvoja skripta je jako dobra, analiziraš je….znaš li kako bih mogao odbiti sve zahtjeve svojih korisnika prema određenoj web stranici?…. ali ova web stranica ima mnogo servera...
Preporučujem druge opcije:
1) Možete kreirati lažnu zonu u svom DNS-u…
2) Možete postaviti proxy sa acl
greh embargo
Preko iptablesa to možete učiniti... nije uvijek najbolja opcija (ima više načina)
iptables -A INPUT -s blog.desdelinux.ne -j DROP
iptables -A OUTPUT -d blog.desdelinux.net -j DROP
Reci mi da li radi
Hvala na odgovoru, sve je razjašnjeno. Pitao sam za port jer sam se iznenadio kada sam koristio 7659, pošto privatni portovi počinju na 49152, i to bi moglo ometati uslugu ili nešto slično.
Još jednom, hvala na svemu, tako je lijepo!
Pozdrav.
BrodyDalle kako mogu da vas kontaktiram? Tvoj scenario je veoma zanimljiv.
soulofmarionet_1@hotmail.com
Poslednji red "iptables -A OUTPUT -o $extranet -s $ip -j $ACTION" je tu da spreči lažiranje vaše mašine? Ili je moguće da zatrovani paket ulazi i može izaći sa tim zatrovanim izvorom i zato je pravilo uključeno i u IZLAZ?
Hvala puno na pojašnjenju!!!
Ovo je moja vlastita iptables skripta, vrlo je kompletna:
# frenes.iptables.airoso
# doc.iptables.airoso: iptables za naslijeđe i za nft
#
# portova zaštitnog zida
###########################
#! / bin / bash
#
# obrišite ekran
################################# start /etc/f-iptables/default.cfg |||||
jasno
# ostavite prazan red
odjek
izvoz da=»» ne=»echo off»
# varijable koje možete promijeniti da biste dozvolili pristup
##################### varijable koje treba modificirati sa $yes ili $no
izvoz postoje izuzeci=»$ne»
# postoje izuzeci: $yes za dozvoljavanje izuzetaka hosta i $no za onemogućavanje
izvoz hayping=»$ne»
# hayping: $yes za dozvoljavanje pingova trećim stranama i $no za odbijanje
izvoz haylogserver=»$ne»
# haylogeosserver: $yes da biste mogli prijaviti tcp $ne da ne možete prijaviti tcp
######
##################### varijable koje treba modificirati dodavanjem "," ili s rasponima ":"
izvoz izuzetaka=»baldras.wesnoth.org»
# izuzetaka dozvoljavaju jedan ili više hostova iz zaštitnog zida ili bez vrijednosti
izvoz logserver=odbaci,ipp,dict,ssh
# portovi tcp servera na koje se čuva evidencija kada paketi stignu
izvoz redserver=0/0
# redserver: mreža za serverske portove, po mogućnosti lokalnu mrežu ili nekoliko ips-ova
izvoz clientnet=0/0
# clientnet: mreža za klijentske portove, po mogućnosti sve mreže
izvoz tcpserver=odbaci,ipp,dict,6771
# tcpserver: navedeni portovi tcp servera
izvoz udpserver=odbaci
# udpserver: specificirani portovi udp servera
izvoz clientudp=domena,bootpc,bootps,ntp,20000:45000
#udpclient: specificirani portovi udp klijenta
izvoz clienttcp=domain,http,https,ipp,git,dict,14999:15002
# tcpclient: navedeni portovi tcp klijenta
################################ kraj /etc/f-iptables/default.cfg |||||
################################ kraj varijabli za izmjenu
izvoz firewall=$1 varijable=$2
if [ «$varijable» = «$NULL» ]; zatim izvor /etc/f-iptables/default.cfg;
else izvor /etc/f-iptables/$2; fi
############################### ili ćete prepisati varijable sa .cfg datotekom
################################################### ##########################################
izvoz firewall=$1 izvoz varijable=$2
########################################## automatske sistemske varijable
if [ "$firewall" = "isključeno" ]; zatim echo FIREWALL OFF;
export activateserver=»$no» activateclient=»$no» wet=»$ne»;
elif [ «$firewall» = «klijent» ]; zatim echo FIREWALL CLIENT;
export activateserver=»$no» activateclient=»» wet=»$no»;
elif [ "$firewall" = "server" ]; zatim echo FIREWALL SERVER;
export activateserver=»» activateclient=»$no» wet=»$no»;
elif [ «$firewall» = «clientandserver» ]; zatim echo FIREWALL KLIJENT I SERVER;
export activateserver=»»; export activateclient=»»;export wet=»$no»;
elif [ "$firewall" = "dozvoljen" ]; zatim echo PERMISSIVE FIREWALL;
export activateserver=»$no» activateclient=»$no» wet=»»;
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 INPUT
$check sudo iptables-nft -v -L IZLAZ
echo _____parametri____ $0 $1 $2
echo "pokretanje bez parametara je listanje iptables."
echo "Prvi parametar (omogući iptables): prekinut ili klijent ili server ili klijent i server ili dopušten."
echo "Drugi parametar: (opciono): default.cfg datoteka bira /etc/f-iptables/default.cfg"
echo «Varijabilne konfiguracije: » $(ls /etc/f-iptables/)
izlaz 0; fi
#################
odjek
echo Izbacuje $0 isključeno o klijent o server o klijent i server o dozvoljeno o varijable o bez korištenja parametra za popis iptables.
echo Datoteka $0 sadrži neke varijable koje se mogu uređivati.
################################ prethodne varijable su aktivirane
#################################
echo podešavanje iptables varijable
eho aktivirane varijable
odjek
############################ iptables pravila
echo Konfiguriranje 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 NAPRIJED -j DROP
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
$postoje izuzeci sudo /usr/sbin/iptables-legacy -A INPUT -s $exceptions -j ACCEPT > /dev/null
$activateserver sudo /usr/sbin/iptables-legacy -A INPUT -p udp -m multiport –dports $udpserver -s $redserver -d $redserver -j ACCEPT > /dev/null
$activateserver sudo /usr/sbin/iptables-legacy -A INPUT -p tcp -m multiport –dports $tcpserver -s $redserver -d $redserver -j ACCEPT > /dev/null
$activarcliente sudo /usr/sbin/iptables-legacy -A INPUT -p udp -m multiport –sport $clienteudp -m stanje –stanje uspostavljeno -s $redcliente -d $redcliente -j PRIHVATI > /dev/null
$activarcliente sudo /usr/sbin/iptables-legacy -A INPUT -p tcp -m multiport –sport $clientetcp -m stanje –stanje uspostavljeno -s $redcliente -d $redcliente -j PRIHVATI > /dev/null
$hayping sudo /usr/sbin/iptables-legacy -A INPUT -p icmp –icmp-tip echo-reply -j ACCEPT > /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 ACCEPT > /dev/null
$postoje izuzeci sudo /usr/sbin/iptables-legacy -A OUTPUT -d $exceptions -j ACCEPT > /dev/null
$activateserver sudo /usr/sbin/iptables-legacy -A OUTPUT -p udp -m multiport –sports $udpserver -s $redserver -d $redserver -j PRIHVATI > /dev/null
$activateserver sudo /usr/sbin/iptables-legacy -A OUTPUT -p tcp -m multiport –sport $tcpserver -s $redserver -d $redserver -j PRIHVATI > /dev/null
$activateclient sudo /usr/sbin/iptables-legacy -A IZLAZ -p udp -m multiport –dports $clientudp -s $redclient -d $redclient -j ACCEPT > /dev/null
$activateclient sudo /usr/sbin/iptables-legacy -A IZLAZ -p tcp -m multiport –dports $clientetcp -s $redcliente -d $redcliente -j ACCEPT > /dev/null
$hayping sudo /usr/sbin/iptables-legacy -A IZLAZ -p icmp –icmp-tip echo-request -j ACCEPT > /dev/null
sudo /usr/sbin/iptables-legacy -A OUTPUT -j DROP
sudo /usr/sbin/iptables-legacy -A NAPRIJED -j DROP
echo iptables-legacy omogućen
odjek
echo Konfiguriranje 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 ACCEPT > /dev/null
$haylogserver sudo /usr/sbin/iptables-nft -A INPUT -p tcp -m multiport –dports $logserver -j LOG > /dev/null
$postoje izuzeci sudo /usr/sbin/iptables-nft -A INPUT -s $exceptions -j ACCEPT > /dev/null
$activateserver sudo /usr/sbin/iptables-nft -A INPUT -p udp -m multiport –dports $udpserver -s $redserver -d $redserver -j ACCEPT > /dev/null
$activateserver sudo /usr/sbin/iptables-nft -A INPUT -p tcp -m multiport –dports $tcpserver -s $redserver -d $redserver -j ACCEPT > /dev/null
$activarcliente sudo /usr/sbin/iptables-nft -A INPUT -p udp -m multiport –sport $clienteudp -m stanje –stanje uspostavljeno -s $redcliente -d $redcliente -j ACCEPT > /dev/null
$activarcliente sudo /usr/sbin/iptables-nft -A INPUT -p tcp -m multiport –sport $clientetcp -m stanje –stanje uspostavljeno -s $redcliente -d $redcliente -j PRIHVATI > /dev/null
$hayping sudo /usr/sbin/iptables-nft -A INPUT -p icmp –icmp-tip echo-reply -j ACCEPT > /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 ACCEPT > /dev/null
$postoje izuzeci sudo /usr/sbin/iptables-nft -A OUTPUT -d $exceptions -j ACCEPT > /dev/null
$activateserver sudo /usr/sbin/iptables-nft -A OUTPUT -p udp -m multiport –sports $udpserver -s $redserver -d $redserver -j PRIHVATI > /dev/null
$activateserver sudo /usr/sbin/iptables-nft -A IZLAZ -p tcp -m multiport –sport $tcpserver -s $redserver -d $redserver -j ACCEPT > /dev/null
$activateclient sudo /usr/sbin/iptables-nft -A IZLAZ -p udp -m multiport –dports $clientudp -s $redclient -d $redclient -j ACCEPT > /dev/null
$activateclient sudo /usr/sbin/iptables-nft -A IZLAZ -p tcp -m multiport –dports $clientetcp -s $redclient -d $redclient -j ACCEPT > /dev/null
$hayping sudo /usr/sbin/iptables-nft -A IZLAZ -p icmp –icmp-tip 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 omogućen
odjek
$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
$wet sudo /usr/sbin/iptables-legacy -A INPUT -m stanje –uspostavljeno stanje -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 NAPRIJED -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 ACCEPT > /dev/null
$wet sudo /usr/sbin/iptables-nft -A INPUT -m stanje – stanje uspostavljeno -j PRIHVATI > /dev/null
$wet sudo /usr/sbin/iptables-nft -A INPUT -j DROP > /dev/null
$wet sudo /usr/sbin/iptables-nft -A OUTPUT -j ACCEPT > /dev/null
$wet sudo /usr/sbin/iptables-nft -A FORWARD -j DROP > /dev/null
##########################
eho ste bacili $0 $1 $2
# izađite iz skripte
izlaz 0
Kako da postavim pravilo ako koristim ovaj firewall za svoj gateway i imam squid unutar LAN-a???