M-am gândit la două lucruri despre iptables pentru o vreme: majoritatea celor care caută aceste tutoriale sunt începători și, în al doilea rând, mulți caută deja ceva destul de simplu și deja elaborat.
Acest exemplu este pentru un server web, dar puteți adăuga cu ușurință mai multe reguli și le puteți adapta la nevoile dvs.
Când vedeți modificarea „x” pentru IP-urile dvs.
#!/bin/bash
# Curățăm tabelele iptables -F iptables -X # Curățăm NAT iptables -t nat -F iptables -t nat -X # tabla mangle pentru lucruri precum PPPoE, PPP și ATM iptables -t mangle -F iptables -t mangle -X # Politici Cred că acesta este cel mai bun mod pentru începători și # încă nu este rău, voi explica ieșirea (ieșirea) toate, deoarece acestea sunt conexiuni de ieșire #, intrare aruncăm totul și niciun server nu ar trebui să redirecționeze. iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP #Intranet LAN intranet = eth0 #Extranet wan extranet = eth1 # Keep state. Tot ceea ce este deja conectat (stabilit) este lăsat astfel: iptables -A INPUT -m state --state STABILIT, RELATAT -j ACCEPT # Buclă dispozitiv. iptables -A INPUT -i lo -j ACCEPT # http, https, nu specificăm interfața deoarece # vrem să fie toate iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp - dport 443 -j ACCEPT # ssh numai intern și din această gamă de iptables ip -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 7659 -j ACCEPT # monitorizare de exemplu dacă au zabbix sau alte servicii iptables snmp -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 10050 -j ACCEPT # icmp, ping bine depinde de tine iptables -A INPUT -p icmp -s 192.168.xx / 24 - i $ intranet -j ACCEPT #mysql cu postgres este portul 5432 iptables -A INPUT -p tcp -s 192.168.xx --sport 3306 -i $ intranet -j ACCEPT #sendmail bueeeh dacă doriți să trimiteți câteva mailuri iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT # Anti-SPOOFING 09/07/2014 # SERVER_IP = "190.xxx" # server IP - IP-ul real wan al serverului dvs. LAN_RANGE = "192.168.xx / 21 „Gama # LAN a rețelei sau a IP-urilor dvs. vlan care nu ar trebui să intre niciodată în extranet,este să folosim un pic de # logică dacă avem o interfață pur WAN, nu ar trebui să introducă niciodată # trafic de tip LAN prin acea interfață 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 "# Acțiune implicită - de efectuat atunci când orice regulă se potrivește cu ACTION =" DROP "# Pachete cu aceeași IP a serverului meu prin iptables wan -A INPUT -i $ extranet -s $ SERVER_IP -j $ ACTION # iptables -A OUTPUT -o $ extranet -s $ SERVER_IP -j $ ACTION # Pachete cu gama LAN pentru wan, am pus-o așa în cazul în care aveți # o anumită rețea, dar aceasta este redundantă cu următoarea # regulă în interior bucla "pentru" iptables -A INPUT -i $ extranet -s $ LAN_RANGE -j $ ACTION iptables -A OUTPUT -o $ extranet -s $ LAN_RANGE -j $ ACTION ## Toate rețelele SPOOF nu sunt permise de WAN pentru ip în $ SPOOF_IPS do iptables -A INPUT -i $ extranet -s $ ip -j $ ACTION iptables -A OUTPUT -o $ extranet -s $ ip -j $ ACTION done
Ca întotdeauna aștept comentariile dvs., rămâneți la curent cu acest blog, vă mulțumesc
Mă ajută să continui să învăț ceva mai mult copiat.
ești binevenit, bucuros să fii de ajutor
Îmi pare rău, dar am două întrebări (și una ca cadou 😉):
Ați ajunge cu această configurație pentru ca Apache să ruleze și să închidă restul, cu excepția SSH?
#Curățăm mesele
iptables -F
iptables -X
Curățăm NAT
iptables -t nat -F
iptables -t nat -X
iptables -A INTRARE -p tcp –dport 80 -j ACCEPT
ssh numai intern și din această gamă de IP-uri
iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet –port 7659 -j ACCEPT
A doua întrebare: Este 7659 portul utilizat în SSH în acest exemplu?
Și al treilea și ultimul: în ce fișier trebuie salvată această configurație?
Vă mulțumesc foarte mult pentru tutorial, este păcat că sunteți un începător și nu puteți profita bine de el.
aceasta este regula de care aveți nevoie pentru http de la apache
iptables -A INTRARE -p tcp –dport 80 -j ACCEPT
dar trebuie să declarați și politicile implicite de renunțare (este în script)
iptables -P INPUT DROP
iptables -P ACCEPT IEȘIRE
iptables -P FORDARD DROP
și asta pentru că dacă ești îndepărtat, te va arunca.
iptables -A INPUT -m state –stATE STABILIT, RELATAT -j ACCEPT
dacă 7659 este portul acelui ssh în exemplu, în mod implicit este 22, deși vă recomand să schimbați un port "nu prea cunoscut"
Omule, nu știu, așa cum vrei ... firewall.sh și îl plasezi în rc.local (sh firewall.sh) astfel încât să ruleze automat, depinde de ce sistem de operare ai, sunt fișiere unde puteți plasa regulile direct.
Hei, scriptul dvs. este foarte bun, îl analizăm .... Știți cum aș putea respinge toate cererile de la utilizatorii mei către un anumit site web? dar acest site web are o mulțime de servere ....
Vă recomand și alte opțiuni:
1) Puteți crea o zonă falsă în DNS-urile dvs. ...
2) Puteți plasa un proxy cu acl
embargou de păcat
Pentru iptables vă poate plăcea asta ... nu este întotdeauna cea mai bună opțiune (există mai multe moduri)
iptables -A INPUT -s blog.desdelinux.ne -j PIDURA
iptables -A OUTPUT -d blog.desdelinux.net -j DROP
Spune-mi dacă a funcționat
Mulțumim pentru răspuns, totul s-a lămurit. Întrebam despre port pentru că am fost surprins să folosesc 7659, deoarece porturile private încep de la 49152 și ar putea interfera cu un serviciu sau altceva.
Din nou, mulțumesc pentru tot, e frumos!
Salutări.
BrodyDalle, cum pot lua legătura cu tine? Foarte interesant scenariul tău.
soulofmarionet_1@hotmail.com
Ultima linie dinainte „iptables -A OUTPUT -o $ extranet -s $ ip -j $ ACTION” este aceea de a împiedica falsificarea propriei mașini? Sau este posibil ca un pachet otrăvit să intre și să poată ieși cu acea sursă otrăvită și de aceea regula este inclusă și în OUTPUT?
Multumesc mult pentru clarificare !!!
acesta este propriul meu script iptables, este foarte complet:
# franes.iptables.airy
# doc.iptables.airoso: iptables pentru moștenire și pentru nft
#
# porturi firewall
#############################
#! / Bin / bash
#
# ștergeți ecranul
################################ începutul /etc/f-iptables/default.cfg |||||
clar
# lăsați o linie goală
ecou
export da = »» nu = »ecou oprit»
# variabilele pe care le puteți modifica pentru a permite accesul
####################### variabilele de modificat cu $ da sau $ nu
export hayexcepciones = »$ nu»
# există excepții: $ da pentru a permite gazdelor excepționale și $ nu pentru a dezactiva
export de fânare = »$ nu»
# hayping: $ da pentru a permite ping-urilor terților și $ nu pentru a nega
export haylogserver = »$ nu»
# haylogeosserver: $ da pentru a putea înregistra tcp $ nu pentru a nu putea înregistra tcp
######
####################### variabile de modificat adăugând „,” sau cu intervale de „:”
excepții la export = »baldras.wesnoth.org»
# excepții permit gazde unice sau multiple din firewall sau fără valoare
export logserver = aruncați, ipp, dict, ssh
# porturi server tcp care sunt înregistrate la intrarea pachetelor
export redserver = 0/0
# redserver: rețeaua pentru porturile serverului rețea locală preferabilă sau mai multe IP-uri
export client roșu = 0/0
#clientnet: rețeaua pentru porturile client preferabilă tuturor rețelelor
export servidortcp = discard, ipp, dict, 6771
# servidortcp: porturile serverului tcp specificate
export serverudp = aruncați
#udpserver: porturile de server UDP specificate
export clientudp = domeniu, bootpc, bootps, ntp, 20000: 45000
#udp client: porturile clientului UDP specificate
export clienttcp = domeniu, http, https, ipp, git, dict, 14999: 15002
# tcp client: porturile clientului tcp specificate
############################### sfârșitul /etc/f-iptables/default.cfg |||||
################################ sfârșitul variabilelor de modificat
firewall de export = variabile $ 1 = $ 2
dacă ["$ variabile" = "$ NULL"]; apoi sursa /etc/f-iptables/default.cfg;
else source / etc / f-iptables / $ 2; fi
################################ sau va suprascrie variabilele cu un fișier .cfg
###################################################### ############################################
firewall de export = 1 $ variabile de export = 2 $
########################################## variabile de sistem automate
if ["$ firewall" = "deconectat"]; apoi ecou DE PARET DE FOC DECONECTAT;
export activateserver = »$ nu» activateclient = »$ nu» umed = »$ nu»;
elif ["$ firewall" = "client"]; apoi ecou FIREWALL CLIENT;
export activateserver = »$ nu» activateclient = »» ud = »$ nu»;
elif ["$ firewall" = "server"]; apoi ecou FIVERWALL SERVER;
export activateserver = »» activateclient = »$ nu» umed = »$ nu»;
elif ["$ firewall" = "client și server"]; apoi ecou CLIENT ȘI SERVER DE FIREWALL;
export activate server = »»; export activateclient = »»; export umed = »$ nu»;
elif ["$ firewall" = "permisiv"]; apoi ecou PERETE DE FOC PERMISIV;
export activateserver = »$ nu» activateclient = »$ nu» umed = »»;
altfel
$ verifica sudo echo iptables-legacy:
$ verifica sudo iptables-legacy -v -L INPUT
$ verifica sudo iptables-legacy -v -L OUTPUT
$ verifica sudo echo iptables-nft:
$ verifica sudo iptables-nft -v -L INPUT
$ verifica sudo iptables-nft -v -L OUTPUT
ecou _____parametri____ 0 $ 1 $ 2 $
echo „aruncat fără parametri este să listezi iptables.”
ecou "Primul parametru (activați iptables): deconectat sau client sau server sau client și server sau permisiv."
ecou "Al doilea parametru: (opțional): fișierul default.cfg alege /etc/f-iptables/default.cfg"
echo "Setări variabile:" $ (ls / etc / f-iptables /)
ieșire 0; fi
##################
ecou
echo Aruncă 0 $ deconectat sau client sau server sau client și server sau permisiv sau variabile sau fără a utiliza parametrul pentru a lista iptables.
echo Fișierul $ 0 conține câteva variabile editabile în interior.
################################# activează variabilele de mai sus
###################################
setarea ecoului variabilelor iptables
variabile activate de ecou
ecou
############################# regulile iptables
echo Setarea iptables-moștenire
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 FORWARD -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
$ hayeexceptions sudo / usr / sbin / iptables-legacy -A INPUT -s $ exceptions -j ACCEPT> / dev / null
$ activați sudo server / usr / sbin / iptables-legacy -A INPUT -p udp -m multiport –porturi $ 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 stabilit -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 stabilit -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 OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
$ hayeexceptions sudo / usr / sbin / iptables-legacy -A OUTPUT -d $ exceptions -j ACCEPT> / dev / null
$ activate sudo server / usr / sbin / iptables-legacy -A OUTPUT -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
$ activateclient sudo / usr / sbin / iptables-legacy -A OUTPUT -p udp -m multiport –dports $ clientudp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
$ activateclient sudo / usr / sbin / iptables-legacy -A OUTPUT -p tcp -m multiport –porturi $ 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 OUTPUT -j DROP
sudo / usr / sbin / iptables-legacy -A FORWARD -j DROP
eco iptables-legacy activat
ecou
echo Setarea 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
$ 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 stabilit -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 stabilit -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 OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
$ hayeexceptions sudo / usr / sbin / iptables-nft -A OUTPUT -d $ exceptions -j ACCEPT> / dev / null
$ activate server sudo / usr / sbin / iptables-nft -A OUTPUT -p udp -m multiport –sports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
$ activate server sudo / usr / sbin / iptables-nft -A OUTPUT -p tcp -m multiport –sports $ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
$ activateclient sudo / usr / sbin / iptables-nft -A OUTPUT -p udp -m multiport –dports $ clientudp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
$ activateclient sudo / usr / sbin / iptables-nft -A OUTPUT -p tcp -m multiport –porturi $ clienttcp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
$ hayping sudo / usr / sbin / iptables-nft -A OUTPUT -p icmp –icmp-type 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 activat
ecou
$ ud sudo / usr / sbin / iptables-legacy -F> / dev / null
$ sudo umed / usr / sbin / iptables-legacy -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
$ umed sudo / usr / sbin / iptables-legacy -A INPUT -m state –state stabilit -j ACCEPT> / dev / null
$ ud sudo / usr / sbin / iptables-legacy -A INPUT -j DROP> / dev / null
$ umed sudo / usr / sbin / iptables-legacy -A OUTPUT -j ACCEPT> / dev / null
$ umed sudo / usr / sbin / iptables-legacy -A FORWARD -j DROP> / dev / null
$ umed sudo / usr / sbin / iptables-nft -F> / dev / null
$ sudo umed / usr / sbin / iptables-nft -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
$ umed sudo / usr / sbin / iptables-nft -A INPUT -m state –state stabilit -j ACCEPT> / dev / null
$ umed sudo / usr / sbin / iptables-nft -A INPUT -j DROP> / dev / null
$ umed sudo / usr / sbin / iptables-nft -A OUTPUT -j ACCEPT> / dev / null
$ umed sudo / usr / sbin / iptables-nft -A FORWARD -j DROP> / dev / null
#############################
ecou ați aruncat $ 0 $ 1 $ 2 $
# iese din script
iesirea 0
Cum aș seta o regulă dacă acest firewall l-ar folosi pentru gateway-ul meu și ar avea un calamar în interiorul LAN ???