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
Pomaga mi, da se še naprej učim malo več zahvaljujoč kopirani.
vabljeni, veseli, da vam lahko pomagamo
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.
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.
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….
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
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.
BrodyDalle, kako lahko stopim v stik z vami? Zelo zanimiv vaš scenarij.
soulofmarionet_1@hotmail.com
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 !!!
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
Kako bi postavil pravilo, če bi ga ta požarni zid uporabljal za moj prehod in imel v LAN-u lignje ???