firewall
DESCRIPTION
FirewallTRANSCRIPT
-
FIREWALLENALTADISPONIBILIDADNorbertoAltalef
RedKleeArgentina________________________________________________________________________
1AlcancesSedescribirenestedocumentolasventajasylaconfiguracindeunaestructuradefirewallenaltadisponibilidad,utilizandoherramientasOpenSource.
2VentajasUnaestructuradefirewallenaltadisponibilidadpresentalassiguientesventajas:
Continuidaddeserviciofrenteafallasdehardware. Posibilidaddeusarhardwarestandard(PCclone)parafuncionescrticas. Permitiractualizacionesdesoftwaresininterrupcindelservicio. Siademssepuedecontarconmsdeunaconexinainternet,puedecontinuarse
elservicioanfrenteaunacadadeunodelosenlaces.
Firewallstateful.Sincronizacindeestadosdeconexiones.Unfirewallstatefulesaquelquellevauncontroldelasconexionesestablecidas,demaneraquepuededeterminarsiunpaqueteperteneceonoaunaconexin.Sisedeterminaqueperteneceaunaconexin,seloaceptasinnecesidaddevalidarlocontralasreglas.Estobrindaunanotablemejoradeperformance.
Cuandosequiereestablecerunaconfiguracindealtadisponibilidad,esnecesariocontarconunmecanismoparaqueelfirewallqueestinactivo(backup)tengainformacindelasconexionesyaestablecidas.Siestonoocurre,encasodefalladelfirewallprincipalcuandoeldebackuptomesulugarcancelartodaslasconexionesyaestablecidas.
3PropuestaLapropuestacontemplarlossiguientesaspectos:
1Instalarunaestructuradefirewallconequiposredundantes.2Contarconalmenosdosaccesosinternet,provistospordistintosproveedores(ISP).3Frenteaunafallaelusuarionodebetenerningunainterrupcindesuconexin.4Posibilidaddeusarlosdosenlacesinternetunocomoactivoyelotrocomobackupotenerlosambosactivos.
4ImplementacinParalaestructuradefirewallredundanteslapropuestaesrealizarloconunainstalacinbasadaenelsistemaoperativoOpenBSD.
LadecisindeusarOpenBSDsebasaenvariosaspectos:
FirewallenaltadisponibilidadPgina:1de11
-
Sistemaoperativomuyestableytotalmenteorientadodesdesuconcepcinhacialaseguridad.
Softwaredefiltradodepaquetespf,muysencillodeusaryconmuchasfuncionalidadesintegradas.
ConfiguracindealtadisponibilidadusandoelprotocoloCARP,estabilizadadesdehacevariasversiones.
Pseudointerfacepfsyncquepermiteconfigurarunfirewall"stateful"enaltadisponibilidad.
Instalacinmuysencilla,queocupapocoespacioendiscoyconrequerimientosdehardwaremnimos.
Ampliandolospuntosanteriores:
1. OpenBSDesunodelossistemasoperativosmssegurosybiendiseadosdisponiblesactualmente.Peseaquelasracesdeestesistemaoperativoseremontanalosaos70enlosprimerosdasdeUNIX,OpenBSDhaevolucionadosiendoenlaactualidadunsistemaconunfuertedesarrolloymuyusadoengrancantidaddeinstalaciones.BSD(BerkeleySoftwareDistribution)fueunaderivacindelUnixdeAT&Tafinesdelosaos70.ApartirdeBSDaprincipiosdelosaos90sederivaronNetBSDyFreeBSD.TheodeRaadt,queestodavaelliderdelproyecto,sesepardelproyectoNetBSDenOctubrede1995yliberlaversin2.0deOpenBSDamediadosde1997.Elobjetivodelproyectoesdisponerdeunsistemaoperativocompacto,muybiendocumentadoyconextremocuidadoentemasdeseguridad.
2. pfeselsoftwaredefiltradodepaquetes(packetfilter)deOpenBSD.AdemsdefiltrartrficoTCP/IPpuedehacertambintraslacindedirecciones(NATNetworkAddressTraslation),tambienincluyelafuncindenormalizacindetrficoTCP/IP,ascomocontroldeanchodebanda.Lasintaxisesmuyintuitivaypermiterealizarfirewallpotentesconarchivosdeconfiguracinsencillos.AscomotodoelproyectoOpenBSD,tieneunaexcelentedocumentacin.Estdisponibleenelkernelgenricodesdeelao2001(versinOpenBSD3.0)porloqueesmuyestableyprobado.Atravsdelosaosselehanagregadomuchasfuncionalidades.
3. ElpropsitodeCARP(CommonAddressRedundancyProtocol)eseldepermitirquevarioshostsenelmismosegmentodered,compartanunadireccinIP.CARPesunaalternativagratisaVRRP(VirtualRouterRedundancyProtocol)yHSRP(HotStandbyRouterProtocol)ElgrupodehostsquecomparteunadireccinIPsedenomina"grupoderedundancia".Dentrodeungrupounhostsedesignacomomasterylosdemscomobackups.ElhostmasteresquienrespondealtrficodirigidoaladireccinIPcompartida.Encasodefalladelmaster,elhostbackupdemayorprioridadesquienpasaateneridentidaddemaster.
4. Lainterfacevirtualpfsyncexponeloscambiosenlatabladeestadosusadaporpf.Siestainterfacevirtualseasociaaunainterfacefsicaestoscambiosdeestado
FirewallenaltadisponibilidadPgina:2de11
-
puedensertransmitidosaotroshosts,demaneraquetodosloshostsdeungrupopuedantenerlainformacindelatabladeestadosdelhostmaster.Encasodetenerquetomarsulugarlasconexionespuedenseguirsininterrupcin.Estopermiteconfigurarfirewallsstatefulenaltadisponibilidad.
5. LainstalacindeOpenBSDquepermiteconfigurartodasestasopcionesesmuyrpida,ocupamuypocoespacioendiscoytienebajosrequerimientosdehardware.
DetallesdelaimplementacinEnelsiguientegrficoserepresentanlosesquemasdeconexindeunainstalacindeunfirewallquetiene:
DosequiposenaltadisponibilidadDosproveedoresdeinternetUnazonadesprotegida.EXTERNAUnazonadesmilitarizada.DMZUnazonaprotegida.INTERNA
Encadaunadelasinterfaces,cadaequipotienesupropiadireccinIPyasuvezhayunadireccinIPdecadainterfacecarp.EstaesladireccinIPque"ven"losdemsequiposconectados.
FirewallenaltadisponibilidadPgina:3de11
-
Estoes:
if1=interfacedecadaequipoenlareddelISP1.carp1=interfacedelconjuntoenlareddelISP1.
if2=interfacedecadaequipoenlareddelISP2carp2=interfacedelconjuntoenlareddelISP2
if3=interfacedecadaequipoenlaDMZcarp3=interfacedelconjuntoenlaDMZ
if4=interfacedecadaequipoenlaredinternacarp4=interfacedelconjuntoenlaredinterna
if5=interfaceentrecadaequipo
LasinterfacesiftienenunaIPdistintaencadaequipo.Lasinterfacescarptienenunaipnica.
Comodecamosantes,enestaconfiguracinunodelosequiposseconfiguracomomasteryesquien"maneja"laIPvirtualdecadainterface.
Elotroequiposeconfiguracomobackupysoloempiezaafuncionarantelafalladelmaster.
Seutilizaunainterfacequevinculaambosequipos,queparatenerbajalatenciayseguridadsuelesersimplementeuncablederedcruzado,espordondesetransfierenlospaquetesdepfsync,paramantenerlastablasdeestadosincronizadas.
Cmoseenteraelhostbackupqueelhostmasterestactivo?Lacaractersticadelprotocolocarpesquelosequiposquesonmasterseanunciancomoactivosenviandoaintervalosregularespaquetesdedatos.
Parausarcarp,senecesitaconfigurarencadainterfacedecadahostunVirtualHostID(VHID),unadireccinIPvirtualyademsdosparmetrosquesonadvbaseyadvskew,quecontrolancuanfrecuentementeseenvaunanuncio.
Cuandounhostrecibeanunciosconunadvbasemenoralpropio,suponequeotrohostestactuandocomomaster.Cuandodejaderecibirlos,comienzaaenviarlosanuncios,indicandoqueahoraesehosttienelafuncindemaster.Sisequierentenervarioshostbackup,sedefinelaprioridadconquedebenactuarcomomasterasignandovalorescrecientesdelparmetroadvbase.
Todoslosparmetrosdeconfiguracindecarp,seasignanconelcomandoifconfigqueenestesistemaoperativomanejatodoslostiposdeinterfacestantoseanrealescomovirtuales.Estosimplificamuchsimolaconfiguracin.Paramsdetallesver:man(8)ifconfigAmododeejemplo,veamoslaconfiguracindelainterfaceconunodelosdosISP.
Enelequipomaster:
FirewallenaltadisponibilidadPgina:4de11
-
ifconfigif1201.202.203.204netmask255.255.255.0ifconfigcarp1201.202.203.210vhid1advsbase0pass1234carpdevif1
Enelequipobackup:
ifconfigif1201.202.203.205netmask255.255.255.0ifconfigcarp1201.202.203.210vhid1advsbase10pass1234carpdevif1
Elsignificadodelosparmetroseselsiguiente:
if1:nombredelainterfacefsica(verNota)carp1:nombredelainterfacevirtual201.202.203.204:direccinIPdelhostmaster201.202.203.205:direccinIPdelhostbackup201.202.203.210:direccinIPdelainterfacevirtualvhid:virtualhostidadvbase:valorbasequedeterminasielhostesmasterobackuppass:passwordqueseusaparalaautenticacindelosmensajescarpdev:interfacefsicaasociada
Nota:enOpenBSDadiferenciadeLinuxelnombredeunainterfacedependedeldriverdelkernelquelamaneje.Osealaprimerinterfacenosereth0siempre,sinoquevariardependiendodelamarcaymodelodelatarjetadered.(Ejemplo:em0siesunatarjetaIntel10/100/1000,xl0siesunatarjeta3COM3c9xx).
Paraqueloscomandosdeconfiguracindecadainterfacesetomenenelboot,debeexistirporcadaunadelasinterfacesunarchivo/etc/hostname.if,dondesedebenincluirlosparmetrosquerecibeelcomandoifconfig.Sepuedenincluirparmetrosadicionalesquefijenporejemploelmododeoperacindelainterface(100MBFullDuplex,etc)ytambienejecutarcomandosenelmomentodelainicializacindelainterface.Paramsdetallesver:man(5)hostname.if
firewallstatefulypfsyncUnadelasgrandesventajasdeutilizarOpenBSD,esqueestresueltoenformamuyconfiableysencillaelmecanismoparaqueelolosfirewalldebackuptenganconocimientodelosestadosestablecidosenelfirewallmaster.Esto,comodijimosantes,permiteconfigurarreglasquegenerenestadoyqueencasodefallalasconexionesestablecidasnoseveanafectadas.Paraestoseusalapseudointerfacepfsync.Puedefcilmenteasociarsepfsyncconunainterfacefsica.Paraquelosfirewallmantengansincronizadassustablasdeestado,sernecesariosolamentecrearencadaequipounarchivo/etc/hostname.pfsync0,conelsiguientecontenido:
/etc/hostname.pfsync0:
upsyncdevif5
FirewallenaltadisponibilidadPgina:5de11
-
if5eselnombredelainterfacequesededicaaestasincronizacin.Cmomanejardosproveedoresdeinternet?Unaalternativaestenerunproveedorprincipalyotrodebackup.Mientraselproveedorprincipalestactivoseenvaeltrficoporestaconexinysisedetectaunafallasecomienzaaenviarporeldebackup.Otraalternativaesqueambasconexionesestnactivassimultneamente.Sibienesperfectamenteposibleenviarelmismotipodetrficoporambasinterfaces,estoavecestraeinconvenientesconsitiossegurosenloscualessevalidanlasdireccionesIPdeorigen.Unaalternativainteresanteesmanejarporcadaenlacedistintostiposdetrfico.Porejemplo,trficodenavegacin(httpyhttps)porunISPytrficodemailyotrosprotocolosporotroISP.Encasodefalladecualquieradelosenlaces,sepuedemanejartodoeltrficoporelrestante.
Cmopuedehacerseesteruteovariable?Todasestasfuncionalidadespuedenmanejarsedirectamenteconpocasreglasdelsistemadefiltradodepaquetespf.EstacapacidaddelfiltradodepaquetesdeOpenBSDesloquebrindamuchasposibilidadesdeimplementacin.
Supongamoslossiguientesrequerimientos:
Permitirdesdelaredinternaaccesohaciainternetdelospuertosdehttpyhttps.RutearestetrficoporelISP1.Permitirdesdelaredinternaaccesohaciainternetdelospuertosdepop3ysmtp.RutearestetrficoporelISP2.Nopermitirtrficoiniciadoeninternethacialaredinterna.
Veamosalgunasreglasparaobtenerestafuncionalidad.
#Variablesext_if1="if1"#interfacedondeseconectaelISP1ext_if2="if2"#interfacedondeseconectaelISP2int_if="if3"#interfacedondeseconectalaredinternawww_ports="{"80443"}"#portspermitidosparanavegacinmail_ports="{"25110"}"#portspermitidosparamail
#NATdecualquierserverdelaredinternaconlaIPdelainterfaceexterna#correspondienteacadaISPnaton$ext_if1from$int_if:networktoany>$ext_if1naton$ext_if2from$int_if:networktoany>$ext_if2
#Inicialmentesebloqueatodoeltrficodeentrada.blockinlog
#Peseaquepfpuedebloqueartantoeltrficodeentradaodesalida,esms#simplefiltrarenunadireccin.#Elegimosfiltrareltrficodeentrada.Unavezquesepermiteeltrficodeentrada#enunainterface,nosebloqueasusalida.Laopcinkeepstate,indicaquese#genereunestadoparalasconexiones(firewallstateful)
FirewallenaltadisponibilidadPgina:6de11
-
passoutkeepstate
#AceptamosenlainterfaceinternatrficohttpyhttpsyseruteaporISP1passinon$int_ifrouteto($ext_if1)inetprototcpfrom$int_if:networktoanyport\ $www_portskeepstate
#Aceptamosenlainterfaceinternatrficosmtpypop3yseruteaporISP2passinon$int_ifrouteto($ext_if2)inetprototcpfrom$int_if:networktoanyport\ $mail_portskeepstate
Sepuedeobservarqueconmuypocasreglas(6entotal)seobtienelafuncionalidaddeseada.
CmodetectarfallasdeunISPycomocambiarlasreglasdefiltrado?Paradetectarlacadadeunaconexinsedisponedeifstated.Estedaemonpuedemonitorearlasinterfacesyasuvezejecutarcomandosexternosparamonitorearconexiones.Dependerdecadatipodeconexincomosemonitoree.UnavezquesedetectlacadadeunISP,esnecesariocambiarlasreglasdefiltradopararedireccionareltrfico.Estonuevamentepuedehacerseutilizandounafuncionalidaddepf,queenestecasoeselconceptodeanchor,quepermitetenerreglasdefinidasquepuedencargarseydescargarseenformadinmicasinnecesidaddehacerloconeljuegocompletodereglas,yaqueestoafectaralasconexionesexistentes,queseestncursandoporelISPquenofall.
Veamosestoenmsdetalle:
Eldaemonifstatedpuedeejecutarcomandosenrespuestaacambiosenelestadodelasinterfaces.Elestadodelasinterfacespuededeterminarsemonitoreandoelestadodellinkoejecutandocomandosexternos.Tieneunarchivodeconfiguracinquees/etc/ifstated.conf
ifstatedtienedefinidos3estadosposiblesparaunlink,queson:
up: Lainterfacefsicatieneconexinactiva.Paraunainterfacecarp,representaqueinterfaceestcomomaster.
down: Lainterfacefsicanotieneconexinactiva.Paraunainterfacecarp,representaquelainterfaceestcomobackup.
unknown: Nosepuededeterminarelestadodelaconexnfsica.Paraunainterfacecarpestorepresentaelestadoinit.
Enmuchoscasosestainformacinnoessuficiente.Ennuestrocasoenparticular,perfectamentepodemostenerlinkhaciaelrouterquenosconectaconunISPyesterouternotenerconexinhaciainternet.Senecesitaalgunaformaexternadeverificarestaconexin.ifstatedpermiteejecutarcomandosexternosytomaraccionesverificandoelstatusqueestoscomandosretornen.Porejemplohaciendounpingdeunospocospaqueteshaciaunserverconocido,puedeindicarsilaconexinestactiva.
Dentrodeifstated.conf,sepuedendefinirvariablescomolassiguientes:
FirewallenaltadisponibilidadPgina:7de11
-
carp_up="carp0.link.up&&carp1.link.up"
net='("pingqc1w1192.168.0.1>/dev/null"every10&&\"pingqc1w1192.168.0.2>/dev/null"every10)'
Lavariablecarp_up,dependedelosestadosdedosinterfacescarp.Enestecasoenqueseamasterenambasinterfaces.
Lavariablenet,dependedelaconectividadcondosIP.Paraverificarestoseenvaunpingconunafrecuenciade10seg(palabraclaveevery).
Estadosenifstatedifstatedoperaconestadosytransiciones.
Cadaestadotieneunabloquedeinicioyuncuerpo.Elbloquedeinicio,seutilizaparainicializarelestadoyseejecutacadavezqueseingresaenesteestado.Elcuerpodelestadosoloseejecutacuandoelestadoeselactualyocurreunevento.
Lasaccionesatomardentrodeunciertoestadonormalmenteimplicanunoomssentenciasif.Lasposiblesaccionesincluyenejecutaruncomandousandorunodispararunatransicinconsetstate.
Comoejemplomostramosdelarchivodeconfiguracinusadoenlaimplementacin.
#TestdeISP1eISP2ISP1='("/etc/ifstated.scripts/test_ispisp1"every30)'ISP2='("/etc/ifstated.scripts/test_ispisp2"every30)'
#AmbosISPactivosstatebothup{init{run"/etc/ifstated.scripts/start"}if(!$ISP1&&$ISP2)setstateISP1downif!$ISP2&&$ISP1setstateISP2downif!($ISP1||$ISP2)setstatebothdown}
#FallaISP1stateISP1down{init{run"/etc/ifstated.scripts/isp2"}if($ISP1&&$ISP2)setstatebothup
FirewallenaltadisponibilidadPgina:8de11
-
if!($ISP1||$ISP2)setstatebothdownif!$ISP2&&$ISP1setstateISP2down}
#FallaISP2stateISP2down{init{run"/etc/ifstated.scripts/isp1"}if($ISP2&&$ISP1)setstatebothupif!($ISP1||$ISP2)setstatebothdownif!$ISP1&&$ISP2setstateISP1down}
#AmbosISPconfallastatebothdown{init{run"/etc/ifstated.scripts/start"}if($ISP2&&$ISP1)setstatebothupif($ISP1&&!$ISP2)setstateISP2downif($ISP2&&!$ISP1)setstateISP1down}
Enelscripttest_ispseejecutaparacadaISPunpingadosdireccionesconocidas.Previamentesesetearonlasrutasnecesarias.Conquealmenosunadelasdosdireccionesrespondaelping,seconsideraqueelISPestactivo.
Enlosscriptsisp1eisp2secambianlasreglasdepf,demaneradeenviareltipodetrficonormalmenteenviadoporelISPquefall,porelquequedactivo.Paraevitarcargartodaslasreglasnuevamente,seusaelconceptodeanchorquetienepf.
Msalldeljuegoprincipaldereglas,pfpuedecargarreglasadicionales,enpuntosdenominadosanchors.Unanchorpuedeincluirreglas,variableseinclusootrosanchor.Laventajadeesteesquemaesquelasreglasquetieneelanchorpuedenestarfijasconanterioridadomodificarseenformadinmica,peroencualquiercasopuedencargarseydescargarsesinafectarlasotrasreglas,nilosestadosyaestablecidos.
FirewallenaltadisponibilidadPgina:9de11
-
Paraelejemploanterior,podranagregarse2anchorluegodelasreglasdefiltrado,demaneraquequedarancomosigue:
#AceptamosenlainterfaceinternatrficohttpyhttpsyseruteaporISP1passinon$int_ifrouteto($ext_if1)inetprototcpfrom$int_if:networktoanyport\ $www_portskeepstate
#Aceptamosenlainterfaceinternatrficosmtpypop3yseruteaporISP2passinon$int_ifrouteto($ext_if2)inetprototcpfrom$int_if:networktoanyport\ $mail_portskeepstate
#Anchorporfalladeisp1anchorisp1
#Anchorporfalladeisp2anchorisp2
Enestecasotendramosdosarchivos,conlasreglasquedebecargarcadaanchor.Porejemplo:
/etc/anchor.isp1,deberatenerelsiguientecontenido:
#Variables
ext_if1="if1"#interfacedondeseconectaelISP1ext_if2="if2"#interfacedondeseconectaelISP2int_if="if3"#interfacedondeseconectalaredinternawww_ports="{"80443"}"#portspermitidosparanavegacinmail_ports="{"25110"}"#portspermitidosparamail
#AceptamosenlainterfaceinternatrficohttpyhttpsyseruteaporISP2passinon$int_ifrouteto($ext_if2)inetprototcpfrom$int_if:networktoanyport\ $www_portskeepstate
/etc/anchor.isp2,deberatenerelsiguientecontenido:
#Variables
ext_if1="if1"#interfacedondeseconectaelISP1ext_if2="if2"#interfacedondeseconectaelISP2int_if="if3"#interfacedondeseconectalaredinternawww_ports="{"80443"}"#portspermitidosparanavegacinmail_ports="{"25110"}"#portspermitidosparamail
#Aceptamosenlainterfaceinternatrficosmtpypop3yseruteaporISP1passinon$int_ifrouteto($ext_if1)inetprototcpfrom$int_if:networktoanyport\ $mail_portskeepstate
Unpardeobservaciones:
FirewallenaltadisponibilidadPgina:10de11
-
EnlosanchornosetrasladanlasdefinicionesdeMACROS(variables)quesehayanhechoenlareglaprincipal,porloquedebeserincludasencadadefinicin.
Enpfeslaltimareglaquevalidelaquesetomaencuenta.
Deestamaneralosarchivos/etc/ifstated.scripts/isp1y/etc/ifstated.scripts/isp2,queseejecutanen/etc/ifstated.conf,tendrnlassiguientesinstruccionesparacambiarlosreglasdefiltrado:
isp1:pfctlaisp1f/etc/anchor.isp1isp2:pfctlaisp2f/etc/anchor.isp2
AestopuedesernecesariocambiarrutasoalgnaotraconfiguracinasociadaconundadoISP.
Elesquemaesmuyflexibleyelmostradoessolounadelasopcionesposibles.
Conesteartculosemuestralasposibilidadesdeimplementacindeunfirewallredundante,usandoOpenBSD.ComoadicionalpuedeconfigurarseelfirewallcomoconcentradordeVPNsusandoIPSec.ElsistemaoperativotienesoporteIPSecnativo,usandoeldaemonisakmpdyelcomandodeconfiguracinipsecctl.Valgaaclararquetambienpuedehacersequeesteconcentradorfuncioneenaltadisponibilidad,yaquesedisponedeldaemonsasyncdquepermitemantenerlainformacindelasVPNsestablecidasenelfirewalldebackup.
SerecomiendaconsultarelsitiodeOpenBSD(www.openbsd.org)dondeseencontrarexcelentedocumentacineinclusolosmanualesdelosrespectivoscomandosyarchivosdeconfiguracin.Cabeaclararquetodolodescriptohasidoprobadoenlaprcticayestfuncionandoenlaactualidadenmsdeunaorganizacinyhamostradosuscapacidadesreales.
NorbertoAltalefRedKlee
SolucionesbasadasenSoftwareLibrewww.redklee.com.arnaltalef@redklee.com.arSanchezdeBustamante635BuenosAiresArgentinaTel:541148633074/Cel:54111550559853
FirewallenaltadisponibilidadPgina:11de11