Strávil som čas premýšľaním nad dvoma vecami o iptables: väčšina z tých, ktorí hľadajú tieto návody, sú začiatočníci a po druhé, mnohí už hľadajú niečo celkom jednoduché a už prepracované.
Tento príklad je pre webový server, ale môžete ľahko pridať ďalšie pravidlá a prispôsobiť ich svojim potrebám.
Keď uvidíte zmenu „x“ pre vašu adresu IP
#!/bin/bash
# Čistíme iptables tabuľky -F iptables -X # Čistíme NAT iptables -t nat -F iptables -t nat -X # mangle tabuľka pre veci ako PPPoE, PPP a ATM iptables -t mangle -F iptables -t mangle -X # Politiky Myslím, že toto je najlepší spôsob pre začiatočníkov a # stále to nie je zlé, vysvetlím výstup (výstup), všetko preto, že sú to odchádzajúce spojenia #, vstup všetko zahodíme a žiadny server by nemal ďalej postupovať. iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP #Intranet LAN intranet = eth0 #Extranet wan extranet = eth1 # Zachovať stav. Všetko, čo je už pripojené (založené), zostane takto: iptables -A INPUT -m stav --state ESTABLISHED, RELATED -j ACCEPT # Loop device. iptables -A INPUT -i lo -j ACCEPT # http, https, neurčujeme rozhranie, pretože # chceme, aby to bolo pre všetky iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp - dport 443 -j ACCEPT # ssh iba interne a z tohto rozsahu iptable ip -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 7659 -j ACCEPT # monitoring napríklad ak majú zabbix alebo nejaká iná snmp služba iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 10050 -j ACCEPT # icmp, ping dobre, záleží len na vás iptables -A INPUT -p icmp -s 192.168. xx / 24 - i $ intranet -j ACCEPT # mysql s postgresom je port 5432 iptables -A INPUT -p tcp -s 192.168.xx --sport 3306 -i $ intranet -j ACCEPT #sendmail bueeeh ak chcete poslať nejaký mail #iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT # Anti-SPOOFING 09/07/2014 # SERVER_IP = "190.xxx" # server IP - skutočná IP adresa vášho servera LAN_RANGE = "192.168.xx / 21 "# LAN rozsah vašej siete alebo vášho vlan # IP, ktoré by nikdy nemali vstúpiť do extranetu,je použiť trochu # logiky, ak máme čisto rozhranie WAN, nikdy by nemalo vstupovať do prenosu typu LAN cez toto rozhranie 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 "# Predvolená akcia - vykoná sa, keď sa nejaké pravidlo zhoduje ACTION =" DROP "# Pakety s rovnakou IP môjho servera cez wan iptables -A INPUT -i $ extranet -s $ SERVER_IP -j $ ACTION # iptables -A VÝSTUP -o $ extranet -s $ SERVER_IP -j $ AKCIA # Pakety s LAN rozsahom pre wan, dal som to takto pre prípad, že máte # ľubovoľnú konkrétnu sieť, ale toto je nadbytočné s nasledujúcim # pravidlom vo vnútri slučka „pre“ iptables -A VSTUP -i $ extranet -s $ LAN_RANGE -j $ AKCIA iptables -A VÝSTUP -o $ extranet -s $ LAN_RANGE -j $ AKCIA ## Všetky siete SPOOF nepovoľuje wan pre ip v $ SPOOF_IPS do iptables -A VSTUP -i $ extranet -s $ ip -j $ AKCIA iptables -A VÝSTUP -o $ extranet -s $ ip -j $ AKCIA hotová
Ako vždy čakám na vaše komentáre, sledujte tento blog, ďakujeme
Pomáha mi to pokračovať v učení o trochu viac vďaka kopírovaniu.
nie ste vítaní, radi vám pomôžeme
Je mi to naozaj ľúto, ale mám dve otázky (a jednu ako darček 😉):
Prišli by ste s touto konfiguráciou, aby bol spustený Apache a zavreli zvyšok okrem SSH?
# Čistíme stoly
iptables -F
iptables -X
Čistíme NAT
iptables -t nat -F
iptables -t nat -X
iptables -A INPUT -p tcp –port 80 -j ACCEPT
ssh iba interne a z tohto rozsahu ip
iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet –dport 7659 -j AKCEPTOVAŤ
Druhá otázka: Je v tomto príklade použitý port 7659 v SSH?
A tretí a posledný: do ktorého súboru by sa mala uložiť táto konfigurácia?
Ďakujem pekne za návod, je škoda, že ste taký nováčik a nemôžete ho dobre využiť.
toto je pravidlo, ktoré potrebujete pre http z apache
iptables -A INPUT -p tcp –port 80 -j ACCEPT
ale musíte tiež deklarovať drop default politiky (je to v skripte)
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P VPRED DROP
a to preto, že ak ste vzdialení, vyhodí vás to.
iptables -A INPUT -m state –state ESTABLISHED, RELATED -j ACCEPT
ak je v príklade 7659 port tohto ssh, štandardne je to 22, aj keď vám odporúčam zmeniť na port „nie veľmi známy“
človeče neviem, ako chceš ... firewall.sh a vložíš to do rc.local (sh firewall.sh) tak, aby sa to spúšťalo automaticky, záleží to na tom, aký máš operačný systém, sú súbory, kde môžeš dať pravidlá priamo.
Eii veľmi dobrý váš skript, ktorý ho analyzuje ... Viete, ako by som mohol poprieť všetky požiadavky svojich používateľov na konkrétnu webovú stránku? .... ale tento web má veľa serverov….
Odporúčam ďalšie možnosti:
1) Vo svojich DNS môžete vytvoriť falošnú zónu ...
2) Môžete umiestniť proxy s acl
embargo na hriechy
Pre iptables sa vám to môže páčiť ... nie je to vždy najlepšia voľba (existuje viac spôsobov)
iptables -A INPUT -s blog.desdelinux.ne -j KAPKA
iptables -A VÝSTUP -d blog.desdelinux.net -j DROP
Povedzte mi, či to fungovalo
Ďakujem za odpoveď, všetko sa vyjasnilo. Pýtal som sa na port, pretože som bol prekvapený, že používam 7659, pretože súkromné porty začínajú na 49152 a mohol by prekážať nejakej službe alebo niečomu.
Opäť ďakujem za všetko, to je pekné!
Zdravím.
BrodyDalle, ako sa s tebou môžem spojiť? Veľmi zaujímavý váš scenár.
soulofmarionet_1@hotmail.com
Je predošlým posledným riadkom „iptables -A VÝSTUP -o $ extranet -s $ ip -j $ AKCIA“ zabránenie falšovaniu vášho vlastného počítača? Alebo je možné, že vstúpi nejaký otrávený paket a môže odísť s týmto otráveným zdrojom, a preto je pravidlo súčasťou aj VÝSTUPU?
Dakujem pekne za objasnenie !!!
toto je môj vlastný skript iptables, je to veľmi úplné:
# franes.iptables.airy
# doc.iptables.airoso: iptables pre staršie a pre nft
#
# porty brány firewall
##############################
#! / Bin / bash
#
# vyčistite obrazovku
################################# začiatok /etc/f-iptables/default.cfg |||||
zrejmý
# nechajte prázdny riadok
minúť
export áno = »» nie = »ozvena vypnutá»
# premenné, ktoré môžete zmeniť, aby ste povolili prístup
####################### premenné, ktoré chcete upraviť pomocou $ yes alebo $ no
exportovať hayexcepciones = »$ no»
# existujú výnimky: $ yes umožňujúce výnimočné hostiteľa a $ no deaktivovať
exportovať kupovanie = »$ nie»
# hayping: $ yes umožniť ping tretích strán a $ no odmietnuť
exportovať haylogserver = »$ no»
# haylogeosserver: $ yes, aby som sa mohol prihlásiť tcp $ no, aby som sa mohol prihlásiť tcp
######
######################## premenné na úpravu pridania znakov „,“ alebo s rozsahmi „:“
export výnimky = »baldras.wesnoth.org»
# výnimky povoľujú jedného alebo viacerých hostiteľov z brány firewall alebo žiadna hodnota
export logserver = zahodiť, ipp, dict, ssh
# porty servera tcp, ktoré sa zaznamenávajú, keď prichádzajú pakety
export redserver = 0/0
# redserver: sieť pre porty servera, prednostne lokálna sieť alebo niekoľko ips
export klient červený = 0/0
#clientnet: sieť pre klientske porty je výhodnejšia pre všetky siete
export servidortcp = zahodiť, ipp, dict, 6771
# servidortcp: zadané porty servera tcp
export serverudp = zahodiť
#udpserver: zadané porty servera udp
export clientudp = doména, bootpc, bootps, ntp, 20000: 45000
#udp client: zadané porty klienta udp
export clienttcp = doména, http, https, ipp, git, dict, 14999: 15002
# tcp client: zadané porty klienta tcp
############################### koniec /etc/f-iptables/default.cfg |||||
################################# koniec premenných, ktoré sa majú upraviť
export firewall = $ 1 premenné = $ 2
if ["$ variables" = "$ NULL"]; potom source /etc/f-iptables/default.cfg;
else zdroj / etc / f-iptables / $ 2; fi
################################# alebo prepíše premenné súborom .cfg
##################################################### #############################################
export firewall = $ 1 export premenných = $ 2
############################################# automatické systémové premenné
if ["$ firewall" = "odpojený"]; potom ozvena PIRÁŽA ODPOJENÁ;
export activateserver = »$ no» activclient = »$ no» wet = »$ no»;
elif ["$ firewall" = "klient"]; potom zopakujte KLIENT FIREWALL;
export activateserver = »$ no» activclient = »» wet = »$ no»;
elif ["$ firewall" = "server"]; potom echo FIREWALL SERVER;
export activateserver = »» activclient = »$ no» wet = »$ no»;
elif ["$ firewall" = "klient a server"]; potom ozvite KLIENT A SERVER POŽIARNEJ STRÁNKY;
export aktivovať server = »»; export activclient = »»; export mokrý = »$ nie»;
elif ["$ firewall" = "tolerantný"]; potom ozvena POVOLENÝ POŽIAR;
export activateserver = »$ no» activclient = »$ no» wet = »»;
inak
$ check sudo echo iptables-legacy:
$ check sudo iptables-legacy -v -L VSTUP
$ check sudo iptables-legacy -v -L VÝSTUP
$ check sudo echo iptables-nft:
$ check sudo iptables-nft -v -L VSTUP
$ check sudo iptables-nft -v -L VÝSTUP
echo _____parametre____ $ 0 $ 1 $ 2
echo "cast bez parametrov je zoznam iptables."
echo "Prvý parameter (povoliť iptables): odpojený alebo klient alebo server alebo klient a server alebo tolerantný."
echo "Druhý parameter: (voliteľný): predvolený súbor .cfg vyberie /etc/f-iptables/default.cfg"
echo "Variabilné nastavenia:" $ (ls / etc / f-iptables /)
výstup 0; fi
#################
minúť
echo Hodí $ 0 odpojený alebo klient alebo server alebo klient a server alebo tolerantné alebo premenné alebo bez použitia parametra na zoznam iptables.
echo Súbor $ 0 obsahuje vo vnútri nejaké upraviteľné premenné.
################################## vyššie uvedené premenné sú aktivované
###################################
echo nastavenie premenných iptables
echo aktivované premenné
minúť
############################## pravidlá iptables
echo Nastavenie 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 VÝSTUP -j DROP
sudo / usr / sbin / ip6tables-legacy -A VPRED -j KAPKA
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
$ activatedclient sudo / usr / sbin / iptables-legacy -A INPUT -p udp -m multiport –sports $ clientudp -m state –state established -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
$ activatedclient sudo / usr / sbin / iptables-legacy -A INPUT -p tcp -m multiport –sports $ clienttcp -m state –state established -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
$ hayping sudo / usr / sbin / iptables-legacy -A INPUT -p icmp –icmp-type echo-response -j ACCEPT> / dev / null
sudo / usr / sbin / iptables-legacy -A INPUT -j DROP> / dev / null
sudo / usr / sbin / iptables-legacy -A VÝSTUP -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
$ hayexceptions sudo / usr / sbin / iptables-legacy -A VÝSTUP -d $ výnimky -j ACCEPT> / dev / null
$ Activate server sudo / usr / sbin / iptables-legacy -A VÝSTUP -p udp -m multiport –sports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
$ Activate server sudo / usr / sbin / iptables-legacy -A OUTPUT -p tcp -m multiport –sports $ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
$ activclient sudo / usr / sbin / iptables-legacy -A VÝSTUP -p udp -m multiport –dporty $ clientudp -s $ klientnet -d $ klientnet -j ACCEPT> / dev / null
$ activatedclient sudo / usr / sbin / iptables-legacy -A VÝSTUP -p tcp -m multiport –dports $ clienttcp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
$ hayping sudo / usr / sbin / iptables-legacy -A VÝSTUP -p icmp –icmp-typ echo-request -j ACCEPT> / dev / null
sudo / usr / sbin / iptables-legacy -A VÝSTUP -j DROP
sudo / usr / sbin / iptables-legacy -A VPRED -j DROP
echo iptables-legacy povolené
minúť
echo Nastavenie 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 VÝSTUP -j DROP
sudo / usr / sbin / ip6tables-nft -A VPRED -j KAPKA
sudo / usr / sbin / iptables-nft -A VSTUP -s 127.0.0.1 -d 127.0.0.1 -j PRIJAŤ> / 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 VSTUP -s $ výnimky -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
$ activclient sudo / usr / sbin / iptables-nft -A INPUT -p udp -m multiport –sports $ clientudp -m state –state established -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
$ ActivateClient sudo / usr / sbin / iptables-nft -A INPUT -p tcp -m multiport –sports $ clienttcp -m stav –stav zavedený -s $ klientský sieť -d $ klientnet -j ACCEPT> / dev / null
$ hayping sudo / usr / sbin / iptables-nft -A INPUT -p icmp –icmp-type echo-response -j ACCEPT> / dev / null
sudo / usr / sbin / iptables-nft -A VSTUP -j DROP> / dev / null
sudo / usr / sbin / iptables-nft -A VÝSTUP -s 127.0.0.1 -d 127.0.0.1 -j PRIJAŤ> / dev / null
$ hayeexceptions sudo / usr / sbin / iptables-nft -A VÝSTUP -d $ výnimky -j AKCEPTOVAŤ> / dev / null
$ aktivovať server sudo / usr / sbin / iptables-nft -A VÝSTUP -p udp -m multiport –športy $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
$ aktivovať server sudo / usr / sbin / iptables-nft -A VÝSTUP -p tcp -m multiport –športy $ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
$ activclient sudo / usr / sbin / iptables-nft -A VÝSTUP -p udp -m multiport –dporty $ clientudp -s $ klientnet -d $ klientnet -j ACCEPT> / dev / null
$ activclient sudo / usr / sbin / iptables-nft -A VÝSTUP -p tcp -m multiport –dporty $ clienttcp -s $ klientnet -d $ klientnet -j ACCEPT> / dev / null
$ hayping sudo / usr / sbin / iptables-nft -A VÝSTUP -p icmp –icmp-typ echo-request -j ACCEPT> / dev / null
sudo / usr / sbin / iptables-nft -A VÝSTUP -j DROP
sudo / usr / sbin / iptables-nft -A VPRED -j KAPKA
echo iptables-nft povolené
minúť
$ 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 stav –stát zavedený -j ACCEPT> / dev / null
$ wet sudo / usr / sbin / iptables-legacy -A INPUT -j DROP> / dev / null
$ wet sudo / usr / sbin / iptables-legacy -A VÝSTUP -j PRIJAŤ> / dev / null
$ wet sudo / usr / sbin / iptables-legacy -A VPRED -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 VSTUP -m stav –stav zavedený -j PRIJAŤ> / dev / null
$ wet sudo / usr / sbin / iptables-nft -A VSTUP -j DROP> / dev / null
$ wet sudo / usr / sbin / iptables-nft -A VÝSTUP -j PRIJAŤ> / dev / null
$ wet sudo / usr / sbin / iptables-nft -A VPRED -j DROP> / dev / null
#############################
echo ste hodili $ 0 $ 1 $ 2
# ukončí skript
výstup 0
Ako by som nastavil pravidlo, keby ho tento firewall používal pre moju bránu a mal v sieti LAN chobotnicu ???