Cableado de una Conexión de Cable Paralelo para RedesNombre-AExtremo-AExtremo-BDescr.Post/BitDATA0
-ERROR2
1515
2Data0/0x01
1/0x08DATA1
+SLCT3
1313
3Data0/0x02
1/0x10DATA2
+PE4
1212
4Data0/0x04
1/0x20DATA3
-ACK5
1010
5Strobe0/0x08
1/0x40DATA4
BUSY6
1111
6Data0/0x10
1/0x80GND18-2518-25GND-
Configuración de PLIPEn primer lugar debemos tener en nuesras manos un cable
laplink. A continuación se debe comprobar que ambos
sistemas poseen núcleos con soporte para el controlador
&man.lpt.4;:&prompt.root; grep lp /var/run/dmesg.boot
lpt0: <Printer> on ppbus0
lpt0: Interrupt-driven portEl puerto paralelo debe ser un puerto controlado por alguna
irq. En &os; 4.X se debería tener un línea
como la siguiente en el fichero de configuración del
kernel:device ppc0 at isa? irq 7En &os; 5.X el fichero
/boot/device.hints debe contener las siguientes
líneas:hint.ppc.0.at="isa"
hint.ppc.0.irq="7"A continuación se debe comprobar que el fichero de
configuración del núcleo posee una línea con
device plip o también puede
comprobar si se ha cargado el módulo del núcleo
plip.ko. Tanto en un caso como en el otro, cuando
se ejecute &man.ifconfig.8; debería aparecer el interfaz de
red paralelo. En &os; 4.X se muestra algo parecido a
lo siguiente:&prompt.root; ifconfig lp0
lp0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500y en &os; 5.X:&prompt.root; ifconfig plip0
plip0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500El nombre del dispositivo utilizado para la interfaz
paralela es distinto en &os; 4.X
(lpX)
y en &os; 5.X
(plipX).Enchufe el cable laplink en los interfaces de ambos
computadores.Configure los parámetros de la interfaz de red en ambas
máquinas como root. Por ejemplo, si
queremos conectar la máquina host1
ejecutando &os; 4.X con la máquina
host2 que ejecuta &os; 5.X: host1 <-----> host2
Dirección IP 10.0.0.1 10.0.0.2Configure la interfaz de host1 así:&prompt.root; ifconfig lp0 10.0.0.1 10.0.0.2Configure la interfaz de host2 por medio de:&prompt.root; ifconfig plip0 10.0.0.2 10.0.0.1Tras esto debería disponerse de una conexión
totalmente funcional. Por favor, consulte &man.lp.4; y &man.lpt.4;
si quiere saber más.Además se debe añadir ambas máquinas al
fichero /etc/hosts:127.0.0.1 localhost.mi.dominio localhost
10.0.0.1 host1.mi.dominio host1
10.0.0.2 host2.mi.dominioPara comprobar que efectivamente la conexión funciona se
puede probar a hacer un ping desde cada máquina. Por
ejemplo en la máquina host1:&prompt.root; ifconfig lp0
lp0: flags=8851<UP,POINTOPOINT,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet 10.0.0.1 --> 10.0.0.2 netmask 0xff000000
&prompt.root; netstat -r
Routing tables
Internet:
Destination Gateway Flags Refs Use Netif Expire
host2 host1 UH 0 0 lp0
&prompt.root; ping -c 4 host2
PING host2 (10.0.0.2): 56 data bytes
64 bytes from 10.0.0.2: icmp_seq=0 ttl=255 time=2.774 ms
64 bytes from 10.0.0.2: icmp_seq=1 ttl=255 time=2.530 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=255 time=2.556 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=255 time=2.714 ms
--- host2 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max/stddev = 2.530/2.643/2.774/0.103 msAaronKaplanTexto original de TomRhodesReestructurado y ampliado por IPv6IPv6 (también conocido como IPng o IP de nueva
generación) es la nueva versión del conocido
protocolo de red IP, tambíen llamado IPv4. Como sucede con el
resto de los sistemas *BSD &os; proporciona una implementación
de referencia que desarrolla el proyecto japonés
KAME. &os; dispone de todo lo necesario para
experimentar con el nuevo protocolo de red. Esta sección se
centra en conseguir configurar y ejecutar correctamente el protocolo
IPv6.Al comienzo de los años 90 la gente comenzó a
preocuparse por el rápido consumo del espacio de direcciones
de IPv4. Dada la expansión actual de Internet existen dos
preocupaciones principales:Agotamiento de las direcciones disponibles. Actualmente
no se trata del principal problema debido al uso generalizado del
del espacio de direccionamiento privado
(10.0.0.0/8,
192.168.0.0/24, etc.) junto con
NAT.
El número de entradas de las tablas de rutas comenzaba a
ser imposible de manejar. Esto todavia es un problema
prioritario.IPv6 trata de resolver estos problemas y algunos más de la
siguiente forma:IPv6 posee un espacio de direccionamiento de 128 bits. En otras
palabras, en teoría existen
340,282,366,920,938,463,463,374,607,431,768,211,456
direcciones disponibles. Esto significa que existen
aproximadamente 6.67 * 10^27 direcciones IPv6 por metro cuadrado
disponibles para todo el planeta Tierra.Los routers sólo almacenan direcciones de
red agregadas así que se reduce el número de entradas
para cada tabla de rutas a un promedio de 8192.Existen además muchas otras caracterísiticas
interesantes que IPv6 proporciona, como:Autoconfiguración de direcciones (RFC2462)Direcciones anycast (una-de-varias)Soporte de direcciones multicast predefinidoIPsec (Seguridad en IP)Estructura de la cabecera simplificadaIP móvilMecanismos de traducción de IPv6 a IPv4 (y viceversa)Si quiere saber más sobre IPv6 le recomendamos que
consulte:Resumen de IPv6 en playground.sun.comKAME.net6bone.netConceptos Básicos sobre las Direcciones IPv6Existen varios tipos distintos de direcciones IPv6: Unicast,
Anycast y Multicast.Las direcciones unicast son direcciones bien conocidas. Un
paquete que se envía a una dirección unicast
deberín llega a la interfaz identificada por dicha
dirección.Las direcciones anycast son sintácticamente indistinguibles
de las direcciones unicast pero sirven para identificar a un
conjunto de interfaces. Un paquete destinado a
una dirección anycast llega a la interfaz
más cercana (en términos de
métrica de routers). Las direcciones anycast
sólo se pueden utilizar en routers.Las direcciones multicast identifican un grupo de interfaces.
Un paquete destinado a una dirección multicast llega a todos los
los interfaces que se encuentran agrupados bajo dicha
dirección.Las direcciones IPv4 de tipo broadcast
(normalmente xxx.xxx.xxx.255) se expresan en
IPv6 mediante direcciones multicast.
Direcciones IPv6 ReservadasDirección IPv6Longitud del Prefijo (Bits)DescripciónNotas::128 bitssin especificarcomo 0.0.0.0 en Pv4::1128 bitsdirección de bucle local (loopback)como las 127.0.0.1 en
IPv4::00:xx:xx:xx:xx96 bitsdirecciónes IPv6 compatibles con IPv4Los 32 bits más bajos contienen una
dirección IPv4. También se denominan direcciones
empotradas.::ff:xx:xx:xx:xx96 bitsdirecciones IPv6 mapeadas a IPv4Los 32 bits más bajos contienen una
dirección IPv4. Se usan para representar direcciones
IPv4 mediante direcciones IPv6.fe80:: -
feb::10 bitsdirecciones link-localequivalentes a la dirección de loopback de
IPv4fec0:: -
fef::10 bitsdirecciones site-localEquivalentes al direccionamiento privado de IPv4ff::8 bitsmulticast001 (base
2)3 bitsdirecciones unicast globalesTodas las direcciones IPv6 globales se asignan a partir de
este espacio. Los primeros tres bits siempre son
001.
Lectura de las Direcciones IPv6La forma canónica que se utiliza para representar
direcciones IPv6 es: x:x:x:x:x:x:x:x, donde cada
x se considera un valor hexadecimal de 16 Bit.
Por ejemplo
FEBC:A574:382B:23C1:AA49:4592:4EFE:9982A menudo una dirección posee alguna subcadena de varios
ceros consecutivos de forma que se puede abreviar dicha cadena
(sólo una vez, para evitar ambigúedades) mediante
::. También se pueden omitir los ceros a la
ceros a la izquierda dentro de un valor
x. Por ejemplo
fe80::1 se corresponde con la forma
canónica
fe80:0000:0000:0000:0000:0000:0000:0001.Una tercera forma de escribir direciones IPv6 es utilizando la
ya tradicional notación decimal de IPv4 pero
sólamente para los 32 bits más bajos de la
dirección IPv6. Por ejemplo
2002::10.0.0.1 se correspondería
con la representation hexadecimal canónica
2002:0000:0000:0000:0000:0000:0a00:0001
la cual es equivalente también a escribir 2002::a00:1.A estas alturas el lector debería ser capaz de comprender
lo siguiente:&prompt.root; ifconfigrl0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
inet 10.0.0.10 netmask 0xffffff00 broadcast 10.0.0.255
inet6 fe80::200:21ff:fe03:8e1%rl0 prefixlen 64 scopeid 0x1
ether 00:00:21:03:08:e1
media: Ethernet autoselect (100baseTX )
status: activefe80::200:21ff:fe03:8e1%rl0
es una dirección link-local autoconfigurada. Se construye a
partir de la dirección MAC de la tarjeta de red.Si quiere saber más sobre la estructura de las
direcciones IPv6 puede consultar RFC3513.Establecimiento de ConectividadActualmente existen cuatro formas distintas de conectarse
con otras máquinas y redes IPv6:Unirse a la red experimental denominada 6boneObtener una red IPv6 a través de nuestro proveedor de
acceso a Internet. Consulte a su proveedor de servicios para
para más información.Encapsulación de IPv6 sobre IPv4 (RFC3068)Utilización del portnet/freenet6 si se dispone de una
de una conexión de marcación por modem.Vamos a explicar cómo conectarse al 6bone ya que parece ser
la forma más utilizada en la actualidad.En primer lugar se recomienda consultar el sitio web de
6bone para saber
cuál es la conexión del 6bone (físicamente)
más próxima. Se debe escribir a la persona responsable
de ese nodo y con un poco de suerte dicha persona responderá con
con un conjunto de instrucciones y pasos a seguir para establecer la
la conexión con ellos y a través de ellos con el resto
de los nodos IPv6 que forman parte del 6bone. Normalmente esta
conexión se establece usando túneles GRE (gif).Veamos un ejemplo típico de configuración de un
de un túnel &man.gif.4;:&prompt.root; ifconfig gif0 create
&prompt.root; ifconfig gif0
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
&prompt.root; ifconfig gif0 tunnel MI_DIRECCIÓn_IPV4SU_DIRECCIÓn_IPV4
&prompt.root; ifconfig gif0 inet6 alias DIRECCIÓn_DE-SALIDA_IPv6_DEL_TÚNEL_ASIGNADOSustituya las palabras en mayúsculas por la
información recibida del nodo 6bone al que nos queremos
conectar.El comando anterior establece el túnel. Compruebe que el
túnel funciona correctamente mediante &man.ping.8;.
Haga un &man.ping6.8; a ff02::1%gif0. Deberíamos recibir
recibir dos respuestas.Para que el lector no se quede pensando en el significado
significado de la dirección ff02:1%gif0 le podemos decir que se trata de
de una dirección IPv6 multicast de tipo link-local.
%gif0 no forma parte del protocolo IPv6 como tal
sino que se trata de un detalle de implementación relacionado
con las direcciones link-local y se añade para especificar la
interfaz de salida que se debe utilizar para enviar los paquetes de
&man.ping6.8;. Como estamos haciendo ping a una dirección
multicast a la que se unen todos los interfaces pertenecientes al
mismo enlace debería responder al ping tanto nuestro propio
interfaz como el interfaz remoto.A continuación se configura la ruta por defecto hacia
nuestro enlace 6bone; observe que es muy semejante a lo que hay que
hacer en IPv4:&prompt.root; route add -inet6 default -interface gif0
&prompt.root; ping6 -n MI_UPLINK&prompt.root; traceroute6 www.jp.FreeBSD.org
(3ffe:505:2008:1:2a0:24ff:fe57:e561) from 3ffe:8060:100::40:2, 30 hops max, 12 byte packets
1 atnet-meta6 14.147 ms 15.499 ms 24.319 ms
2 6bone-gw2-ATNET-NT.ipv6.tilab.com 103.408 ms 95.072 ms *
3 3ffe:1831:0:ffff::4 138.645 ms 134.437 ms 144.257 ms
4 3ffe:1810:0:6:290:27ff:fe79:7677 282.975 ms 278.666 ms 292.811 ms
5 3ffe:1800:0:ff00::4 400.131 ms 396.324 ms 394.769 ms
6 3ffe:1800:0:3:290:27ff:fe14:cdee 394.712 ms 397.19 ms 394.102 msEsta captura de pantalla variará dependiendo de la
localización de la máquina. Tras seguir estos pasos
deberíamos poder alcanzar el sitio IPv6 de www.kame.net y ver la tortuga
bailarina, que es una imagen animada que sólo se muestra cuando
se accede al servidor web utilizando el protocolo IPv6 (para
ellos se encesita utilizar un navegador web que soporte IPv6,
IPv6, por ejemplo www/mozilla o
Konqueror, que forma parte de
x11/kdebase3, o también
con www/epiphany.DNS en el Mundo IPv6Existen dos tipos de registros de DNS para IPv6. No
obstante el IETF ha declarado los registros A6 y CNAME como registros
para uso experimental. Los registros de tipo AAAA son los
únicos estandar a día de hoy.La utilización de registros de tipo AAAA es muy
sencilla. Se asocia el nombre de la máquina con la
dirección IPv6 de la siguiente forma:NOMBREDEMIMÁQUINA AAAA MIDIRECCIÓNIPv6De igual forma que en IPv4 se utilizan los registros de tipo
A. En caso de no poder administrar su propia zona de
DNS se puede pedir esta configuración a su
proveedor de servicios. Las versiones actuales de
bind (versiones 8.3 y 9) y el
portdns/djbdns
(con el parche de IPv6 correspondiente) soportan los registros de tipo
AAAA.HartiBrandtEscrito por ATM en &os; 5.XConfiguración de IP clásico sobre ATM (PVCs)IP clásico sobre ATM (CLIP) es el
método más sencillo de utilizar ATM con IP. Se puede
utilizar con conexiones conmutadas (SVC) y con conexiones
permanentes (PVCs). En esta sección se describe cómo
configurar una red basada en PVCs.Configuraciones en Red Mallada CompletaEl primer método para configurar CLIP
con PVCs consiste en conectar unas máquinas con otras mediante
circuitos PVC dedicados. Aunque la configuración parece
sencilla llega a resultar imposible de manejar cuando se posee un
número grande de máquinas. El ejemplo que se muestra
a continuación supone que nuestra red posee cuatro
máquinas y que cada una se conecta a la red ATM mediante una
tarjeta de red ATM. El primer paso consiste en planificar las
direcciones IP y las conexiones ATM que se van a configurar en las
máquinas.MáquinaDirección IPhostA192.168.173.1hostB192.168.173.2hostC192.168.173.3hostD192.168.173.4Para construir una red completamente mallada necesitamos una
conexión ATM entre cada par de máquinas:MáquinasPareja VPI.VCIhostA - hostB0.100hostA - hostC0.101hostA - hostD0.102hostB - hostC0.103hostB - hostD0.104hostC - hostD0.105Los valores VPI y VCI en cada extremo de la conexión
pueden ser diferentes pero por simplicidad suponemos que son
iguales. A continuación necesitamos configurar las
interfaces ATM en cada máquina:hostA&prompt.root; ifconfig hatm0 192.168.173.1 up
hostB&prompt.root; ifconfig hatm0 192.168.173.2 up
hostC&prompt.root; ifconfig hatm0 192.168.173.3 up
hostD&prompt.root; ifconfig hatm0 192.168.173.4 upSuponiendo que la interfaz ATM es
hatm0 en todas las máquinas. Ahora
necesitamos configurar los PVCs en las máquinas (suponemos que
ya se han configurado de forma correcta en el switch
ATM, para lo cual puede ser necesario consultar el manual del
switch).hostA&prompt.root; atmconfig natm add 192.168.173.2 hatm0 0 100 llc/snap ubr
hostA&prompt.root; atmconfig natm add 192.168.173.3 hatm0 0 101 llc/snap ubr
hostA&prompt.root; atmconfig natm add 192.168.173.4 hatm0 0 102 llc/snap ubr
hostB&prompt.root; atmconfig natm add 192.168.173.1 hatm0 0 100 llc/snap ubr
hostB&prompt.root; atmconfig natm add 192.168.173.3 hatm0 0 103 llc/snap ubr
hostB&prompt.root; atmconfig natm add 192.168.173.4 hatm0 0 104 llc/snap ubr
hostC&prompt.root; atmconfig natm add 192.168.173.1 hatm0 0 101 llc/snap ubr
hostC&prompt.root; atmconfig natm add 192.168.173.2 hatm0 0 103 llc/snap ubr
hostC&prompt.root; atmconfig natm add 192.168.173.4 hatm0 0 105 llc/snap ubr
hostD&prompt.root; atmconfig natm add 192.168.173.1 hatm0 0 102 llc/snap ubr
hostD&prompt.root; atmconfig natm add 192.168.173.2 hatm0 0 104 llc/snap ubr
hostD&prompt.root; atmconfig natm add 192.168.173.3 hatm0 0 105 llc/snap ubrPor supuesto que se pueden utilizar otras especificaciones
de tráfico siempre y cuando las tarjetas de red las
soporten. En este caso la especificación del tipo de
tráfico se completa con los parámetros del
tráfico. Puede acceder a la ayuda de &man.atmconfig.8;
así:&prompt.root; atmconfig help natm addy por supuesto en la página de manual de
&man.atmconfig.8;.Se puede crear la misma configuración utilizando el
fichero /etc/rc.conf. Para la máquina
hostA sería algo así:network_interfaces="lo0 hatm0"
ifconfig_hatm0="inet 192.168.173.1 up"
natm_static_routes="hostB hostC hostD"
route_hostB="192.168.173.2 hatm0 0 100 llc/snap ubr"
route_hostC="192.168.173.3 hatm0 0 101 llc/snap ubr"
route_hostD="192.168.173.4 hatm0 0 102 llc/snap ubr"El estado de todas las rutas
CLIP se puede obtener en todo momento
con:hostA&prompt.root; atmconfig natm show
diff --git a/es_ES.ISO8859-1/books/handbook/security/chapter.sgml b/es_ES.ISO8859-1/books/handbook/security/chapter.sgml
index ce65008d95..6449c90059 100755
--- a/es_ES.ISO8859-1/books/handbook/security/chapter.sgml
+++ b/es_ES.ISO8859-1/books/handbook/security/chapter.sgml
@@ -1,351 +1,5511 @@
MatthewDillonGran parte de este capítulo ha sido
- tomado del manual de security(7) por
+ tomado del manual de security(7) por
-
+
Seguridadseguridad
- Sinópsis
-
- Este capítulo proveera una introducción básica
- a los conceptos de seguridad de sistema y algunos temas avanzados en
- &os;. Muchos de los temas se pueden aplicar a la seguridad del sistema
- asi como también a la de Internet en general. Internet ya no es
- un lugar amistoso en el cual cada quién desea ser
- un buen vecino. Asegurar su sistema es imprecindible para proteger sus
- datos, característica intelectual, tiempo, y mucho mas de las
+ Sinopsis
+
+ Este capítulo brindará una introducción
+ básica a los conceptos de seguridad de sistema y algunos temas
+ avanzados en &os;. Muchos de los temas cubiertos aquí
+ pueden aplicarse a la seguridad del sistema asi como también
+ a la de Internet en general. Internet ya no es un lugar
+ amistoso en el cual cada quién desea ser un
+ buen vecino. Asegurar su sistema es imperativo para proteger sus
+ datos, propiedad intelectual, tiempo, y mucho más de las
manos de hackers y similares.
- FreeBSD proporciona un arcenal de utilidades y mecanisimos para
+ FreeBSD proporciona un arsenal de utilidades y mecanismos para
asegurar la integridad y la seguridad de su sistema y red.Después de leer este capítulo, usted sabrá:
- Conceptos básicos de seguridad, con respecto a &os;.
+ Conceptos básicos de seguridad, con respecto a &os;.
- Sobre algunos mecanisimos de encriptación disponibles en
- &os;, como DES y MD5.
+ Acerca de varios mecanismos de encriptación disponibles
+ en &os;, como DES y MD5.
+
- Como instalar KerberosIV en versiones
- anteriores a 5.0.
+ Como configurar autentificación de contraseñas
+ para usar solo-una-vez.
- Como instalar Kerberos5 en versiones
- posteriores a 5.0.
+ Como configurar TCP Wrappers para usar
+ con inetd.
- Como crear cortafuegos usando IPFW.
+ Como instalar KerberosIV en &os;
+ con versiones anteriores a 5.0.
- Como configurar IPsec y crear un VPN entre
- computadoras &os;/&windows;.
+ Como instalar Kerberos5 en &os; con
+ versiones posteriores a 5.0.
- Como configurar y usar OpenSSH,
- implementación de SSH en &os;.
+ Como configurar IPsec y crean una VPN entre
+ máquinas &os;/&windows;.
+
+
+
+ Como configurar y utilizar OpenSSH,
+ la implementación SSH de &os;.
- Como configurar y cargar los modulos de extensión de
- control de acceso usando TrustedBSD MAC
- Framework.
+ Que son ACLs del sistema de archivos y como
+ utilizarlas.
- Que sistema de archivos ACLs son y como
- usarlos.
+ Como usar la utilidad Portaudit
+ para auditar paquetes de software de terceros instalados
+ desde la colección de ports.
- Como utilizar las publicaciones de advertencias de seguridad en
- &os;.
+ Como utilizar las publicaciones de advertencias de seguridad en
+ &os;.
+
+ Tener una idea de lo que es contabilidad de
+ procesos y como habilitarla en &os;.
+
- Antes de leer este capítulo, usted debe saber:
+ Antes de leer este capítulo, usted debe:
- Conceptos básicos de &os; y el Internet.
+ Entender Conceptos básicos de &os; y el Internet.
-
+
+ Tópicos de seguridad adicionales son cubiertos a lo
+ largo de este libro. Por ejemplo, controles de acceso
+ obligatorio (Mandatory Access Control) son discutidos en y firewalls de internet son discutidos en el
+ capítulo de firewalls.
+ .Introducción
- La seguridad es una función que comienza y termina con el
+ La seguridad es una función que comienza y termina con el
administrador de sistema. Mientras que los sistemas multi-usuario
- BSD &unix; tienen una inherente seguridad, el trabajo de construir y
- mantener mecanismos de seguridad adicionales para mantener a los
- usuarios de manera honesta es probablemente una de las
- unicas tareas del administrador del sistema. Los sistemas son tan
- seguros como uno los haga, los problemas de seguridad compiten con la
- necesidad humana de conveniencia. Los sistemas &unix; en general, son
- capaces de correr una gran cantidad de procesos simultáneos,
- de los cuales muchos de estos son servidores – lo que significa
- que entidades externas pueden conectarse y hablar con
- ellos. Asi como las mini-computadoras del ayer se convirtieron en los
- ahora escritorios de trabajo, y las computadoras se interconectaron,
- la seguridad cada ves se hace un problema mas grande.
+ BSD &unix; tienen una seguridad inherente, el trabajo de construir y
+ mantener mecanismos de seguridad adicionales para hacer que los
+ usuarios sean honestos es probablemente una de las
+ tareas más grandes del administrador del sistema. Los sistemas
+ son tan seguros como uno los haga, los problemas de seguridad compiten
+ con la necesidad humana de conveniencia. Los sistemas &unix; en
+ general, son capaces de correr una gran cantidad de procesos
+ simultáneos, de los cuales muchos de estos son servidores
+ – lo que significa que entidades externas pueden conectarse y
+ hablar con ellos. Asi como las mini-computadoras del
+ ayer se convirtieron en los ahora escritorios de trabajo, y las
+ computadoras se interconectaron, la seguridad cada vez se hace un
+ problema más grande.La seguridad es mejor implementada como cebolla en
capas. Basicamente, lo que se quiere hacer es crear la mayor cantidad
- posible de convenientes capas de seguridad para luego cuidadosamente
- monitorear el sistema para detectar intrusos. No es conveniente
- sobreconstruir la seguridad, ya que esta interferira con el aspecto
- de detección, y la detección es uno de los mas importantes
- aspectos de cualquier mecanismo de seguridad. Por ejemplo, no tiene
- mucho sentido usar los flags de schg (ver
- &man.chflags.1;) en cada sistema binario, ya que mientras este puede
- protejer los binarios temporalmente, hace que el algun cambio hecho
- por un atacante sea difícil de detectar y puede resultar que
- el mecanismo de seguridad no detecte al atacante en lo absoluto.
+ posible de capas de seguridad como sea conveniente para luego
+ cuidadosamente monitorear el sistema para detectar intrusos. No es
+ conveniente sobreconstruir la seguridad, ya que esta interferirá
+ con el aspecto de detección, y la detección es uno de
+ los más importantes aspectos de cualquier mecanismo de
+ seguridad. Por ejemplo, no tiene mucho sentido activar la bandera
+ schg (ver &man.chflags.1;) en cada binario del
+ sistema, ya que mientras este puede protejer los binarios
+ temporalmente, hace que algún cambio hecho por un atacante,
+ que ha entrado al sistema,sea difícil de detectar y puede
+ resultar que el mecanismo de seguridad no detecte al atacante en
+ lo absoluto.
La seguridad del sistema depende también de estar preparado
- para diferentes formas de ataque, incluyendo intentos de quebrar el
+ para diferentes formas de ataque, incluyendo intentos de quebrar el
sistema, o hacer un sistema inservible, pero no intentos de comprometer
al usuario root (quebrar root). Los
problemas de seguridad estan separados en diferentes categorias:
- Ataques de Negación de servicio (DoS).
+ Ataques de Negación de servicio (DoS).
- Compromisos en cuentas de usuarios.
+ Comprometer cuentas de usuarios.
- Compromisos de root por medio de servidores accesibles.
+ Comprometer root a través de servidores accesibles.
+
- Compromisos de root por medio de cuentas de usuarios.
+ Comprometer root via cuentas de usuarios.
- Creación de puertas de entrada.
+ Creación de puertas traseras (Backdoors).
- Ataques DoS
- Negación de servicio (DoS)
+ DoS attacks
+ Denial of Service (DoS)
- security
+ seguridadAtaques DoS
- Negación de servicio (DoS)
+ Negación de servicios (DoS)
+
+ Negacion de servicio (DoS)
+
+ Un ataque de negación de servicio es una acción que
+ priva al sistema de los recursos requeridos. Generalmente, los ataques
+ DoS son mecanismos de fuerza bruta que intentan quebrar el sistema
+ o hacerlo inutilizable sobrepasando la capacidad de sus servidores
+ o del stack de red.
+ Algunos ataques DoS intentan aprovecharse de
+ errores en el stack de red para quebrar el sistema con un solo paquete.
+ Lo último solo puede ser solucionado aplicando en el kernel
+ una actualización que arregle el error.
+ Los ataques en servidores muchas veces pueden ser
+ solucionados especificando opciones apropiadas para limitar la carga del
+ sistema en condiciones adversas. Los ataques de fuerza bruta en redes
+ son mas complicados. Los ataques con paquetes enmascarados, por
+ ejemplo, son casi imposible de detener, a menos que desconecte el
+ sistema de Internet. Puede ser que no tiren el sistema, pero
+ saturarán la conexión a Internet.
+
+
+ seguridad
+ comprometer cuentas
+
+
+ Comprometer una cuenta de usuario es mucho más común
+ que un ataque DoS. Muchos administradores de sistemas
+ todavía corren servidores estándar
+ telnetd, rlogind,
+ rshd y ftpd en
+ sus máquinas.
+ Estos servidores, por omisión, no
+ operan sobre conexiones encriptadas. El resultado es que si se
+ tiene una base de usuarios de tamaño moderado, uno o
+ más de sus usuarios entrando al sistema desde una localidad
+ remota (que es la forma más común y conveniente de
+ entrar a un sistema) provocará que su contraseña
+ sea descubierta.
+ El atento administrador de sistemas analizará sus logs de
+ acceso remoto buscando por direcciones fuente sospechosas
+ incluso para entradas exitosas al sistema.
+
+ Se debe asumir siempre que una vez que un atacante tiene acceso
+ a una cuenta de usuario, el atacante puede comprometer
+ root. De todas formas, la realidad es que en
+ un sistema bien mantenido y asegurado, el acceso a una cuenta de
+ usuario no necesariamente da al atacante acceso a
+ root. La distinción es importante
+ porque sin acceso a root el atacante
+ generalmente no puede esconder sus huellas y puede, a lo mucho,
+ meterse con los archivos de usuarios, o estrellar la máquina.
+ Comprometer cuentas de usuario es muy común porque los
+ usuarios tienden a no tomar las precauciones que el administrador
+ toma.
+
+
+ seguridad
+ backdoors
- Negación de servicio (DoS)
-
- Un ataque de negación de servicio es una acción que
- priva al sistema de los recursos requeridos. Generalmente, los ataques
- DoS son mecanismos de fuerza bruta que intentan quebrar el sistema
- forzando sus servidores. Algunos ataques DoS intentan aprovecharse de
- bugs en la red para quebrar el sistema con un solo paquete. Esto puede
- ser solucionado aplicando en el kernel una actualización que
- arregle el bug. Los ataques en servidores muchas veces pueden ser
- solucionados aplicando opciones apropiadas para limitar la carga del
- sistema en condiciones adversas. Los ataques de fuerza bruta en redes
- son mas complicados. Los ataques con paquetes enmascarados, por
- ejemplo, son casi imposible de detener, el cual puede desconectar el
- sistema de Internet. Pueden no quebrar el sistema, pero saturaran la
- conexión a Internet.
+ Los administradores de sistema deben tener en mente que
+ existen muchas maneras potenciales de comprometer a
+ root en una máquina. El atacante puede
+ conocer la contraseña de root, el u
+ atacante puede encontrar un error en un servidor ejecutándose
+ como root y ser capaz de comprometer root a
+ través de una conexión de red a ese servidor, o el
+ atacante puede conocer un error en programa suid-root que le permita
+ comprometer root una vez que ha entrado
+ a una cuenta de usuario. Si un atacante ha encontrado una manera
+ de comprometer a root en una máquina,
+ entonces puede no necesitar instalar una puerta trasera. Muchos de
+ los agujeros root encontrados y cerrados hasta
+ la fecha significan una cantidad considerable de trabajo por parte del
+ atacante para limpiar todo despues del ataque, así que
+ la mayoría de los atacantes instalan puertas traseras.
+ Una puerta trasera brinda al atacante una forma sencilla de
+ retomar acceso de root en el sistema,
+ pero también le proporciona al administrador de sistemas
+ inteligente una manera conveniente de detectar la intrusión.
+ Haciendole imposible a un atacante instalar una puerta trasera
+ puede en realidad ser en detrimento de su seguridad, porque
+ no cerrará el agujero que el atacante encontró
+ para entrar en primer lugar.
+
+ Los remedios de seguridad deben ser implementados
+ siempre con una aproximación multicapa tipo
+ cebolla y puede ser categorizado
+ como sigue:
+
+
+
+ Aseguramiento de root y cuentas de staff.
+
+
+
+ Aseguramiento de servidores que se ejecutan como root
+ y binarios suid/sgid.
+
+
+
+ Aseguramiento de cuentas de usuarios.
+
+
+
+ Aseguramiento del archivo de contraseñas.
+
+
+
+ Aseguramiento del Kernel, dispositivos crudos y
+ sistema de archivos.
+
+
+
+ Detección rápida de cambios inapropiados
+ hechos al sistema.
+
+
+
+ Paranoia.
+
+
+
+ La siguiente secci6oacute;n de este capítulo cubrirá
+ los puntos de arriba con mayor profundidad.
- Asegurando FreeBSD
+ Asegurando &os;seguridad
- asegurando FreeBSD
+ asegurando &os;
- Comando vs. Protocolo
- A través de este documento usaremos el texto en
- negrita para referirnos a un comando o
- aplicación. Esto se utiliza para casos tales como ssh, puesto
- que es tanto un protocolo como un comando.
+ Comando vs. protocolo
+ A través de este documento usaremos el texto en
+ negrita para referirnos a un comando o
+ aplicación, y una fuente espaciada para
+ referirnos a comandos espcíficos. Los protocolos usarán
+ una fuente normal. Esta distinción tipográfica es
+ útil para instancias como ssh, ya
+ que es tanto un protocolo como un comando.
- Las siguientes secciones cubrirán los métodos para
- asegurar su sistema FreeBSD que fueron mencionados en la
- sección anterior a este
+ Las siguientes secciones cubrirán los métodos para
+ asegurar su sistema &os; que fueron mencionados en la
+ sección anterior a este
capítulo.
-
- Encapsulado SSH
-
- OpenSSH
- encapsulado
-
-
-
-
-
- Cortafuegos
-
- Firewalls
-
-
-
+
+ Asegurando la cuenta root y cuentas de staff
+
+ su
+
-
- IPsec
-
- IPsec
-
-
+ En primer lugar, no se moleste en asegurar las cuentas de
+ staff si no ha asegurado la cuenta root.
+ La mayoría de los sistemas tienen una contraseña
+ asignada a la cuenta root. Lo primero que
+ se hace es asumir que la contraseña está
+ siempre comprometida.
+ Esto no significa que debe eliminar la contraseña. La
+ contraseña es casi siempre necesaria para acceso de
+ consola a la máquina. Lo que esto significa es que no se
+ debe hacer posible el uso de la contraseña fuera de la
+ consola o incluso posiblemente con el comando &man.su.1;.
+ Por ejemplo, asegúrese que sus ptys estaán
+ especificadas como inseguras en el archivo
+ /etc/ttys para que las entradas directas
+ de root vía
+ telnet o rlogin no estén
+ permitidas.
+ Si utiliza otros servicios de entrada como
+ sshd, asegúrese que entradas directas
+ de root estén también deshabilitadas.
+ Puede hacer esto editando su archivo
+ /etc/ssh/sshd_config, y asegurándose
+ que PermitRootLogin esté puesto a
+ NO. Considere cada método de acceso —
+ servicios como FTP frecuentemente caen en las grietas.
+ Entradas directas de root solo deben
+ ser permitidas vía consola.
+
+ wheel
+
+
+ Por supuesto, como administrador de sistema usted debe
+ ser capaz de accesar a root, asi que
+ abrimos algunos agujeros. Pero asegúrese que estos
+ agujeros necesiten contraseñas adicionales de
+ verificación para operar. Una forma de hacer a root
+ accesible es agregar cuentas de staff apropiadas al
+ grupo wheel (en
+ /etc/group). Los miembros del staff colocados
+ en el grupo wheel tienen permitido
+ hacer su a root.
+ Nunca debe de proporcionar a miembros del staff acceso
+ nativo a wheel poniéndolos
+ en el grupo wheel en su entrada de
+ contraseña. Las cuentas de staff deben ser colocadas
+ en un grupo staff, y entonces
+ agregadas al grupo wheel en el
+ archivo /etc/group. Solo aquellos
+ miembros del staff que en realidad necesiten tener acceso
+ de root deben ser colocados en el
+ grupo wheel. también es posible
+ al utilizar un método de autentificación como
+ Kerberos, usar el archivo .k5login en
+ la cuenta root para permitir un
+ &man.ksu.1; a root sin tener que
+ colocar a nadie en el grupo
+ wheel. Esta puede ser una mejor solución
+ ya que el mecanismo wheel todavía
+ permite a un atacante comprometer root
+ si el intruso ha conseguido el archivo de contraseñas
+ y puede comprometer una cuenta de staff. Teniendo el
+ mecanismo wheel es mejor que no tener
+ nada del todo, aunque no es necesariamente la opción
+ más segura.
+
+
+
+ Una manera indirecta de asegurar las cuentas de staff, y
+ el acceso a root es utilizar un método
+ de acceso login alternativo y hacer lo que se conoce como
+ estrellado de las contraseñas encriptadas
+ para las cuentas de staff. Usando el comando &man.vipw.8;
+ se puede reemplazar cada instancia de una contraseña
+ encriptada con un solo caracter *.
+ Este comando actualizará el archivo
+ /etc/master.passwd y la base de datos
+ usuario/contraseña para deshabilitar logins
+ autenticados por contraseñas.
+
+ Una entrada de una cuenta de estaff como:
+
+ foobar:R9DT/Fa1/LV9U:1000:1000::0:0:Foo Bar:/home/foobar:/usr/local/bin/tcsh
+
+ Debe ser cambiada a esto:
+
+ foobar:*:1000:1000::0:0:Foo Bar:/home/foobar:/usr/local/bin/tcsh
+
+ Este cambio prevendrá que ocurran logins normales,
+ ya que la contraseña encriptada nunca corresponderá
+ con *. Hecho esto,
+ los miembros de staff deben usar otro mecanismo
+ para autentificarse tal como &man.kerberos.1; o
+ &man.ssh.1; utilizando un par de llave pública/privada.
+ Cuando se usa algo como Kerberos, generalmente se debe
+ asegurar la máquina que corre los servidores Kerberos
+ y su estación de trabajo de escritorio. Cuando se
+ usa un par de llave pública/privada con ssh,
+ generalmente se debe asegurar la máquina desde
+ donde se hace el login (típicamente nuestra estación
+ de trabajo). Una capa adicional de protección puede
+ ser añadida al par de llaves protegiendo con contraseña
+ la llave par al crearla con &man.ssh-keygen.1;.
+ La posibilidad de estrellado de las
+ contraseñas de las cuentas de staff también
+ garantiza que los miembros del staff solo puedan entrar
+ a través de métodos de acceso que usted haya
+ configurado. Esto obliga a todos los miembros del staff
+ a utilizar conexiones seguras, encriptadas, para todas
+ sus sesiones, lo que cierra un importante agujero usado
+ por muchos intrusos: hacer un olfateo (sniffing) de la
+ red desde una máquina no relacionada y menos
+ segura.
+
+ Los mecanismos de seguridad más indirectos también
+ asumen que se esta firmando desde un servidor más restrictivo
+ a un servidor menos restrictivo.
+ Por ejemplo, si su máquina principal está corriendo
+ toda clase de servidores, su estación de trabajo no debe
+ de estar corriendo ninguno. Para que su estación de trabajo
+ sea razonablemente segura debe correr los servidores mínimos
+ posibles, hasta incluso ningún servidor, y debe correr
+ un blanqueador de pantalla portegido por contraseña.
+ Por supuesto, dado un acceso físico a una estación
+ de trabajo un atacante puede romper cualquier clase de seguridad
+ que se ponga. Esto es definitivamente un problema que debe
+ considerar, pero también debe considerar el hecho de que la
+ mayoría de las intrusiones ocurren remotamente, a través
+ de la red, de gente que no tiene acceso físico a su
+ estación de trabajo o servidores.
+ KerberosIV
+
+ Usar algo como Kerberos también le brinda la habilidad
+ de deshabilitar o cambiar la contraseña para una cuenta
+ de staff en un lugar, y que tenga un efecto inmediato en todas
+ las máquinas en las cuales el miembro de staff puede
+ tener una cuenta. Si la cuenta de un miembro de staff es
+ comprometida, la habilidad para cambiar instantaneamente su
+ contraseña en todas las máquinas no debe ser
+ desestimada. Con contraseñas discretas, el cambio
+ de una contraseña en N máquinas puede ser un
+ problema. También puede imponer restricciones de
+ re-contraseñas con Kerberos: no solo se puede hacer un
+ ticket de Kerberos para expirar despues de un tiempo, también
+ el sistema Kerberos puede requerir que el usuario escoja una
+ nueva contraseña despues de cierto periodo de tiempo
+ (digamos, una vez al mes).
-
- Asegurando la cuenta root y las cuentas de
- staff
+
+ Asegurando servidores que se ejecutan como root
+ y binarios SUID/SGID
+
+
+ ntalk
+
+
+ comsat
+
+
+ finger
+
+
+ sandboxes
+
+
+ sshd
+
+
+ telnetd
+
+
+ rshd
+
- su
+ rlogind
- Antés que nada, no se preocupe en asegurar las cuentas
- del staff si aun no ha asegurado la cuenta root.
- La mayor parte de los sistemas tienen asignada una clave de acceso
- a la cuenta root. Lo primero que usted debe
- asumir es que la contraseña siempre
- está comprometida. Esto no significa que tenga que
- eliminar la contraseña. La contraseña es casi siempre
- necesaria para el acceso a la cónsola de la computadora. Esto
- significa que usted no debe permitir utilizar la contraseña
- fuera de la cónsola o usarla posiblemente con el comando
- &man.su.1;. Por ejemplo, cerciorese de que sus ptys sean
- correctamente especificados como inseguros en el archivo
- /etc/ttys para rechazar conexiones directas a
- root vía telnet o
- rlogin. Si se usan otros servicios tales como
- sshd, asegurese de que las conexiones
- directas a root estén deshabilitadas. Es
- posible hacer esto editando el fichero
- /etc/ssh/sshd_config, asegurando que
- PermitRootLogin esté fijado como
- NO. Considere cada método de acceso
- - Servicios como FTP puedes tener problemas de seguridad. Las
- conexiones directas a root deben ser sólo
- permitidas físicamente en la cónsola de sistema.
+ El administrador de sistemas prudente solo ejecuta los
+ servidores que necesita, no más, no menos. Dese cuenta
+ que los servidores de terceros son los más propensos
+ a contener errores. Por ejemplo, ejecutando una versión
+ antigua de
+ imapd o
+ popper es como dar un boleto universal
+ de root al mundo entero.
+ Nunca ejecute un servidor que no haya revisado cuidadosamente.
+ Muchos servidores no necesitan ejecutarse como
+ root. Por ejemplo, los daemons
+ ntalk,
+ comsat y
+ finger pueden ejecutarse en una
+ caja de arena (sandbox) especial de usuario.
+ Una caja de arena no es perfecta, a menos que pase por muchos
+ problemas, pero la aproximación de cebolla a la seguridad
+ todavía prevalece: Si alguien es capaz de penetrar a
+ través de un servidor ejecutándose en una caja
+ de arena, todavía tendría que salirse de la caja de
+ arena. Mientras más capas tenga que romper el atacante
+ es menor la posibilidad de su éxito. Los agujeros de
+ root han sido hallados historicamente en virtualmente
+ cualquier servidor que se ha ejecutado como root,
+ incluyendo servidores básicos del sistema.
+ Si está ejecutando una máquina a través de
+ la cual la gente solo entra por
+ sshd y nunca entra por
+ telnetd o
+ rshd o
+ rlogind, entonces ¡apague esos
+ servicios!
+
+ &os; ahora por omisión ejecuta
+ ntalkd,
+ comsat y
+ finger en una caja de arena.
+ Otro programa que puede ser candidato para correr en una
+ caja de arena es &man.named.8;.
+ /etc/defaults/rc.conf incluye los
+ argumentos necesarios para correr named
+ en una caja de arena de una forma comentada. Dependiendo de si
+ está instalando un nuevo sistema o actualizando un sistema
+ existente, las cuentas especiales de usuario utilizadas por
+ estas cajas de arena puede que no estén instaladas.
+ El administrador de sistemas prudente debe investigar e
+ implementar cajas de arena para servidores siempre que sea
+ posible.
- wheel
+ sendmail
- Por supuesto, como administrador de sistema usted debe poder
- acceder como root, y nosotros tenemos algunas
- formas de conseguirlo. Nos aseguraremos de que éstas formas
- tengan autenticación adicional. Una de las formas de hacer
- root accesible es agregar cuentas apropiadas del
- staff al grupo wheel (en
- /etc/group). Se permite a los miembros del
- staff puestos en el grupo wheel usar el
- comando su para acceder root.
- Nunca debe dar a miembros del staff acceso nativo a
- wheel cuando se crea la cuenta. Las cuentas
- del staff deben estar colocadas en grupos de
- staff, para después agregar a aquellos
- deseados al grupo wheel en el fichero
- /etc/group. Solamente a aquellos que realmente
- se necesiten en este grupo deben ser agregados. Es también
- posible usar un método de autentificación tal como
- Kerberos, utilizar el fichero .k5login en la
- cuenta root para permitir a &man.ksu.1; que
- root no necesite a nadie en el grupo
- wheel. Esta puede ser una mejor
- solución puesto que el mecanismo de
- wheel todavía permite al intruso romper
- root, si el intruso ha conseguido quebrar el
- archivo de contraseñas y el grupo del staff. Mientrás
- que usar el mecanismo de wheel es mejor que no
- tener nada en lo absoluto, no es necesariamente la opción mas
- segura.
-
- Una manera indirecta de asegurar las cuentas del staff y usar el
- acceso a root de ultima instancia es usar un
- método de acceso alternativo conocido como
- starring. Este método marca las
- contraseñas cifradas con un solo
- *. Este comando actualizará
- fichero de /etc/master.passwd y la base de datos
- de usuario/contraseña para desabilitar los logins con
- autentificación de contraseña.
-
- Una cuenta del staff como esta:
+ Existen un número de otros servidores que tipicamente
+ no se ejecutan en cajas de arena:
+ sendmail,
+ imapd, ftpd,
+ y otros. Existen alternativas para algunos de estos, pero
+ instalarlas puede requerir más trabajo del que tal vez
+ esté dispuesto a realizar (el factor conveniencia
+ ataca de nuevo). Tal vez tenga que correr estos servidores como
+ root y depender de otros mecanismos para
+ detectar intrusiones que puedan ocurrir a través de
+ ellos.
- foobar:R9DT/Fa1/LV9U:1000:1000::0:0:Foo Bar:/home/foobar:/usr/local/bin/tcsh
+ Los otros grandes agujeros de root
+ potenciales en un sistema son los binarios
+ suid y sgid root instalados en el sistema. La mayoría
+ de estos binarios, como rlogin,
+ residen en /bin, /sbin,
+ /usr/bin o /usr/sbin.
+ Aunque nada es 100% seguro, los binarios suid y sgid del
+ sistema por omisión pueden ser considerados razonablemente
+ seguros. Pero aún así,
+ agujeros root son encontrados
+ ocasionalmente en estos binarios. Un agujero root
+ fué entontrado en Xlib en
+ 1998 que hizo a xterm
+ (que es tipicamente suid) vulnerable. Es mejor prevenir que
+ lamentar y el administrador de sistemas prudente restringirá
+ los binarios suid, que solo el staff debe de ejecutar, a un
+ grupo especial que solo el staff pueda accesar, y deshacerse
+ de cualquier binario suid (chmod 000)
+ que nadie utilice. Un servidor sin pantalla generalmente
+ no necesita un binario xterm.
+ Binarios sgid pueden ser igual de peligrosos. Si un
+ intruso puede comprometer un binario sgid-kmem, el intruso
+ podría ser capaz de leer /dev/kmem
+ y así leer el archivo encriptado de contraseñas,
+ comprometiendo potencialmente cualquier cuenta con
+ contraseña. Alternativamente, un intruso que compromete
+ el grupo kmem puede monitorear teclazos
+ mandados a través de ptys, incluyendo ptys utilizados
+ por usuarios que accesan por métodos seguros.
+ Un intruso que compromete el grupo tty
+ puede escribir a casi cualquier pty de usuarios.
+ Si un usuario está corriendo un programa de terminal o
+ emulador con una propiedad de simulación de teclado, el
+ intruso puede potencialmente generar un flujo de datos que
+ provoque que la terminal del usuario haga eco de un comando,
+ el cual es entonces ejecutado como ese usuario.
+
- Debe ser cambiada a:
-
- foobar:*:1000:1000::0:0:Foo Bar:/home/foobar:/home/local/bin/tcsh
-
- Este cambio evitará que las conexiones normales ocurran,
- ya que la contraseña cifrada nunca coincidirá con
- *. Habiendo hecho esto, los
- miembros del staff deberán usar otros métodos de
- autentificación como &man.kerberos.1; o &man.ssh.1;, usando
- pares de claves públicas/privadas. Al usar algo como
- Kereberos, uno debe asegurar generalmente las máquinas que
- corran los servidores Kereberos, asi como también su
- estación de trabajo. Al usar pares de claves
- públicas/privadas con ssh, uno debe asegurar generalmente la
- máquina usada para hacer el login (generalmente una
- estación de trabajo). Una capa adicional de protección
- se puede agregar a los pares de claves
- públicas/privadas protegiendolas con contraseña en el
- momento de crearlas con &man.ssh-keygen.1;. Pudiendo
- marcar las contraseñas de las cuentas del staff
- también garantiza que los miembros del staff solamente pueden
- acceder al sistema por medio de un método seguro. Esto fuerza
- a los miembros del staff a acceder al sistema usando solamente formas
- seguras y conexiones cifradas para todas sus sesiones, lo que
- protege de una de las vulnerabilidades más usadas por
- los intrusos.
+
+ Asegurando cuentas de usuarios
-
+ Las cuentas de usuario son usualmente las más
+ difíciles de asegurar. Aunque puede imponer restricciones
+ de acceso draconianas en su staff y estrellar
+ sus contraseñas, tal vez no pueda hacerlo con cualquier
+ cuenta general de usuario que tenga. Si tiene suficiente control,
+ tal vez triunfe y sea capaz de asegurar las cuentas de
+ usuarios con propiedad. Si no, simplemente tiene que ser más
+ vigilante en el monitoreo de esas cuentas. El uso de ssh y
+ Kerberos para cuentas de usuario es más problemático
+ debido a la administración adicional y soporte técnico
+ requerido, pero es todavía una buena solución
+ comparada a un archivo de contraseñas encriptadas.
+
+
+
+ Asegurando el archivo de contraseñas
+
+ La única manera segura es ponerle *
+ a tantas contraseñas como sea posible y utilizar ssh o
+ Kerberos para accesar esas cuentas. Aunque el archivo
+ encriptado de contraseñas (/etc/spwd.db)
+ solo puede ser leído por root, puede
+ ser posible para un intruso obtener acceso de lectura a ese
+ archivo incluso si el etacante no puede obtener
+ acceso de escritura como root.
+
+ Sus scripts de seguridad deben revisar siempre por
+ cambios en el archivo de contraseñas
+ (ver Revisando integridad de archivos abajo)
+ y reportarlos.
+
+
+
+ Asegurando del Kernel, dispositivos crudos y
+ sistema de archivos
+
+ Si un atacante compromete root puede
+ hacer cualquier cosa,
+ pero existen ciertas conveniencias. Por ejemplo, la mayoría
+ de los Kernels modernos tienen un dispositivo olfateador de
+ paquetes integrado. Bajo &os; es llamado dispositivo
+ bpf. Un intruso tratará
+ comunmente de ejecutar un olfateador de paquetes en una
+ máquina comprometida. No necesita darle a un intruso
+ la capacidad y la mayoría de los sistemas no necesitan
+ que se compile el dispositivo bpf.
+
+
+ sysctl
+
+ Pero incluso si apaga el dispositivo bpf,
+ todavía tiene que preocuparse por
+ /dev/mem y
+ /dev/kmem.
+ Para eso, el intruso puede todavía escribir a
+ dispositivos de disco crudos. También, existe otra
+ opción del kernel llamada cargador de módulos,
+ &man.kldload.8;. Un intruso con iniciativa puede usar un
+ módulo KLD para instalar su propio dispositivo
+ bpf, u otro dispositivo de
+ olfateo en un kernel en ejecución.
+ Para prevenir estos problemas debe ejecutar el kernel en
+ un nivel de seguridad mayor, al menos en securelevel 1.
+ El securelevel puede ser activado con sysctl
+ en la variable kern.securelevel.
+ Una vez que ha activado securelevel a 1, los accesos de
+ escritura a dispositivos crudos serán denegados y
+ las banderas especiales schg serán
+ impuestas.
+ También debe asegurar que la bandera
+ schg esté habilitada en archivos
+ binarios críticos para el arranque, directorios y
+ scripts — todo lo que se ejecuta hasta el punto en que
+ se activa el securelevel. Esto puede ser una acción
+ exagerada, y actualizar el sistema es mucho más
+ complicado cuando se opera en un nivel de seguridad superior.
+ Puede comprometer y ejecutar el sistema a un nivel de seguridad
+ superior pero no activar la bandera schg
+ para cada archivo y directorio del sistema bajo el sol.
+ Otra posibilidad es simplemente montar / y
+ /usr de solo lectura.
+ Se debe notar que siendo demasiado draconiano en lo que trata
+ de proteger puede prevenir toda la detección importante
+ de una intrusión.
+
+
+
+ Revisando integridad de archivos: binarios, archivos de
+ configuración, etc.
+
+ Cuando se trata de protección, solo se puede proteger
+ la configuración central del sistema y archivos de
+ control hasta un punto antes de que el factor conveniencia
+ levante su fea cabeza. Por ejemplo, usando
+ chflags para activar el bit schg
+ en la mayoría de los archivos en /
+ y /usr es probablemente contraproducente,
+ debido a que puede proteger los archivos, pero también
+ cierra una ventana de detección.
+ La última capa de su seguridad tipo cebolla es quizás
+ la más importante — detección. El resto de
+ su seguridad es inutil (o, peor, darle un falso sentido de
+ seguridad) si no puede detectar incursiones potenciales.
+ La mitad del trabajo de la cebolla es alentar al atacante, en lugar
+ de detenerlo, para darle a la parte de la ecuación de
+ detección una oportunidad de atraparlo en el acto.
+
+ La mejor manera de detectar una incursión es buscar
+ archivos modificados, perdidos o inesperados. La mejor manera
+ de buscar archivos modificados es desde otro (muchas veces
+ centralizado) sistema con acceso limitado.
+ Escribiendo sus scripts de seguridad en un sistema extra-seguro
+ con acceso limitado los hace casi invisibles a atacantes
+ potenciales, y esto es importante. Para tomar máxima
+ ventaja generalmente tiene que proporcionar a la máquina
+ con acceso limitado acceso significativo a las otras máquinas
+ en el negocio, usualmente ya sea haciendo una importación
+ NFS de solo lectura de las otras máquinas a la máquina
+ de acceso limitado o configurando pares de llaves ssh para
+ permitir a la máquina de acceso limitado hacer ssh a
+ las otras máquinas. A excepción de su tráfico
+ de red, NFS es el método menos visible — permitiendo
+ monitorear los sistemas de archivos en cada máquina cliente
+ virtualmente indetectado. Si su servidor de acceso limitado
+ está conectado a las máquinas cliente a través
+ de un concentrador o a través de varias capas de ruteo,
+ el método NFS puede ser muy inseguro (network-wise)
+ y utilizar ssh puede ser la mejor opción incluso
+ con las huellas de auditoría que ssh presenta.
+
+ Una vez que le da a una maáquina de acceso limitado al
+ menos acceso de lectura a los sistemas cliente que se supone va
+ a monitorear, debe escribir scripts para hacer el monitoreo.
+ Dado un montaje NFS, puede escribir scripts con utilidades
+ simples como &man.find.1; y &man.md5.1;. Es mejor ejecutar
+ md5 fisicamente en los archivos de las máquinas cliente
+ al menos una vez al día, y probar archivos de control
+ como los encontrados en /etc y
+ /usr/local/etc incluso más seguido.
+ Cuando se encuentren discrepancias, relativas a la información
+ base md5 que la máquina de acceso limitado conoce como
+ válida, esto debe gritarle a un administrador de sistemas
+ que vaya a verificarlo. Un buen script de seguridad también
+ debe revisar por binarios suid inapropiados y por archivos nuevos
+ o borrados en particiones del sistema como /
+ y /usr.
+
+ Al utilizar ssh en lugar de NFS,
+ escribir el script de seguridad es mucho más complicado.
+ Esencialmente tiene que pasar por scp los
+ scripts a la máquina cliente para poder ejecutarlos,
+ haciéndolos visibles, y para seguridad también
+ necesita pasar por scp los binarios
+ (como find) que utilizan esos scripts. El cliente
+ ssh en la máquina cliente
+ puede estar ya comprometida. Con todo, utilizar ssh
+ puede ser necesario al trabajar sobre enlaces
+ inseguros, pero también es mucho más dificil
+ de manejar.
+
+ Un buen script de seguridad revisará también
+ por cambios a la configuración de los archivos de acceso
+ de usuarios y miembros del staff:
+ .rhosts, .shosts,
+ .ssh/authorized_keys y demás;
+ archivos que caigan fuera del rango de revisión
+ MD5.
+
+ Si tiene una cantidad enorme de espacio en disco para usuarios,
+ puede tomar mucho tiempo recorrer cada archivo en esas
+ particiones. En este caso, configurando banderas de montaje
+ para deshabilitar binarios y dispositivos suid en esas particiones
+ es una buena idea. Las opciones nodev y
+ nosuid (vea &man.mount.8;) son lo que
+ necesita revisar. Probablemente debe escanearlos de todas
+ maneras, al menos una vez a la semana, ya que el objeto de esta
+ capa es detectar intrusiones ya sea que la instrusión
+ haya sido efectiva o no.
+
+ La contabilidad de procesos (vea &man.accton.8;) es una
+ opción relativamente con una carga ligera del sistema
+ operativo la cual puede ayudar como un mecanismo de
+ evaluación post-intrusión. Es especialmente
+ útil para rastrear como un intruso en realidad
+ penetró en un sistema, asumiendo que el archivo
+ esté todavía intacto despues de que la
+ intrusión ocurrió.
+
+ Finalmente, los scripts de seguridad deben procesar los
+ archivos de log, y los mismo logs deben ser generados de una
+ manera lo más segura posible — un syslog remoto
+ puede ser muy útil. Un intruso trata de cubrir sus
+ huellas, y los archivos de log son críticos para el
+ administrador de sistema tratando de rastrear la hora y el
+ método de la intrusión inicial. Una manera de
+ mantener un registro permanente de los archivos de log es
+ ejecutar la consola del sistema en un puerto serial y
+ recolectar la información en una base continua
+ mediante una máquina segura monitoreando las consolas.
+
+
+
+ Paranoia
+
+ Un poco de paranoia nunca lastima. Como una regla, un
+ administrador de sistema puede agregar cualquier número
+ de mecanismos de seguridad, siempre que estos no afecten
+ la conveniencia, y puede agregar mecanismos de seguridad
+ que si afecten la conveniencia con
+ un buen razonamiento. Incluso más importante, un
+ administrador de seguridad debe mezclarlos un poco —
+ si utiliza recomendaciones como las dadas en este documento
+ exactamente, está dando su metodología al
+ posible atacante que también tenga acceso a este
+ documento.
+
+
+
+ Ataques de negación de servicios
+ Ataques de negación de servicios (DoS)
+
+ Esta sección cubre ataques de negación de servicios.
+ Un ataque DoS es tipicamente un ataque de paquetes. Aunque no hay
+ mucho que pueda hacer acerca de ataques con paquetes imitados
+ (spoofed) que saturen su red, generalmente puede limitar el daño
+ asegurándose que los ataques no tiren sus servidores.
+
+
+
+ Limitando forks en el servidor.
+
+
+
+ Limitando ataques springboard (ataques de respuesta ICMP,
+ ping broadcast, etc.).
+
+
+
+ Caché de ruteo del Kernel.
+
+
+
+ Un ataque común DoS es contra un servidor con instancias
+ (forking) que trata de provocar que el servidor consuma procesos, descriptores
+ de archivos y memoria, hasta que la máquina muere.
+ inetd (vea &man.inetd.8;) tiene
+ varias opciones para limitar este tipo de ataque.
+ Se debe notar que mientras es posible prevenir que una máquina
+ se caiga, generalmente no es posible prevenir que un servicio sea
+ interrumpido por el ataque. Lea la página de manual
+ de inetd con cuidado y ponga atención
+ especialmente las opciones , ,
+ y . Note que los ataques con direcciones IP imitadas
+ rodearán la opción de
+ inetd, así que una
+ combinación de opciones debe ser utilizada. Algunos
+ servidores que se ejecutan en solitario cuentan con
+ parámetros de autolimitación de instancias.
+
+ Sendmail tiene su opción
+ , la cual tiende a trabajar
+ mucho mejor que tratando de usar las opciones de límite
+ de carga de sendmail debido al retraso que provoca la carga.
+ Debe especificar un parámetro
+ MaxDaemonChildren, cuando inicia
+ sendmail, lo suficientemente alto
+ para manejar su carga esperada, pero no tan alto que la
+ computadora no pueda manejar ese número de
+ sendmails sin caerse de boca.
+ También es prudente ejecutar sendmail en modo de cola
+ () y correr el daemon
+ (sendmail -bd)
+ de manera separada de las ejecuciones de cola
+ (sendmail -q15m). Si todavía desea
+ entregas en tiempo real puede ejecutar la cola a un intervalo
+ menor, como , pero asegúrese de
+ especificar una opción MaxDaemonChildren
+ razonable para ese sendmail y así
+ prevenir fallas en cascada.
+
+ Syslogd puede ser atacado directamente
+ y se recomienda fuertemente que utilice la opción
+ siempre que sea posible, y la opción
+ de otra manera.
+
+ También debe ser extremadamente cuidadoso con servicios
+ de conexión inversa como ident inverso de
+ TCP Wrapper, que puede ser atacado
+ directamente. Generalmente no va a querer utilizar la
+ propiedad de ident inverso de
+ TCP Wrapper por esta razón.
+
+ Es una muy buena idea proteger los servicios internos
+ de acceso externo protegiéndolos vía firewall
+ en los ruteadores de los bordes.
+ La idea aquí es prevenir ataques de saturación
+ desde el exterior de la LAN, no tanto para proteger servicios
+ internos de comprometimientos root basados
+ en red. Siempre configure un firewall exclusivo, ej.,
+ restringir todo menos los puertos
+ A, B, C, D y M-Z. De esta manera puede restringir
+ todos sus puertos bajos exceptuando ciertos servicios específicos
+ como named (si es el primario para
+ una zona), ntalkd,
+ sendmail y otros servicios accesibles
+ desde Internet. Si trata de configurar el firewall de la otra
+ manera — como un firewall inclusivo o permisivo, existe
+ una gran posibilidad de que olvide cerrar un
+ par de servicios, o de que agregue un nuevo servicio interno y
+ olvide actualizar el firewall. Puede incluso abrir el rango
+ de números de puerto altos en el firewall para permitir
+ operaciones de tipo permisivas, sin comprometer sus puertos
+ bajos. También tome nota que &os; le permite controlar
+ el rango de números de puerto utilizados para asignación
+ dinámica, a través de sysctl
+ con net.inet.ip.portrange
+ (sysctl -a | fgrep portrange), lo cual
+ también facilita la complejidad de la configuración
+ de su firewall. Por ejemplo, puede utilizar un rango normal
+ primero/último de 4000 o 5000, y un rango de puerto
+ alto de 49152 a 65535, entonces bloquée todo debajo de
+ 4000 en su firewall (excepto para ciertos puertos específicos
+ accesibles desde Internet, por supuesto).
+
+ ICMP_BANDLIM
+
+ Otro ataque DoS común es llamado ataque springboard
+ — atacar un servidor de una manera que provoca que el
+ servidor genere respuestas que sobrecarguen al servidor, la
+ red local o alguna otra máquina. Los ataques más
+ comunes de este tipo es el ataque ICMP ping broadcast.
+ El atacante imita paquetes ping enviados a la dirección
+ broadcast de su LAN con la dirección IP fuente puesta
+ a la de la máquina que desean atacar. Si sus ruteadores
+ de borde no están configurados para atrapar pings a
+ direcciones de broadcast, su LAN termina generando suficientes
+ respuestas a la dirección fuente imitada para saturar
+ a la víctima, especialmente cuando el atacante utiliza
+ el mismo truco en varias docenas de direcciones broadcast en
+ varias docenas de redes diferentes a la vez. Ataques de
+ broadcast de más de ciento veinte megabits han sido
+ medidos. Un segundo ataque común springboard es contra
+ el sistema de reporte de error de ICMP. Mediante la construcción
+ de paquetes que generan respuestas de error ICMP, un atacante
+ puede saturar la conexión entrante de red de un servidor
+ y provocar que el servidor sature su conexión saliente
+ de red con respuestas ICMP. Este tipo de ataque también
+ puede estrellar el servidor agotando sus mbufs, especialmente
+ si el servidor no puede drenar las respuestas ICMP que
+ genera lo suficientemente rápido. El kernel de &os;
+ tiene una nueva opción de compilación de
+ kernel llamada que limita la
+ efectividad de este tipo de ataques. La última gran
+ clase de ataques springboard está relacionada a
+ ciertos servicios de inetd como
+ el servicio de eco udp. Un atacante simplemente imita un paquete
+ UDP con la dirección fuente siendo el puerto de eco del
+ servidor A, y la dirección destino siendo el puerto de
+ eco del servidor B, donde servidor A y B están ambos
+ en su LAN. Los dos servidores entonces rebotan este paquete
+ de ida y vuelta entre ellos. El atacante puede sobrecargar
+ ambos servidores y la LAN simplemente inyectando un par de
+ paquetes de esta manera. Problemas similares existen con el
+ puerto chargen. Un administrador
+ de sistema competente apagará todos estos servicios
+ de inetd internos de verificación.
+
+ Los ataques de paquetes imitados pueden ser también
+ utilizados para sobrecargar el caché de ruteo del kernel.
+ Refiérase a los parámetros de sysctl
+ net.inet.ip.rtexpire,
+ rtminexpire, y
+ rtmaxcache.
+ Un ataques de paquetes imitados que utiliza una dirección
+ IP fuente aleatoria provocará que el kernel genere una
+ ruta temporal en caché en la tabla de ruteo, visible con
+ netstat -rna | fgrep W3. Estas rutas
+ tipicamente expiran en 1600 segundos más o menos. Si el
+ kernel detecta que la tabla de ruteo en caché ya está
+ demasiado grande reducirá dinamicamente rtexpire
+ pero nunca la decrementará a menos del valor de
+ rtminexpire. Existen dos problemas:
+
+
+
+ El kernel no reacciona con suficiente rapidez cuando
+ un servidor ligeramente cargado es atacado.
+
+
+
+ El rtminexpire no es lo suficientemente
+ bajo para que el kernel sobreviva a un ataque sostenido.
+
+
+
+ Si sus servidores están conectados al Internet
+ mediante un T3 o mejor, puede ser prudente corregir manualmente
+ rtexpire y rtminexpire
+ por medio de &man.sysctl.8;. Nunca ponga ambos parámetros
+ a cero (a menos que desée estrellar la máquina).
+ Configurar ambos parámetros a 2 segundos debe ser
+ suficiente para proteger la tabla de ruteo de ataques.
+
+
+
+ Detalles de acceso con Kerberos y SSH
+ ssh
+ KerberosIV
+
+ Existen un par de detalles con respecto a
+ Kerberos y ssh que necesitan ser analizados si
+ pretende utilizarlos. Kerberos V es un excelente
+ protocolo de autentificación, pero existen
+ errores en la versión kerberizada de
+ telnet y
+ rlogin que las hacen
+ inapropiadas para manejar flujos binarios.
+ También, por omisión Kerberos no encripta una
+ sesión a menos que utilice la opción
+ . ssh
+ encripta todo por omisión.
+
+ ssh funciona bastante bien en
+ cada caso excepto que reenvía llaves de encriptación
+ por omisión. Lo que esto significa es que si usted tiene
+ una estación de trabajo segura manteniendo llaves que
+ le dan acceso al resto del sistema, y hace ssh a una
+ máquina insegura, sus llaves son usables. Las llaves en
+ sí no son expuestas, pero ssh instala un puerto de
+ reenvío durante la duración de su login, y si
+ un atacante ha comprometido a root
+ en la máquina insegura puede utilizar ese puerto
+ para usar sus llaves y ganar acceso a cualquier otra
+ máquina que sus llaves abran.
+
+ Recomendamos que utilice ssh en
+ combinación con Kerberos siempre que sea posible
+ para logins de staff.
+ ssh puede ser compilado con
+ soporte de Kerberos. Esto reduce su dependencia en
+ llaves ssh expuestas mientras al mismo tiempo
+ protegen las contraseñas vía Kerberos.
+ Las llaves ssh deben ser utilizadas solamente para tareas
+ automáticas desde máquinas seguras
+ (algo que Kerberos no hace por incompatibilidad). Recomendamos
+ también que desactive el reenvío de llaves
+ en la configuración de ssh, o que haga uso de la
+ opción from=IP/DOMAIN que
+ ssh permite en su archivo
+ authorized_keys para hacer la llave
+ usable solamente a entidades que se firmen desde máquinas
+ específicas.
+
+
+
+
+
+
+
+ Bill
+ Swingle
+ Partes reescritas y actualizadas por
+
+
+
+
+
+ DES, MD5 y Crypt
+
+ seguridad
+ crypt
+
+
+ crypt
+ DES
+ MD5
+
+ Cada usuario en un sistema &unix; tiene una contraseña
+ asociada con su cuenta. Parece obvio que estas contraseñas
+ necesiten ser conocidas solamente por el usuario y por el sistema
+ operativo. Para mantener estas contraseñas secretas, son
+ encriptadas con lo que se conoce como un hash de una pasada,
+ esto es, solo pueden ser facilmente encriptadas pero no
+ desencriptadas. En otras palabras, lo que acabamos de decir fué
+ tan obvio que ni siquiera es verdad: el sistema operativo mismo no
+ conoce realmente la contraseña.
+ Solamente conoce la forma encriptada de
+ la contraseña. La única manera de obtener la
+ contraseña en texto plano es por medio
+ de una búsqueda de fuerza bruta en el espacio de
+ contraseñas posibles.
+
+ Desafortunadamente la única manera segura de encriptar
+ contraseñas cuando &unix; empezó a hacerlo estaba
+ basada en DES, la encriptación de datos estándar.
+ Esto no era tanto problema para usuarios residentes en EU, &os;
+ tuvo que buscar una manera de cumplir con las leyes de EU y
+ retener compatibilidad con todos las otras variantes de &unix;
+ que todavía utilizaban DES.
+
+ La solución fué dividir las librerías
+ de encriptación para que los usuarios de EU pudieran
+ instalar las librerías DES y utilizar DES pero los
+ usuarios internacionales todavía tenían un
+ método de encriptación que podía ser
+ exportado. Así es como &os; llegó a usar
+ MD5 como su método de encriptación por
+ omisión. Se cree que MD5 es más seguro que
+ DES, así que la instalación de DES es ofrecida primordialmente
+ por razones de compatibilidad.
+
+
+ Reconociendo su mecanismo de encriptación
+
+ Antes de &os; 4.4 libcrypt.a era
+ un enlace simbólico apuntando a la librería que era
+ utilizada para encriptación. &os; 4.4 cambió
+ libcrypt.a para brindar una librería
+ configurable de autentificación hash de contraseñas.
+ Actualmente la librería soporta funciones hash DES, MD5 y
+ Blowfish. Por omisión &os; utiliza MD5 para encriptar
+ contraseñas.
+
+ Es muy sencillo identificar que método de
+ encriptación &os; tiene configurado para usar.
+ Examinando las contraseñas encriptadas en el archivo
+ /etc/master.passwd en una manera.
+ Contraseñas encriptadas con el hash MD5 son más
+ largas que aquellas encriptadas con el hash DES y también
+ inician con los caracteres
+ $1$. Las contraseñas
+ que inician con $2a$ están
+ encriptadas con la función hash de Blowfish. Las
+ cadenas de contraseñas DES no tienen ninguna
+ característica particular, pero son más
+ cortas que las contraseñas MD5, y están
+ codificadas con un alfabeto de 64 caracteres el cual no
+ incluye el caracter $, por eso
+ una cadena relativamente corta que inicie con un signo de
+ dólar es muy probable que sea una contraseña
+ DES.
+
+ El formato de contraseña utilizado para nuevas
+ contraseñas está controlado por la capacidad
+ passwd_format en
+ /etc/login.conf, la cual toma valores
+ de des, md5 o
+ blf. Vea la página de manual
+ &man.login.conf.5; para mayor información acerca de
+ las capacidades de login.
+
+
+
+
+
+ Contraseñas de una sola vez
+ Contraseñas de una sola vez
+
+ seguridad
+ Contraseñas de una sola vez
+
+
+ S/Key es un esquema de contraseña de una sola vez
+ en una función de hash de una pasada. &os; utiliza el
+ hash MD4 para compatibilidad pero otros sistemas han usado
+ MD5 y DES-MAC. S/Key ha sido parte del sistema base de &os;
+ desde la versión 1.1.5 y es usado también en
+ un número creciente de otros sistemas operativos. S/Key
+ es una marca registrada de Bell Communications Research, Inc.
+
+ Desde la versión 5.0 de &os;, S/Key ha sido
+ reemplazado con la funcionalidad equivalente OPIE
+ (One-time Passwords In Everything). OPIE usa hash MD5
+ por omisión.
+
+ Existen tres tipos de contraseñas las cuales serán
+ discutidas abajo. La primera es la contraseña usual estilo
+ &unix; o Kerberos; llamaremos a esta una contraseña &unix;.
+ El segundo tipo es la contraseña de una sola vez la cual es
+ generada por el programa key de S/Key o por
+ el programa &man.opiekey.1; de OPIE, y aceptada por los programas
+ keyinit u &man.opiepasswd.1; y el prompt de
+ login; llamaremos a esta una contraseña de una sola vez.
+ El último tipo de contraseña es la contraseña
+ secreta que le da a los programas key/opiekey
+ (y a veces
+ keyinit/opiepasswd) la cual
+ es utilizada para generar contraseñas de una sola vez;
+ llamaremos a esta una contraseña secreta
+ o solamente contraseña no calificada.
+
+ La contraseña secreta no tiene nada que ver con su
+ contraseña &unix;; pueden ser la misma pero esto no es
+ recomendable. Las contraseñas secretas S/Key y OPIE no
+ están limitadas a 8 caracteres como las contraseñas
+ &unix; antiguasBajo &os; la contraseña del
+ login estándar puede ser de hasta 128 caracteres de
+ longitud., pueden ser tan largas como quiera.
+ Contraseñas con frases de seis o siete palabras muy largas
+ son bastante comunes. En la mayor parte, el sistema S/Key o el
+ OPIE opera completamente independiente del sistema de contraseñas
+ &unix;.
+
+ Además de la contraseña, existen dos piezas más
+ de datos que son importante para S/Key y OPIE. Una es la que es
+ conocida como la semilla o llave,
+ consistente de dos letras y cinco dígitos. La otra es la
+ que es llamada la cuenta iterativa, un número
+ entre 1 y 100. S/Key genera la contraseña de una sola vez
+ concatenando la semilla y la contraseña secreta,
+ entonces aplica el hash MD4/MD5 tantas veces como especifique
+ la cuenta iterativa y convirtiendo el resultado en seis palabras
+ cortas en inglés. Estas seis palabras en inglés
+ son su contraseña de una sola vez. El sistema de autentificación
+ (principalmente PAM) mantiene un registro del uso de contraseñas
+ de una sola vez, y el usuario es autentificado si el hash de la
+ contraseña brindada por el usuario es igual a la
+ contraseña previa. Como se utiliza un hash de una pasada
+ es imposible generar contraseñas de una sola vez futuras
+ si una contraseña usada con éxito es capturada;
+ la cuenta iterativa es decrementada despues de cada login exitoso
+ para mantener al usuario y al programa login en sincronía.
+ Cuanto la cuenta iterativa llega a 1, S/Key y OPIE deben ser
+ reinicializados.
+
+ Hay tres programas involucrados en cada sistema los
+ cuales discutiremos abajo. Los programas key
+ y opiekey aceptan una cuenta iterativa,
+ una semilla y una contraseña secreta, y generan
+ una contraseña de una sola vez o una lista consecutiva
+ de contraseñas de una sola vez. Los programas
+ keyinit y opiepasswd
+ son utilizados para inicializar S/Key y OPIE respectivamente,
+ y para cambiar contraseñas, cuentas iterativas o
+ semillas; toman ya sea una frase secreta, o una cuenta
+ iterativa y una contraseña de una sola vez. Los programas
+ keyinfo y opieinfo
+ examinan los archivos de credenciales relevantes
+ (/etc/skeykeys o
+ /etc/opiekeys) e imprime la cuenta
+ iterativa y semilla actual del usuario invocante.
+
+ Existen cuatro tipos de operaciones diferentes que cubriremos.
+ La primera es usando keyinit o
+ opiepasswd a través de una conexión
+ segura para configurar contraseñas de una sola vez por
+ primera vez, o para cambiar su contraseña o semilla.
+ La segunda operación es utilizando keyinit
+ o opiepasswd sobre una conexión insegura,
+ en conjunto con key u opiekey
+ sobre una conexión segura, para hacer lo mismo. La tercera
+ es usando key/opiekey para
+ conectarse a través de una conexión insegura.
+ La cuarta es usando opiekey o key
+ para generar un número de llaves las cuales pueden ser escritas
+ o impresas para llevárselas con usted al ir a algún
+ lugar que no cuente con conexiones seguras a ningún lado.
+
+
+ Inicialización de conexiones seguras
+
+ Para inicializar S/Key por primera vez, cambie su contraseña,
+ o cambie su semilla mientras esta conectado a través de
+ una conexión segura (ej., en la consola de una máquina
+ o vía ssh), use el comando
+ keyinit sin ningún parámetro
+ mientras está conectado con su cuenta:
+
+ &prompt.user; keyinit
+Adding unfurl:
+Reminder - Only use this method if you are directly connected.
+If you are using telnet or rlogin exit with no password and use keyinit -s.
+Enter secret password:
+Again secret password:
+
+ID unfurl s/key is 99 to17757
+DEFY CLUB PRO NASH LACE SOFT
+
+ Para OPIE, es utilizado opiepasswd:
+
+ &prompt.user; opiepasswd -c
+[grimreaper] ~ $ opiepasswd -f -c
+Adding unfurl:
+Only use this method from the console; NEVER from remote. If you are using
+telnet, xterm, or a dial-in, type ^C now or exit with no password.
+Then run opiepasswd without the -c parameter.
+Using MD5 to compute responses.
+Enter new secret pass phrase:
+Again new secret pass phrase:
+ID unfurl OTP key is 499 to4268
+MOS MALL GOAT ARM AVID COED
+
+
+ En Enter new secret pass phrase: o
+ Enter secret password:, debe ingresar
+ una contraseña o frase. Recuerde, que esta no es la
+ contraseña que utilizará para entrar, esta es
+ usada para generar sus llaves de una sola vez. La línea
+ ID da los parámetros de su instancia
+ en particular: su nombre de login, la cuenta iterativa y
+ semilla. Al hacer login el sistema recordará estos
+ parámetros y los presentará de nuevo para que
+ no tenga que recordarlos. La última línea da
+ las contraseéas de una sola vez en particular que
+ corresponden a esos parámetros y su contraseña
+ secreta; si fuera a hacer nuevamente login de manera inmediata,
+ esta contraseña de una sola vez es la que debería
+ usar.
+
+
+
+ Inicialización de conexiones inseguras
+
+ Para inicializar o cambiar su contraseña secreta
+ a través de una conexión insegura, necesitará
+ tener alguna conexión segura a algún lugar
+ donde pueda correr key u opiekey;
+ esto podría ser en la forma de un accesorio de escritorio
+ en una &macintosh;, o un prompt de shell en una máquina
+ en la cual confíe. También necesitará hacer
+ una cuenta iterativa (100 es probablemente un buen valor), y puede
+ realizar su propia semilla o utilizar una generada de manera
+ aleatoria. A través de una conexión insegura
+ (hacia la máquina que está inicializando), utilice
+ el comando keyinit -s:
+
+ &prompt.user; keyinit -s
+Updating unfurl:
+Old key: to17758
+Reminder you need the 6 English words from the key command.
+Enter sequence count from 1 to 9999: 100
+Enter new key [default to17759]:
+s/key 100 to 17759
+s/key access password:
+s/key access password:CURE MIKE BANE HIM RACY GORE
+
+
+ Para OPIE, necesita usar opiepasswd:
+
+ &prompt.user; opiepasswd
+
+Updating unfurl:
+You need the response from an OTP generator.
+Old secret pass phrase:
+ otp-md5 498 to4268 ext
+ Response: GAME GAG WELT OUT DOWN CHAT
+New secret pass phrase:
+ otp-md5 499 to4269
+ Response: LINE PAP MILK NELL BUOY TROY
+
+ID mark OTP key is 499 gr4269
+LINE PAP MILK NELL BUOY TROY
+
+
+ Para aceptar la semilla por omisión (la que
+ el programa keyinit llama de
+ manera confusa una key), presione
+ Enter. Entonces antes de proporcionar
+ una contraseña de acceso, cambiese a su conexión
+ segura o accesorio de escritorio S/Key, y dele el mismo
+ parámetro:
+
+ &prompt.user; key 100 to17759
+Reminder - Do not use this program while logged in via telnet or rlogin.
+Enter secret password: <secret password>
+CURE MIKE BANE HIM RACY GORE
+
+ O para OPIE:
+
+ &prompt.user; opiekey 498 to4268
+Using the MD5 algorithm to compute response.
+Reminder: Don't use opiekey from telnet or dial-in sessions.
+Enter secret pass phrase:
+GAME GAG WELT OUT DOWN CHAT
+
+
+ Ahora regrese a la conexión insegura y copie la
+ contraseña de una sola vez generada al programa
+ relevante.
+
+
+
+ Generando una sola contraseña de una sola vez
+
+ Una vez que ha inicializado S/Key u OPIE, cuando haga login
+ se le presentará un prompt como este:
+
+&prompt.user; telnet example.com
+Trying 10.0.0.1...
+Connected to example.com
+Escape character is '^]'.
+
+FreeBSD/i386 (example.com) (ttypa)
+
+login: <username>
+s/key 97 fw13894
+Password:
+
+ O para OPIE:
+
+&prompt.user; telnet example.com
+Trying 10.0.0.1...
+Connected to example.com
+Escape character is '^]'.
+
+FreeBSD/i386 (example.com) (ttypa)
+
+login: <username>
+otp-md5 498 gr4269 ext
+Password:
+
+ Como una nota aparte, el prompt de S/Key u OPIE cuentan con una
+ opción útil (no mostrada aquí): si presiona
+ Enter en el prompt de contraseña, el
+ prompt activará el eco, para que pueda ver lo que está
+ tecleando. Esto puede ser extremadamente útil si está
+ intentando teclear una contraseña a mano, como desde una
+ forma impresa.
+
+ MS-DOS
+ Windows
+ MacOS
+
+ En este punto necesita generar su contraseña de una
+ sola vez para responder a este prompt de login. Esto debe hacerse
+ en un sistema confiable en el que pueda ejecutar key
+ u opiekey. (Existen versiones de estos para DOS,
+ &windows; y &macos; también.) Ambos necesitan la cuenta iterativa
+ y la semilla como opciones de línea de comando. Puede cortar
+ y pegar estas desde el prompt de login en la máquina a la
+ que se esta firmando.
+
+ En el sistema confiable:
+
+ &prompt.user; key 97 fw13894
+Reminder - Do not use this program while logged in via telnet or rlogin.
+Enter secret password:
+WELD LIP ACTS ENDS ME HAAG
+
+ Para OPIE:
+
+ &prompt.user; opiekey 498 to4268
+Using the MD5 algorithm to compute response.
+Reminder: Don't use opiekey from telnet or dial-in sessions.
+Enter secret pass phrase:
+GAME GAG WELT OUT DOWN CHAT
+
+ Ahora que tiene su contraseña de una sola vez puede
+ continuar con el login:
+
+ login: <username>
+s/key 97 fw13894
+Password: <return to enable echo>
+s/key 97 fw13894
+Password [echo on]: WELD LIP ACTS ENDS ME HAAG
+Last login: Tue Mar 21 11:56:41 from 10.0.0.2 ...
+
+
+
+
+ Generando múltiples contraseñas de una sola vez
+
+ A veces usted tiene que ir a lugares donde no hay
+ acceso a una máquina confiable o a una conexión
+ segura. En este caso, es posible utilizar los comandos
+ key y opiekey para
+ generar un número de contraseñas de una sola
+ vez con anticipación para imprimirlar y llevárselas
+ con usted. Por ejemplo:
+
+ &prompt.user; key -n 5 30 zz99999
+Reminder - Do not use this program while logged in via telnet or rlogin.
+Enter secret password: <secret password>
+26: SODA RUDE LEA LIND BUDD SILT
+27: JILT SPY DUTY GLOW COWL ROT
+28: THEM OW COLA RUNT BONG SCOT
+29: COT MASH BARR BRIM NAN FLAG
+30: CAN KNEE CAST NAME FOLK BILK
+
+ O para OPIE:
+
+ &prompt.user; opiekey -n 5 30 zz99999
+Using the MD5 algorithm to compute response.
+Reminder: Don't use opiekey from telnet or dial-in sessions.
+Enter secret pass phrase: <secret password>
+26: JOAN BORE FOSS DES NAY QUIT
+27: LATE BIAS SLAY FOLK MUCH TRIG
+28: SALT TIN ANTI LOON NEAL USE
+29: RIO ODIN GO BYE FURY TIC
+30: GREW JIVE SAN GIRD BOIL PHI
+
+ El pide cinco llaves en secuencia, la
+ opción especifica que ese debe ser el
+ último número de iteración. Note que son
+ impresas en el orden inverso de uso
+ eventual. Si es realmente paranoico, tal vez quiera escribir los
+ resultados a mano; de otra manera puede cortar y pegar hacia lpr.
+ Note que cada línea muestra la cuenta iterativa y la
+ contraseña de una sola vez; puede encontrar cómodo
+ tachar las contraseñas según las vaya utilizando.
+
+
+
+ Restringiendo el uso de contraseñas &unix;
+
+ S/Key puede colocar restricciones en el uso de contraseñas
+ &unix; basandose en el nombre de equipo, nombre de usuario, puerto de
+ terminal o dirección IP de una sesión de login.
+ Estas restricciones pueden encontrarse en el archivo de configuracio´n
+ /etc/skey.access. La página de manual
+ &man.skey.access.5; contiene más información sobre el
+ formato completo del archivo y detalla también algunas
+ precauciones de seguridad que hay que tomar en cuenta dependiendo
+ de este archivo para la seguridad.
+
+ Si no existe un archivo /etc/skey.access
+ (esto es por omisión en sistemas &os; 4.X), entonces
+ a todos los usuarios se les permitirá utilizar contraseñas
+ &unix;. Si el archivo existe, de todas maneras, entonces a todos
+ los usuarios se les requerirá la utilización de
+ S/Key a menos que se permita explicitamente otra forma por las
+ declaraciones de configuración en el archivo
+ skey.access. En todos los casos, las
+ contraseñas &unix; son permitidas en la consola.
+
+ Aquí hay una muestra del archivo de configuración
+ skey.access que ilustra las tres formas más
+ comunes de declaraciones de configuración:
+
+ permit internet 192.168.0.0 255.255.0.0
+permit user fnord
+permit port ttyd0
+
+ La primera línea (permit internet)
+ permite a usuarios cuyas direcciones IP fuentes (las cuales son
+ vulnerables a imitación) concuerden con los valores
+ y máscara especificados, utilizar contraseñas &unix;.
+ Esto no debe ser considerado un mecanismo de seguridad, sino un
+ medio de recordarle a usuarios autorizados que están
+ usando una red insegura y necesitan utilizar S/Key para
+ autentificación.
+
+ La segunda línea (permit user)
+ permite al nombre de usuario especificado, en este caso
+ fnord, utilizar contraseñas &unix;
+ en cualquier momento. Generalmente hablando, esto solo debe ser
+ usado para gente que no puede usar el programa key,
+ como aquellos con terminales tontas o los que son ineducables.
+
+ La tercera línea (permit port)
+ permite a todos los usuarios firmados en la línea de
+ terminal especificada utilizar contraseñas &unix;;
+ esto puede ser usado para dial-ups.
+
+ OPIE puede restringir el uso de contraseñas &unix;
+ basándose en la dirección IP de una sesión
+ de login justo como lo hace S/Key. El archivo relevante es
+ /etc/opieaccess, el cual está presente
+ por omisión en sistemas &os; 5.0 o posteriores. Por
+ favor revise &man.opieaccess.5; para mayor información sobre
+ este archivo y que consideraciones de seguridad debe tener presente
+ a la hora de usarlo.
+
+ Aquí hay un archivo opieaccess de muestra:
+
+ permit 192.168.0.0 255.255.0.0
+
+ Esta línea le permie a usuarios cuya dirección
+ IP fuente (la cual es vulnerable a imitación) concuerde
+ con los valores y máscara especificados, utilizar
+ contraseñas &unix; en cualquier momento.
+
+ Si no concuerda ninguna regla en opieaccess,
+ por omisión se niegan los logins no-OPIE.
+
+
+
+
+
+
+
+
+ Tom
+ Rhodes
+ Escrito por:
+
+
+
+
+ TCP Wrappers
+
+ TCP Wrappers
+
+ Cualquiera familiarizado con &man.inetd.8; ha escuchado
+ probablemente de TCP Wrappers en algún
+ momento. Pero pocos individuos parecen comprender
+ completamente su utilidad en un ambiente de red. Parece que
+ todos quieren instalar un firewall para manejar conexiones
+ de red. Mientras un firewall tiene una amplia variedad de
+ usos, hay cosas que un firewall no maneja como el envío
+ de texto de regreso al originador de la conexión.
+ El software TCP hace esto y más.
+ En las siguientes secciones varias de las opciones de
+ TCP Wrappers serán discutidas,
+ y, cuando aplique, se brindarán ejemplos de
+ líneas de configuración.
+
+ El software TCP Wrappers extiende
+ las habilidades de inetd para brindar
+ soporte para cada servidor daemon bajo su control.
+ Utilizando este método es posible proveer soporte de
+ logs, regresar mensajes a conexiones, permitir a un daemon
+ aceptar solamente conexiones internas, etc. Mientras algunas
+ de estas opciones pueden ser provistas implementando un
+ firewall, esto agregará no solamente una capa extra
+ de protección sino que irá más allá
+ del nivel de control que un firewall puede brindar.
+
+ La funcionalidad agregada de TCP Wrappers
+ no debe ser considerada un reemplazo de un buen firewall.
+ TCP Wrappers puede ser utilizado en
+ conjunto con un firewall o otra mejoría de seguridad
+ aunque solo puede servir como una capa extra de protección
+ para el sistema.
+
+ Ya que es una extensión a la configuración
+ de inetd, se espera que el lector haya
+ leido la sección
+ configuración de inetd.
+
+
+ Mientras programas ejecutados por &man.inetd.8; no son
+ exactamente daemons, han sido llamados
+ tradicionalmente daemons. Este es el término que
+ usaremos en esta sección también.
+
+
+
+ Configuración inicial
+
+ El único requerimiento para usar
+ TCP Wrappers en &os; es asegurarse
+ que el servidor inetd sea iniciado
+ desde rc.conf con la opción
+ ; esta es la configuración
+ por omisión. Por supuesto, se espera que
+ /etc/hosts.allow esté propiamente
+ configurado, pero &man.syslogd.8; aventará mensajes
+ a los logs del sistema en estos casos.
+
+
+ A diferencia de otras implementaciones de TCP
+ Wrappers, el uso de hosts.deny ha sido
+ descontinuado. Todas las opciones de configuración
+ deben ser colocadas en /etc/hosts.allow.
+
+
+ En la configuración más simple, las
+ políticas de conexión de daemons están
+ configuradas ya sea a permitir o bloquear, dependiendo de
+ las opciones en /etc/hosts.allow.
+ La configuración por omisión en &os; es
+ permitir una conexión a cada daemon iniciado con
+ inetd. Cambiar esta configuración
+ será discutido solamente despues de cubrir la
+ configuración básica.
+
+ La configuración básica usualmente
+ toma la forma de
+ daemon : dirección : acción.
+ Donde daemon es el nombre de daemon
+ el cual inicia inetd. La
+ dirección puede ser un nombre
+ de equipo válido, una dirección IP o
+ IPv6 encerrada en corchetes ([ ]). El campo de
+ acción puede ser permitir o denegar para el
+ dar el acceso apropiado. Tenga en mente que la
+ configuración funciona en base a la primera
+ concordancia encontrada en la regla de semántica,
+ esto significa que el archivo de configuración es
+ explorado en orden ascendente por una regla que
+ concuerde. Cuando se encuentra una concordancia la
+ regla es aplicada y el proceso se detendrá.
+
+ Existen muchas otras opciones pero estas serán
+ explicadas en una sección posterior. Una línea
+ de configuración simple puede ser facilmente
+ construida desde esa información solamente. Por
+ ejemplo para permitir conexiones POP3
+ por medio del daemon mail/qpopper,
+ las siguientes líneas deben ser agregadas a
+ hosts.allow:
+
+ # This line is required for POP3 connections:
+qpopper : ALL : allow
+
+ Despues de añadir esta línea, inetd
+ necesitará reiniciar. Esto puede lograrse usando el
+ comando &man.kill.1;, o con el parámetro restart
+ con /etc/rc.d/inetd.
+
+
+
+ Configuración avanzada
+
+ TCP Wrappers tiene
+ opciones avanzadas también; estas permitirán
+ mayor control sobre la forma en que son manejadas las
+ conexiones. En algunos casos puede ser una buena idea
+ regresar un comentario a ciertos equipos o conexiones
+ de daemons. En otros casos, quizás se deba
+ registrar un archivo de log o enviar un correo al
+ administrador. Otras situaciones pueden requerir
+ el uso de un servicio para conexiones locales
+ solamente. Todo esto es posible a través del
+ uso de opciones de configuración conocidas
+ como comodines, caracteres de expansión
+ y ejecución de comandos externos. Las diguientes dos
+ secciones están escritas para cubrir estas
+ situaciones.
+
+
+ Comandos externos
+
+ Suponga que ocurre una situación donde una
+ conexión debe ser negada pero se debe mandar una razón
+ al individuo que intentó establecer esa conexión.
+ ¿Como se puede lograr? Esa acción puede hacerse
+ posible utilizando la opción .
+ Cuando un intento de conexión es hecha, se llamará
+ a para ejecutar un comando de shell
+ o un script. Existe ya un ejemplo en el archivo
+ hosts.allow:
+
+ # The rest of the daemons are protected.
+ALL : ALL \
+ : severity auth.info \
+ : twist /bin/echo "No es bienvenido a utilizar %d desde %h."
+
+ Este ejemplo muestra que el mensaje,
+ No es bienvenido a utilizar daemon
+ desde nombre de equipo. será
+ retornado para cualquier daemon no configurado previamente
+ en el archivo de acceso.
+ Esto es extremadamente útil para enviar una respuesta
+ de regreso al iniciador de la conexión justo despues
+ que la conexión establecida es tirada. Note que
+ cualquier mensaje regresado debe
+ ser encerrado entre comillas ";
+ no existen excepciones a esta regla.
+
+
+ Puede ser posible lanzar un ataque de negación
+ de servicio en el servidor si un atacante o grupo de
+ atacantes pueden sobrecargar estos daemons con peticiones
+ de conexión.
+
+
+ Otra posibilidad es usar la opción
+ en estos casos. Al igual que ,
+ niega implicitamente la conexión
+ y puede ser utilizada para correr comandos de shell externos
+ o scripts. A diferencia de ,
+ no mandará una respuesta de
+ regreso al individuo que ha establecido la conexión.
+ Por ejemplo, considere la siguiente línea de
+ configuración:
+
+ # No permitimos conexiones desde example.com:
+ALL : .example.com \
+ : spawn (/bin/echo %a from %h attempted to access %d >> \
+ /var/log/connections.log) \
+ : deny
+
+ Esto negará todos los intentos de conexión
+ desde el dominio *.example.com;
+ simultaneamente haciendo un log del nombre del equipo,
+ dirección IP y el daemon al
+ que se intentó accesar en el archivo
+ /var/log/connections.log.
+
+ Además de la sustitución de caracteres ya
+ explicada arriba, ej. %a, existen unas cuantas más.
+ Vea la página de manual &man.hosts.access.5; para
+ la lista completa.
+
+
+
+ Opciones comodín
+
+ Hasta el momento el ejemplo ALL ha sido
+ utilizado continuamente a lo largo de los ejemplos. Existen
+ otras opciones que extienden un poco más la funcionalidad.
+ Para ejemplificar, ALL puede ser usado para
+ concordar con cualquier instancia ya sea de daemon, dominio o
+ dirección IP. Otro comodín
+ dsponible es PARANOID el cual puede ser
+ usado para concordar con cualquier equipo que brinde una
+ dirección IP que puede estar
+ falsificada. En otras palabras, paranoid
+ puede ser usado para definir una acción a tomar
+ siempre que una conexión sea hecha desde una
+ dirección IP que difiera de su
+ nombre de equipo. El siguiente ejemplo puede arrojar más
+ luz en esta discusión:
+
+ # Bloquear peticiones posiblemente falsificadas a sendmail:
+sendmail : PARANOID : deny
+
+ En ese ejemplo todas las peticiones de conexión
+ a sendmail que tengan una
+ dirección IP que varíe
+ de su nombre de equipo seran negadas.
+
+
+ Utilizando PARANOID puede invalidar
+ servidores si el cliente o servidor tiene una configuración
+ de DNS dañada. Se recomienda
+ precaución del administrador.
+
+
+ Para aprender más acerca de comodines y sus
+ funcionalidades asociadas, vea la página de
+ manual &man.hosts.access.5;.
+
+ Antes de que cualquiera de las líneas de
+ configuración específica de arriba
+ funcione, la primera línea debe ser comentada
+ en hosts.allow. Esto fué
+ especificado al principio de esta sección.
+
+
+
+
+
+
+
+
+ Mark
+ Murray
+ Contribuido por
+
+
+
+
+ Mark
+ Dapoz
+ Basado en una contribución de
+
+
+
+
+ KerberosIV
+
+ Kerberos es un sistema/protocolo agregado para red que le permite
+ a usuarios autentificarse a través de los servicios de un
+ servidor seguro. Servicios como login remoto, copia remota, copias
+ de archivo inter-sistemas seguras y otras tareas de riesgo son
+ hechas considerablemente seguras y más controlables.
+
+ Las siguientes instrucciones pueden usarse como una guía
+ para configurar Kerberos como se distribuye para &os;. De todas
+ maneras, debe referirse a las páginas de manual relevantes
+ para una descripción completa.
+
+
+ Instalando KerberosIV
+
+ MIT
+
+ KerberosIV
+ instalación
+
+ Kerberos es un componente óptimo de &os;. La manera
+ más fácil de instalar este software es
+ seleccionando la distribución krb4 o
+ krb5 en sysinstall
+ durante la instalación inicial de &os;. Esto
+ instalará la implementación de Kerberos
+ eBones (KerberosIV) o
+ Heimdal (Kerberos5).
+ Estas implementaciones son incluidas debido a que están
+ desarrolladas fuera de EU/Canada y estaban así disponibles
+ para propietarios de sistemas fuera de estos países
+ durante la era restrictiva de control de exportaciones en código
+ criptográfico desde EU.
+
+ Alternativamente, la implementación de Kerberos
+ del MIT está disponible en la colección
+ de ports como
+ security/krb5.
+
+
+
+ Creando la base de datos inicial
+
+ Esto es hecho en el servidor Kerberos solamente. Primero
+ asegúrese que no tiene bases de datos antiguas de
+ Kerberos. Debe cambiarse al directorio /etc/kerberosIV
+ y revisar que solo los siguientes archivos estén
+ presentes:
+
+ &prompt.root; cd /etc/kerberosIV
+&prompt.root; ls
+README krb.conf krb.realms
+
+ Si existe cualquier archivo adicional (como principal.*
+ o master_key), entonces utilice el
+ comando kdb_destroy para destruir la base
+ de datos antigua de Kerberos, o si Kerberos no está
+ corriendo, simplemente borre los archivos adicionales.
+
+ Ahora debe editar los archivos krb.conf
+ y krb.realms para definir su dominio
+ Kerberos. En este caso el dominio será EXAMPLE.COM
+ y el servidor es grunt.example.com.
+ Editamos o creamos el archivo krb.conf:
+
+ &prompt.root; cat krb.conf
+EXAMPLE.COM
+EXAMPLE.COM grunt.example.com admin server
+CS.BERKELEY.EDU okeeffe.berkeley.edu
+ATHENA.MIT.EDU kerberos.mit.edu
+ATHENA.MIT.EDU kerberos-1.mit.edu
+ATHENA.MIT.EDU kerberos-2.mit.edu
+ATHENA.MIT.EDU kerberos-3.mit.edu
+LCS.MIT.EDU kerberos.lcs.mit.edu
+TELECOM.MIT.EDU bitsy.mit.edu
+ARC.NASA.GOV trident.arc.nasa.gov
+
+ En este caso, los otros dominios no necesitan estar ahí.
+ Están aquí como un ejemplo de como puede hacerse a una
+ máquina consciente de dominios múltiples. Tal vez
+ no desée incluirlos por simplicidad.
+
+ La primera línea nombra el dominio en el cual el
+ sistema trabaja. Las otras líneas contienen entradas
+ dominio/equipo. El primer componente en una línea es un
+ dominio, y el segundo es un equipo en ese dominio que está
+ actuando como un centro de distribución de llaves.
+ Las palabras admin server que siguen al
+ nombre de equipo significan que ese equipo también
+ brinda un servidor de base da datos administrativo. Para una
+ explicación más completa de estos términos,
+ consulte por favor las páginas de manual de Kerberos.
+
+ Ahora tenemos que agregar grunt.example.com
+ al dominio EXAMPLE.COM y también agregar
+ una entrada para poner todos los equipos en el dominio
+ .example.com
+ Kerberos EXAMPLE.COM. El archivo
+ krb.realms puede ser actualizado como
+ sigue:
+
+ &prompt.root; cat krb.realms
+grunt.example.com EXAMPLE.COM
+.example.com EXAMPLE.COM
+.berkeley.edu CS.BERKELEY.EDU
+.MIT.EDU ATHENA.MIT.EDU
+.mit.edu ATHENA.MIT.EDU
+
+ De nuevo, los otros dominios no necesitan estar ahí. Están
+ aquí como un ejemplo de como una máquina puede hacerse consciente
+ de dominios múltiples. Tal vez desée eliminarlos para
+ simplificar las cosas.
+
+ a primera línea pone al sistema específico
+ en el dominio nombrado. El resto de las líneas muestran como
+ poner por omisión sistemas de un subdominio particular
+ a un dominio Kerberos.
+
+ Ahora estamos listos para crear la base de datos. Esta solo
+ necesita correr en el servidor Kerberos (o centro de distribución
+ de llaves). Ejecute el comando kdb_init para
+ hacer esto:
+
+ &prompt.root; kdb_init
+Realm name [default ATHENA.MIT.EDU ]:EXAMPLE.COM
+You will be prompted for the database Master Password.
+It is important that you NOT FORGET this password.
+
+Enter Kerberos master key:
+
+ Ahora tenemos que salvar la llave para que los servidores en
+ la máquina local puedan recogerla. Use el comando
+ kstash para hacer esto:
+
+ &prompt.root; kstash
+
+Enter Kerberos master key:
+
+Current Kerberos master key version is 1.
+
+Master key entered. BEWARE!
+
+ Esto salva la contraseña encriptada
+ maestra en /etc/kerberosIV/master_key.
+
+
+
+ Haciendo que corra todo
+
+
+ KerberosIV
+ encendido inicial
+
+
+
+ Dos datos principales necesitan ser agregados a la base de
+ datos para cada sistema que estará
+ asegurado con Kerberos. Sus nombres son kpasswd y
+ rcmd. Estos dos datos están hechos para
+ cada sistema, con la instancia siendo el nombre del sistema
+ individual.
+
+ Estos daemons, kpasswd y
+ rcmd le permiten a otros sistemas
+ cambiar contraseñas de Kerberos y ejecutar comandos
+ como &man.rcp.1;, &man.rlogin.1; y &man.rsh.1;.
+
+ Ahora vamos a añadir estas entradas:
+
+ &prompt.root; kdb_edit
+Opening database...
+
+Enter Kerberos master key:
+
+Current Kerberos master key version is 1.
+
+Master key entered. BEWARE!
+Previous or default values are in [brackets] ,
+enter return to leave the same, or new value.
+
+Principal name:passwd
+Instance:grunt
+
+<Not found>, Create [y] ?y
+
+Principal: passwd, Instance: grunt, kdc_key_ver: 1
+New Password: <---- enter RANDOM here
+Verifying password
+
+New Password: <---- enter RANDOM here
+
+Random password [y] ?y
+
+Principal's new key version = 1
+Expiration date (enter yyyy-mm-dd) [ 2000-01-01 ] ?
+Max ticket lifetime (*5 minutes) [ 255 ] ?
+Attributes [ 0 ] ?
+Edit O.K.
+Principal name:rcmd
+Instance:grunt
+
+<Not found>, Create [y] ?
+
+Principal: rcmd, Instance: grunt, kdc_key_ver: 1
+New Password: <---- enter RANDOM here
+Verifying password
+
+New Password: <---- enter RANDOM here
+
+Random password [y] ?
+
+Principal's new key version = 1
+Expiration date (enter yyyy-mm-dd) [ 2000-01-01 ] ?
+Max ticket lifetime (*5 minutes) [ 255 ] ?
+Attributes [ 0 ] ?
+Edit O.K.
+Principal name: <---- null entry here will cause an exit
+
+
+
+ Creando el archivo de servidor
+
+ Ahora tenemos que extraer todas las instancias que definen
+ los servicios en cada máquina. Para esto usamos el
+ comando ext_srvtab. Esto creará un
+ archivo que debe ser copiado o movido por medios
+ seguros a cada cliente de Kerberos
+ en el directorio /etc/kerberosIV.
+ Este archivo debe estar presente en cada servidor y cliente, y es
+ crucial para la operación de Kerberos.
+
+
+ &prompt.root; ext_srvtab grunt
+Enter Kerberos master key:
+
+Current Kerberos master key version is 1.
+
+Master key entered. BEWARE!
+Generating 'grunt-new-srvtab'....
+
+ Ahora, este comando solo genera un archivo temporal el cual
+ debe ser renombrado a srvtab para que todos
+ los servidores puedan recogerlo. Utilice el comando
+ &man.mv.1; para moverlo al lugar correcto en el sistema
+ original:
+
+ &prompt.root; mv grunt-new-srvtab srvtab
+
+ Si el archivo es para un sistema cliente, y la red no se considera
+ segura, entonces copie el
+ client-new-srvtab a un
+ medio removible y transportelo por medios físicos seguros.
+ Asegúrese de renombrarlo a srvtab en el
+ directorio /etc/kerberosIV del cliente, y
+ asegúrese que tiene modo 600:
+
+ &prompt.root; mv grumble-new-srvtab srvtab
+&prompt.root; chmod 600 srvtab
+
+
+
+ Poblando la base de datos
+
+ Ahora tenemos que agregar algunas entradas de usuarios en la
+ base de datos. Primero vamos a crear una entrada para el usuario
+ jane. Utilice el comando
+ kdb_edit para hacer esto:
+
+ &prompt.root; kdb_edit
+Opening database...
+
+Enter Kerberos master key:
+
+Current Kerberos master key version is 1.
+
+Master key entered. BEWARE!
+Previous or default values are in [brackets] ,
+enter return to leave the same, or new value.
+
+Principal name:jane
+Instance:
+
+<Not found>, Create [y] ?y
+
+Principal: jane, Instance: , kdc_key_ver: 1
+New Password: <---- enter a secure password here
+Verifying password
+
+New Password: <---- re-enter the password here
+Principal's new key version = 1
+Expiration date (enter yyyy-mm-dd) [ 2000-01-01 ] ?
+Max ticket lifetime (*5 minutes) [ 255 ] ?
+Attributes [ 0 ] ?
+Edit O.K.
+Principal name: <---- null entry here will cause an exit
+
+
+
+ Probándolo todo
+
+ Primero tenemos que iniciar los daemons de Kerberos. Note que
+ si tiene correctamente editado su /etc/rc.conf
+ entonces esto sucederá automaticamente cuando reinicie.
+ Esto solamente es necesario el el servidor Kerberos. Los clientes
+ Kerberos tomarán automaticamente lo que necesiten desde
+ el directorio /etc/kerberosIV.
+
+ &prompt.root; kerberos &
+Kerberos server starting
+Sleep forever on error
+Log file is /var/log/kerberos.log
+Current Kerberos master key version is 1.
+
+Master key entered. BEWARE!
+
+Current Kerberos master key version is 1
+Local realm: EXAMPLE.COM
+&prompt.root; kadmind -n &
+KADM Server KADM0.0A initializing
+Please do not use 'kill -9' to kill this job, use a
+regular kill instead
+
+Current Kerberos master key version is 1.
+
+Master key entered. BEWARE!
+
+ Ahora podemos tratar usando el comando kinit
+ para obtener un boleto para el ID jane
+ que creamos arriba:
+
+ &prompt.user; kinit jane
+MIT Project Athena (grunt.example.com)
+Kerberos Initialization for "jane"
+Password:
+
+ Trate de listar los tokens usando klist para ver
+ si realmente los tenemos:
+
+ &prompt.user; klist
+Ticket file: /tmp/tkt245
+Principal: jane@EXAMPLE.COM
+
+ Issued Expires Principal
+Apr 30 11:23:22 Apr 30 19:23:22 krbtgt.EXAMPLE.COM@EXAMPLE.COM
+
+ Ahora trate de cambiar la contraseña usando
+ &man.passwd.1; para revisar si el daemon kpasswd
+ puede obtener autorización para la base de datos
+ Kerberos:
+
+ &prompt.user; passwd
+realm EXAMPLE.COM
+Old password for jane:
+New Password for jane:
+Verifying password
+New Password for jane:
+Password changed.
+
+
+
+ Añadiendo privilegios su
+
+ Kerberos nos permite dar a cada
+ usuario que necesite privilegios de root
+ su propia contraseña &man.su.1; separada.
+ Ahora podemos agregar un ID que esté autorizado a
+ &man.su.1; root. Esto es controlado
+ teniendo una instancia de root
+ asociada con una principal. Usando kdb_edit
+ podemos crear la entrada jane.root en la
+ base de datos Kerberos:
+
+ &prompt.root; kdb_edit
+Opening database...
+
+Enter Kerberos master key:
+
+Current Kerberos master key version is 1.
+
+Master key entered. BEWARE!
+Previous or default values are in [brackets] ,
+enter return to leave the same, or new value.
+
+Principal name:jane
+Instance:root
+
+<Not found>, Create [y] ? y
+
+Principal: jane, Instance: root, kdc_key_ver: 1
+New Password: <---- enter a SECURE password here
+Verifying password
+
+New Password: <---- re-enter the password here
+
+Principal's new key version = 1
+Expiration date (enter yyyy-mm-dd) [ 2000-01-01 ] ?
+Max ticket lifetime (*5 minutes) [ 255 ] ?12 <--- Keep this short!
+Attributes [ 0 ] ?
+Edit O.K.
+Principal name: <---- null entry here will cause an exit
+
+ Ahora trate de obtener los tokens para asegurarse que funcione:
+
+ &prompt.root; kinit jane.root
+MIT Project Athena (grunt.example.com)
+Kerberos Initialization for "jane.root"
+Password:
+
+ Ahora necesitamos agregar al usuario al archivo de root
+ .klogin:
+
+ &prompt.root; cat /root/.klogin
+jane.root@EXAMPLE.COM
+
+ Ahora trate de hacer &man.su.1;:
+
+ &prompt.user; su
+Password:
+
+ y heche un vistazo a que tokens tenemos:
+
+ &prompt.root; klist
+Ticket file: /tmp/tkt_root_245
+Principal: jane.root@EXAMPLE.COM
+
+ Issued Expires Principal
+May 2 20:43:12 May 3 04:43:12 krbtgt.EXAMPLE.COM@EXAMPLE.COM
+
+
+
+ Utilizando otros comandos
+
+ En un ejemplo anterior, creamos creamos un principal
+ llamado jane con una instancia root.
+ Esto fué basado en un usuario con el mismo nombre del
+ principal, y esto es por omisión en Kerberos; que
+ <principal>.<instancia> de la
+ forma
+ <nombre de usuario>.root
+ permitirá que <nombre de usuario>
+ haga &man.su.1; a root si las entradas necesarias
+ están en el archivo .klogin en el
+ directorio home de root:
+
+ &prompt.root; cat /root/.klogin
+jane.root@EXAMPLE.COM
+
+ De la misma manera, si un usuario tiene en su propio directorio home
+ líneas de la forma:
+
+ &prompt.user; cat ~/.klogin
+jane@EXAMPLE.COM
+jack@EXAMPLE.COM
+
+ Esto permite a cualquiera en el dominio EXAMPLE.COM
+ que se ha autentificado como jane o como
+ jack (vía kinit, ver
+ arriba) para accesar la cuenta de jane o
+ archivos en este sistema (grunt) vía
+ &man.rlogin.1;, &man.rsh.1; o
+ &man.rcp.1;.
+
+ Por ejemplo, jane se firma ahora en otro sistema
+ usando Kerberos:
+
+ &prompt.user; kinit
+MIT Project Athena (grunt.example.com)
+Password:
+&prompt.user; rlogin grunt
+Last login: Mon May 1 21:14:47 from grumble
+Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
+ The Regents of the University of California. All rights reserved.
+
+FreeBSD BUILT-19950429 (GR386) #0: Sat Apr 29 17:50:09 SAT 1995
+
+ O jack se firma a la cuenta de jane en la misma
+ máquina (jane habiendo
+ configurado el archivo .klogin
+ como está arriba, y la persona a cargo de
+ Kerberos habiendo configurado un principal
+ jack con una instancia nula):
+
+ &prompt.user; kinit
+&prompt.user; rlogin grunt -l jane
+MIT Project Athena (grunt.example.com)
+Password:
+Last login: Mon May 1 21:16:55 from grumble
+Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
+ The Regents of the University of California. All rights reserved.
+FreeBSD BUILT-19950429 (GR386) #0: Sat Apr 29 17:50:09 SAT 1995
+
+
+
+
+
+
+
+ Tillman
+ Hodgson
+ Contribuido por
+
+
+
+
+ Mark
+ Murray
+ Basado en una contribución de
+
+
+
+
+ Kerberos5
+
+ Cada release de &os; posterior a &os;-5.1 incluye
+ soporte solamente para Kerberos5.
+ Por esta razón Kerberos5 es
+ la única versión incluída, y su configuración
+ es similar en muchos aspectos a la de KerberosIV.
+ La siguiente información solo aplica a
+ Kerberos5 en releases de
+ &os;-5.0 o posteriores. Los usuarios que deséen
+ utilizar KerberosIV pueden
+ instalar el port
+ security/krb4.
+
+ Kerberos es un sistema/protocolo
+ agregado para red que le permite
+ a usuarios autentificarse a través de los servicios de un
+ servidor seguro. Servicios como login remoto, copia remota, copias
+ de archivo inter-sistemas seguras y otras tareas de riesgo son
+ hechas considerablemente seguras y más controlables.
+
+ Kerberos puede ser descrito como
+ un sistema proxy identificador-verificador. También
+ puede ser descrito como un sistema confiable de autentificación
+ de terceros.
+ Kerberos brinda solamente
+ una función — la autenficación segura de
+ usuarios en la red. No proporciona funciones de autorización
+ (lo que los usuarios tienen permitido hacer) o funciones de
+ auditoría (lo que esos usuarios hicieron).
+ Despues de que un servidor y cliente han usado
+ Kerberos para probar su identidad,
+ pueden también encriptar todas sus comunicaciones para
+ asegurar privacidad e integridad de datos mientras continuan
+ con sus funciones.
+
+ Por lo tanto es altamente recomendable que
+ Kerberos sea utilizado con otros
+ métodos de seguridad que brinden servicios de
+ autorización y auditoría.
+
+ Las siguientes instrucciones pueden utilizarse como una guía
+ para configurar Kerberos como se
+ distribuye en &os;. De todas maneras, se debe dirigir a las páginas
+ de manual relevantes para una descripción completa.
+
+ Para propósitos de demostrar una instalación
+ Kerberos, los varios espacios de
+ nombre serán manejados como sigue:
+
+
+
+ El dominio DNS (zona)
+ será example.org.
+
+
+
+ El dominio Kerberos (realm)
+ será EXAMPLE.ORG.
+
+
+
+
+ Por favor utilice nombres de dominio reales al
+ configurar Kerberos incluso si
+ pretende ejecutarlo internamente. Esto evita problemas
+ de DNS y asegura la interoperación
+ con otros dominios Kerberos.
+
+
+
+ Historia
+
+ Kerberos5
+ history
+
+
+ Kerberos fué creado
+ por el MIT como una solución
+ a los problemas de seguridad de la red.
+ El protocolo Kerberos utiliza
+ criptografía fuerte para que un cliente pueda
+ probar su identidad a un servidor (y viceversa) a
+ través de una conexión de red insegura.
+
+ Kerberos es el nombre de un
+ protocolo de autentificación de red y un adjetivo
+ para describir programas que implementan el programa
+ (Kerberos telnet, por ejemplo).
+ La versión actual del protocolo es la 5, descrita en
+ RFC 1510.
+
+ Varias implementaciones libres de este protocolo están
+ disponibles, cubriendo un amplio rango de sistemas operativos.
+ El Massachusetts Institute of Technology (MIT),
+ donde Kerberos fué originalmente
+ desarrollado, continua desarrollando su paquete
+ Kerberos. Es comunmente usado en los
+ EU como un producto criptográfico, y
+ como tal ha sido historicamente afectado por las regulaciones de
+ exportación de EU.
+ El Kerberos del MIT
+ está disponible como un port
+ (security/krb5). Heimdal
+ Kerberos es otra implementación
+ de la versión 5, y fue desarrollada explicitamente fuera
+ de los EU para evitar las regulaciones de
+ exportación (y es por eso incluída en variantes
+ &unix; no comerciales). La distribución Heimdal
+ Kerberos está disponible
+ como un port
+ (security/heimdal), y una
+ instalación mínima viene incluída en la
+ instalación base de &os;.
+
+ Para alcanzar la mayor audiencia, estas instrucciones asumen
+ el uso de la distribución Heimdal incluída en &os;.
+
+
+
+
+ Configurando un KDC Heimdal
+
+ Kerberos5
+ Dentro de distribución de llaves
+
+
+ El centro de distribución de llaves (KDC,
+ Key Distribution Center) es el servicio centralizado de autentificación
+ que proporciona Kerberos — es
+ la computadoras que emite boletos Kerberos.
+ El KDC está considerado como confiable
+ por todas las otras computadoras en el dominio Kerberos,
+ y por eso tiene consideraciones de seguridad más elevados.
+
+ Note que mientras la ejecuación del servidor
+ Kerberos requiere muy pocos recursos
+ computacionales, una máquina dedicada actuando solamente
+ como KDC es recomendada por razones de
+ seguridad.
+
+ Para empezar a configurar un KDC, asegúrese
+ que su archivo /etc/rc.conf contiene las
+ configuraciones correctas para actuar como un KDC
+ (tal vez necesite ajustar algunas rutas para reflejar su propio
+ sistema):
+
+ kerberos5_server_enable="YES"
+kadmind5_server_enable="YES"
+kerberos_stash="YES"
+
+
+ está solamente
+ disponible en &os; 4.X.
+
+
+ A continuación configuraremos el archivo de
+ configuración de Kerberos,
+ /etc/krb5.conf:
+
+ [libdefaults]
+ default_realm = EXAMPLE.ORG
+[realms]
+ EXAMPLE.ORG = {
+ kdc = kerberos.example.org
+ admin_server = kerberos.example.org
+ }
+[domain_realm]
+ .example.org = EXAMPLE.ORG
+
+ Note que este archivo /etc/krb5.conf
+ implica que su KDC tendrá el nombre
+ de equipo completo calificado de kerberos.example.org.
+ Necesitará agregar una entrada CNAME (alias) a su archivo
+ de zona para lograr esto si su KDC tiene un
+ nombre de equipo diferente.
+
+
+ Para redes grandes con un servidor DNS
+ BIND propiamente configurado, el ejemplo
+ de arriba puede ser recortado a:
+
+ [libdefaults]
+ default_realm = EXAMPLE.ORG
+
+ Con las líneas siguientes agregadas al
+ archivo de zona example.org:
+
+ _kerberos._udp IN SRV 01 00 88 kerberos.example.org.
+_kerberos._tcp IN SRV 01 00 88 kerberos.example.org.
+_kpasswd._udp IN SRV 01 00 464 kerberos.example.org.
+_kerberos-adm._tcp IN SRV 01 00 749 kerberos.example.org.
+_kerberos IN TXT EXAMPLE.ORG
+
+
+ Para que los clientes sean capaces de encontrar los
+ servicios Kerberos,
+ debe tener ya sea un
+ /etc/krb5.conf completamente configurado o
+ un /etc/krb5.conf configurado de forma
+ mínima y un servidor DNS
+ configurado correctamente.
+
+
+ A continuación crearemos la base de datos
+ Kerberos. Esta base de datos contiene
+ las llaves de todos los principales encriptadas con una
+ contraseña maestra. No se requiere que usted recuerde
+ esta contraseña, será almacenada en un archivo
+ (/var/heimdal/m-key). Para crear la llave
+ maestra, ejecute kstash e introduzca una
+ contraseña.
+
+ Una vez que se ha creado la llave maestra, puede inicializar
+ la base de datos usando el programa kadmin
+ con la opción -l (que significa
+ local). Esta opción le instruye a
+ kadmin que modifique los archivos de la base
+ de datos directamente en lugar de ir a través del servicio
+ de red kadmind. Esto maneja el problema del
+ huevo y la gallina de tratar de conectar a la base de datos
+ antes de que ésta sea creada. Una vez que tiene el prompt
+ de kadmin, utilice el comando init
+ para crear su base de datos de dominios iniciales.
+
+ Finalmente, mientras está todavía en kadmin,
+ puede crear su primer principal utilizando el comando add.
+ Apéguese a las opciones por omisión para los
+ principales por ahora, puede cambiarlas despues con el comando
+ modify. Note que puede usar el comando
+ ? en cualquier prompt para ver las opciones
+ disponibles.
+
+ Una sesión de ejemplo de creación de una
+ base de datos es mostrada abajo:
+
+ &prompt.root; kstash
+Master key: xxxxxxxx
+Verifying password - Master key: xxxxxxxx
+
+&prompt.root; kadmin -l
+kadmin> init EXAMPLE.ORG
+Realm max ticket life [unlimited]:
+kadmin> add tillman
+Max ticket life [unlimited]:
+Max renewable life [unlimited]:
+Attributes []:
+Password: xxxxxxxx
+Verifying password - Password: xxxxxxxx
+
+ Ahora es tiempo de iniciar los servicios KDC.
+ Ejecute /etc/rc.d/kerberos start y
+ /etc/rc.d/kadmind start para levantar los
+ servicios. Note que no tendrá ningún daemon
+ kerberizado corriendo en este punto pero debe ser capaz de confirmar
+ que el KDC está funcionando obteniendo
+ y listando un boleto para el principal (usuario) que acaba de crear
+ desde la línea de comando del mismo KDC:
+
+ &prompt.user; k5init tillman
+tillman@EXAMPLE.ORG's Password:
+
+&prompt.user; k5list
+Credentials cache: FILE:/tmp/krb5cc_500
+ Principal: tillman@EXAMPLE.ORG
+
+ Issued Expires Principal
+Aug 27 15:37:58 Aug 28 01:37:58 krbtgt/EXAMPLE.ORG@EXAMPLE.ORG
+
+
+
+
+ Kerberos habilitando un servidor con
+ servicios Heimdal
+
+
+ Kerberos5
+ habilitando servicios
+
+
+ Primero, necesitamos una copia del archivo de configuración
+ de Kerberos, /etc/krb5.conf.
+ Para eso, simplemente copielo a la computadora cliente desde el
+ KDC de una manera segura (utilizando utilidades
+ de red como &man.scp.1;, o fisicamente con un disco flexible).
+
+ A continuación necesita un archivo /etc/krb5.keytab.
+ Esta es la diferencia más grande entre un servidor
+ proporcionando daemons habilitados con Kerberos
+ y una estación de trabajo — el servidor debe
+ tener un archivo keytab. Este archivo
+ contiene las llaves de equipo del servidor, las cuales
+ le permiten a él y al KDC
+ verificar la identidad entre ellos. Debe ser transmitidos al
+ servidor de una manera segura, ya la seguridad en el servidor
+ puede ser comprometida si la llave es hecha pública.
+ Esto significa explicitamente que transfiriendola por medio
+ de un canal de texto claro, como FTP, es
+ una muy mala idea.
+
+ Tipicamente, transfiere al keytab
+ al servidor usando el programa kadmin.
+ Esto es práctico porque también necesita crear
+ el principal del equipo (el final KDC del archivo
+ krb5.keytab) usando kadmin.
+
+ Note que debe ya debe haber obtenido un boleto y que este boleto
+ debe tener permitido utilizar la interface kadmin
+ en kadmind.acl. Vea la sección titulada
+ administración remota en la página de
+ info de Heimdal (info heimdal) para los detalles
+ de diseño de listas de control de acceso. Si no quiere habilitar
+ acceso remoto kadmin, puede simplemente conectar
+ de manera segura al KDC (por medio de consola
+ local, &man.ssh.1; o &man.telnet.1; Kerberos)
+ y realizar localmente la administración utilizando
+ kadmin -l.
+
+ Despues de instalar el archivo /etc/krb5.conf,
+ puede usar kadmin desde el servidor
+ Kerberos. el comando
+ add --random-key le permitirá agregar
+ el principal del equipo servidor, y el comando ext
+ le permitirá extraer el principal del equipo servidor a su
+ propio keytab. Por ejemplo:
+
+ &prompt.root; kadmin
+kadmin> add --random-key host/myserver.example.org
+Max ticket life [unlimited]:
+Max renewable life [unlimited]:
+Attributes []:
+kadmin> ext host/myserver.example.org
+kadmin> exit
+
+ Note que el comando ext (diminutivo
+ de extract) almacena la llave extraída
+ en /etc/krb5.keytab por omisión.
+
+ Si no tiene kadmind corriendo en el
+ KDC (posiblemente por razones de seguridad)
+ y por lo tanto no tiene acceso a kadmin
+ remotamente, puede añadir el principal de equipo
+ (host/myserver.EXAMPLE.ORG) directamente
+ en el KDC y entonces extraerlo a un archivo
+ temporal (para evitar sobreescribir /etc/krb5.keytab
+ en el KDC) usando algo como esto:
+
+ &prompt.root; kadmin
+kadmin> ext --keytab=/tmp/example.keytab host/myserver.example.org
+kadmin> exit
+
+ Puede entonces copiar de manera segura el keytab al
+ servidor (usando scp o un disco
+ flexible, por ejemplo). Asegúrese de especificar
+ un nombre de keytab diferente para evitar sobreescribir
+ el keytab en el KDC.
+
+ En este punto su servidor puede comunicarse con el
+ KDC (debido a su archivo
+ krb5.conf) y puede probar su propia
+ identidad (debido al archivo krb5.keytab).
+ Ahora está listo para que usted habilite algunos
+ servicios Kerberos.
+ Para este ejemplo habilitaremos el servicio telnet
+ poniendo una línea como esta en su
+ /etc/inetd.conf y reiniciando el
+ servicio &man.inetd.8; con
+ /etc/rc.d/inetd restart:
+
+ telnet stream tcp nowait root /usr/libexec/telnetd telnetd -a user
+
+ La parte crítica es -a
+ (por autentificación) de tipo usuario. Consulte
+ la página de manual &man.telnetd.8; para
+ más detalles.
+
+
+
+
+ Kerberos habilitando un cliente con Heimdal
+
+
+ Kerberos5
+ configurar clientes
+
+
+ Configurar una computadora cliente es trivialmente fácil.
+ En lo que se refiera a configuración de
+ Kerberos, solamente necesita el
+ archivo de configuración de Kerberos,
+ localizado en /etc/krb5.conf.
+ Simplemente copielo de manera segura a la computadora cliente
+ desde el KDC.
+
+ Pruebe su computadora cliente tratando de usar
+ kinit, klist, y
+ kdestroy desde el cliente para obtener,
+ mostrar y entonces borrar un boleto para el principal que
+ creó arriba. Debe ser capaz de usar aplicaciones
+ Kerberos para conectar a
+ servidores habilitados con Kerberos,
+ aunque si eso no funciona y obtener el boleto hace el problema,
+ lo más seguro es que el problema esté en el
+ servidor y no en el cliente o el KDC.
+
+ Al probar una aplicación como telnet,
+ trate de usar un olfateador de paquetes ( como &man.tcpdump.1;)
+ para confirmar que su contraseña no sea enviada en claro.
+ Trate de usar telnet con la opción
+ -x, que encripta el flujo de datos por
+ entero (similarmente a ssh).
+
+ Las aplicaciones clientes Kerberos
+ principales (tradicionalmente llamadas kinit,
+ klist, kdestroy y
+ kpasswd) están incluidas en
+ la instalación base de &os;. Note que versiones de &os;
+ anteriores a 5.0 las renombran a k5init,
+ k5list, k5destroy,
+ k5passwd y k5stash
+ (aunque es tipicamente utilizado solo una vez).
+
+ Varias aplicaciones clientes Kerberos
+ no principales también están instaladas por
+ omisión. Aquí es donde la naturaleza
+ mínima de la instalación base de
+ Heimdal es sentida: telnet es el único
+ servicio Kerberos habilitado.
+
+ El port Heimdal agrega algunas de las aplicaciones cliente
+ faltantes: versiones Kerberos habilitadas
+ de ftp, rsh,
+ rcp, rlogin y algunos
+ otros programas menos comunes. El port de MIT
+ también contiene una suite completa de aplicaciones
+ cliente de Kerberos.
+
+
+
+
+ Archivos de configuración de usuario: .k5login y .k5users
+
+
+ .k5login
+
+
+
+ .k5users
+
+
+ Usuarios dentro de un dominio tipicamente
+ tienen su principal Kerberos
+ (como tillman@EXAMPLE.ORG) mapeado
+ a una cuenta de usuario local (como una cuenta local
+ llamada tillman). aplicaciones cliente
+ como telnet usualmente no requieren un
+ nombre de usuario o un principal.
+
+ Ocasionalmente, de todas maneras, tal vez quiera dar acceso
+ a una cuenta de usuario local a alguien que no tiene un
+ principal Kerberos que concuerde.
+ Por ejemplo, tillman@EXAMPLE.ORG puede
+ necesitar acceso a la cuenta de usuario local webdevelopers.
+ Otros principales tal vez necesiten acceso a esas
+ cuentas locales.
+
+ Los archivos .k5login y
+ .k5users, colocados en el directorio
+ home del usuario, pueden ser usados de manera similar a
+ una combinación potente de
+ .hosts y .rhosts,
+ resolviendo el problema. Por ejemplo, si un
+ .k5login con el siguiente
+ contenido:
+
+ tillman@example.org
+jdoe@example.org
+
+ Fuera a ser colocado en el directorio home del usuario
+ local webdevelopers entonces ambos
+ principales listados tendrían acceso a esa cuenta
+ sin requerir una contraseña compartida.
+
+ La lectura de las páginas de manual para estos
+ comando es recomendado. Note que la página de manual
+ de ksu cubre
+ .k5users.
+
+
+
+
+ Kerberos Tips, Trucos y solución de problemas
+
+
+ Kerberos5
+ solución de problemas
+
+
+
+
+ Al utilizar ya sea los ports de Heimdal o Kerberos
+ del MIT asegúrese que su
+ variable de ambiente PATH liste las
+ versiones de Kerberos de las
+ aplicaciones clientes antes que las versiones del
+ sistema.
+
+
+
+ ¿Todas las computadoras en su dominio Kerberos tienen
+ la hora sincronizada? Si no, la autentificación
+ puede fallar.
+ describe como sincronizar
+ los relojes utilizando NTP.
+
+
+
+ MIT y Heimdal interoperan bien.
+ Excepto por kadmin, el protocola para
+ el cual no está estandarizado.
+
+
+
+ Si cambia su nombre de equipo, necesita cambiar también
+ su equipo/ principal y actualizar su
+ keytab. Esto también aplica a entradas especiales
+ en keytab como www/ principal
+ utilizado para www/mod_auth_kerb
+ de Apache.
+
+
+
+ Todos los equipos en su dominio Kerberos deben resolver
+ (normal y reverso) en el DNS (o en
+ /etc/hosts como mínimo).
+ Los CNAMEs funcionarán, pero los registros A y PTR
+ deben estar correctos y en su lugar. El mensaje de error
+ no es muy intuitivo:
+ Kerberos5 refuses authentication because Read req
+ failed: Key table entry not found.
+
+
+
+ Algunos sistemas operativos que pueden estar actuando
+ como clientes de su KDC no activan
+ los permisos para ksu de manera
+ setuid root. Esto significa que
+ ksu no funciona, lo cual es una
+ buena idea de seguridad pero un tanto molesta. Este no es un
+ error de KDC.
+
+
+
+ Con Kerberos del
+ MIT, si usted desea permitir que un
+ principal tenga un boleto con una vida más larga
+ que el valor por omisión de diez horas, debe usar
+ modify_principal en kadmin
+ para cambiar maxlife tanto del principal en cuestión
+ como del principal krbtgt. Entonces
+ el principal puede utilizar la opción
+ -l con kinit para
+ solicitar un boleto con más tiempo de vida.
+
+
+
+ Si ejecuta un olfateador de paquetes en su
+ KDC para ayudar con la resolución
+ de problemas y ejecuta kinit desde una
+ estación de trabajo, se podrá dar cuenta
+ que su TGT es enviado inmediatamente
+ despues de correr kinit —
+ ¡incluso antes de que escriba su contraseña! La
+ explicación es que el servidor Kerberos
+ transmite libremente un TGT (Ticket Granting
+ Ticket) a cualquier petición no autorizada; de todas
+ maneras, cada TGT está encriptado
+ en un llave derivada de la contraseña de usuario.
+ Por lo tanto, cuando un usuario teclea su contraseña
+ no está siendo enviada al KDC,
+ está siendo usada para desencriptar el TGT
+ que kinit ya obtuvo. Si el proceso de
+ desencriptación resulta en un boleto válido con
+ una marca de tiempo válida, el usuario tiene
+ credenciales Kerberos válidas.
+ Estas credenciales incluyen una llave de sesión para
+ establecer comunicaciones seguras con el servidor
+ Kerberos en el futuro, así
+ como también el boleto otorgar-boleto (TGT) en sí,
+ el cual es encriptado con la llave del propio servidor
+ Kerberos. Esta segunda capa de
+ encriptación es desconocida para el usuario, pero
+ es lo que permite al servidor Kerberos
+ verificar la autenticidad de cada TGT.
+
+
+
+ Si desea utilizar boletos con tiempo de vida larga (una
+ semana, por ejemplo) y está utilizando OpenSSH
+ para conectarse a la máquina donde su boleto está
+ almacenado, asegúrese que Kerberos
+ esté puesto a no
+ en su sshd_config o de lo contrario
+ sus boletos serán eliminados cuando termine la
+ sesión.
+
+
+
+ Recuerde que los principales de equipos pueden tener
+ un tiempo de vida mas largo también. Si su principal
+ de usuario tiene un tiempo de vida de una semana pero
+ el equipo al que se esá conectando tiene un
+ tiempo de vida de nueve horas, tendrá un principal de
+ equipo expirado en su caché y el caché de
+ boleto no funcionará como se espera.
+
+
+
+ Cuando esté configurando un archivo
+ krb5.dict para prenevir especificamente
+ el uso de malas contraseñas (la página de manual
+ de kadmind cubre esto brevemente), recuerde
+ que solamente aplica a principales que tienen una política
+ de contraseñas asignada a ellos. El formato de archivos
+ krb5.dict es simple: una cadena por
+ línea. Creando un enlace simbólico a
+ /usr/share/dict/words puede ser
+ de utilidad.
+
+
+
+
+
+
+ Diferencias con el port del MIT
+
+ Las diferencias más grandes entre las instalaciones
+ MIT y Heimdal se relacionan al programa
+ kadmin el cual tiene un conjunto
+ diferente (pero equivalente) de comandos y utiliza un protocolo
+ diferente. Esto tiene implicaciones muy grandes si su
+ KDC es MIT ya que no
+ podrá utilizar el programa kadmin
+ de Heimdal para administrar remotamente su KDC
+ (o viceversa, para ese caso).
+
+ Las aplicaciones cliente pueden también tomar
+ diferentes opciones de línea de comando para
+ lograr las mismas tareas. Seguir las instrucciones de
+ la página web de Kerberos
+ del MIT
+ ()
+ se recomienda. Sea cuidadoso con los parches: el port
+ del MIT se instala en
+ /usr/local/ por omisión, y las
+ aplicaciones normales del sistema pueden
+ ser ejecutadas en lugar de las del MIT
+ si su variable de ambiente PATH lista los
+ directorios del sistema primero.
+
+ Con el port del MIT
+ security/krb5
+ proporcionado por &os;, asegúrese de leer el archivo
+ /usr/local/share/doc/krb5/README.FreeBSD
+ instalado por el port si quiere entender por qué los
+ login vía telnetd y
+ klogind se comportan un tanto
+ extraño. Más importante, corrigiendo la
+ conducta de permisos incorrectos en el archivo
+ caché requiere que el binario
+ login.krb5 sea usado para autentificación
+ para que pueda cambiar correctamente los permisos de
+ propiedad para credenciales reenviadas.
+
+
+
+
+ Mitigando limitaciones encontradas en Kerberos
+
+
+ Kerberos5
+ limitaciones y deficiencias
+
+
+
+ Kerberos es un enfoque todo-o-nada
+
+ Cada servicio habilitado en la red debe ser modificado
+ para funcionar con Kerberos (o de
+ otra manera ser asegurado contra ataques de red) o de lo
+ contrario las credenciales de usuario pueden ser robadas y
+ reutilizadas. Un ejemplo de esto podría ser que
+ Kerberos habilite todos los shells
+ remotos ( vía rsh y telnet,
+ por ejemplo) pero que no cubra el servidor de correo
+ POP3 el cual manda contraseñas
+ en texto plano.
+
+
+
+
+ Kerberos está planeado para estaciones de trabajo mono-usuario
+
+ En un ambiente multi-usuario,
+ Kerberos es menos seguro.
+ Esto se debe a que almacena los boletos en el
+ directorio /tmp, el cual puede
+ ser leído por todos los usuarios. Si un
+ usuario está compartiendo una computadora con
+ varias gentes simultaneamente (ej., multi-user), es posible
+ que los boletos de usuario sean robados (copiados) por otro
+ usuario.
+
+ Esto puede ser sobrepasado con la opción de línea
+ de comando -c nombre-de-archivo o
+ (de preferencia) la variable de ambiente
+ KRB5CCNAME, pero esto raramente es
+ hecho. En principal, almacenar los boletos en el
+ directorio home de los usuarios y utilizar permisos
+ de archivo simples pueden mitigar este problema.
+
+
+
+
+ El KDC es un punto de falla único
+
+ Por diseño, el KDC debe ser tan
+ seguro como la base de datos de contraseña maestra que
+ contiene. El KDC no debe tener ningún
+ otro servicio corriendo en él y debe ser fisicamente
+ seguro. El peligro es grande debido a que Kerberos
+ almacena todas las contraseñas encriptadas con la
+ misma llave (la llave maestra, la cual a su
+ vez está almacenada como un archivo en el
+ KDC).
+
+ Como nota aparte, una llave maestra comprometida no es
+ tan malo como se podría temer. La llave maestra solo
+ es utilizada para encriptar la base de datos Kerberos
+ y como semilla para el generador de números aleatorios.
+ Mientras el acceso a su KDC sea seguro,
+ un atacante no puede hacer mucho con la llave maestra.
+
+ Adicionalmente, si el KDC no está
+ disponible (quizás debido a un ataque de negación
+ de servicio o problemas de red) los servicios de red son inusables
+ ya que no se puede efectuar la autentificación, una receta
+ para un ataque de negación de servicios. Esto puede ser
+ aliviado con múltiples KDCs (un
+ maestro único y uno o más esclavos) y con
+ una implementación cautelosa de secundarios o
+ autentificación de respaldo (PAM es
+ excelente para esto).
+
+
+
+
+ Limitaciones de Kerberos
+
+ Kerberos le permite a usuarios,
+ equipos y servicios autentificarse entre ellos. No tiene un
+ mecanismo para autentificar el KDC a los
+ usuarios, equipos o servicios. Esto significa que a
+ kinit con un troyano (por ejemplo) puede
+ grabar todos los usuarios y contraseñas. Algo como
+ security/tripwire o
+ alguna otra herramienta de revisión de integridad
+ de sistemas de archivo puede aliviar esto.
+
+
+
+
+
+ Recursos y más información
+
+
+ Kerberos5
+ recursos externos
+
+
+
+
+
+ La FAQ de Kerberos
+
+
+
+ Diseñando
+ un sistema de autentificación: un dialogo en cuatro escenas
+
+
+
+ RFC 1510,
+ The Kerberos Network Authentication Service
+ (V5)
+
+
+
+ Página web de MIT
+ Kerberos
+
+
+
+ Página web de Heimdal
+ Kerberos
+
+
+
+
+
+
+
+
+
+
+ Tom
+ Rhodes
+ Escrito por:
+
+
+
+ OpenSSL
+
+ seguridad
+ OpenSSL
+
+
+ Una propiedad que muchos usuarios pasan por alto
+ es el conjunto de herramientas OpenSSL
+ incluídas en &os;. OpenSSL
+ brinda capa de transporte encriptada encima de la capa
+ de comunicaciones normal; permitiendo así que sea
+ combinada con muchas aplicaciones y servicios de red.
+
+ Algunos usos de OpenSSL pueden
+ incluir autentificación encriptada de clientes de
+ correo, transacciones basadas en web como pagos de tarjetas
+ de crédito y más. Muchos ports, como
+ www/apache13-ssl y
+ mail/sylpheed-claws
+ ofrecen soporte de compilación para construirse
+ con OpenSSL.
+
+
+ En la mayoría de los casos la colección
+ de ports tratará de construir el port
+ security/openssl a menos
+ que la variable de make WITH_OPENSSL_BASE
+ sea puesta explicitamente a yes.
+
+
+ La versión de OpenSSL
+ incluída en &os; soporta los protocolos de seguridad
+ de red Secure Sockets Layer v2/v3 (SSLv2/SSLv3) y
+ Transport Layer Security v1 (TLSv1) y puede ser utilizada como
+ una librería criptográfica general.
+
+
+ Mientras OpenSSL soporta el
+ algoritmo IDEA, estáa deshabilitado
+ por omisión debido a patentes de Estados Unidos. Para
+ utilizarlo, la licencia debe ser revisada, y si las
+ restricciones son aceptables, la variable
+ MAKE_IDEA debe ser activada en
+ make.conf.
+
+
+ Uno de los usos más comunes de
+ OpenSSL es brindar certificados para
+ usar con aplicaciones de software. Estos certificados aseguran
+ que las credenciales de la compañia o individuo son
+ válidos y no fraudulentos. Si el certificado en
+ cuestión no ha sido verificado por uno de las varias
+ autoridades de certificados,
+ o CAs, usualmente se produce una advertencia.
+ Una autoridad de certificados es una compañia, como
+ VeriSign, la cual
+ firmará certificados para validar credenciales de individuos
+ o compañias. Este proceso tiene un costo asociado y no es
+ definitivamente un requisito para usar certificados; de todas
+ maneras, puede darle un poco de tranquilidad a los usuarios
+ más paranóicos.
+
+
+ Generando certificados
+
+
+ OpenSSL
+ generación de certificados
+
+
+ Para generar un certificado, el siguiente comando está
+ disponible:
+
+ &prompt.root; openssl req -new -nodes -out req.pem -keyout cert.pem
+Generating a 1024 bit RSA private key
+................++++++
+.......................................++++++
+writing new private key to 'cert.pem'
+-----
+You are about to be asked to enter information that will be incorporated
+into your certificate request.
+What you are about to enter is what is called a Distinguished Name or a DN.
+There are quite a few fields but you can leave some blank
+For some fields there will be a default value,
+If you enter '.', the field will be left blank.
+-----
+Country Name (2 letter code) [AU]:US
+State or Province Name (full name) [Some-State]:PA
+Locality Name (eg, city) []:Pittsburgh
+Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company
+Organizational Unit Name (eg, section) []:Systems Administrator
+Common Name (eg, YOUR name) []:localhost.example.org
+Email Address []:trhodes@FreeBSD.org
+
+Please enter the following 'extra' attributes
+to be sent with your certificate request
+A challenge password []:SOME PASSWORD
+An optional company name []:Another Name
+
+ Note que la respuesta directamente despues del
+ prompt Common Name muestra un nombre
+ de dominio. Este prompt requiere que se introduzca
+ un nombre de servidor para propósitos de
+ verificación; colocando cualquier cosa menos
+ un nombre de dominio producirá un certificado
+ inválido. Otras opciones, por ejemplo tiempo
+ de expiración, alternan algoritmos de encriptación,
+ etc, están disponibles. Una lista completa
+ puede obtenerse viendo la página de manual
+ &man.openssl.1;.
+
+ Deben existir ahora dos archivos
+ en el directorio en el que el comando anterior fué
+ ejecutado. La petición de certificado, req.pem,
+ puede ser enviado a una autoridad de certificados que validará
+ las credenciales que introdujo, firmará la petición y le
+ regresará el certificado. El segundo archivo creado será
+ nombrado cert.pem y es la llave privada para
+ el certificado y debe ser protegida a toda costa; si esta cae en las
+ manos de otros puede ser utilizada para impersonarlo a usted (o a
+ sus servidores).
+
+ En los casos donde una firma de una CA
+ no es requerida, un certificado auto firmado puede ser creado.
+ Primero, genere la llave RSA:
+
+ &prompt.root; openssl dsaparam -rand -genkey -out myRSA.key 1024
+
+ A continuación genere la llave CA:
+
+ &prompt.root; openssl gendsa -des3 -out myca.keymyRSA.key
+
+ Utilice esta llave para crear el certificado:
+
+ &prompt.root; openssl req -new -x509 -days 365 -key myca.key -out new.crt
+
+ Los dos nuevos archivos deben aparecer en el directorio:
+ un archivo de firma de autoridad de certificados,
+ myca.key y el certificado en sí,
+ new.crt. Estos deben ser colocados en un
+ directorio, de preferencia bajo
+ /etc, el cual es
+ leíble solo por root. Permisos de
+ 0700 deben ser suficientes para este y pueden ser puestos con
+ la utilidad chmod.
+
+
+
+ Usando certificados, un ejemplo
+
+ ¿Entonces que pueden hacer estos archivos? Un buen uso
+ sería encriptar conexiones al MTA
+ Sendmail. Esto disolvería
+ el uso de autentificación de texto claro para usuarios
+ que mandan correo a través del MTA
+ local.
+
+
+ Este no es el mejor uso en el mundo ya que algunos
+ MUAs presentarán al usuario
+ un error si no tienen instalado los certificados
+ localmente. Refiérase a la documentación
+ incluída con el software para mayor información
+ de la instalación de certificados.
+
+
+ Las siguientes líneas deben ser colocadas
+ dentro del archivo local .mc:
+
+ dnl SSL Options
+define(`confCACERT_PATH',`/etc/certs')dnl
+define(`confCACERT',`/etc/certs/new.crt')dnl
+define(`confSERVER_CERT',`/etc/certs/new.crt')dnl
+define(`confSERVER_KEY',`/etc/certs/myca.key')dnl
+define(`confTLS_SRV_OPTIONS', `V')dnl
+
+ Donde /etc/certs/
+ es el directorio a ser utilizado para almacenamiento de
+ los archivos de certificado y llave de manera local.
+ Los últimos requerimientos son una reconstrucción
+ del archivo .cf local. Esto es facilmente
+ logrado tecleando make
+ install dentro del directorio
+ /etc/mail.
+ A continuación ejecute un make
+ restart que debe reiniciar el
+ daemon de Sendmail.
+
+ Si todo estuvo bien no habrá mensajes de error
+ en el archivo /var/log/maillog
+ y Sendmail aparecerá en
+ la lista de procesos.
+
+ Para una prueba sencilla, simplemente conecte al
+ servidor de correo usando la utilidad &man.telnet.1;:
+
+ &prompt.root; telnet example.com 25
+Trying 192.0.34.166...
+Connected to example.com.
+Escape character is '^]'.
+220 example.com ESMTP Sendmail 8.12.10/8.12.10; Tue, 31 Aug 2004 03:41:22 -0400 (EDT)
+ehlo example.com
+250-example.com Hello example.com [192.0.34.166], pleased to meet you
+250-ENHANCEDSTATUSCODES
+250-PIPELINING
+250-8BITMIME
+250-SIZE
+250-DSN
+250-ETRN
+250-AUTH LOGIN PLAIN
+250-STARTTLS
+250-DELIVERBY
+250 HELP
+quit
+221 2.0.0 example.com closing connection
+Connection closed by foreign host.
+
+ Si la línea STARTTLS aparece en la
+ salida entonces todo está funcionando correctamente.
+
+
+
+
+
+
+
+ Nik
+ Clayton
+
+ nik@FreeBSD.org
+
+ Escrito por
+
+
+
+
+
+ IPsec
+
+
+ VPN sobre IPsec
+ Creando una VPN entre dos redes, separadas por la Internet
+ utilizando gateways FreeBSD.
+
+
+
+
+
+ Hiten M.
+ Pandya
+
+ hmp@FreeBSD.org
+
+ Escrito por
+
+
+
+
+ Entendiendo IPsec
+
+ Esta sección le guiará a través del
+ proceso de configuración de IPsec, y de su uso en un
+ ambiente que consista en máquinas FreeBSD y
+ µsoft.windows; 2000/XP, para
+ hacer que se comuniquen de manera segura. Para configurar
+ IPsec, es necesario que esté familiarizado con los
+ conceptos de construcción de un kernel personalizado
+ (vea ).
+
+ IPsec es un protocolo que se sienta
+ encima de la capa del protocolo de Internet (IP). Le permite
+ a dos o mas equipos comunicarse de manera segura (de ahí
+ el nombre). La pila de red IPsec de FreeBSD está
+ basada en la implementación
+ KAME, la cual tiene
+ soporte para las dos familias de protocolos, IPv4 e IPv6.
+
+
+ FreeBSD 5.X contiene una pila IPsec acelerada
+ por hardware, conocida como Fast
+ IPsec, que fué obtenida de OpenBSD.
+ Emplea hardware criptográfico (cuando es posible)
+ a través del subsistema &man.crypto.4; para
+ optimizar el desempeño de IPsec. Este subsistema es
+ nuevo, y no soporta todas las opciones que están
+ disponibles en la versión KAME de IPsec. De todas
+ maneras, para habilitar IPsec acelerado por hardware, se
+ tienen que agregar las siguientes opciones de kernel al
+ archivo de configuración de kernel:
+
+
+ opciones de kernel
+ FAST_IPSEC
+
+
+
+options FAST_IPSEC # new IPsec (cannot define w/ IPSEC)
+
+
+ Note que actualmente no es posible utilizar el subsistema
+ Fast IPsec junto con la implementación
+ KAME de IPsec. Consulte la página de manual
+ &man.fast.ipsec.4; para mayor información.
+
+
+
+
+ IPsec
+ ESP
+
+
+
+ IPsec
+ AH
+
+
+ IPsec consiste de dos sub-protocolos:
+
+
+
+ Encapsulated Security Payload
+ (ESP), protege los datos del paquete IP
+ de interferencias de terceros, encriptando el contenido
+ utilizando algoritmos de criptografía simétrica
+ (como Blowfish, 3DES).
+
+
+ Authentication Header (AH),
+ protege la cabecera del paquete IP de interferencias de
+ terceros e imitación (spoofing), computando un
+ checksum criptográfico y aplicando a los campos
+ de cabecera IP una función hash segura. Esto es
+ entonces seguido por una cabecera adicional que contiene
+ el hash, para permitirle a la información en el
+ paquete ser autentificada.
+
+
+
+ ESP y AH pueden
+ ser utilizados de manera conjunta o separada, dependiendo
+ del ambiente.
+
+
+ VPN
+
+
+
+ Red privada virtual
+ VPN
+
+
+ IPsec puede ser utilizado ya sea para encriptar directamente
+ el tráfico entre dos equipos (conocido como
+ modo de transporte); o para construir
+ túneles virtuales entre dos subredes,
+ las cuales pueden ser usadas para comunicación segura
+ entre dos redes corporativas (conocido como modo
+ de tunel). Este último es comunmente
+ conocido como una red privada virtual (Virtual
+ Private Network, VPN). La página de manual
+ &man.ipsec.4; debe ser consultada para información
+ detallada sobre el subsistema IPsec en FreeBSD.
+
+ Para agregar soporte de IPsec a su kernel, agregue las
+ siguientes opciones a su archivo de configuración
+ de kernel:
+
+
+ opciones de kernel
+ IPSEC
+
+
+
+ opciones de kernel
+ IPSEC_ESP
+
+
+
+options IPSEC #IP security
+options IPSEC_ESP #IP security (crypto; define w/ IPSEC)
+
+
+
+ opciones de kernel
+ IPSEC_DEBUG
+
+
+ Si se desea soporte para la depuración de
+ errores, la siguiente opción también debe
+ ser agregada:
+
+
+options IPSEC_DEBUG #debug for IP security
+
+
+
+
+ El Problema
+
+ No existe un estándar para lo que constituye una VPN.
+ VPNs pueden ser implementadas utilizando un número de
+ tecnologías diferentes, cada una de las cuales tiene sus
+ propias fortalezas y debilidades. Esta sección presenta un
+ escenario, y las estrategias usadas para implementar una VPN
+ para este escenario.
+
+
+
+ El escenario: dos redes, conectadas por Internet, para
+ comportarse como una sola
+
+
+ VPN
+ creando
+
+
+ La premisa es como sigue:
+
+
+
+ Usted tiene al menos dos sitios
+
+
+ Ambos sitios están utilizando IP internamente
+
+
+ Ambos sitios están conectados al Internet, a
+ través de un gateway que esta corriendo FreeBSD.
+
+
+ El gateway en cada red tiene al menos una dirección
+ IP pública.
+
+
+ Las direcciones internas de las dos redes pueden ser
+ direcciones IP públicas o privadas, no importa.
+ Puede ejecutar NAT en la máquina gateway de ser
+ necesario.
+
+
+ Las direcciones IP internas de las dos redes
+ no colisionan. Aunque espero
+ que sea posible teoricamente utilizar una combinación
+ de tecnología VPN y NAT para hacer funcionar
+ esto, espero que sea una pesadilla de
+ configuración.
+
+
+
+ Si encuentra que está tratando de conectar dos redes,
+ donde ambas utilizan el mism rango de direcciones IP privadas
+ (ej., las dos usan 192.168.1.x), entonces una de las dos redes
+ debe ser renumerada.
+
+ La topología de red puede verse de manera similar
+ a esto:
+
+
+
+
+
+
+
+Network #1 [ Internal Hosts ] Private Net, 192.168.1.2-254
+ [ Win9x/NT/2K ]
+ [ UNIX ]
+ |
+ |
+ .---[fxp1]---. Private IP, 192.168.1.1
+ | FreeBSD |
+ `---[fxp0]---' Public IP, A.B.C.D
+ |
+ |
+ -=-=- Internet -=-=-
+ |
+ |
+ .---[fxp0]---. Public IP, W.X.Y.Z
+ | FreeBSD |
+ `---[fxp1]---' Private IP, 192.168.2.1
+ |
+ |
+Network #2 [ Internal Hosts ]
+ [ Win9x/NT/2K ] Private Net, 192.168.2.2-254
+ [ UNIX ]
+
+
+
+ Note las dos direcciones IP públicas. Usaré las
+ letras para referirme a ellas en el resto de este artículo.
+ El cualquier lugar que vea esas letras en este artículo,
+ reemplacelas con su propia dirección IP pública.
+ Note también que internamente, las dos máquinas
+ gateway tienen la dirección IP .1, y que las dos redes
+ tienen direcciones IP privadas diferentes (192.168.1.x y 192.168.2.x respectivamente). Todas las
+ máquinas en las redes privadas han sido configuradas para
+ utilizar la máquina .1
+ como su gateway por omisión.
+
+ La intención es que, desde el punto de vista de la
+ red, cada red debe ver las máquinas en la otra red como
+ si estuvieran directamente conectadas al mismo ruteador --
+ aunque sea un ruteador ligeramente lento con una tendencia
+ ocasional a tirar paquetes.
+
+ Esto significa que (por ejemplo), la máquina
+ 192.168.1.20 debe ser
+ capaz de ejecutar
+
+ ping 192.168.2.34
+
+ y recibir una respuesta, transparentemente. Las máquinas
+ &windows; deben ser capaces de ver a las máquinas en la
+ otra red, accesar a archivos compartidos, y demás,
+ exactamente de la misma manera en que accesan a las
+ máquinas en la red local.
+
+ Y todo la cosa debe ser segura. Esto significa que el
+ tráfico entre las dos redes tiene que ser
+ encriptado.
+
+ Crear una VPN entre estas dos redes es un proceso multi-paso.
+ Las etapas son las siguientes:
+
+
+
+ Crear un enlace de red virtual entre las dos
+ redes, a través de Internet. Probarlo, usando herramientas
+ como &man.ping.8;, para asegurarse que funcione.
+
+
+
+ Aplicar políticas de seguridad para asegurarse
+ que el tráfico entre las dos redes sea transparentemente
+ encriptado y desencriptado según sea necesario.
+ Probar esto, usando herramientas como &man.tcpdump.1;,
+ para asegurarse que el tráfico esté encriptado.
+
+
+
+ Configurar software adicional en los gateways FreeBSD,
+ para permitir a las máquinas &windows; verse entre
+ ellas a través de la VPN.
+
+
+
+
+ Paso 1: Creando y probando un enlace de red virtual
+
+ Suponga que usted está en la máquina gateway
+ en la red #1 (con dirección IP pública A.B.C.D, dirección IP privada
+ 192.168.1.1), y ejecuta
+ ping 192.168.2.1, que es la dirección
+ privada de la máquina con dirección IP
+ W.X.Y.Z. ¿Que necesita suceder
+ para que esto funcione?
+
+
+
+ La máquina gateway necesita saber como alcanzar
+ a 192.168.2.1. En otras
+ palabras, necesita tener una ruta a 192.168.2.1.
+
+
+ Las direcciones IP privadas, como aquellas en el rango
+ 192.168.x no se supone
+ que aparezcan en Internet sueltas. En lugar de eso, cada
+ paquete que mande a 192.168.2.1
+ necesitará ser encerrado dentro de otro paquete.
+ Este paquete necesitará aparecer como si fuera
+ enviado desde A.B.C.D,
+ y tendrá que ser enviado a W.X.Y.Z. Este proceso es llamado
+ encapsulación.
+
+
+ Una vez que este paquete llega a
+ W.X.Y.Z necesitará
+ ser desencapsulado, y entregado a
+ 192.168.2.1.
+
+
+
+ Puede pensar en ello como si se necesitara un tunel
+ entre las dos redes. Las dos bocas del tunel son
+ las direcciones IP A.B.C.D y
+ W.X.Y.Z, y se debe decir al tunel
+ las direcciones de las direcciones IP privadas que serán
+ permitidas que pasen a través de él. El tunel es
+ usado para transferir tráfico con direcciones IP
+ privadas a través del Internet público.
+
+ Este tunel es creado utilizando la interfaz genérica,
+ o dispositivo gif en FreeBSD. Como
+ puede imaginarse, la interfaz gif
+ en cada equipo gateway debe ser configurada con cuatro
+ direcciones IP; dos para las direcciones IP públicas,
+ y dos para las direcciones IP privadas.
+
+ El soporte para el dispositivo gif debe ser compilado
+ en el kernel de &os; para ambas máquinas. Puede
+ hacer esto agregando la línea:
+
+ device gif
+
+ a los archivos de configuración del kernel en
+ ambas máquinas, y entonces compilarlo, instalarlo
+ y reiniciar normalmente.
+
+ La configuración del tunel es un proceso de dos
+ partes. Primero se le debe decir al tunel cuales son las
+ direcciones IP exteriores (o públicas), utilizando
+ &man.gifconfig.8;. Luego, las direcciones IP deben ser
+ configuradas usando &man.ifconfig.8;.
+
+
+ En &os; 5.X, la funcionalidad brindada por la
+ utilidad &man.gifconfig.8; ha sido fusionada a
+ &man.ifconfig.8;.
+
+ En la máquina gateway de la red #1 debe ejecutar
+ los siguientes dos comandos para configurar el tunel.
+
+ gifconfig gif0 A.B.C.D W.X.Y.Z
+ifconfig gif0 inet 192.168.1.1 192.168.2.1 netmask 0xffffffff
+
+
+ En la otra máquina gateway ejecute los mismos
+ comandos, pero con el orden las direcciones IP
+ invertidas.
+
+ gifconfig gif0 W.X.Y.Z A.B.C.D
+ifconfig gif0 inet 192.168.2.1 192.168.1.1 netmask 0xffffffff
+
+
+ Entonces puede ejecutar:
+
+ gifconfig gif0
+
+ para ver la configuración. Por ejemplo, en el
+ gateway de la red #1, usted vería algo como esto:
+
+ &prompt.root; gifconfig gif0
+gif0: flags=8011<UP,POINTTOPOINT,MULTICAST> mtu 1280
+inet 192.168.1.1 --> 192.168.2.1 netmask 0xffffffff
+physical address inet A.B.C.D --> W.X.Y.Z
+
+
+ Como puede ver, se ha creado un tunel entre las direcciones
+ físicas A.B.C.D y
+ W.X.Y.Z, y el tráfico
+ permitido a través del tunel es entre
+ 192.168.1.1 y
+ 192.168.2.1.
+
+ Esto también habrá agregado una entrada en
+ la tabla de ruteo en ambas máquinas, la cual puede
+ examinar con el comando netstat -rn.
+ Esta salida es de la máquina gateway en la red #1.
+
+ &prompt.root; netstat -rn
+Routing tables
+
+Internet:
+Destination Gateway Flags Refs Use Netif Expire
+...
+192.168.2.1 192.168.1.1 UH 0 0 gif0
+...
+
+
+ Como el valor de Flags lo indica, esta
+ es una ruta de equipo, lo que significa que cada gateway
+ conoce como alcalzar al otro gateway, pero no saben como
+ alcanzar el resto de sus respectivas redes. Ese problema
+ será solucionado proximamente.
+
+ Es posible que usted esté ejecutando un
+ firewall en ambas máquinas. Esto necesitará
+ ser transpasado por el tráfico VPN. Tal vez desée
+ permitir todo el tráfico entre ambas redes, o tal
+ vez quiera incluir reglas en el firewall que protejan ambos
+ extremos de la VPN del otro.
+
+ Las pruebas se simplifican enormemente si configura
+ el firewall para permitir todo el tráfico a
+ través de la VPN. Siempre puede apretar las cosas
+ despues. Si está utilizando &man.ipfw.8; en las
+ máquinas gateway entonces un comando como
+
+ ipfw add 1 allow ip from any to any via gif0
+
+ permitirá todo el tráfico entre los dos
+ extremos de la VPN, sin afectar sus otras reglas del
+ firewall. Obviamente necesitará ejecutar este comando
+ en ambos equipos gateway.
+
+ Esto es suficiente para permitir a cada máquina
+ gateway hacer un ping entre ellas. En 192.168.1.1,
+ usted debe ser capaz de ejecutar
+
+ ping 192.168.2.1
+
+ y obtener una respuesta, y debe ser capaz de hacer lo
+ mismo en la otra máquina gateway.
+
+ De todas maneras, no será capaz de alcanzar
+ máquinas internas en cada red todavía. Esto
+ se debe al ruteo -- aunque las máquinas gateway
+ saben como alcanzarse entre ellas, no saben como alcanzar
+ la red detrás de cada una.
+
+ Para resolver este problema debe añadir una ruta
+ estática en cada máquina gateway. El comando
+ para hacer esto en el primer gateway podría ser:
+
+ route add 192.168.2.0 192.168.2.1 netmask 0xffffff00
+
+
+ Esto significa Para alcanzar los equipos en
+ la red 192.168.2.0, envía
+ los paquetes al equipo 192.168.2.1.
+ Necesitará ejecutar un comando similar en el otro
+ gateway, pero con las direcciones
+ 192.168.1.x.
+
+ El tráfico IP de equipos en una red no será
+ capaz de alcanzar equipos en la otra red.
+
+ Eso ha creado ahora dos tercios de una VPN entre las dos
+ redes, de la misma manera que es virtual y
+ es una network. Todavía no es privada.
+ Puede probar esto utilizando &man.ping.8; y &man.tcpdump.1;.
+ Abra una sesión en el equipo gateway y ejecute
+
+ tcpdump dst host 192.168.2.1
+
+ En otra sesión en el mismo equipo ejecute
+
+ ping 192.168.2.1
+
+ Verá una salida que se parece algo a esta:
+
+
+16:10:24.018080 192.168.1.1 > 192.168.2.1: icmp: echo request
+16:10:24.018109 192.168.1.1 > 192.168.2.1: icmp: echo reply
+16:10:25.018814 192.168.1.1 > 192.168.2.1: icmp: echo request
+16:10:25.018847 192.168.1.1 > 192.168.2.1: icmp: echo reply
+16:10:26.028896 192.168.1.1 > 192.168.2.1: icmp: echo request
+16:10:26.029112 192.168.1.1 > 192.168.2.1: icmp: echo reply
+
+
+ Como puede ver, los mensajes ICMP van y vienen sin
+ encriptar. Si hubiera usado el parámetro
+ en &man.tcpdump.1; para tomar más bytes de datos de
+ estos paquetes, vería más información.
+
+ Obviamente esto es inaceptable. La siguiente sección
+ discutirá el aseguramiento del enlace entre las dos
+ redes para que todo el tráfico sea encriptado
+ automaticamente.
+
+
+ Sumario:
+
+ Configure ambos kernels con pseudo-device
+ gif.
+
+
+ Edite /etc/rc.conf en el equipo
+ gateway #1 y agregue las siguientes líneas
+ (reemplazando direcciones IP según sea necesario).
+ gifconfig_gif0="A.B.C.D W.X.Y.Z"
+ifconfig_gif0="inet 192.168.1.1 192.168.2.1 netmask 0xffffffff"
+static_routes="vpn"
+route_vpn="192.168.2.0 192.168.2.1 netmask 0xffffff00"
+
+
+
+
+ Edite su script de firewall
+ (/etc/rc.firewall, o similar) en ambos
+ equipos, y agregue
+
+ ipfw add 1 allow ip from any to any via gif0
+
+
+ Realice cambios similares a
+ /etc/rc.conf en el equipo gateway
+ #2, invirtiendo el orden de las direcciones IP.
+
+
+
+
+
+ Paso 2: Asegurando el enlace
+
+ Para asegurar el enlace usaremos IPsec. IPsec brinda un
+ mecanismo para que dos equipos coincidan en una llave de
+ encriptación, y entonces usar esta llave para
+ encriptar los datos entre los dos equipos.
+
+ Existen dos áreas de configuración a considerar
+ aquí.
+
+
+
+ Debe existir un mecanismo para que los dos equipos
+ se pongan de acuerdo en el mecanismo de encriptación
+ a utilizar. Una vez que los dos equipos se han puesto de
+ acuerdo en este mecanismo se dice que existe una
+ asociación de seguridad
+ entre ellos.
+
+
+ Debe existir un mecanismo para especificar que tráfico
+ debe ser encriptado. Obviamente, usted no desea encriptar
+ todo su tráfico saliente -- usted solo desea
+ encriptar el tráfico que es parte de la VPN. Las
+ reglas que usted pone para determinar que tráfico
+ será encriptado son llamadas políticas
+ de seguridad.
+
+
+
+ Las asociaciones de seguridad y las políticas
+ son mantenidas por el kernel, y pueden ser modificadas
+ por programas de usuario. De todas maneras, antes de que usted
+ pueda hacer esto debe configurar el kernel para soportar IPsec y
+ el protocolo ESP (Encapsulated Security Payload). Esto es
+ realizado configurando el kernel con:
+
+
+ opciones de kernel
+ IPSEC
+
+
+ options IPSEC
+options IPSEC_ESP
+
+
+ y recompilando, resintalando y reiniciando. Como se dijo
+ anteriormente, necesitará hacer esto al kernel de los
+ dos equipos gateway.
+
+
+ IKE
+
+
+ Tiene dos opciones cuando se trata de configurar
+ asociaciones de seguridad. Puede configurarlas a mano entre
+ los dos equipos, lo que significa elegir el algoritmo de
+ encriptación, llaves de encriptación, y demás,
+ o puede utilizar daemons que implementan el protocolo
+ de intercambio de llaves de Internet (IKE, Internet Key Exchange)
+ para que lo hagan por usted.
+
+ Yo recomiendo lo último. Aparte de cualquier otra
+ cosa, es más fácil de configurar.
+
+
+ IPsec
+ políticas de seguridad
+
+
+
+ setkey
+
+
+ Editar y desplegar políticas de seguridad es llevado
+ a cabo usando &man.setkey.8;. Como una analogía,
+ setkey es a las tablas de políticas de
+ seguridad del kernel lo que &man.route.8; es a las tablas de
+ ruteo del kernel. setkey también puede
+ desplegar las asociaciones de seguridad actuales, y para
+ continuar con la analogía, similarmente a
+ netstat -r es ese aspecto.
+
+ Existen un número de opciones de daemons para
+ administrar las asociaciones de seguridad en FreeBSD. Este
+ artículo describirá como usar una de ellas,
+ racoon — el cual está disponible como
+ security/racoon en la
+ colección de ports de &os;.
+
+
+ racoon
+
+
+ El software security/racoon
+ debe ser ejecutado en los dos equipos gateway. En cada equipo es
+ configurado con la dirección IP del otro extremo de la
+ VPN, y una llave secreta (la cual usted elije, y debe ser la misma
+ en ambos gateways).
+
+ Los dos daemons entonces se contactan entre ellos, confirman
+ que son quienes dicen ser (utilizando la llave secreta que usted
+ configuró). Los daemons entonces generan una nueva llave
+ secreta, y la utilizan para encriptar el tráfico a
+ través de la VPN. Periodicamente intercambian este
+ secreto, para que incluso si un atacante fuera a comprometer una
+ de las llaves (lo cual es teoricamente cercano a imposible) no
+ le haría mucho bien -- para cuando haya crackeado la
+ llave los daemons ya habrán escogido una nueva.
+
+ El archivo de configuración para racoon
+ está almacenado en ${PREFIX}/etc/racoon.
+ Debe encontrar un archivo de configuración ahí
+ el cual no debe necesitar ser cambiado mucho. El otro
+ componente de la configuración de racoon, la cual
+ necesitará cambiar, es la llave
+ precompartida.
+
+ La configuración por omisión de racoon
+ espera encontrar esto en el archivo ${PREFIX}/etc/racoon/psk.txt.
+ Es importante notar que la llave precompartida no
+ es la llave que será utilizada para encriptar su
+ tráfico a través del enlace VPN, solamente es un
+ símbolo que permite le a los daemons que administran las
+ llaves confiar el uno en el otro.
+
+ psk.txt contiene una línea
+ por cada sitio remoto con el que esté tratando. En
+ este ejemplo, donde existen dos sitios, cada archivo
+ psk.txt contendrá una línea
+ (porque cada extremo de la VPN solo está tratando
+ con un sitio en el otro extremo).
+
+ En el equipo gateway #1 esta línea debería
+ parecerse a esta:
+
+ W.X.Y.Z secret
+
+ Esto es, la dirección IP pública
+ en el extremo remoto, espacio en blanco, y un texto de cadena que
+ proporcina el secreto. Obviamente, no debe utilizar secret
+ como su llave -- las reglas normales para escoger una contraseña
+ aplican.
+
+ En el equipo gateway #2 la línea se parecería
+ a esta
+
+ A.B.C.D secret
+
+ Esto es, la dirección IP pública del
+ extremo remoto, y la misma llave secreta. psk.txt
+ debe tener modo 0600 (ej., solo modo
+ lectura/escritura para root) antes de
+ que racoon corra.
+
+ Debe ejecutar racoon en ambas máquinas gateway.
+ También necesitará agregar algunas reglas de
+ firewall para permitir el tráfico IKE, el cual es
+ transportado sobre UDP al puerto ISAKMP (Internet Security
+ Association Key Management Protocol). De nuevo, esto debe estar
+ al principio de la lista de reglas del firewall.
+
+ ipfw add 1 allow udp from A.B.C.D to W.X.Y.Z isakmp
+ipfw add 1 allow udp from W.X.Y.Z to A.B.C.D isakmp
+
+
+ Una vez que racoon este corriendo puede tratar de dar un
+ ping a un equipo gateway desde el otro. La conexión
+ todavía no está encriptada, pero entonces racoon
+ creará las asociaciones de seguridad entre los dos
+ equipos -- esto puede tomar un momento, y puede que lo vea
+ como un corto retraso antes de que los comandos ping
+ empiecen a responder.
+
+ Una vez que se han creado las asociaciones de seguridad
+ puede verlas utilizando &man.setkey.8;. Ejecute
+
+ setkey -D
+
+ en cualquiera de los equipos para ver la información de
+ la asociación de seguridad.
+
+ Eso es la mitad del problema. La otra mitad es configurar
+ sus políticas de seguridad.
+
+ Para crear una política de seguridad sensible, vamos
+ a revisar lo que se ha configurado hasta el momento. Esta
+ discusión cuenta para ambos extremos del enlace.
+
+ Cada paquete IP que usted manda tiene una cabecera que
+ contiene datos acerca del paquete. La cabecera incluye la
+ dirección IP del destino y de la fuente. Como ya sabemos,
+ las direcciones IP privadas, como el rango
+ 192.168.x.y no se supone que
+ aparezcan en el Internet público. En vez de eso, primero
+ deben ser encapsulados dentro de otro paquete. Este paquete
+ debe tener la dirección IP pública de destino y fuente
+ sustituidas por las direcciones privadas.
+
+ Así que si su paquete saliente empezó luciendo como este:
+
+
+
+
+
+
+
+
+ .----------------------.
+ | Src: 192.168.1.1 |
+ | Dst: 192.168.2.1 |
+ | <other header info> |
+ +----------------------+
+ | <packet data> |
+ `----------------------'
+
+
+
+ Entonces será encapsulado dentro de otro paquete,
+ luciendo como este:
+
+
+
+
+
+
+
+
+ .--------------------------.
+ | Src: A.B.C.D |
+ | Dst: W.X.Y.Z |
+ | <other header info> |
+ +--------------------------+
+ | .----------------------. |
+ | | Src: 192.168.1.1 | |
+ | | Dst: 192.168.2.1 | |
+ | | <other header info> | |
+ | +----------------------+ |
+ | | <packet data> | |
+ | `----------------------' |
+ `--------------------------'
+
+
+
+ Esta encapsulación es llevada a cabo
+ por el dispositivo gif. Como puede
+ ver, el paquete ahora tiene una dirección IP real en
+ el exterior, y nuestro paquete original ha sido envuelto
+ como dato dentro del paquete que será puesto en
+ Internet.
+
+ Obviamente, queremos que todo el tráfico entre
+ las VPNs esté encriptado. Tal vez pueda tratar
+ de poner esto en palabras, como:
+
+ Si un paquete sale desde A.B.C.D, y está destinado para
+ W.X.Y.Z, entonces encríptalo,
+ utilizando las asociaciones de seguridad necesarias.
+
+ Si un paquete llega desde W.X.Y.Z, y está destinado para
+ A.B.C.D, entonces desencríptalo,
+ utilizando las asociaciones de seguridad necesarias.
+
+ Eso es un aproximado, pero no del todo correcto. Si hace esto,
+ todo el tráfico desde y hacia W.X.Y.Z,
+ incluso tráfico que no es parte de la VPN, será
+ encriptado. Eso no es exactamente lo que quiere. La política
+ correcta es como sigue
+
+ Si un paquete sale desde A.B.C.D, y ese paquete está
+ encapsulando a otro paquete, y esta destinado para
+ W.X.Y.Z, entonces encríptalo,
+ utilizando las asociaciones de seguridad necesarias.
+
+ Si un paquete llega desde W.X.Y.Z, y ese paquete está
+ encapsulando a otro paquete, y esta destinado para
+ A.B.C.D, entonces desencríptalo,
+ utilizando las asociaciones de seguridad necesarias.
+
+ Un cambio sutil, pero necesario.
+
+ Las políticas de seguridad también son
+ puestas utilizando &man.setkey.8;. &man.setkey.8; proporciona
+ un lenguaje de configuración para definir la
+ política. Puede ya sea introducir las instrucciones de
+ configuración vía stdin, o puede usar la opción
+ para especificar un nombre de archivo que
+ contenga las instrucciones de configuración.
+
+ La configuración en el equipo gateway #1 (el cual
+ tiene la dirección IP pública
+ A.B.C.D) para forzar que todo
+ el tráfico saliente hacia W.X.Y.Z
+ sea encriptado es:
+
+
+spdadd A.B.C.D/32 W.X.Y.Z/32 ipencap -P out ipsec esp/tunnel/A.B.C.D-W.X.Y.Z/require;
+
+
+ Ponga estos comando en un archivo (ej.,
+ /etc/ipsec.conf) y entonces ejecute
+
+ &prompt.root; setkey -f /etc/ipsec.conf
+
+ le dice a &man.setkey.8; que
+ queremos agregar una regla a la base de datos de políticas
+ segura. El resto de esta línea especifica que paquetes
+ se ajustarán a esta política.
+ A.B.C.D/32 y
+ W.X.Y.Z/32 son las direcciones IP
+ y máscaras de red que identifican la red o equipos a los
+ que esta política se aplicará. En este caso, queremos
+ aplicarla al tráfico entre estos dos equipos.
+ dice que esta política aplica
+ a paquetes salientes, e dice que el
+ paquete será asegurado.
+
+ La segunda línea especifica como este paquete
+ será encriptado. es el
+ protocolo que será utilizado, mientras que
+ indica que el paquete será
+ despues encapsulado en un paquete IPsec. El uso repetido de
+ A.B.C.D y
+ W.X.Y.Z es utilizado para
+ seleccionar la asociación de seguridad a usar, y
+ por último exige que los
+ paquetes deben ser encriptados si concuerdan con esta
+ regla.
+
+ Esta regla solo concuerda con paquetes salientes.
+ Necesitará una regla similar para los paquetes
+ entrantes.
+
+ spdadd W.X.Y.Z/32 A.B.C.D/32 ipencap -P in ipsec esp/tunnel/W.X.Y.Z-A.B.C.D/require;
+
+ Note el en lugar del
+ en este caso, y la inversión necesaria de las direcciones
+ IP.
+
+ El otro equipo gateway (el cual tiene la dirección
+ IP pública W.X.Y.Z)
+ necesitará reglas similares.
+
+ spdadd W.X.Y.Z/32 A.B.C.D/32 ipencap -P out ipsec esp/tunnel/W.X.Y.Z-A.B.C.D/require;
+spdadd A.B.C.D/32 W.X.Y.Z/32 ipencap -P in ipsec esp/tunnel/A.B.C.D-W.X.Y.Z/require;
+
+ Finalmente, necesita añadir reglas de firewall
+ para permitir la circulación de paquetes ESP e IPENCAP
+ de ida y vuelta. Estas reglas necesitarán ser agregadas
+ a ambos equipos.
+
+ ipfw add 1 allow esp from A.B.C.D to W.X.Y.Z
+ipfw add 1 allow esp from W.X.Y.Z to A.B.C.D
+ipfw add 1 allow ipencap from A.B.C.D to W.X.Y.Z
+ipfw add 1 allow ipencap from W.X.Y.Z to A.B.C.D
+
+
+ Debido a que las reglas son simétricas puede utilizar
+ las mismas reglas en cada equipo gateway.
+
+ Los paquetes salientes se verán ahora como esto:
+
+
+
+
+
+
+
+
+ .------------------------------. --------------------------.
+ | Src: A.B.C.D | |
+ | Dst: W.X.Y.Z | |
+ | <other header info> | | Encrypted
+ +------------------------------+ | packet.
+ | .--------------------------. | -------------. | contents
+ | | Src: A.B.C.D | | | | are
+ | | Dst: W.X.Y.Z | | | | completely
+ | | <other header info> | | | |- secure
+ | +--------------------------+ | | Encap'd | from third
+ | | .----------------------. | | -. | packet | party
+ | | | Src: 192.168.1.1 | | | | Original |- with real | snooping
+ | | | Dst: 192.168.2.1 | | | | packet, | IP addr |
+ | | | <other header info> | | | |- private | |
+ | | +----------------------+ | | | IP addr | |
+ | | | <packet data> | | | | | |
+ | | `----------------------' | | -' | |
+ | `--------------------------' | -------------' |
+ `------------------------------' --------------------------'
+
+
+
+
+ cuando son recibidos por el extremo más lejano de la
+ VPN primero serán desencriptados (utilizando las
+ asociaciones de seguridad que han sido negociadas por racoon).
+ Entonces entrarán a la interfaz gif,
+ la cual desenvuelve la segunda capa, hasta que le deja con el
+ paquete más interno, el cual puede entonces viajar a
+ la red interna.
+
+ Puede revisar la seguridad utilizando la misma prueba de
+ &man.ping.8; anterior. Primero, inicie una sesión en
+ la máquina gateway A.B.C.D,
+ y ejecute:
+
+ tcpdump dst host 192.168.2.1
+
+ En otra sesión en la misma máquina ejecute
+
+ ping 192.168.2.1
+
+ Esta vez debe ver una salida similar a la siguiente:
+
+ XXX tcpdump output
+
+ ahora, como puede ver, &man.tcpdump.1; muestra los paquetes ESP.
+ Si trata de examinarlos con la opción
+ verá basura (aparentemente), debido a la encriptación.
+
+ Felicitaciones. Acaba de configurar una VPN entre dos sitios
+ remotos.
+
+
+ Sumario
+
+ Configure ambos kernels con:
+
+ options IPSEC
+options IPSEC_ESP
+
+
+
+ Instale security/racoon.
+ Edite ${PREFIX}/etc/racoon/psk.txt en ambos
+ equipos gateway, agregando una entrada para la dirección
+ IP del equipo remoto y una llave secreta que ambos conozcan.
+ Asegúrese que este archivo tenga modo 0600.
+
+
+ Añada las siguientes líneas a
+ /etc/rc.conf en cada equipo:
+
+ ipsec_enable="YES"
+ipsec_file="/etc/ipsec.conf"
+
+
+
+ Crée un /etc/ipsec.conf en
+ cada equipo que contenga las líneas spdadd necesarias.
+ En el equipo gateway #1 esto sería:
+
+
+spdadd A.B.C.D/32 W.X.Y.Z/32 ipencap -P out ipsec
+ esp/tunnel/A.B.C.D-W.X.Y.Z/require;
+spdadd W.X.Y.Z/32 A.B.C.D/32 ipencap -P in ipsec
+ esp/tunnel/W.X.Y.Z-A.B.C.D/require;
+
+
+ En el equipo gateway #2 esto sería:
+
+
+spdadd W.X.Y.Z/32 A.B.C.D/32 ipencap -P out ipsec
+ esp/tunnel/W.X.Y.Z-A.B.C.D/require;
+spdadd A.B.C.D/32 W.X.Y.Z/32 ipencap -P in ipsec
+ esp/tunnel/A.B.C.D-W.X.Y.Z/require;
+
+
+
+ Agregue reglas de firewall para permitir el
+ tráfico IKE, ESP e IPENCAP en ambos equipos:
+
+
+ipfw add 1 allow udp from A.B.C.D to W.X.Y.Z isakmp
+ipfw add 1 allow udp from W.X.Y.Z to A.B.C.D isakmp
+ipfw add 1 allow esp from A.B.C.D to W.X.Y.Z
+ipfw add 1 allow esp from W.X.Y.Z to A.B.C.D
+ipfw add 1 allow ipencap from A.B.C.D to W.X.Y.Z
+ipfw add 1 allow ipencap from W.X.Y.Z to A.B.C.D
+
+
+
+
+ Los dos pasos previos deben ser suficiente para levantar la
+ VPN. Las máquinas en cada red seán capaces de
+ referirse una a otra utilizando direcciones IP, y todo el tráfico
+ a través del enlace será automatica y seguramente
+ encriptado.
+
+
+
+
+
+
+
+
+ Chern
+ Lee
+ Contribuido por
+
+
+
+
+
+ OpenSSH
+ OpenSSH
+
+ seguridad
+ OpenSSH
+
+
+ OpenSSH es un conjunto de herramientas de conectividad
+ utilizadas para accesar máquinas remotas de manera segura. Puede ser usado
+ como un reemplzado directo para rlogin,
+ rsh, rcp y
+ telnet. Adicionalmente, cualquier otra conexión
+ TCP/IP puede ser tuneleada/reenviada de manera segura a través
+ de SSH. OpenSSH encripta todo el tráfico para
+ eliminar efectivamente el espionaje, secuestro de conexiones, y otros ataques
+ a nivel de red.
+
+ OpenSSH es mantenido por el proyecto OpenBSD, y está
+ basado sobre SSH v1.2.12 con todos errores recientes corregidos y actualizaciones.
+ Es compatible con los protocolos SSH 1 y 2. OpenSSH ha
+ estado en el sistema base desde FreeBSD 4.0.
+
+
+ Ventajas de utilizar OpenSSH
+
+ Normalmente, al utilizar &man.telnet.1; o &man.rlogin.1;,
+ los datos son enviados a través de la red de una
+ forma clara, no encriptada. Cualquier olfateador de red
+ entre el cliente y el servidor puede robar la información
+ de usuario/contraseña o los datos transferidos en
+ su sesión. OpenSSH ofrece una
+ variedad de métodos de autentificación y
+ encriptación para prevenir que esto suceda.
+
+
+
+ Habilitando sshd
+
+ OpenSSH
+ habilitando
+
+
+ El daemon sshd está
+ habilitado por omisión en &os; 4.X y puede
+ ser habilitado o no durante la instalación por el
+ usuario en &os; 5.X. Para ver si está habilitado,
+ revise el archivo rc.conf por:
+
+ sshd_enable="YES"
+
+ Esto cargará &man.sshd.8;, el programa daemon de OpenSSH,
+ la próxima vez que su sistema inicie. Alternativamente,
+ puede simplemente correr directamente el daemon sshd
+ tecleando sshd en la línea de comando.
+
+
+
+ Cliente SSH
+
+ OpenSSH
+ cliente
+
+
+ La utilidad &man.ssh.1; funciona de manera
+ similar a &man.rlogin.1;.
+
+ &prompt.root; ssh user@example.com
+Host key not found from the list of known hosts.
+Are you sure you want to continue connecting (yes/no)? yes
+Host 'example.com' added to the list of known hosts.
+user@example.com's password: *******
+
+ El login continuará como si lo haría si fuera
+ una sesión utilizando rlogin o
+ telnet. SSH utiliza un sistema de huellas de
+ llaves para verificar la autenticidad del servidor cuando el
+ cliente se conecta. Al usuario se le pide que introduzca
+ yes solamente la primera vez que se
+ conecta. Todos los intentos futuros de login son verificados
+ contra la huella de la llave salvada. El cliente SSH le alertará
+ si la huella guardada difiere de la huella recibida en intentos
+ de login futuros. Las huellas son almacenadas en
+ ~/.ssh/known_hosts, o en
+ ~/.ssh/known_hosts2 para huellas
+ SSH v2.
+
+ Por omisión, versiones recientes de
+ los servidores OpenSSH solamente
+ aceptan conexiones SSH v2. El cliente utilizará la
+ versión 2 de ser posible y pasará como
+ respaldo a la versión 1. El cliente puede también
+ ser forzado a utilizar una u otra pasándole
+ o para versión 1 o versión 2
+ respectivamente. La compatibilidad de versión 1 es
+ mantenida en el cliente para compatibilidad con versiones
+ antiguas.
+
+
+
+ Copia segura
+
+ OpenSSH
+ copia segura
+
+ scp
+
+ El comando &man.scp.1; funciona de manera
+ similar a &man.rcp.1;; copia un archivo desde o hacia
+ una máquina remota, excepto que lo hace de
+ una forma segura.
+
+ &prompt.root; scp user@example.com:/COPYRIGHT COPYRIGHT
+user@example.com's password: *******
+COPYRIGHT 100% |*****************************| 4735
+00:00
+&prompt.root;
+
+ Ya que la huella fué ya salvada para este equipo en
+ el ejemplo anterior, es verificada al utilizar &man.scp.1;
+ aquí.
+
+ Los argumentos pasados a &man.scp.1; son similares
+ a &man.cp.1;, con el archivo o archivos en el primer
+ argumento, y el destino en el segundo. Ya que el archivo
+ es transferido a través de la red, a través de
+ SSH, uno o más argumentos toman la forma
+ .
+
+
+
+
+ Configuración
+
+ OpenSSH
+ configuración
+
+
+ Los archivos de configuración del sistema
+ para el daemon OpenSSH y el
+ cliente reside dentro del directorio /etc/ssh.
+
+ ssh_config configura las opciones
+ del cliente, mientras que sshd_config
+ configura el daemon.
+
+ Adicionalmente, las opciones
+ (/usr/sbin/sshd por omisión),
+ y de rc.conf
+ pueden brindar más niveles de configuración.
+
+
+
+ ssh-keygen
+
+ En lugar de utilizar contraseñas, &man.ssh-keygen.1;
+ puede ser utilizado para generar llaves DSA o RSA para
+ autentificar a un usuario:
+
+ &prompt.user; ssh-keygen -t dsa
+Generating public/private dsa key pair.
+Enter file in which to save the key (/home/user/.ssh/id_dsa):
+Created directory '/home/user/.ssh'.
+Enter passphrase (empty for no passphrase):
+Enter same passphrase again:
+Your identification has been saved in /home/user/.ssh/id_dsa.
+Your public key has been saved in /home/user/.ssh/id_dsa.pub.
+The key fingerprint is:
+bb:48:db:f2:93:57:80:b6:aa:bc:f5:d5:ba:8f:79:17 user@host.example.com
+
+
+ &man.ssh-keygen.1; creará un par de llaves
+ pública y privada para usar en la autentificación.
+ La llave privada es almacenada en
+ ~/.ssh/id_dsa o en
+ ~/.ssh/id_rsa, mientras que la llave
+ pública es almacenada en ~/.ssh/id_dsa.pub
+ o en ~/.ssh/id_rsa.pub, respectivamente para
+ tipos de llave DSA y RSA. La llave pública debe ser
+ colocada en ~/.ssh/authorized_keys de la
+ máquina remota para que la configuración funcione.
+ Similarmente, llaves RSA versión 1 deben ser colocadas en
+ ~/.ssh/authorized_keys.
+
+ Esto permitirá conexiones a la máquina remota
+ basándose en llaves SSH en lugar de contraseñas.
+
+ Si una frase es utilizada en &man.ssh-keygen.1;, se le
+ pedirá al usuario una contraseña cada
+ vez para poder utilizar la llave privada. &man.ssh-agent.1;
+ puede aliviar el esfuerzo de introducir repetidamente
+ frases largas, y esto es explorado en la sección
+ abajo.
+
+ Las varias opciones y archivos pueden ser
+ diferentes de acuerdo a la versión de OpenSSH
+ que tenga en su propio sistema; para evitar problemas debe
+ consultar la página de manual &man.ssh-keygen.1;.
+
+
+
+ ssh-agent y ssh-add
+
+ Las utilidades &man.ssh-agent.1; y &man.ssh-add.1; brindan
+ métodos para que llaves SSH
+ sean cargadas en memoria para su uso, sin tener que necesitar
+ el tecleo de la frase cada vez.
+
+ La utilidad &man.ssh-agent.1; manejará la
+ autentificación utilizando la llave(s) privada que se
+ le cargó. &man.ssh-agent.1; debe ser utilizado para
+ lanzar otra aplicación. En el nivel más básico,
+ puede generar un shell o a un nivel más avanzado, un
+ manejador de ventanas.
+
+ Para usar &man.ssh-agent.1; en un shell, primero necesitará
+ ser generado con un shell como argumento. Segundo, la
+ identidad necesita ser añadida ejecutando &man.ssh-add.1;
+ y brindando la frase para la llave privada. Una vez que se han
+ completado estos pasos el usuario será capaz de hacer
+ &man.ssh.1; a cualquier equipo que tenga instalada la llave
+ pública correspondiente. Por ejemplo:
+
+ &prompt.user; ssh-agent csh
+&prompt.user; ssh-add
+Enter passphrase for /home/user/.ssh/id_dsa:
+Identity added: /home/user/.ssh/id_dsa (/home/user/.ssh/id_dsa)
+&prompt.user;
+
+ Para utilizar &man.ssh-agent.1; en X11, una
+ llamada a &man.ssh-agent.1; necesitará ser
+ colocada en ~/.xinitrc. Esto
+ brindará los servicios de &man.ssh-agent.1;
+ a todos los programas lanzados en X11.
+ Un archivo ~/.xinitrc de ejemplo
+ podría lucir como este:
+
+ exec ssh-agent startxfce4
+
+ Esto lanzaría &man.ssh-agent.1;, el cual a su
+ vez lanzaría XFCE, cada
+ vez que inicie X11. Entonces una vez que se ha hecho y X11
+ ha sido reiniciado para que los cambios tomen efecto,
+ simplemente ejecute &man.ssh-add.1; para cargar todas sus
+ llaves SSH.
+
+
+
+ Túneles SSH
+
+ OpenSSH
+ túneles
+
+
+ OpenSSH tiene la habilidad de crear un tunel para
+ encapsular otro protocolo en una sesión encriptada.
+
+ El siguiente comando le dice a &man.ssh.1; que realice un
+ tunel para telnet:
+
+ &prompt.user; ssh -2 -N -f -L 5023:localhost:23 user@foo.example.com
+&prompt.user;
+
+ El comando ssh es utilizado con
+ las siguientes opciones:
+
+
+
+
+
+
+ Obliga a ssh a utilizar la
+ versión 2 del protocolo. (No utilizar si
+ está trabajando con servidores SSH antiguos)
+
+
+
+
+
+
+
+ Indica no comando, o solamente tunel. Si se omite,
+ ssh iniciaría una sesión
+ normal.
+
+
+
+
+
+
+
+ Obliga a ssh a ejecutarse
+ en segundo plano.
+
+
+
+
+
+
+
+ Indica un tunel local de la manera
+ puerto local:equipo remoto:puerto remoto.
+
+
+
+
+
+
+
+ El servidor SSH remoto.
+
+
+
+
+
+ Un tunel SSH funciona creando un socket que escucha
+ en localhost en el puerto especificado.
+ Entonces reenvía cualquier conexión
+ recibida en el puerto/equipo local vía la
+ conexión SSH al puerto o equipo remoto especificado.
+
+ En el ejemplo, el puerto 5023 en
+ localhost está diendo reenviado al
+ puerto 23 en el localhost
+ de la máquina remota. Ya que 23 es
+ telnet, esto crearía una sesión
+ telnet segura a través de un tunel
+ SSH.
+
+ Esto puede ser utilizado para envolver cualquier
+ número de protocolos inseguros TCP como SMTP,
+ POP3, FTP, etc.
+
+
+ Usando SSH para crear un túnel seguro para SMTP
+
+ &prompt.user; ssh -2 -N -f -L 5025:localhost:25 user@mailserver.example.com
+user@mailserver.example.com's password: *****
+&prompt.user; telnet localhost 5025
+Trying 127.0.0.1...
+Connected to localhost.
+Escape character is '^]'.
+220 mailserver.example.com ESMTP
+
+ Esto puede utilizarse junto con
+ &man.ssh-keygen.1; y cuentas de usuario adicional para
+ crear un ambiente más transparente/libre de problemas.
+ Las llaves pueden ser usadas en lugar de teclear una
+ contraseña, y los túneles pueden ser
+ ejecutados como un usuario separado.
+
+
+
+ Ejemplos prácticos de túneles SSH
+
+
+ Acceso seguro a un servidor POP3
+
+ En el trabajo hay un servidor SSH que acepta
+ conexiones desde el exterior. En la misma red de la
+ oficina reside un servidor de correo corriendo un
+ servidor POP3. La red, o ruta de red entre su casa y
+ oficina puede o no ser completamente confiable. Debido
+ a esto, necesita revisar su correo electrónico
+ de manera segura. La solución es crear una
+ conexión SSH al servidor SSH de su oficina, y
+ llegar por un túnel al servidor de correo.
+
+ &prompt.user; ssh -2 -N -f -L 2110:mail.example.com:110 user@ssh-server.example.com
+user@ssh-server.example.com's password: ******
+
+ cuando el túnel esté levantado y funcionando,
+ puede apuntar su cliente de correo para enviar peticiones
+ POP3 a localhost en el puerto 2110.
+ Una conexión será reenviada de manera segura
+ a traveés del túnel a mail.example.com.
+
+
+
+ Saltándose un firewall draconiano
+
+ Algunos administradores de red imponen reglas de
+ firewall extremadamente draconianas, filtrando no
+ solamente conexiones entrantes, sino también
+ conexiones salientes. Tal vez solo se le otorgue acceso
+ para contactar máquinas remotas en los puertos 22
+ y 80 para ssh y navegar en web.
+
+ Tal vez quiera accesar otros (quizás no
+ relacionados al trabajo) servicios, como un servidor
+ Ogg Vorbis para escuchar música. Si este
+ servidor Ogg Vorbis está transmitiendo en algún
+ otro puerto diferente de 22 y 80, no podrá tener
+ acceso a él.
+
+ La solución es crear una conexión SSH
+ fuera del firewall de su red, y utilizarla para hacer un
+ túnel al servidor Ogg Vorbis.
+
+ &prompt.user; ssh -2 -N -f -L 8888:music.example.com:8000 user@unfirewalled-system.example.org
+user@unfirewalled-system.example.org's password: *******
+
+ Su cliente de música puede ahora ser
+ apuntado a localhost puerto 8888,
+ el cual será reenviado a music.example.com
+ puerto 8000, evadiendo con éxito el firewall.
+
+
+
+
+
+ La opción de usuarios AllowUsers
+
+ Es siempre una buena idea limitar que usuarios pueden
+ entrar y desde donde. La opción AllowUsers
+ es una buena manera de lograr esto. Por ejemplo, para permitir
+ solamente entrada al usuario root desde
+ 192.168.1.32, algo como esto
+ podría ser apropiado en el archivo
+ /etc/ssh/sshd_config:
+
+ AllowUsers root@192.168.1.32
+
+ Para permitir al usuario admin la
+ entrada desde cualquier lugar, solamente liste el nombre
+ de usuario:
+
+ AllowUsers admin
+
+ Múltiples usuarios pueden ser listados en la misma
+ línea, como:
+
+
+ AllowUsers root@192.168.1.32 admin
+
+
+ Es importante que liste cada usuario que necesite entrar
+ a esta máquina; de otra forma no podrán entrar.
+
+
+ Despues de hacer los cambios a
+ /etc/ssh/sshd_config debe decirle a
+ &man.sshd.8; que cargue de nuevo sus archivos de
+ configuración ejecutando:
+
+ &prompt.root; /etc/rc.d/sshd reload
+
+
+
+ Más lecturas
+ OpenSSH
+ &man.ssh.1; &man.scp.1; &man.ssh-keygen.1;
+ &man.ssh-agent.1; &man.ssh-add.1; &man.ssh.config.5;
+ &man.sshd.8; &man.sftp-server.8; &man.sshd.config.5;
+
+
+
+
+
+
+
+ Tom
+ Rhodes
+ Contribuido por
+
+
+
+
+ ACL
+
+ Listas de control de acceso a sistemas de archivos
+
+ Junto a mejoramientos del sistema de archivos como instantáneas
+ (snapshots), FreeBSD 5.0 y posteriores ofrecen la seguridad de
+ listas de control de acceso a sistemas de archivos
+ (ACLs, Access Control Lists).
+
+ Las listas de control de acceso extienden el modelo de
+ permisos estándar de &unix; de una manera altamente
+ compatible (&posix;.1e). Esta opción le permite a un
+ administrador hacer uso y tomar ventaja de un modelo de
+ seguridad más sofisticado.
+
+ Para habilitar soporte de ACL para sistemas
+ de archivos UFS, la siguiente opción:
+
+ options UFS_ACL
+
+ debe ser compilada en el kernel. Si esta opción
+ no ha sido compilada, un mensaje de advertencia será
+ desplegado cuando se intente montar un sistema de archivos
+ soportando ACLs. Esta opción es
+ incluida en el kernel GENERIC.
+ ACLs dependen que atributos extendidos sean
+ habilitados en el sistema de archivos. Los atributos extendidos
+ están soportados nativamente en la próxima
+ generación de sistemas de archivos &unix;, UFS2.
+
+ Un nivel mas elevado de carga adminitrativa es requerido
+ para configurar atributos extendidos en UFS1
+ que en UFS2. El desempeño de atributos
+ extendidos en UFS2 también es substancialmente
+ más elevado. Como resultado, UFS2 es
+ generalmente recomendado respecto a UFS1
+ en preferencia para su uso con listas de control de acceso.
+
+ ACLs son habilitadas por la bandera administrativa
+ al momento de montaje, , la cual puede ser añadida
+ a /etc/fstab. La bandera de montaje puede también
+ ser automaticamente activada de una manera persistente utilizando
+ &man.tunefs.8; para modificar una bandera de superbloque ACLs
+ en la cabecera del sistema de archivos. En general, es preferible utilizar
+ la bandera de superbloque por varias razones:
+
+
+
+ La bandera de montaje ACLs no puede ser cambiada
+ por un remontaje (&man.mount.8; ), solamente con
+ un completo &man.umount.8; y un &man.mount.8; fresco. Esto significa
+ que no se pueden habilitar ACLs en el sistema de
+ archivos raíz despues del arranque. También significa
+ que no puede cambiar la disposición de un sistema de archivos
+ una vez que está en uso.
+
+
+
+ Activando la bandera de superbloque provocará que el sistema
+ de archivos sea siempre montado con ACLs habilitadas
+ incluso si no existe una entrada en fstab o si los
+ dispositivos se reordenan. Esto previene un montado accidental del
+ sistema de archivos sin tener las ACLs habilitadas,
+ lo cual puede resultar en que se impongan de manera inadecuada las
+ ACLs, y por consecuencia un problema de seguridad.
+
+
+
+ Podemos cambiar el comportamiento de las ACLs para
+ permitirle a la bandera ser habilitada sin un &man.mount.8; completo, pero
+ lo consideramos deseable para deshalentar montados accidentales sin
+ ACLs habilitadas, porque puede disparase a los pies muy
+ feamente si habilita ACLs, luego las deshabilita, luego las
+ habilita nuevamente sin borrar los atributos extendidos. En general, una vez que
+ que se han habilitado ACLs en un sistema de archivos, no deben
+ ser dehabilitadas, ya que la protección de archivos resultante puede no
+ ser compatible con aquellas pretendidas por los usuarios del sistema, y rehabilitando
+ las ACLs pueden re-pegar las ACLs previas
+ a archivos que han tenido cambios en sus permisos desde eso, resultando en
+ otra conducta impredecible.
+
+ Los sistemas de archivos con ACLs habilitadas mostrarán
+ un signo + (más) en sus configuraciones de permisos
+ al visualizarlos. Por ejemplo:
+
+ drwx------ 2 robert robert 512 Dec 27 11:54 private
+drwxrwx---+ 2 robert robert 512 Dec 23 10:57 directory1
+drwxrwx---+ 2 robert robert 512 Dec 22 10:20 directory2
+drwxrwx---+ 2 robert robert 512 Dec 27 11:57 directory3
+drwxr-xr-x 2 robert robert 512 Nov 10 11:54 public_html
+
+ Aquí vemos que los directorios directory1,
+ directory2, y directory3
+ están todos tomando ventaja de las ACLs.
+ El directorio public_html no.
+
+
+ Haciendo uso de ACLs
+
+ Las ACLs del sistema de archivo pueden
+ ser visualizadas por la utilidad &man.getfacl.1;. Por ejemplo,
+ para ver las configuraciones de ACL en el
+ archivo test, uno podría
+ usar el comando:
+
+ &prompt.user; getfacl test
+ #file:test
+ #owner:1001
+ #group:1001
+ user::rw-
+ group::r--
+ other::r--
+
+ Para cambiar las configuraciones ACL en
+ este archivo, invoque la utilidad &man.setfacl.1;. Observe:
+
+ &prompt.user; setfacl -k test
+
+ La bandera eliminará todas
+ las ACLs definidas actualmente de un
+ archivo o sistema de archivos. El método más
+ preferible sería utilizar ya que
+ deja los campos básicos requeridos para que
+ funcionen las ACLs.
+
+ &prompt.user; setfacl -m u:trhodes:rwx,group:web:r--,o::--- test
+
+ En el comando antes mencionado, la opción
+ fué usada para modificar las
+ entradas ACL por omisión.
+ Debido a que no hubieron entradas predefinidas, como
+ fueron removidas por el comando previo, esto restaurará
+ las opciones por omisión y asignará las
+ opciones listadas. Tome precauciones para notar que si agrega
+ un usuario o grupo el cual no existe en el sistema,
+ un error de Invalid argument será
+ impreso en stdout.
+
+
+
+
+
+
+
+ Tom
+ Rhodes
+ Contribuido por
+
+
+
+
+
+ Portaudit
+
+ Monitoreando asuntos de seguridad de terceros
+
+ En años recientes, el mundo de la seguridad ha hecho
+ muchos mejoramientos en como se maneja la evaluación de
+ vulnerabilidades. La amenaza de instrusiones al sistema
+ incrementa cuando utilidades de terceros son instaladas
+ y configuradas para virtualmente cualquier sistema operativo
+ disponible hoy en día.
+
+ La evaluación de vulnerabilidades es un factor
+ clave en la seguridad, y mientras &os; libera advertencias
+ para el sistema base, hacerlo para cada utilidad de terceros
+ está mas allá de la capacidad del proyecto
+ &os;. Existe una manera de mitigar las vulnerabilidades de
+ terceros y advertir a los administradores de incidentes de
+ seguridad conocidos. Una utilidad agregada de &os; conocida
+ como Portaudit existe solamente
+ con este propósito.
+
+ El port security/portaudit
+ consulta una base de datos, actualizada y mantenida por el
+ equipo de seguridad y por los desarrolladores de &os;, por
+ incidentes de seguridad conocidos.
+
+ Para empezar a usar Portaudit,
+ primero se debe instalar desde la colección de ports:
+
+ &prompt.root; cd /usr/ports/security/portaudit && make install clean
+
+ Durante el proceso de instalación, los archivos
+ de configuración para &man.periodic.8; serán
+ actualizados, permitiendole a Portaudit
+ aparecer en la ejecución diaria de seguridad. Asegúrese
+ que el correo de la ejecución diaria de seguridad, el cual
+ es enviado a la cuenta de correo de root, sea
+ leído. No se requiere ninguna otra configuración
+ aquí.
+
+ Despues de la instalación, un administrador debe
+ actualizar la base de datos almacenada localmente en
+ /var/db/portaudit invocando
+ el siguiente comando:
+
+ &prompt.root; portaudit -F
+
+
+ La base de datos será automaticamente actualizada
+ durante la ejecución de &man.periodic.8;; así
+ que el comando anterior es completamente opcional. Solo es
+ requerido para los siguientes ejemplos.
+
+
+ Para auditar las utilidades de terceros instaladas como
+ parte de la colección de ports, un administrador solo
+ necesita correr el siguiente comando:
+
+ &prompt.root; portaudit -a
+
+ Este es un ejemplo de la salida:
+
+ Affected package: cups-base-1.1.22.0_1
+Type of problem: cups-base -- HPGL buffer overflow vulnerability.
+Reference: <http://www.FreeBSD.org/ports/portaudit/40a3bca2-6809-11d9-a9e7-0001020eed82.html>
+
+1 problem(s) in your installed packages found.
+
+You are advised to update or deinstall the affected package(s) immediately.
+
+ Apuntando un navegador de web a la URL
+ mostrada, un administrador puede obtener más información
+ acerca de la vulnerabilidad en cuestión. Esto incluirá
+ versiones afectadas, por versión de port de &os;, junto con
+ otros sitios web que contengan advertencias de seguridad.
+
+ En corto, Portaudit es una utilidad
+ poderosa y extremadamente útil cuando se acopla con el
+ port Portupgrade.
+
+
+
+
+
+
+ Tom
+ Rhodes
+ Contribuido por
+
+
+
+
+ Advertencias de seguridad en FreeBSD
+
+ &os; Security Advisories
+
+ Como muchos sistemas operativos con calidad de producción,
+ &os; publica advertencias de seguridad. Estas
+ advertencias son usualmente enviadas por correo a las listas de
+ seguridad y anotadas en la Errata solamente despues de que la
+ release apropiada ha sido parchada. Esta sección trabajará
+ para explicar que es una advertencia de seguridad, como entenderla
+ y que medidas hay que tomar para parchar el sistema.
+
+
+ ¿Como se ve una advertencia?
+
+ Las advertencias de seguridad en &os; se ven de manera
+ similar a la de abajo, tomada de la lista de correos
+ &a.security-notifications.name;.
+
+ =============================================================================
+&os;-SA-XX:XX.UTIL Security Advisory
+ The &os; Project
+
+Topic: denial of service due to some problem
+
+Category: core
+Module: sys
+Announced: 2003-09-23
+Credits: Person@EMAIL-ADDRESS
+Affects: All releases of &os;
+ &os; 4-STABLE prior to the correction date
+Corrected: 2003-09-23 16:42:59 UTC (RELENG_4, 4.9-PRERELEASE)
+ 2003-09-23 20:08:42 UTC (RELENG_5_1, 5.1-RELEASE-p6)
+ 2003-09-23 20:07:06 UTC (RELENG_5_0, 5.0-RELEASE-p15)
+ 2003-09-23 16:44:58 UTC (RELENG_4_8, 4.8-RELEASE-p8)
+ 2003-09-23 16:47:34 UTC (RELENG_4_7, 4.7-RELEASE-p18)
+ 2003-09-23 16:49:46 UTC (RELENG_4_6, 4.6-RELEASE-p21)
+ 2003-09-23 16:51:24 UTC (RELENG_4_5, 4.5-RELEASE-p33)
+ 2003-09-23 16:52:45 UTC (RELENG_4_4, 4.4-RELEASE-p43)
+ 2003-09-23 16:54:39 UTC (RELENG_4_3, 4.3-RELEASE-p39)
+&os; only: NO
+
+For general information regarding FreeBSD Security Advisories,
+including descriptions of the fields above, security branches, and the
+following sections, please visit
+http://www.FreeBSD.org/security/.
+
+I. Background
+
+
+II. Problem Description
+
+
+III. Impact
+
+
+IV. Workaround
+
+
+V. Solution
+
+
+VI. Correction details
+
+
+VII. References
+
+
+
+
+ El campo Topic indica cual es el problema exaxtamente.
+ Es basicamente una introducción a la advertencia de seguridad actual
+ y anota la utilidad con la vulnerabilidad.
+
+
+
+ Category se refiere a la parte afectada del sistema
+ la cual puede ser core, contrib o
+ ports. La categoría core
+ significa que la vulnerabilidad afecta a un componente central del
+ sistema operativo &os;. La categoría contrib
+ significa que la vulnerabilidad afecta a software contribuido al
+ proyecto &os;, como sendmail. Finalmente
+ la categoría ports indica que la
+ vulnerabilidad afecta a software agregado como parte de la
+ colección de ports.
+
+
+
+ El campo Module se refiere a la ubicación del
+ componente, por ejemplo sys. En este ejemplo, vemos que
+ el módulo, sys, es afectado; por lo tanto, esta
+ vulnerabilidad afecta a componentes utilizados dentro del kernel.
+
+
+
+ El campo Announced refleja la fecha en que esa
+ advertencia de seguridad fué publicada, o anunciada al mundo.
+ Esto significa que el equipo de seguridad ha verificado que el
+ problema exista y que un parche ha sido enviado al repositorio
+ de código fuente de &os;.
+
+
+
+ El campo Credits le da el crédito al
+ individuo u organización que descubrió y reportó
+ la vulnerabilidad.
+
+
+
+ El campo Affects explica a que releases de &os;
+ afecta esta vulnerabilidad. Para el kernel, una rápida
+ revisión a la salida de ident en
+ los archivos afectados ayudará determinando la
+ revisión. Para ports, el número de versión
+ está listado despues del nombre del port en
+ /var/db/pkg. Si el sistema no se
+ sincroniza con el repositorio CVS de
+ &os; y se reconstruye diariamente, existe la posibilidad de
+ que esté afectado.
+
+
+
+ El campo Corrected indica la fecha, hora, zona
+ horaria y release que fué corregido.
+
+
+
+ El campo &os; only indica si esta vulnerabilidad afecta
+ solamente a &os;, o si afecta también a otros sistemas operativos.
+
+
+
+ El campo Background da información acerca de
+ que es exactamente la utilidad afectada. La mayor parte del
+ tiempo se refiere a por qué la utilidad existe en &os;,
+ para que es utilizada, y un poco de información de
+ como llegó a convertirse en utilidad.
+
+
+
+ El campo Problem Description explica el agujero
+ de seguridad en profundiad. Esto puede incluir información de
+ código fallado, o incluso como la utilidad puede ser
+ usada maliciosamente para abrir un agujero de seguridad.
+
+
+
+ El campo Impact describe el tipo de impacto
+ que el problema puede tener en un sistema. Por ejemplo,
+ esto puede desde un ataque de negación de servicio,
+ hasta privilegios extras para usuarios, o incluso brindar
+ al atacante acceso de superusuario.
+
+
+
+ El campo Workaround ofrece una solución
+ temporal posible para administradores de sistemas que tal vez no
+ puedan actualizar el sistema. Esto puede ser debido a
+ falta de tiempo, disponibilidad de red, o a muchas otras
+ razones. Sin importar eso, la seguridad no de debe tomar
+ a la ligera, y un sistema afectado debe ser parchado o
+ una solución temporal para el agujero de seguridad
+ debe ser implementado.
+
+
+
+ El campo Solution ofrece instrucciones para
+ parchar el sistema afectado. Este es un método paso a
+ paso, probado y verificado para parchar un sistema y que
+ trabaje seguro.
+
+
+
+ El campo Correction Details despliega
+ la rama del CVS o el nombre del release
+ con los puntos cambiados a guiones bajos. También
+ muestra el número de revisión de los archivos
+ afectados dentro de cada rama.
+
+
+
+ El campo References usualmente ofrece fuentes de
+ información. Esto puede incluir URLs
+ de web, libros, listas de correos y grupos de noticias.
+
+
+
+
+
+
+
+
+
+ Tom
+ Rhodes
+ Contribuido por
+
+
+
+
+ Contabilidad de procesos
+
+ Contabilidad de procesos
+
+ Contabilidad de procesos es un método de
+ seguridad en el cual un administrador puede llevar
+ seguimiento de los recursos del sistema utilizados,
+ su distribución entre los usuarios, brindar
+ monitoreo para el sistema y minimamente rastrear
+ los comandos de los usuarios.
+
+ Esto en realidad tiene sus puntos positivos y negativos.
+ Uno de los positivos es que una intrusión puede ser
+ minimizada al punto de entrada. Uno negativo es la cantidad
+ de logs generados por la contabilidad de procesos, y el
+ espacio en disco que requieren. Esta sección
+ llevará a un administrador a través de
+ las bases de la contabilidad de procesos.
+
+
+ Habilitando y utilizando la contabilidad de procesos
+
+ Antes de hacer uso de la contabilidad de procesos,
+ debe ser habilitada. Para hacer esto, ejecute el
+ siguiente comando:
+
+ &prompt.root; touch /var/account/acct
+
+&prompt.root; accton /var/account/acct
+
+&prompt.root; echo 'accounting_enable="YES"' >> /etc/rc.conf
+
+ Una vez habilitada, la contabilidad de procesos
+ empezará a seguir el rastro de estadísticas
+ del CPU, comandos, etc. Todos los logs
+ de contabilidad están en un formato ilegible
+ para humanos y pueden ser visualizados usando la utilidad
+ &man.sa.8;. Si se ejecuta sin opciones, sa
+ imprimirá información relativa al número
+ de llamadas por usuario, el tiempo total transcurrido en
+ minutos, tiempo total de CPU y de usuario
+ en minutos, número promedio de operaciones de E/S,
+ etc.
+
+ Para ver información acerca de los comandos
+ siendo ejecutados, uno podría usar la utilidad
+ &man.lastcomm.1;. lastcomm puede ser
+ utilizado para imprimir comandos ejecutados por usuarios
+ en &man.ttys.5;, específicos, por ejemplo:
+
+ &prompt.root; lastcomm ls
+ trhodes ttyp1
+
+ Imprimiría todos los usos conocidos de ls
+ por el usuario trhodes en la terminal
+ ttyp1.
+
+ Existen muchas otras opciones útiles y son explicadas
+ en las páginas de manual &man.lastcomm.1;, &man.acct.5;
+ y &man.sa.8;.
+
+
+
+
+
-