Blog en espanol destinado a diferentes temas tecnicos principalmente en IT y Networking. Se desea cubrir Linux, DNS, DNSSEC, RPKI, BGP, Cisco, Programacion (Bash, Python, etc), Protocolos de Enrutamiento, Seguridad en Redes, VoIP.
Mostrando entradas con la etiqueta seguridad. Mostrar todas las entradas
Mostrando entradas con la etiqueta seguridad. Mostrar todas las entradas
miércoles, 6 de mayo de 2015
Demostracion de Secuestro de Prefijos - RPKI - BGP (parte 2/2)
En este segundo video se muestra como manipular Quagga para que tome decisiones en base al estado del prefijo RPKI. Continuacion de: https://blog.acostasite.com/2015/05/demostracion-de-secuestro-de-prefijos.html
martes, 5 de mayo de 2015
Demostracion de Secuestro de Prefijos - RPKI - BGP (parte 1/2)
El video muestra un ejemplo de como ocurre un secuestro de un prefijo de red en Internet y a su vez muestra como RPKI ayudaría a prevenir esta situación
martes, 9 de diciembre de 2014
Python Script: Probably useless but functional IPv6 Network scanner
Below is the code of what is probably useless but a functional IPv6 host scanner written in Python using threading.
To perform a regular (brute force) network scans in an IPv6 Network is almost impossible and it can take over 5.000 years to finish.
This project was purely academic and I just wanted to learn about threading in Python.
This software is not recommended for general usage.....
This script will call the OS to actually perform the ping
This software receives two parameters:
a) Prefix to scan in the format 2001:db8::/64 (subnet, not host)
b) Number of simultaneous processes it can run (MAXPINGS)
One more time it was purely academic stuff but hopefully it can make your day
Finally, AFAIK nmap does not yet support IPv6 network scan.
The code was written in python3:
--- cut here ---
#!/usr/bin/python3
import threading
import sys
import ipaddress
import subprocess
import time
CURRENTPINGS=0 # Number of simultaneous ping at a time
def DOPING6(IPv6ADDRESS):
global MAXPINGS, CURRENTPINGS
CURRENTPINGS+=1
CMD="ping6 -c 3 "+str(IPv6ADDRESS) + " 2> /dev/null > /dev/null"
return_code = subprocess.call(CMD, shell=True)
if return_code == 0: #If ping was succesful
print (IPv6ADDRESS," is alive")
CURRENTPINGS-=1
def main():
global MAXPINGS, CURRENTPINGS
if len(sys.argv) != 3: #Validate how many parameters we are receiving
print(" Not enough or too many parameter")
print(" Usage: ./scanipv6.py IPv6Prefix/lenght MAXPINGS")
print(" Example: ./scanipv6.py 2001:db8::/64 20")
print(" Prefix lenght can be between 64-128")
print(" MAXPINGS corresponds to how many pings will be running at the same time")
exit()
SUBNET,MASK=sys.argv[1].split("/")
MAXPINGS=int(sys.argv[2])
for addr in ipaddress.IPv6Network(sys.argv[1]): #Let's loop for each address in the Block
ping_thread=threading.Thread(target=DOPING6,args=(addr,))
while CURRENTPINGS >= MAXPINGS: # With this while we make it possible to run max simultaneous pings
time.sleep(1) # Let's wait one second before proceeding
#print ("Interrumping...., CURRENTPINGS > MAXPINGS") #Uncomment this line just for debugging
ping_thread.start()
main()
To perform a regular (brute force) network scans in an IPv6 Network is almost impossible and it can take over 5.000 years to finish.
This project was purely academic and I just wanted to learn about threading in Python.
This software is not recommended for general usage.....
This script will call the OS to actually perform the ping
This software receives two parameters:
a) Prefix to scan in the format 2001:db8::/64 (subnet, not host)
b) Number of simultaneous processes it can run (MAXPINGS)
One more time it was purely academic stuff but hopefully it can make your day
Finally, AFAIK nmap does not yet support IPv6 network scan.
The code was written in python3:
--- cut here ---
#!/usr/bin/python3
import threading
import sys
import ipaddress
import subprocess
import time
CURRENTPINGS=0 # Number of simultaneous ping at a time
def DOPING6(IPv6ADDRESS):
global MAXPINGS, CURRENTPINGS
CURRENTPINGS+=1
CMD="ping6 -c 3 "+str(IPv6ADDRESS) + " 2> /dev/null > /dev/null"
return_code = subprocess.call(CMD, shell=True)
if return_code == 0: #If ping was succesful
print (IPv6ADDRESS," is alive")
CURRENTPINGS-=1
def main():
global MAXPINGS, CURRENTPINGS
if len(sys.argv) != 3: #Validate how many parameters we are receiving
print(" Not enough or too many parameter")
print(" Usage: ./scanipv6.py IPv6Prefix/lenght MAXPINGS")
print(" Example: ./scanipv6.py 2001:db8::/64 20")
print(" Prefix lenght can be between 64-128")
print(" MAXPINGS corresponds to how many pings will be running at the same time")
exit()
SUBNET,MASK=sys.argv[1].split("/")
MAXPINGS=int(sys.argv[2])
for addr in ipaddress.IPv6Network(sys.argv[1]): #Let's loop for each address in the Block
ping_thread=threading.Thread(target=DOPING6,args=(addr,))
while CURRENTPINGS >= MAXPINGS: # With this while we make it possible to run max simultaneous pings
time.sleep(1) # Let's wait one second before proceeding
#print ("Interrumping...., CURRENTPINGS > MAXPINGS") #Uncomment this line just for debugging
ping_thread.start()
main()
lunes, 10 de febrero de 2014
Configurando Quagga para manipular prefijos (Local Preference) utilizando RPKI
Objetivo:
En el siguiente mini laboratorio configuraremos Quagga para manipular prefijos BGP y asignar Local Preference segun el estado RPKI (valid, invalid, Not Found).
Escenario:
- R1 publica un prefijo con un AS que no le corresponde (segun ROA)
- R2 publica el mismo prefijo que R1 pero desde un AS que si es valido
- R2 publica un prefijo sin ROA.
- En este escenario el validador y el router Quagga estan en el mismo equipo
Diagrama del laboratorio:
Requisitos:
- Quagga con soporte para RPKI
- RPKI Validator de RIPE NCC
- Un prefijo que sepamos que se tiene ROA valido. En nuestro caso utilizamos el prefijo 200.85.64.0 que sabiamos que tiene un ROA que indica que debe ser publicado por el AS 7908
- Ejecutar el validador de RIPE NCC antes de ejecutar Quagga
Configuraciones de todos los equipos
Salida final en Quagga:
(Notese los flags N, I, V) (Notese los local preference)
RPKI-RTR# sh ip bgp
BGP table version is 0, local router ID is 10.0.0.10
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale, R Removed
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
N*> 192.168.0.0 10.0.0.3 0 20 0 65003 i
I* 200.85.64.0 10.0.0.1 0 10 0 65001 i
V*> 10.0.0.2 0 30 0 7908 i
Total number of prefixes 2
En el siguiente mini laboratorio configuraremos Quagga para manipular prefijos BGP y asignar Local Preference segun el estado RPKI (valid, invalid, Not Found).
Escenario:
- R1 publica un prefijo con un AS que no le corresponde (segun ROA)
- R2 publica el mismo prefijo que R1 pero desde un AS que si es valido
- R2 publica un prefijo sin ROA.
- En este escenario el validador y el router Quagga estan en el mismo equipo
Diagrama del laboratorio:
Requisitos:
- Quagga con soporte para RPKI
- RPKI Validator de RIPE NCC
- Un prefijo que sepamos que se tiene ROA valido. En nuestro caso utilizamos el prefijo 200.85.64.0 que sabiamos que tiene un ROA que indica que debe ser publicado por el AS 7908
- Ejecutar el validador de RIPE NCC antes de ejecutar Quagga
Configuraciones de todos los equipos
hostname RPKI-RTR password test ! router bgp 65000 bgp router-id 10.0.0.10 bgp bestpath prefix-validate allow-invalid neighbor 10.0.0.1 remote-as 65001 neighbor 10.0.0.1 route-map rpki in neighbor 10.0.0.2 remote-as 7908 neighbor 10.0.0.2 route-map rpki in neighbor 10.0.0.3 remote-as 65003 neighbor 10.0.0.3 route-map rpki in ! route-map rpki permit 10 match rpki invalid set local-preference 10 ! route-map rpki permit 20 match rpki valid set local-preference 30 ! route-map rpki permit 30 match rpki notfound set local-preference 20 ! line vty ! enable-rpki rpki polling_period 1000 rpki timeout -1216757171 ! rpki group 1 rpki cache 127.0.0.1 8282 !
! ! version 12.3 service timestamps debug datetime msec service timestamps log datetime msec no service password-encryption ! hostname R1 ! boot-start-marker boot-end-marker ! enable password test ! memory-size iomem 15 mmi polling-interval 60 no mmi auto-configure no mmi pvc mmi snmp-timeout 180 no aaa new-model ip subnet-zero no ip icmp rate-limit unreachable ! ! no ip domain lookup ! ip cef ip audit po max-events 100 ! ! ! ! ip tcp synwait-time 5 ! ! ! ! interface Ethernet0 ip address 10.0.0.1 255.255.255.0 half-duplex ! interface FastEthernet0 no ip address shutdown speed auto ! router bgp 65001 no synchronization bgp log-neighbor-changes network 200.85.64.0 neighbor 10.0.0.10 remote-as 65000 no auto-summary ! ip classless ip route 200.85.64.0 255.255.255.0 Null0 no ip http server no ip http secure-server ! ! ! ! ! line con 0 exec-timeout 0 0 privilege level 15 logging synchronous line aux 0 exec-timeout 0 0 privilege level 15 logging synchronous line vty 0 4 password test login ! end
! ! ! ! hostname R2 ! no ip domain lookup no ip icmp rate-limit unreachable ip tcp synwait 5 ! ! interface Ethernet0 ip address 10.0.0.2 255.255.255.0 half-duplex ! ! router bgp 7908 no synchronization bgp log-neighbor-changes network 200.85.64.0 neighbor 10.0.0.10 remote-as 65000 no auto-summary ! ip classless ip route 200.85.64.0 255.255.255.0 Null0 no ip http server ! line con 0 exec-timeout 0 0 logging synchronous privilege level 15 no login line aux 0 exec-timeout 0 0 logging synchronous privilege level 15 no login ! ! end
! ! version 12.3 service timestamps debug datetime msec service timestamps log datetime msec no service password-encryption ! hostname R3 ! boot-start-marker boot-end-marker ! ! memory-size iomem 15 mmi polling-interval 60 no mmi auto-configure no mmi pvc mmi snmp-timeout 180 no aaa new-model ip subnet-zero no ip icmp rate-limit unreachable ! ! no ip domain lookup ! ip cef ip audit po max-events 100 ! ! ! ! ip tcp synwait-time 5 ! ! ! ! interface Ethernet0 ip address 10.0.0.3 255.255.255.0 half-duplex ! interface FastEthernet0 no ip address shutdown speed auto ! router bgp 65003 no synchronization bgp log-neighbor-changes network 192.168.0.0 neighbor 10.0.0.10 remote-as 65000 no auto-summary ! ip classless ip route 192.168.0.0 255.255.255.0 Null0 no ip http server no ip http secure-server ! ! ! ! ! line con 0 exec-timeout 0 0 privilege level 15 logging synchronous line aux 0 exec-timeout 0 0 privilege level 15 logging synchronous line vty 0 4 login ! end
Salida final en Quagga:
(Notese los flags N, I, V) (Notese los local preference)
RPKI-RTR# sh ip bgp
BGP table version is 0, local router ID is 10.0.0.10
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale, R Removed
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
N*> 192.168.0.0 10.0.0.3 0 20 0 65003 i
I* 200.85.64.0 10.0.0.1 0 10 0 65001 i
V*> 10.0.0.2 0 30 0 7908 i
Total number of prefixes 2
jueves, 27 de diciembre de 2012
Que hacer cuando falla "clear line N" en Cisco
Caso:
Al realizar un "clear line" en Cisco para desconectar una sesión Telnet o SSH sencillamente sigue apareciendo el usuario.
Ejemplo:
IMP#sh user
Line User Host(s) Idle Location
2 vty 0 aacosta idle 00:00:01 a.b.c.d
* 4 vty 2 pepe idle 00:00:00 xx.yy.zz.dd
Queremos sacar a pepe del equipo y realizamos:
IMP#clear line vty 2
y sigue apareciendo:
IMP#who
Line User Host(s) Idle Location
2 vty 0 aacosta idle 00:00:39 a.b.c.d
* 4 vty 2 pepe idle 00:00:00 xx.yy.zz.dd
Procedimiento y solución:
Hay dos manera de hacerlo:
a) Manera rápida y 99% seguro que funciona (y menos probabilidades de error de dañar otra cosa). En vez de utilizar "clear line vty" utilizaremos "clear tcp line":
Así (nuevamente para desconectar a pepe):
IMP#clear tcp line 2
[confirm]
[OK]
Al realizar un "clear line" en Cisco para desconectar una sesión Telnet o SSH sencillamente sigue apareciendo el usuario.
Ejemplo:
IMP#sh user
Line User Host(s) Idle Location
2 vty 0 aacosta idle 00:00:01 a.b.c.d
* 4 vty 2 pepe idle 00:00:00 xx.yy.zz.dd
Queremos sacar a pepe del equipo y realizamos:
IMP#clear line vty 2
y sigue apareciendo:
IMP#who
Line User Host(s) Idle Location
2 vty 0 aacosta idle 00:00:39 a.b.c.d
* 4 vty 2 pepe idle 00:00:00 xx.yy.zz.dd
Procedimiento y solución:
Hay dos manera de hacerlo:
a) Manera rápida y 99% seguro que funciona (y menos probabilidades de error de dañar otra cosa). En vez de utilizar "clear line vty" utilizaremos "clear tcp line":
Así (nuevamente para desconectar a pepe):
IMP#clear tcp line 2
[confirm]
[OK]
b) Manera más drástica:
Buscamos las conexiones TCP que tenga el router en ese momento. Para ello utilizamos el comando "show tcp brief". Filtramos el puerto 23 (Telnet) o 22 (SSH) según sea el caso. Por ejemplo:
IMP#show tcp brief | i \.23_
63820270 n.n.n.n.23 a.b.c.d.56691 ESTAB
637E1AC0 x.x.x.x.23 xx.yy.zz.dd.39431 ESTAB
El valor del lado izquiero es la dirección dentro del TCB (TCP Block), esto es precisamente la conexión TCP que estaremos eliminando.
El comando es el siguiente:
IMP#clear tcp tcb 637E1AC0
NOTA: Favor estar seguros antes de eliminar la sesión TCP, recuerden que el router puede tener conexiones HTTP, BGP y otras importantes.
Suerte, espero haya sido útil,
sábado, 1 de enero de 2011
Deshabilitar IPtables en Ubuntu
Situacion:
IPtables y UFW estan dando dolores de cabeza.
Deseo permitir todo el trafico con IPtables
Solucion:
Ejecuta los siguientes comandos como root:
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -L -n
Suerte, espero haya sido util,
IPtables y UFW estan dando dolores de cabeza.
Deseo permitir todo el trafico con IPtables
Solucion:
Ejecuta los siguientes comandos como root:
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -L -n
Suerte, espero haya sido util,
lunes, 27 de septiembre de 2010
Ejemplos de manipulacion de port forwarding utilizando NAT en routers Cisco
Situacion:
Tengo una granja de servidores (ejemplo Web, Mail y SSH) y tengo solo una direccion publica en mi router de borde.
Escenario:
{Internet} --- {RTR con IP publica} ------- {Granja de Servidores}
IP Publica: 11.12.13.14
Mail Server: 192.168.1.5
Web Server: 192.168.1.4
SSH: 192.168.1.6
IP WAN: 11.12.13.14/30
IP LAN: 192.168.1.1/24
Solucion:
La solucion es configurar en el router Cisco NAT de tal manera de que al momento de recibir un paquete TCP al puerto destino correspondiente sepa a donde enviarlo.
En este sentido, es necesario que el router re-envie los paquetes (port forwarding) de la siguiente manera:
Paquetes destinados al IP 11.12.13.14 al puerto destino 25 lo envie al Mail Server (192.168.1.5)
Paquetes destinados al IP 11.12.13.14 al puerto destino 80 lo envie al Web Server (192.168.1.4)
Paquetes destinados al IP 11.12.13.14 al puerto destino 22 lo envie al SSH Server (192.168.1.6)
Procedimiento:
La configuracion del router seria la siguiente:
! ESTA ES LA INTERFAZ QUE DA HACIA LA GRANJA DE SERVIDORES
interface FastEthernet0
description Mi granja de servidores
ip address 192.168.1.1 255.255.255.0
ip nat inside
!
! ESTA ES LA INTERFAZ QUE DA HACIA INTERNET
interface Serial0
description Hacia Internet
ip address 11.12.13.14 255.255.255.252
ip nat outside
!
!En la siguiente linea se indica que todo lo que apunte al IP 11.12.13.14 al puerto 80 lo envie al !servidor web
ip nat inside source static tcp 192.168.1.4 80 11.12.13.14 80 extendable
!En la siguiente linea se indica que todo lo que apunte al IP 11.12.13.14 al puerto 25 lo envie al !servidor mail
ip nat inside source static tcp 192.168.1.5 25 11.12.13.14 25 extendable
!En la siguiente linea se indica que todo lo que apunte al IP 11.12.13.14 al puerto 22 lo envie al !servidor ssh
ip nat inside source static tcp 192.168.1.4 22 11.12.13.14 22 extendable
Tips:
Un dato muy interesante que es que se puede manipular el puerto. Por ejemplo, supongamos que tenemos un servidor web "escondido" podemos manejarlo con un puerto diferente al 80. Digamos que queremos que la gente desde Internet acceda a nuestro servidor Web utilizando el puerto 61234 podemos hacer lo siguiente:
!El usuario desde Internet debe acceder a http://11.12.13.14:61234
ip nat inside source static tcp 192.168.1.4 80 11.12.13.14 61234 extendable
Lo anterior es muy util para escoder servicios, ahorrar direcciones IP y darle seguridad a la red.
Espero haya sido de tu utilidad,
Suerte!
domingo, 19 de julio de 2009
Proteccion de hotlink con Apache
Problema:
Poseer un website con contenido de imágenes u otro tipo de media y que existan otros website que hagan referencia a tu contenido. El punto mas negativo de esta situación es que estas gastando TU ANCHO de banda, memoria y recursos de tu servidor. Al problema anterior se le conoce como Hotlinking.
Solución:
En el caso de Apache (existen soluciones similares en IIS) la solución es utilizar el archivo .htaccess con un código que veremos más abajo. Existen dos soluciones: a) bloquear la solicitud HTTP si el HTTP_REFERER no contiene el contenido que deseamos b) Devolver una imagen pre-configurada. En el siguiente artículo nos enfocaremos en devolver un código de error que es mi opción preferida debido a que de esta manera gastamos menos CPU y ahorramos de verdad ancho de banda
Requerimientos:
Servidor Apache con el modulo Rewrite (mod_rewrite).
Procedimiento:
Colocar el siguiente código en el archivo .htaccess
RewriteEngine on
RewriteCond %{HTTP_REFERER} .
RewriteCond %{HTTP_REFERER} !^http://(www\\.)?chistesdevenezuela\\.com [NC]
RewriteRule \\.(gif|jpe?g)$ - [NC,F]
Explicación código anterior:
RewriteEngine on
Este comando comienza el modulo rewrite, necesario para poder trabajar con los comandos rewrite
RewriteCond %{HTTP_REFERER} .
Con este comando permitimos HTTP_REFERERs en blanco. Esto es muy util porque alguien puede escribir directamente el URL en el navegador, su navegador puede estar configurado para no enviar el referrer y/o incluso existen Firewalls capa 7 que eliminan el HTTP_REFERER de la solicitud HTTP
RewriteCond %{HTTP_REFERER} !^http://(www\\.)?chistesdevenezuela\\.com [NC]
Esta línea hace match con aquellas solicitudes que vengan del dominio chistesdevenezuela.com, incluso, no es necesario que lleve el www en el referer. El doble back-slash luego del dominio es para crear un carácter de escape y que el punto en .com se comporte realmente como un punto.
Importante:
Para permitir dominios adicionales solo duplica esta línea cambiando el dominio.
RewriteRule \\.(gif|jpe?g)$ - [NC,F]
Esta linea indica que tipo de archivos serán permitidos desde el dominio especificado en la linea anterior. Para permitir nuevos tipos de archivos solo agrega nuevos pipes seguidos por el tipo de archivo (por ejemplo png, bmps, etc).
Eso es todo,
Suerte.
viernes, 10 de julio de 2009
Como activar las licencias dentro de un firewall Juniper
Objetivo:
Activar las diferentes licencias adquiridad (por ejemplo Antivirus) dentro de una caja Juniper SSG5
Problema:
Luego de que recibí la caja no tenía la menor idea de como activar el Antivirus (AV) dentro del mismo
Procedimiento:
Procedí a abrir un ticket dentro del website de Juniper indicando mi problema
Solución:
* Conectar la caja a Internet y con navegación
* Asegurarse que el firewall pueda navegar. Recomiendo entrar a la caja por ssh y/o telnet y hacer un ping a yahoo.com o google.com
* Colocar fecha y hora de la caja (MUY importante)
* Posteriormente hay dos maneras de actualizar las licencias: Web y CLI
Vía Web:
Ir a: Configuration>update>screen OS/keys y hacer click en retrieve subscriptions
Vía CLI:
cst-1->exec license-key update
o
cst-1->exec license-key.
Luego la caja se conectará a lo que Juniper llama el Entitlement Server y traerá las licencias compradas y registradas dentro del Website de Juniper.
Eso es todo,
Activar las diferentes licencias adquiridad (por ejemplo Antivirus) dentro de una caja Juniper SSG5
Problema:
Luego de que recibí la caja no tenía la menor idea de como activar el Antivirus (AV) dentro del mismo
Procedimiento:
Procedí a abrir un ticket dentro del website de Juniper indicando mi problema
Solución:
* Conectar la caja a Internet y con navegación
* Asegurarse que el firewall pueda navegar. Recomiendo entrar a la caja por ssh y/o telnet y hacer un ping a yahoo.com o google.com
* Colocar fecha y hora de la caja (MUY importante)
* Posteriormente hay dos maneras de actualizar las licencias: Web y CLI
Vía Web:
Ir a: Configuration>update>screen OS/keys y hacer click en retrieve subscriptions
Vía CLI:
cst-1->exec license-key update
o
cst-1->exec license-key
Luego la caja se conectará a lo que Juniper llama el Entitlement Server y traerá las licencias compradas y registradas dentro del Website de Juniper.
Eso es todo,
miércoles, 8 de julio de 2009
Firewall bueno, gratuito y configurable en Windows
Necesidad:
Quitar el acceso a Internet a 100 localidades y solo permitir DNS y FTP. De ser posible gratuito.
En cada localidad solo existe un PC conectado a Internet y dicho PC puede estar conectado de muchas maneras diferentes: Ethernet, Wireless; GSM, EVDO, UMTS, etc, etc.
Por ello, el firewall a utilizar debe de ser capaz de implementar las políticas en TODAS las interfaces del PC
Solución:
Luego de buscar mucho por Internet, incluso probar varios diferentes Firewall logré conseguir: WIPFW
Wipfw lo definen como un Firewall sencillo y eficiente para el mundo del sistema operativo Windows.
En fin, no voy a entrar en detalles de donde bajarlo y como instalarlo. Voy a indicar el procedimiento que seguí para unicamente permitir FTP Y DNS.
Procedimiento:
1) Luego de tener el software instalado en: c:\wipfw procedí a modificar el archivo: wipfw.conf y lo dejé de la siguiente manera:
# First flush the firewall rules
-f flush
# Localhost rules
add 100 allow all from any to any via lo*
# Mis politicas
add 101 allow tcp from me to any 53 out
add 102 allow udp from me to any 53 out
add 103 deny tcp from me to any 1863 out
add 104 allow tcp from me to any 20 out
add 105 allow tcp from me to any 21 out
# Prevent any traffic to 127.0.0.1, common in localhost spoofing
add 110 deny log all from any to 127.0.0.0/8 in
add 110 deny log all from 127.0.0.0/8 to any in
# Bloquear TODO el resto del tráfico. No quiero que naveguen y nada
add 115 deny log all from any to any out
add check-state
add pass all from me to any out keep-state
add count log ip from any to any
2) Posteriormente ejecutas el archivo: install.cmd ubicado en c:\wipfw
3) En caso de necesitar deshabilitar el firewall debes ejecutar: c:\wipfw\uninstall.cmd
Suerte!.
Quitar el acceso a Internet a 100 localidades y solo permitir DNS y FTP. De ser posible gratuito.
En cada localidad solo existe un PC conectado a Internet y dicho PC puede estar conectado de muchas maneras diferentes: Ethernet, Wireless; GSM, EVDO, UMTS, etc, etc.
Por ello, el firewall a utilizar debe de ser capaz de implementar las políticas en TODAS las interfaces del PC
Solución:
Luego de buscar mucho por Internet, incluso probar varios diferentes Firewall logré conseguir: WIPFW
Wipfw lo definen como un Firewall sencillo y eficiente para el mundo del sistema operativo Windows.
En fin, no voy a entrar en detalles de donde bajarlo y como instalarlo. Voy a indicar el procedimiento que seguí para unicamente permitir FTP Y DNS.
Procedimiento:
1) Luego de tener el software instalado en: c:\wipfw procedí a modificar el archivo: wipfw.conf y lo dejé de la siguiente manera:
# First flush the firewall rules
-f flush
# Localhost rules
add 100 allow all from any to any via lo*
# Mis politicas
add 101 allow tcp from me to any 53 out
add 102 allow udp from me to any 53 out
add 103 deny tcp from me to any 1863 out
add 104 allow tcp from me to any 20 out
add 105 allow tcp from me to any 21 out
# Prevent any traffic to 127.0.0.1, common in localhost spoofing
add 110 deny log all from any to 127.0.0.0/8 in
add 110 deny log all from 127.0.0.0/8 to any in
# Bloquear TODO el resto del tráfico. No quiero que naveguen y nada
add 115 deny log all from any to any out
add check-state
add pass all from me to any out keep-state
add count log ip from any to any
2) Posteriormente ejecutas el archivo: install.cmd ubicado en c:\wipfw
3) En caso de necesitar deshabilitar el firewall debes ejecutar: c:\wipfw\uninstall.cmd
Suerte!.
viernes, 5 de junio de 2009
Tips de Seguridad para Linux
A la hora de instalar un Servidor en Linux, el paso del tiempo me ha dado ciertas experiencia a la hora de ajustar politicas de seguridad. Muchas de ellas van a ayudar a que nuestro servidor se encuentre mas seguro.
A continuacion, comparto varias de las politicas que siempre mantengo en mente a la hora de configurar un servidor.
Siempre despues de instalar un servidor, aprovecho para hacer estos cambios.
1) Con el comando chkconfig, elimino los siguientes daemons:
ppp, bind9 ( a menos que sea un servidor DNS), lwresd, portmap, exim4, netatalk, samba, fam, nfs-common, atd, apache2.
E inclusive, sino son necesarios, los elimino
2) Me aseguro de que el siguiente parametro este en el archivo /etc/security/limits.conf
* hard core 0
3) Asegurarse tambien de que las siguientes lineas esten en el archivo /etc/pam.d/login
session required /lib/security/pam_limits.so
4) Comento la siguiente linea en el archivo /etc/inittab
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
ejm:
#ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
5) Las claves deben de expirar cada 90 dias, esto se hace editando el siguiente parametro en /etc/logins.def
MASS_MAX_DAYS 90
6) Elimino las siguientes cuentas (/etc/passwd, /etc/shadow)
games, lp, news, uucp, proxy, irc, gnats, list
7)Cambio el shell por defecto de los siguientes usuarios a /bin/false
bin, daemon, mail, nobody, sync, sys
8) Elimino cualquier informacion que contengan los archivos
/etc/issue
/etc/issue.net
9)Todo los ejecutables que tenga el setuid y setgid, por defecto, ninguno puede ser escrito por el grupo "others"
find / -perm -4000 -exec ls -l {} \;
find / -perm -2000 -exec ls -l {} \;
Ejm
-rwsr-xr-x 1 root root 31640 2008-11-22 11:01 /usr/bin/passwd
||
9) Modifico el parametro a continuacion en el archivo /etc/login.defs:
LOGIN_RETRIES 3
( crear el archivo /var/log/faillog para grabar todo los intentos de acceso)
10) Editamos el archivo /etc/pam.d/common-password y nos aseguramos de que la opcion min=8 este en la configuracion de pam_unix
Estos tips van a ayudar de cierta manera a asegurar el servidor, mas adelante, colocare unas herramientas que van a ayudarnos a realizar tareas sobre el sistema y verificar la integridad del mismo.
A continuacion, comparto varias de las politicas que siempre mantengo en mente a la hora de configurar un servidor.
Siempre despues de instalar un servidor, aprovecho para hacer estos cambios.
1) Con el comando chkconfig, elimino los siguientes daemons:
ppp, bind9 ( a menos que sea un servidor DNS), lwresd, portmap, exim4, netatalk, samba, fam, nfs-common, atd, apache2.
E inclusive, sino son necesarios, los elimino
2) Me aseguro de que el siguiente parametro este en el archivo /etc/security/limits.conf
* hard core 0
3) Asegurarse tambien de que las siguientes lineas esten en el archivo /etc/pam.d/login
session required /lib/security/pam_limits.so
4) Comento la siguiente linea en el archivo /etc/inittab
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
ejm:
#ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
5) Las claves deben de expirar cada 90 dias, esto se hace editando el siguiente parametro en /etc/logins.def
MASS_MAX_DAYS 90
6) Elimino las siguientes cuentas (/etc/passwd, /etc/shadow)
games, lp, news, uucp, proxy, irc, gnats, list
7)Cambio el shell por defecto de los siguientes usuarios a /bin/false
bin, daemon, mail, nobody, sync, sys
8) Elimino cualquier informacion que contengan los archivos
/etc/issue
/etc/issue.net
9)Todo los ejecutables que tenga el setuid y setgid, por defecto, ninguno puede ser escrito por el grupo "others"
find / -perm -4000 -exec ls -l {} \;
find / -perm -2000 -exec ls -l {} \;
Ejm
-rwsr-xr-x 1 root root 31640 2008-11-22 11:01 /usr/bin/passwd
||
9) Modifico el parametro a continuacion en el archivo /etc/login.defs:
LOGIN_RETRIES 3
( crear el archivo /var/log/faillog para grabar todo los intentos de acceso)
10) Editamos el archivo /etc/pam.d/common-password y nos aseguramos de que la opcion min=8 este en la configuracion de pam_unix
Estos tips van a ayudar de cierta manera a asegurar el servidor, mas adelante, colocare unas herramientas que van a ayudarnos a realizar tareas sobre el sistema y verificar la integridad del mismo.
Suscribirse a:
Entradas (Atom)
BGP Stream: un año de análisis sobre incidentes BGP
BGP Stream: un año de análisis sobre incidentes BGP 04/03/2024 Por Alejandro Acosta , Coordinador de I+D en LACNIC LACNIC presenta la prim...
-
Debido al crecimiento moderado que ha tenido el presente blog se me ocurrió añadir/integrar las estadisticas de google analytics a mi blog. ...
-
Introduccion: En algunas ocasiones es necesario "bajar" o deshabilitar iptables en nuestro Linux, el procedimiento depende de...
-
Saludos, Lo primero que debemos de hacer para quitar el stacking entre los switches es desconectar los cables Stack que los unen.... Es buen...