Vaig estar un temps pensant en dues coses respecte a això de iptables: la majoria dels que busquen aquests tutorials són principiants i segon molts busquen ja alguna cosa mitjanament senzill i ja elaborat.
Aquest exemple és per a un servidor web, Però pots fàcilment afegir més regles i adaptar-lo a les teves necessitats.
Quan vegin «x» canviïn pels seus ip s
#!/bin/bash
#Limpiamos taules iptables -F iptables -X # Netegem NAT iptables -t nat -F iptables -t nat -X # taula mangle per a coses com PPPoE, PPP, and ATM iptables -t mangle -F iptables -t mangle -X # Polítiques penso que aquest és la millor manera per a principiants i # tot i així no aquesta malament, t'explico output (sortida) sobretot perquè són connexions # sortints, input descartem tot, i cap servidor hauria de fer forward. iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP #Intranet LAN intranet = eth0 #Extranet wan extranet = eth1 # Keep state. Tot el que ja està connectat (establert) ho deixem així iptables -A INPUT -m state --state ESTABLISHED, RELATED -j ACCEPT # Loop device. iptables -A INPUT -i ho -j ACCEPT # http, https, no especifiquem la interfície perquè # volem que sigui per totes iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp - dport 443 -j ACCEPT # ssh només internament i des d'aquest rang de ip s iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 7659 -j ACCEPT # monitoratge per exemple si tenen Zabbix o algun altre servei snmp iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 10050 -j ACCEPT # icmp, ping bo és decisió teva iptables -A INPUT -p icmp -s 192.168.xx / 24 - i $ intranet -j ACCEPT #mysql amb postgres és el port 5432 iptables -A INPUT -p tcp -s 192.168.xx --sport 3306 -i $ intranet -j ACCEPT #sendmail bueeeh si vols enviar algun correu #iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT # Anti-SPOOFING 09 # SERVER_IP = "07.xxx" # server IP - la ip wan real del teu servidor LAN_RANGE = "2014.xx / 190" # Rang LAN de la teva xarxa o de la teva vlan # Ip que no haurien d'entrar per l'extranet mai,és usar una mica de # lògica si tenim una interfície netament WAN no hauria mai entrar # trànsit tipus LAN per aquesta interfície 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 "# Acció per defecte - que es realitzés quan faci matx alguna regla ACTION =" DROP "# Paquets amb la mateixa ip del meu servidor per la wan iptables -A INPUT -i $ extranet -s $ SERVER_IP -j $ ACTION # iptables -A OUTPUT -o $ extranet -s $ SERVER_IP -j $ ACTION # Paquets amb el rang LAN per la wan, el col·loco així per si tens # alguna xarxa particular, però això és redundant amb la següent # regla dins de l'bucle " for "iptables -A INPUT -i $ extranet -s $ LAN_RANGE -j $ ACTION iptables -A OUTPUT -o $ extranet -s $ LAN_RANGE -j $ ACTION ## Totes les Xarxes spoof no permeses per la wan for ip in $ SPOOF_IPS do iptables -A INPUT -i $ extranet -s $ ip -j $ ACTION iptables -A OUTPUT -o $ extranet -s $ ip -j $ ACTION done
Com sempre espero els seus comentaris, romanguin sintonitzats en aquest bloc, Gràcies
Em serveix per seguir aprenent una mica més gràcies copiat.
de res, m'alegro de ser d'ajuda
Ho sento molt, però tinc dues preguntes (i una de regal 😉):
Arribaria amb aquesta configuració per tenir Apache funcionant i tancar la resta excepte SSH?
#Limpiamos taules
iptables -F
iptables -X
netegem NAT
iptables -t nat -F
iptables -t nat -X
iptables -A INPUT -p tcp -dport 80 -j ACCEPT
ssh només internament i des d'aquest rang de ip s
iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet -dport 7659 -j ACCEPT
Segona pregunta: És el 7659 el port que s'usa en SSH en aquest exemple?
I tercera i última: en què arxiu s'ha de guardar aquesta configuració?
Moltes gràcies pel tutorial, és una pena que sigui tan novell i no pugui aprofitar-bé.
aquesta és la regla que necessites per http d'apatxe
iptables -A INPUT -p tcp -dport 80 -j ACCEPT
però també necessites declarar les polítiques per defecte de drop (està en l'script)
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
i aquesta per que si aquestes remot, et va a botar.
iptables -A INPUT -m state -state ESTABLISHED, RELATED -j ACCEPT
si 7659 és el port d'aquest servidor ssh de l'exemple, per defecte és 22, encara que et recomano canviar a un port «no ben conegut»
home no es, com tu vulguis ... firewall.sh i ho col·loques en rc.local (sh firewall.sh) perquè s'executi automàtic, depèn de quin sistema operatiu tinguis existeixen arxius on pots posar les regles directament.
Eii bre molt bo el teu script, analitzant ... .sabes com podria denegar totes les peticions dels meus usuaris a un lloc web específic? .... però aquest lloc web té molt servidors ....
Et recomano altres opcions:
1) Pots crear una zona falsa en el teu dns ...
2) Pots col·locar un proxy amb acl
embargament de pecat
Per iptables pots aixi ... no sempre és la millor opció (existeixen mes formes)
iptables -A INPUT -s bloc.desdelinux.ne -j DROP
iptables -A OUTPUT -d bloc.desdelinux.net -j DROP
Explica'm si funciono
Gràcies per la resposta, tot aclarit. El de l'port el preguntava perquè em va estranyar fer servir el 7659, ja que els ports privats comencen al 49152, i podria interferir amb algun servei o alguna cosa.
De nou, gràcies per tot, així dóna gust!
Salutacions.
BrodyDalle com puc posar-me en contacte amb vostè? Molt interessant la seva script.
soulofmarionet_1@hotmail.com
La davant última línia «iptables -A OUTPUT -o $ extranet -s $ ip -j $ ACTION» està per evitar que la teva pròpia màquina faci spoofing? ¿O és possible que ingressi algun paquet enverinat i pugui sortir amb aquest source enverinat i per això també s'inclou la regla amb OUTPUT?
Moltes gràcies per l'aclariment !!!
aquest és el meu propi script d'iptables, és molt complet:
# franes.iptables.airoso
# Doc.iptables.airoso: iptables per legacy i per NFT
#
# Ports de l'tallafocs
############################
#! / Bin / bash
#
# Neteja la pantalla
############################### inici de /etc/f-iptables/default.cfg |||||
clear
# Deixa una linea en blanc
trobo
export si = »» no = »trobo off»
# Les variables que pots canviar per permetre accés
###################### variables per ajustar fent $ si o $ no
export hayexcepciones = »$ no»
# Hayexcepciones: $ si per permetre host excepcioneles i $ no per desactivar
export hayping = »$ no»
# Hayping: $ si per permetre els pings a tercers i $ no per denegar
export haylogserver = »$ no»
# Haylogeosserver: $ si per poder logear tcp $ no per no poder logear tcp
######
###################### variables a modificar afegint «,» o amb rangs de «:»
export excepcions = »baldras.wesnoth.org»
# Excepcions permetre a un o diversos host des del tallafocs o sense valor
export logserver = discard, ipp, dict, ssh
# Ports servidor TCP als quals es guarda registre quan entren paquets
export redserver = 0/0
# Redserver: la xarxa per a ports servidors preferible xarxa local o diverses ips
export redcliente = 0/0
# Redcliente: la xarxa per a ports clients preferible totes les xarxes
export servidortcp = discard, ipp, dict, 6771
# Servidortcp: els ports servidors tcp especificats
export ServidorUDP = discard
# ServidorUDP: els ports servidors udp especificats
export ClientUDP = domain, bootpc, bootps, ntp, 20000: 45000
# ClientUDP: els ports clients udp especificats
export clientetcp = domain, http, https, ipp, git, dict, 14999: 15002
# Clientetcp: els ports clients tcp especificats
############################## cap de /etc/f-iptables/default.cfg |||||
############################### fi de variables per modificar
export tallafocs = $ 1 variables = $ 2
if [ "$ variables» = «$ NULL»]; then source /etc/f-iptables/default.cfg;
else source / etc / f-iptables / $ 2; fi
############################### o va sobreescriure les variables amb un archivo.cfg
################################################## ##########################################
export tallafocs = $ 1 export variables = $ 2
########################################## variables automàtiques de sistema
if [ "$ tallafocs» = «desconnectat»]; then echo FIREWALL DESCONNECTAT;
export activarservidor = »$ no» activarcliente = »$ no» mullat = »$ no»;
elif [ «$ tallafocs» = «client»]; then echo FIREWALL CLIENT;
export activarservidor = »$ no» activarcliente = »» mullat = »$ no»;
elif [ «$ tallafocs» = «servidor»]; then echo FIREWALL SERVIDOR;
export activarservidor = »» activarcliente = »$ no» mullat = »$ no»;
elif [ «$ tallafocs» = «clienteyservidor»]; then echo FIREWALL CLIENT I SERVIDOR;
export activarservidor = »»; export activarcliente = »»; export mullat = »$ no»;
elif [ «$ tallafocs» = «permissiu»]; then echo FIREWALL permissiu;
export activarservidor = »$ no» activarcliente = »$ no» mullat = »»;
else
$ Comprova sudo echo iptables-legacy:
$ Comprova sudo iptables-legacy -v -L INPUT
$ Comprova sudo iptables-legacy -v -L OUTPUT
$ Comprova sudo echo iptables-NFT:
$ Comprova sudo iptables-NFT -v -L INPUT
$ Comprova sudo iptables-NFT -v -L OUTPUT
trobo _____parmetros____ $ 0 $ 1 $ 2
trobo «llança sense paràmetres és per llistar iptables.»
trobo «El primer paràmetre (activar iptables): desconnectat o client o servidor o clienteyservidor o permissiu.»
trobo «El segon paràmetre: (opcional): el archivo.cfg per defecte tria /etc/f-iptables/default.cfg»
trobo «Les configuracions de les variables:» $ (ls / etc / f-iptables /)
èxit 0; fi
################
trobo
trobo Llança $ 0 desconnectat o client o servidor o clienteyservidor o permissiu o variables o sense usar paràmetre per llistar iptables.
trobo El fitxer $ 0 conté algunes variables editables dins.
################################ les anteriors variables activades
################################
trobo configurant les variables d'iptables
trobo variables activades
trobo
############################ les regles d'iptables
trobo configurant iptables-legacy
suo / usr / sbin / iptables-legacy -t filter -F
suo / usr / sbin / iptables-legacy -t nat -F
suo / usr / sbin / iptables-legacy -t mangle -F
suo / usr / sbin / ip6tables-legacy -t filter -F
suo / usr / sbin / ip6tables-legacy -t nat -F
suo / usr / sbin / ip6tables-legacy -t mangle -F
suo / usr / sbin / ip6tables-legacy -A INPUT -j DROP
suo / usr / sbin / ip6tables-legacy -A OUTPUT -j DROP
suo / usr / sbin / ip6tables-legacy -A FORWARD -j DROP
suo / 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
$ Hayexcepciones sudo / usr / sbin / iptables-legacy -A INPUT -s $ excepcions -j ACCEPT> / dev / null
$ Activarservidor sudo / usr / sbin / iptables-legacy -A INPUT -p udp -m multiport -dports $ ServidorUDP -s $ redserver -d $ redserver -j ACCEPT> / dev / null
$ Activarservidor sudo / usr / sbin / iptables-legacy -A INPUT -p tcp -m multiport -dports $ servidortcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
$ Activarcliente sudo / usr / sbin / iptables-legacy -A INPUT -p udp -m multiport -sports $ ClientUDP -m state -state established -s $ redcliente -d $ redcliente -j ACCEPT> / dev / null
$ Activarcliente sudo / usr / sbin / iptables-legacy -A INPUT -p tcp -m multiport -sports $ clientetcp -m state -state established -s $ redcliente -d $ redcliente -j ACCEPT> / dev / null
$ Hayping sudo / usr / sbin / iptables-legacy -A INPUT -p icmp -icmp-type echo-reply -j ACCEPT> / dev / null
suo / usr / sbin / iptables-legacy -A INPUT -j DROP> / dev / null
suo / usr / sbin / iptables-legacy -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
$ Hayexcepciones sudo / usr / sbin / iptables-legacy -A OUTPUT -d $ excepcions -j ACCEPT> / dev / null
$ Activarservidor sudo / usr / sbin / iptables-legacy -A OUTPUT -p udp -m multiport -sports $ ServidorUDP -s $ redserver -d $ redserver -j ACCEPT> / dev / null
$ Activarservidor sudo / usr / sbin / iptables-legacy -A OUTPUT -p tcp -m multiport -sports $ servidortcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
$ Activarcliente sudo / usr / sbin / iptables-legacy -A OUTPUT -p udp -m multiport -dports $ ClientUDP -s $ redcliente -d $ redcliente -j ACCEPT> / dev / null
$ Activarcliente sudo / usr / sbin / iptables-legacy -A OUTPUT -p tcp -m multiport -dports $ clientetcp -s $ redcliente -d $ redcliente -j ACCEPT> / dev / null
$ Hayping sudo / usr / sbin / iptables-legacy -A OUTPUT -p icmp -icmp-type echo-request -j ACCEPT> / dev / null
suo / usr / sbin / iptables-legacy -A OUTPUT -j DROP
suo / usr / sbin / iptables-legacy -A FORWARD -j DROP
trobo iptables-legacy activat
trobo
trobo configurant iptables-NFT
suo / usr / sbin / iptables-NFT -t filter -F
suo / usr / sbin / iptables-NFT -t nat -F
suo / usr / sbin / iptables-NFT -t mangle -F
suo / usr / sbin / ip6tables-NFT -t filter -F
suo / usr / sbin / ip6tables-NFT -t nat -F
suo / usr / sbin / ip6tables-NFT -t mangle -F
suo / usr / sbin / ip6tables-NFT -A INPUT -j DROP
suo / usr / sbin / ip6tables-NFT -A OUTPUT -j DROP
suo / usr / sbin / ip6tables-NFT -A FORWARD -j DROP
suo / 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
$ Hayexcepciones sudo / usr / sbin / iptables-NFT -A INPUT -s $ excepcions -j ACCEPT> / dev / null
$ Activarservidor sudo / usr / sbin / iptables-NFT -A INPUT -p udp -m multiport -dports $ ServidorUDP -s $ redserver -d $ redserver -j ACCEPT> / dev / null
$ Activarservidor sudo / usr / sbin / iptables-NFT -A INPUT -p tcp -m multiport -dports $ servidortcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
$ Activarcliente sudo / usr / sbin / iptables-NFT -A INPUT -p udp -m multiport -sports $ ClientUDP -m state -state established -s $ redcliente -d $ redcliente -j ACCEPT> / dev / null
$ Activarcliente sudo / usr / sbin / iptables-NFT -A INPUT -p tcp -m multiport -sports $ clientetcp -m state -state established -s $ redcliente -d $ redcliente -j ACCEPT> / dev / null
$ Hayping sudo / usr / sbin / iptables-NFT -A INPUT -p icmp -icmp-type echo-reply -j ACCEPT> / dev / null
suo / usr / sbin / iptables-NFT -A INPUT -j DROP> / dev / null
suo / usr / sbin / iptables-NFT -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
$ Hayexcepciones sudo / usr / sbin / iptables-NFT -A OUTPUT -d $ excepcions -j ACCEPT> / dev / null
$ Activarservidor sudo / usr / sbin / iptables-NFT -A OUTPUT -p udp -m multiport -sports $ ServidorUDP -s $ redserver -d $ redserver -j ACCEPT> / dev / null
$ Activarservidor sudo / usr / sbin / iptables-NFT -A OUTPUT -p tcp -m multiport -sports $ servidortcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
$ Activarcliente sudo / usr / sbin / iptables-NFT -A OUTPUT -p udp -m multiport -dports $ ClientUDP -s $ redcliente -d $ redcliente -j ACCEPT> / dev / null
$ Activarcliente sudo / usr / sbin / iptables-NFT -A OUTPUT -p tcp -m multiport -dports $ clientetcp -s $ redcliente -d $ redcliente -j ACCEPT> / dev / null
$ Hayping sudo / usr / sbin / iptables-NFT -A OUTPUT -p icmp -icmp-type echo-request -j ACCEPT> / dev / null
suo / usr / sbin / iptables-NFT -A OUTPUT -j DROP
suo / usr / sbin / iptables-NFT -A FORWARD -j DROP
trobo iptables-NFT activat
trobo
$ Mullat sudo / usr / sbin / iptables-legacy -F> / dev / null
$ Mullat sudo / usr / sbin / iptables-legacy -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
$ Mullat sudo / usr / sbin / iptables-legacy -A INPUT -m state -state established -j ACCEPT> / dev / null
$ Mullat sudo / usr / sbin / iptables-legacy -A INPUT -j DROP> / dev / null
$ Mullat sudo / usr / sbin / iptables-legacy -A OUTPUT -j ACCEPT> / dev / null
$ Mullat sudo / usr / sbin / iptables-legacy -A FORWARD -j DROP> / dev / null
$ Mullat sudo / usr / sbin / iptables-NFT -F> / dev / null
$ Mullat sudo / usr / sbin / iptables-NFT -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
$ Mullat sudo / usr / sbin / iptables-NFT -A INPUT -m state -state established -j ACCEPT> / dev / null
$ Mullat sudo / usr / sbin / iptables-NFT -A INPUT -j DROP> / dev / null
$ Mullat sudo / usr / sbin / iptables-NFT -A OUTPUT -j ACCEPT> / dev / null
$ Mullat sudo / usr / sbin / iptables-NFT -A FORWARD -j DROP> / dev / null
###########################
trobo has llançat $ 0 $ 1 $ 2
# Surt de l'script
exit 0
c'omo faria per posar una regla si aquest tallafocs ho usés per a mi gateway i tingués un squid dins de la LAN ???