Chvíli jsem přemýšlel o dvou věcech o iptables: většina z těch, kteří hledají tyto návody, jsou začátečníci a zadruhé, mnozí již hledají něco docela jednoduchého a již propracovaného.
Tento příklad je pro webový server, ale můžete snadno přidat další pravidla a přizpůsobit je svým potřebám.
Když uvidíte „x“, změňte své IP adresy
#!/bin/bash
# Čistíme tabulky iptables -F iptables -X # Čistíme NAT iptables -t nat -F iptables -t nat -X # tabulka mangle pro věci jako PPPoE, PPP a ATM iptables -t mangle -F iptables -t mangle -X # Zásady Myslím, že je to nejlepší způsob pro začátečníky a # stále není špatný, vysvětlím výstup vše, protože jsou odchozí připojení #, vstup vše zahodíme a žádný server by neměl předávat. iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP #Intranet LAN intranet = eth0 #Extranet wan extranet = eth1 # Zachovat stav. Všechno, co je již připojeno (založeno), je ponecháno takto: iptables -A INPUT -m state --state ESTABLISHED, RELATED -j ACCEPT # Loop device. iptables -A INPUT -i lo -j ACCEPT # http, https, neurčujeme rozhraní, protože # chceme, aby to bylo pro všechny iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp - dport 443 -j ACCEPT # ssh pouze interně a z této řady iptables ip -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 7659 -j ACCEPT # monitorování například pokud mají zabbix nebo jiné snmp service iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 10050 -j ACCEPT # icmp, ping dobře je to na vás 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 pokud chcete poslat nějaký mail #iptables -A VÝSTUP -p tcp --dport 25 -j ACCEPT # Anti-SPOOFING 09/07/2014 # SERVER_IP = "190.xxx" # server IP - skutečná IP adresa vašeho serveru LAN_RANGE = "192.168.xx / 21" # rozsah LAN vaší sítě nebo vašeho vlan # IP, které by nikdy neměly vstoupit do extranetu,je použít trochu # logiky, pokud máme čistě WAN rozhraní, nikdy by nemělo vstupovat do provozu typu LAN přes toto rozhraní 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 "# Výchozí akce - provede se, když se nějaké pravidlo shoduje AKCE =" DROP "# Pakety se stejnou IP adresou mého serveru přes wan iptables -A VSTUP -i $ extranet -s $ SERVER_IP -j $ AKCE # iptables -A VÝSTUP -o $ extranet -s $ SERVER_IP -j $ AKCE # Pakety s LAN rozsahem pro wan, dal jsem to takhle v případě, že máte # jakoukoli konkrétní síť, ale to je nadbytečné s následujícím # pravidlem uvnitř smyčky " pro „iptables -A VSTUP -i $ extranet -s $ LAN_RANGE -j $ AKCE iptables -A VÝSTUP -o $ extranet -s $ LAN_RANGE -j $ AKCE ## Všechny sítě SPOOF nejsou povoleny wanem pro ip v $ SPOOF_IPS dělat iptables -A VSTUP -i $ extranet -s $ ip -j $ AKCE iptables -A VÝSTUP -o $ extranet -s $ ip -j $ AKCE hotovo
Jako vždy čekám na vaše komentáře, zůstaňte naladěni v tomto blogu, děkuji
Pomáhá mi to pokračovat v učení trochu víc díky kopírování.
jste vítáni, rádi vám pomůžeme
Je mi to opravdu líto, ale mám dvě otázky (a jednu jako dárek):
Přišli byste s touto konfigurací, aby Apache běžel a zavřel zbytek kromě 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 pouze interně az tohoto rozsahu IP
iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet –dport 7659 -j PŘIJMOUT
Druhá otázka: Je v tomto příkladu použit port 7659 v SSH?
A třetí a poslední: do kterého souboru má být tato konfigurace uložena?
Velice vám děkuji za tutoriál, je škoda, že jste takový nováček a nemůžete ho dobře využít.
toto je pravidlo, které potřebujete pro http z apache
iptables -A INPUT -p tcp –port 80 -j ACCEPT
ale musíte také deklarovat výchozí zásady přetažení (je to ve skriptu)
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P VPŘED DROP
a to proto, že pokud jste vzdálení, odhodí vás to.
iptables -A INPUT -m state –state ZJIŠTĚN, RELATED -j ACCEPT
pokud je v příkladu port 7659 portem ssh, standardně je to 22, i když doporučuji změnit na port „not well known“
muž Nevím, jak chceš ... firewall.sh a vložíš to do rc.local (sh firewall.sh) tak, aby se to spouštělo automaticky, záleží na tom, jaký operační systém máš, jsou soubory, kde můžeš pravidla umístit přímo.
Eii velmi dobrý váš skript, jeho analýza .... Víte, jak bych mohl popřít všechny požadavky svých uživatelů na konkrétní web? .... ale tento web má spoustu serverů….
Doporučuji další možnosti:
1) Ve svých dns můžete vytvořit falešnou zónu ...
2) Můžete umístit proxy s acl
hříšné embargo
U iptables se vám to může líbit ... není to vždy nejlepší volba (existuje více způsobů)
iptables -A INPUT -s blog.desdelinux.ne -j KAPKA
iptables -A VÝSTUP -d blog.desdelinux.net -j DROP
Řekni mi, jestli to funguje
Díky za odpověď, všechno se vyjasnilo. Ptal jsem se na port, protože mě překvapilo, že používám 7659, protože soukromé porty začínají na 49152, a mohlo by to narušit nějakou službu nebo něco.
Ještě jednou díky za všechno, to je hezké!
Zdravím.
BrodyDalle, jak se s tebou mohu spojit? Velmi zajímavý váš scénář.
soulofmarionet_1@hotmail.com
Předposlední řádek „iptables -A VÝSTUP -o $ extranet -s $ ip -j $ AKCE“ je tam, aby zabránil spoofingu vašeho vlastního stroje? Nebo je možné, že nějaký otrávený paket vstoupí a může odejít s tímto otráveným zdrojem, a proto je pravidlo zahrnuto také do VÝSTUPU?
Moc děkuji za vysvětlení !!!
toto je můj vlastní skript iptables, je velmi kompletní:
# franes.iptables.airy
# doc.iptables.airoso: iptables pro starší a pro nft
#
# porty brány firewall
##################################
#! / bin / bash
#
# vyčistit obrazovku
################################# začátek /etc/f-iptables/default.cfg |||||
jasný
# nechte řádek prázdný
minout
export ano = »» ne = »ozvěna vypnuta»
# proměnné, které můžete změnit tak, aby umožňovaly přístup
######################## proměnné, které chcete upravit pomocí $ yes nebo $ no
exportovat hayexcepciones = »$ no»
# existují výjimky: $ yes pro povolení výjimečných hostitelů a $ no pro deaktivaci
exportovat hayping = »$ no»
# hayping: $ yes umožnit ping třetím stranám a $ no popřít
exportovat haylogserver = »$ no»
# haylogeosserver: $ ano, aby bylo možné přihlásit tcp $ ne, aby bylo možné přihlásit tcp
######
######################## proměnné, které chcete upravit přidáním "," nebo s rozsahy ":"
export výjimky = »baldras.wesnoth.org»
# výjimky umožňují jednomu nebo více hostitelům z brány firewall nebo žádnou hodnotu
export logserver = zahodit, ipp, dict, ssh
# porty serveru tcp, které jsou protokolovány, když přicházejí pakety
exportovat redserver = 0/0
# redserver: síť pro porty serveru, přednostně místní síť nebo několik ips
exportovat klienta červená = 0/0
#clientnet: síť pro klientské porty je lepší než všechny sítě
export servidortcp = zahodit, ipp, dict, 6771
# servidortcp: zadané porty serveru tcp
export serverudp = zahodit
#udpserver: zadané porty serveru 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
# klient tcp: zadané porty klienta tcp
############################### konec /etc/f-iptables/default.cfg |||||
################################# konec proměnných k úpravě
exportovat firewall = $ 1 proměnné = $ 2
if ["$ variables" = "$ NULL"]; pak source /etc/f-iptables/default.cfg;
else source / etc / f-iptables / $ 2; fi
################################# nebo proměnné přepíšete souborem .cfg
####################################################### ##############################################
exportovat firewall = $ 1 exportovat proměnné = $ 2
############################################# automatické systémové proměnné
if ["$ firewall" = "odpojeno"]; poté ozvěna FIREWALL ODPOJENO;
export activateserver = »$ no» activclient = »$ no» wet = »$ no»;
elif ["$ firewall" = "klient"]; poté ozvěna KLIENT FIREWALL;
export activateserver = »$ no» activclient = »» wet = »$ no»;
elif ["$ firewall" = "server"]; pak echo FIREWALL SERVER;
export activateserver = »» activclient = »$ no» wet = »$ no»;
elif ["$ firewall" = "klient a server"]; poté ozvěna KLIENT A SERVER FIREWALL;
export aktivovat server = »»; export activclient = »»; export mokrý = »$ no»;
elif ["$ firewall" = "tolerantní"]; pak ozvěna POVOLENÝ POŽÁR;
export activateserver = »$ no» activclient = »$ no» wet = »»;
jiný
$ 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 _____parametry____ $ 0 $ 1 $ 2
echo "cast bez parametrů je vypsat iptables."
echo "První parametr (povolit iptables): odpojený nebo klient nebo server nebo klient a server nebo tolerantní."
echo "Druhý parametr: (volitelný): soubor default.cfg vybere /etc/f-iptables/default.cfg"
echo "Variabilní nastavení:" $ (ls / etc / f-iptables /)
výstup 0; fi
##################
minout
echo Hodí $ 0 odpojeno nebo klient nebo server nebo klient a server nebo tolerantní nebo proměnné nebo bez použití parametru k seznamu iptables.
echo Soubor $ 0 obsahuje uvnitř některé upravitelné proměnné.
################################## výše uvedené proměnné aktivovány
###################################
echo nastavení proměnných iptables
echo aktivované proměnné
minout
############################## pravidla iptables
echo Nastavení iptables-legacy
sudo / usr / sbin / iptables-legacy -t filtr -F
sudo / usr / sbin / iptables-legacy -t nat -F
sudo / usr / sbin / iptables-legacy -t mangle -F
sudo / usr / sbin / ip6tables-legacy -t filtr -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 dopředu -j DROP
sudo / usr / sbin / iptables-legacy -A VSTUP -s 127.0.0.1 -d 127.0.0.1 -j PŘIJMOUT> / 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 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
$ activclient 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
$ activclient 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 PŘIJMOUT> / dev / null
$ hayeexceptions sudo / usr / sbin / iptables-legacy -A VÝSTUP -d $ výjimky -j PŘIJMOUT> / dev / null
$ aktivovat sudo server / usr / sbin / iptables-legacy -A VÝSTUP -p udp -m multiport –sporty $ 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 –dports $ clientudp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
$ activclient 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 OUTPUT -p icmp –icmp-type echo-request -j ACCEPT> / dev / null
sudo / usr / sbin / iptables-legacy -A VÝSTUP -j DROP
sudo / usr / sbin / iptables-legacy -A dopředu -j DROP
echo iptables-legacy enabled
minout
echo Nastavení iptables-nft
sudo / usr / sbin / iptables-nft -t filtr -F
sudo / usr / sbin / iptables-nft -t nat -F
sudo / usr / sbin / iptables-nft -t mangle -F
sudo / usr / sbin / ip6tables-nft -t filtr -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 dopředu -j DROP
sudo / usr / sbin / iptables-nft -A VSTUP -s 127.0.0.1 -d 127.0.0.1 -j PŘIJMOUT> / 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
$ 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
$ activclient sudo / usr / sbin / iptables-nft -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-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 PŘIJMOUT> / dev / null
$ hayexceptions sudo / usr / sbin / iptables-nft -A VÝSTUP -d $ výjimky -j PŘIJMOUT> / dev / null
$ aktivovat sudo server / usr / sbin / iptables-nft -A VÝSTUP -p udp -m multiport –sporty $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
$ aktivovat server sudo / usr / sbin / iptables-nft -A VÝSTUP -p tcp -m multiport –sporty $ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
$ activclient sudo / usr / sbin / iptables-nft -A VÝSTUP -p udp -m multiport –dports $ clientudp -s $ klientnet -d $ klientnet -j PŘIJÍMAT> / dev / null
$ activclient sudo / usr / sbin / iptables-nft -A VÝSTUP -p tcp -m multiport –dports $ clienttcp -s $ clientnet -d $ clientnet -j PŘIJMOUT> / dev / null
$ hayping sudo / usr / sbin / iptables-nft -A VÝSTUP -p icmp –icmp-typ echo-požadavek -j PŘIJMOUT> / dev / null
sudo / usr / sbin / iptables-nft -A VÝSTUP -j DROP
sudo / usr / sbin / iptables-nft -A dopředu -j DROP
echo iptables-nft povoleno
minout
$ 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 state –state established -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 PŘIJMOUT> / dev / null
$ wet sudo / usr / sbin / iptables-legacy -A dopředu -j DROP> / dev / null
$ wet sudo / usr / sbin / iptables-nft -F> / dev / null
$ wet sudo / usr / sbin / iptables-nft -A VSTUP -s 127.0.0.1 -d 127.0.0.1 -j PŘIJMOUT> / dev / null
$ wet sudo / usr / sbin / iptables-nft -A INPUT -m stav –stát zaveden -j PŘIJÍMAT> / dev / null
$ wet sudo / usr / sbin / iptables-nft -A INPUT -j DROP> / dev / null
$ wet sudo / usr / sbin / iptables-nft -A VÝSTUP -j PŘIJMOUT> / dev / null
$ wet sudo / usr / sbin / iptables-nft -A dopředu -j DROP> / dev / null
#############################
echo jste hodili $ 0 $ 1 $ 2
# ukončí skript
výjezd 0
Jak bych nastavil pravidlo, kdyby ho tento firewall použil pro moji bránu a měl v síti chobotnici ???