Redes en Linux.


 

     //\              DDDD      UUU
   //    \            DD DDD     UU
            eeee      DD  DDD    UU   UUU
          eeee ee     DD  DDD    UU   UU
         eeee   e     DD  DDD    UU   UU
         eeeeeee      DD  DDD    UU   UU
          ee          DD DDD     UU   UU
           eeeeeee    DDDDD      UUUUU

                                       Productions presenta...
 
 

_____________________________________________________________
|                                                            |
|                  *** REDES EN LINUX ***                    |
|                                                            |
|  --==  Autor: Eduardo (^eDU)                               |
|  --==  quaker@advancedsl.com.ar
|  --==  Fecha: 26/6/00                                      |
|  --==  Tema: Redes en Linux                                |
|                                                            |
|____________________________________________________________|
 

----=======+++++++++++ INDICE +++++++++++=======----

1.Introduccion
2.Una red en General
3.Instalando las placas de red
4.Conexion física
5.Configurando interfaces del server - Clases de IP
6.Configurando los clientes
7.Dandole nombres a las PC
8.Script de la interface en Linux
9.Testeando la red local
10.Unos minutos de descanso
11.Seguridad antes que nada
12.Un server FTP al pelo
13.Despedida y agradecimientos
14.Contacto

----=======+++++++++++ Introducción +++++++++========----

 Bueno, este es el primer texto que escribo sobre Linux. Como bien dice el titulo, el tema será el de redes en Linux, y al contrario de otras personas que escriben sus textos, tratare de extenderme lo mas que pueda dentro del tema, y a la vez dar ejemplos concretos, para que nada de lo aquí escrito este al pedo.

 Daré ejemplos prácticos, los cuales se puedan realizar según el caso del lector, y tratare de hacerme entender lo mejor posible. Tener en cuenta lo siguiente:

- Hay algunos que hacen la fama de que hacer una red con maquinas con linux es difícil, costoso, o lleva mucho tiempo, pero si van a dejar de leer este texto por ese motivo, aya ustedes, les digo que en un principio pensé eso, y ahora aquí me ven, escribiendo un texto que dice como hacerlo =)
Créanme, es bastante sencillo.

----========+++++++++++ Una red en General +++++++++++=========----

 En esta sección explicare un poco sobre los componentes de una red en general, para los que no sepan mucho de redes, y el significado de algunas palabras técnicas del tema.

 Para hacer una red local (LAN) necesitaremos obviamente de 2 equipos o mas, cada uno con sus respectivas placas de red, un cable de categoría 5, con conectores rj.45, y si vamos a conectar mas de 2 equipos utilizaremos un HUB.

 En nuestro caso vamos a conectar 5 equipos en red, por lo tanto utilizaremos 5 placas de red, y un HUB. Que es un hub? se preguntaran algunos, el HUB, también llamado 'unidad de centralización tiene diferentes entradas, en las que conectaremos los diferentes equipos, en palabras groseras, seria como la zapatilla que usamos para enchufar los cables de corriente, desde un solo toma de electricidad.

 Como les decía, en nuestro caso utilizaremos 5 equipos, por lo tanto tendríamos:

1 servidor (server-router-firewall)
4 clientes

El servidor es la pc a la que todas las demás se conectaran, funciona como router, ya que este mismo les dará acceso a otras redes, ya sea la internet, etc. Y funcionara como firewall, ya que controlara el trafico que va desde una red externa, hacia la red local.

 Entonces, vamos a definir el sistema operativo que utilizaremos en las 5 maquinas:

a. Server: Vamos a utilizar Linux en esta.
b. Cliente 1: Linux
c. Cliente 2: Linux
d. Cliente 3: Windows 98
e. Cliente 4: Windows 98

 Elegimos Linux como servidor, ya que podemos obtener un mejor rendimiento de la maquina, y precisamente necesitaremos de esto por las tareas que realizara el server.

 Otro cliente con Linux, y otros 2 clientes con Windows, ya que necesitamos un par de maquinas luego para probar nuestros ataques, etc.

 Hay algunas definiciones que seguramente habremos escuchado, dentro de la terminología de redes, aquí describiré las que utilizaremos:

 TCP/IP: Es el protocolo que utilizaremos en nuestro caso. Podemos decir que es el lenguaje por el cual las maquinas de nuestra red se entenderán, para comunicarse.

 Este protocolo en realidad son 2 en 1, ósea; TCP es el encargado de realizar las comunicaciones, y IP es el encargado de enviar los paquetes.

GATEWAY: En conceptos de Windows de seguro lo habremos visto como 'puerta de enlace, el GATEWAY es la dirección de salida hacia otra red, en nuestro caso, por medio del GATEWAY tendremos acceso a internet.

MODULOS: En linux y en el caso preciso de las placas de red, el modulo que utilizaremos para nuestra placa, no es mas que el controlador o driver (como gusten llamarlo) de nuestra placa de red. Recuerden que un modulo es algo separado del kernel.

ROUTER: Es la pc que da acceso a las demás a una red externa.

FIREWALL: Se instala en una pc, puede ser 'software' o 'Hardware' y se encarga de controlar el trafico entre las maquinas de la red local, y la red externa.
 

----========+++++++ Instalando placas de red +++++++++========----

 Bueno, entonces ya tenemos nuestras 5 PC con sus sistemas instalados correctamente. Primero vamos a las PCs con Windows ya que son las mas fáciles. Cuando detecte el Hardware, utilizamos el disco del proveedor, o el driver que trae Windows para dichas placas, una vez que estén instaladas, vamos a las maquinas con Linux.
Generalmente, no hay mucha historia acá, algunas distribuciones detectan la misma cuando se instala, pero bien, haremos lo siguiente:

# lsmod

Con este comando veremos una lista de los diferentes módulos instalados.
Si no se instalo el modulo para la placa, se vera algo así:

# lsmod
Module                  Size  Used by
8390                    5888   0  (unused)
bsd_comp                3568   0
ppp                    20428   0  [bsd_comp]
slhc                    4300   0  [ppp]
parport_pc              5588   0
parport                 6724   0  [parport_pc]

 Aquí podemos observar los diferentes módulos, y utilizados por diferentes dispositivos, lo que haremos es buscar los inutilizados (unutilised). Es muy posible que tengan algunos módulos sin utilizar, como 'slip' o 'lp'
pero no son esos los referenciados a la placa. Puede también, que no encontremos siquiera uno referenciado a la placa, pero igualmente, al instalar uno aparecerán dos elementos relacionados a la placa al instalar el modulo correcto.

 Lo que haremos para instalar el modulo, es el comando 'modprobe', con el mismo prueba si cierto modulo funcionara con el dispositivo, y de serlo, lo instala.

 Ahora bien, como saber que modulo usar, si tenemos algún tipo de placa en especial? lo primero que haremos, es probar si nuestra placa es compatible con las mas genéricas, para ello utilizaremos los módulos 'ne' y 'ne2k-pci'.

# modprobe ne2k-pci
ne2k-pci.c:vpre-1.00e 5/27/99 D. Becker/P. Gortmaker
http://cesdis.gsfc.nasa.gov/linux/drivers/ne2k-pci.html
ne2k-pci.c: PCI NE2000 clone 'RealTek RTL-8029' at I/O 0x6400, IRQ 10.
eth0: RealTek RTL-8029 found at 0x6400, IRQ 10, 00:00:21:D5:23:B6.

Si sale algo parecido a esto, es porque todo esta bien, y podemos continuar. De lo contrario deberíamos probar con otros módulos para encontrar el que se ajuste a nuestra placa de red.

# lsmod
Module                  Size  Used by
ne2k-pci                4384   1
8390                    5888   0  [ne2k-pci]
bsd_comp                3568   0
ppp                    20428   0  [bsd_comp]
slhc                    4300   0  [ppp]
parport_pc              5588   0
parport                 6724   0  [parport_pc]

 Como vemos, todo esta bien, el modulo 'ne2k-pci' se instalo correctamente. Los mismos pasos vamos a realizar en las otras PCs, en las de Windows ya sabremos como instalar cualquier pieza de hardware normal.

 Si con modprobe no funciono correctamente, podemos utilizar el comando 'modinst' y a continuación el modulo, pero no es necesario ya que 'modprobe'se encarga de la tarea de instalar el modulo.

----======+++++++++ Conexión física ++++++++++=======----

 Muy bien, entonces ya estamos felices, con nuestras placas instaladas. Pero antes de nada, es preferible realizar la conexión física. Para estas cosas siempre es bueno ser prolijo y organizado, así nos podemos evitar un dolor de cabeza en el futuro.

 Supongamos que tenemos un  cuarto de 5x10 nuestras 5 PCs, lo que haremos es colocar el hub en donde nos quede cómodo, y a la vez, de forma que los cables no se puedan pisar. Para ello, utilizaremos canaletas plásticas, las que se utilizan generalmente para cables de teléfono, o electricidad, si de esas que se pegan a la pared. Es bastante divertido crear una red si lo hacemos organizadamente, así que séanlo, y utilicen estas canaletas, no son caras, y si no tienen podemos utilizar tubos plásticos, etc.

Ya tenemos todo el material en mano, canaletas, cables, hub, PCs configuradas, así que vamos a empezar:

 Primero, pegaremos las canaletas a la pared, con una salida en donde haya una pc, a la vez, recuerden que todos los cables van al 'hub' así que, asegúrense de hacer algo cómodo para trabajar. Una vez puestas las
canaletas, conectamos todas las maquinas al 'hub' y tapamos las canaletas.

 No quedo prolijo? Damos una ultima repasada para confirmar que cada cable esta a donde tiene que estar, y no pasen cables de electricidad por la canaleta, ya que estos pueden causar interferencias.

 Una vez que tenemos todo en su lugar, podemos empezar a configurar cada PC.

--==++++++ Configurando interface del server y clases de IP +++++==---

 Muy bien, ahora vamos a configurar cada una de las PCs de la red. Habíamos dicho antes, vamos a configurar un server, que funcionara como 'router' de las demás maquinas, y a la vez de 'firewall' para evitar que algunos intrusillos nos molesten queriendo entrar a la red local. También configuraremos 4 clientes.

 Como ya sabemos, cada una de las maquinas tiene una ip diferente, la cual nosotros se la asignaremos. El punto es que no podemos ponerle una ip por defecto, debemos utilizar las especificas para redes privadas. Las mismas las presento en la siguiente lista, y las explico mas abajo:

================================================================
Clase                ip (desde / hasta)           Mascara de red
----------------------------------------------------------------
 A                0.0.0.0 / 127.255.255.255            255.0.0.0
 B              128.0.0.0 / 191.255.255.255          255.255.0.0
 C              192.0.0.0 / 223.255.255.255      255.255.255.255
================================================================

 Ahora bien, hay que tener en cuenta dos cosas importantes:

* La red que estamos armando, se conectara a internet?
* Cuantas PCs tendremos en nuestra red?

# Nuestra red tendrá salida a Internet, por lo tanto esta no es la tabla que necesitamos, ya que estas clases de ip, se utilizan en redes que no tienen salida a otras. Si no queremos conectar nuestra red a la internet, entonces elegimos una clase de ip de esta tabla.

# Nuestra red tiene solo 5 ordenadores, por lo tanto si no tuviera acceso a
internet lo mas conveniente seria elegir entre el rango de 192.0.0.1 hasta
192.0.0.6 por ejemplo. Igualmente si queremos podemos elegir cualquier ip
dentro del rango de 192.0.0.1 hasta 223.255.255.255, pero siempre utilizando
la 'mascara de red' correspondiente al rango de ip's que usamos.

# Nuestra red, si se conectara a internet, por lo tanto, utilizaremos ip's
de la siguiente tabla:

=============================================================
Clase              IP(desde/hasta)             Mascara de red
-------------------------------------------------------------
 A             10.0.0.0 / 10.255.255.255            255.0.0.0
 B           172.16.0.0 / 172.31.255.255          255.255.0.0
 C           192.168.0.0 / 192.168.255.255      255.255.255.0
-------------------------------------------------------------

# Nuestra red posee 5 ordenadores, por lo tanto seleccionamos la 'clase C'
con el rango entre 192.168.0.1 hasta 192.168.255.255.

  Ahora bien, como dijimos antes, que cunda el orden y la prolijidad.
Tomamos lápiz y papel y anotamos; al server (la de adelante) le ponemos
192.168.1.1, al cliente 1 (la de la izquierda) 192.168.1.2 al cliente 2 (la
de alla atrás) 192.168.1.3 y así a todas.

 Entonces nos dirigimos hacia el server, como ya tenemos configurada la placa de red, solo resta configurar la interface, entonces utilizaremos el comando "ifconfig".

# ifconfig eth0 up

 Este vez lo haremos así para comprobar que aparezca la interface ethernet, entonces, una vez hecho esto, haremos un 'ifconfig' para ver las interfaces:

# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:00:21:D5:23:B6
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          Interrupt:10 Base address:0x6400

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:3924  Metric:1
          RX packets:10 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0

Como aquí vemos, aparecen las interfaces 'loopback' y 'eth0'. Pero como aun no hemos configurado dicha interface, solo la hemos agregado, utilizaremos el comando 'ifconfig' nuevamente:

# ifconfig eth0 192.168.1.1 up
eth0      Link encap:Ethernet  HWaddr 00:00:21:D5:23:B6
          inet addr:192.168.1.1  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          Interrupt:10 Base address:0x6400

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:3924  Metric:1
          RX packets:10 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0

Aquí ya tenemos la interface eth0, con la ip que especificamos '192.168.1.1' y su apropiada 'mascara de red' 255.255.255.0.

 Esta pc ya esta lista, pero como vamos a utilizarla como router, ósea que esta pc será el 'gateway' para las otras, vamos a configurarlo para dicha función, para esto utilizaremos 'ipchains':

# ipchains -P forward DENY
# ipchains -A forward -s 192.168.1.0/24 -j MASQ -b

Con estas dos lineas le daremos acceso a internet por medio de este ordenador a las maquinas dependientes.

 Nótese que el uso de ipchains se limita a kernels desde 2.2.x en adelante, ósea que si tenemos un kernel desde 1.x hasta 2.0.x no habrá ipchains. Igualmente, no creo que ya queden muchas personas utilizando kernels
inferiores a 2.2.x.

 Ahora vamos a probar si la interface esta funcionando correctamente, para ello podemos hacer un ping de la siguiente forma:

# ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1): 56 data bytes
64 bytes from 192.168.1.1: icmp_seq=0 ttl=255 time=0.3 ms
64 bytes from 192.168.1.1: icmp_seq=1 ttl=255 time=0.1 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=255 time=0.1 ms

--- 192.168.1.1 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.1/0.1/0.3 ms

Excelente! la interface esta funcionando a la perfección!

Entonces ya es hora de configurar los clientes.

--===+++++++ Configurando interfaces de los clientes ++++++++===--

 Entonces ya estamos felices por que la interface mas importante ya esta funcionando, ya nos restan 2 interfaces de cliente en Linux, y otras 2 en Windows.

 Entonces nos dirigimos a uno de los clientes Linux, y hacemos lo mismo con el comando 'ifconfig':

# ifconfig eth0 192.168.1.2 up

Con esto creamos la interface eth0 con la ip: 192.168.1.2 y el netmask correspondiente (255.255.255.0).

 Ahora nos queda configurar la 'ruta del Gateway' para ello, utilizaremos el comando 'route':

# route add default gw 192.168.1.1 eth0

Ahora podemos hacer un 'ifconfig' para ver como quedaron las cosas por aquí;

# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:00:21:D5:23:B6
          inet addr:192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          Interrupt:10 Base address:0x6400

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:3924  Metric:1
          RX packets:10 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0

 Perfecto, todo en su respectivo orden, la ip '192.168.1.2', la mascara de red '255.255.255.0' y el gateway '192.168.1.1'. El 'gateway' no es mas que la ip del router, a esta se la llama 'ip-lan' o 'ip-interna'. Ahora, vamos al segundo cliente Linux, y realizamos la misma tarea.

 Muy bien, esto cada vez se pone mejor, ya nos queda configurar los clientes con Windows, es un poco mas molesto quizá por que debemos hacerlo desde un entorno gráfico, pero da igual, nosotros queremos una red.
Para esto hacemos lo siguiente en cada pc con Windows:

Vamos a: PANEL DE CONTROL>RED>
Primero y principal, nos aseguraremos que tenemos los protocolos necesarios, ya que el que utilizaremos, será el 'tcp/ip'. Como no instalamos un modem en estas maquinas clientes, solo aparecerá 'adaptador de red ...' en la ventana en la que estamos, buscamos ahí mismo un protocolo llamado
'tcp/ip>adaptador de red...' si no lo encontramos, vamos a:

AGREGAR>PROTOCOLO>MICROSOFT> y elegimos el 'tcp/ip'.

Otro protocolo no imprescindible, pero que quizá sea necesario 'NetBEUI', por las dudas instálelo. 'AGREGAR>PROTOCOLO>...'

Ahora buscamos el siguiente cliente en la misma ventana:'Cliente para redes Microsoft si no esta, hacemos como antes;

AGREGAR>CLIENTE>MICROSOFT>'cliente para redes Microsoft.

 Una vez instalados los protocolos y clientes necesarios, click sobre 'tcp/ip->Adaptador de red...' y propiedades. Donde dice Dirección IP', nos aseguramos que no este puesto para que se asigne sola, y ponemos la dirección ip que elegimos antes, '192.168.1.4' y click en 'Agregar'. Donde dice 'Mascara de subred' ponemos '255.255.255.0' al igual que esta en los ordenadores con Linux clientes.

 Ahora vamos a la solapa 'Puerta de enlace' y ponemos como nueva '192.168.1.1' y click en 'Agregar'.

 Ahora vamos a configurar los 'DNS' para la salida a internet, entonces, vamos a la solapa Configuración de DNS' y tildamos 'Activar DNS', mas abajo en la misma solapa, donde dice 'HOST' ponemos el nombre que le daremos a este equipo, para hacerlo de modo ordenado, le pondremos un nombre de host a cada pc en orden numérico, por ejemplo, los dos clientes Linux ya configurados, en nuestro caso los hemos llamado 'cliente-1' y 'cliente-2' por lo tanto a esta pc le llamaremos 'cliente-3' y al siguiente y ultimo
cliente, 'cliente-4'.

 Al lado del campo 'HOST' encontramos otro campo llamado 'Dominio', pondremos el dominio de nuestro 'ISP' (Servidor de internet) o podemos poner también el dominio del server linux, en nuestro caso, Destroyer77.com.ar.

 Pero igualmente,  utilizaremos el dominio de nuestro 'ISP' y pondremos: sinectis.com.ar (en este caso la cuenta es de Sinectis). Luego, mas abajo, donde dice orden de búsqueda, ingresamos los DNS 'Primario' y 'Secundario'. Que en nuestro caso serán:
primario; 200.16.183.2 secundario; 200.16.183.3, colocamos uno por vez,
clickeando en 'Agregar' para insertarlos en la lista.

 Los datos del DNS (ip's y dominios) los conseguimos de nuestro ISP, así que si no los tenemos, llamamos al servicio técnico de nuestro servidor, y consultamos los mismos.

 Por ultimo, ponemos 'ACEPTAR', y nos pedirá el CD de Windows para instalar los cambios, después reiniciamos.

----=======++++++++ Dándole nombres a las PC +++++++=======----

 Como han visto, recién le hemos dado un 'nombre' a las PC con Windows, por supuesto, los equipos con Linux tienen el suyo, por ejemplo, el servidor de esta red es 'Destroyer77' y utiliza el dominio 'com.ar' ósea que el nombre completo seria 'Destroyer77.com.ar'.
 Como habíamos quedado antes, nos encargaríamos de hacer todo organizadamente, asi que le dimos un nombre imaginario a las pc-clientes, por orden numérico, estos eran 'cliente-1', 'cliente-2', 'cliente-3', y
'cliente-4'.

 Ahora bien, vamos a ponerle estos nombres a las maquinas, pero no imaginariamente =)

 Primero vamos a editar el archivo '/etc./hosts'. En este archivo no solo le indicaremos al sistema el nombre de esa PC, sino que le diremos el nombre de las otras PC. También le diremos el nombre del 'Loopback' si este no esta dado (cosa muy rara actualmente).

 Si le echamos un ojo al '/etc./hosts' del server, veremos algo así:

# For loopbacking.
127.0.0.1               localhost
192.168.1.1             Destroyer77.com.ar Destroyer77

# End of hosts.

Como vemos, el 'loopback' ya esta nombrado como 'localhost'. Este nombre no debe ser modificado, puede traernos problemas con algunos programas si le ponemos otro nombre. por que? por que los mismos buscan el loopback como 'localhost' y no como '127.0.0.1', y si le modificamos el nombre, al buscar 'localhost' no encontrarían nada.

 Lo segundo que podemos ver, es la dirección 'Ip-Lan' del server, esta es '192.168.1.1' y tiene asignado el nombre Destroyer77, y su nombre completo 'Destroyer77.com.ar'.
 Como veremos, lo único que vamos a hacer en este equipo es 'decirle' al sistema cual es el nombre de los otros equipos de la red, y nos quedaría así:

# For loopbacking.
127.0.0.1               localhost
192.168.1.1             Destroyer77.com.ar Destroyer77
192.168.1.2             cliente-1
192.168.1.3             cliente-2
192.168.1.4             cliente-3
192.168.1.5             cliente-4

# End of hosts.

Ahora haremos el mismo trabajo en las demás PC, asignándole el nombre correcto a cada una, por ejemplo, el '/etc./hosts' de la maquina 'cliente-1' seria así:

# For loopbacking.
127.0.0.1                localhost
192.168.1.1              Destroyer77
192.168.1.2              cliente-1  # Este es el nombre de la PC
192.168.1.3              cliente-2
192.168.1.4              cliente-3
192.168.1.5              cliente-4

# End of hosts.


----=====++++++++ Script de la interface en Linux ++++++++====-----

  Seguramente nuestra distribución de Linux se encarga de levantar la interface 'loopback' (127.0.0.1) al iniciarse, a la vez, de seguro también arme las rutas especificas de cada interface.

 En muchas distribuciones tenemos programas que se encargan de darnos una mano para configurar los clientes de redes, y poner lo necesario en los archivos de inicio para que cuando bootee levante la interface eth0.

 Por ejemplo, si tenemos Slackware, podemos utilizar 'netconfig' y ahí asignar los datos 'ip' 'gateway' 'hostname' 'dns' y todo lo demás, esto nos puede alivianar el trabajo, por lo que no necesitaremos 'Scripts' que levanten eth0 como cliente al iniciarse. En redhat también se cuenta con este tipo de programas, si no me equivoco se llama 'netconfig' también, y en la mayoría de las distribuciones comerciales y amigables podemos
encontrarlas.

 Pero si somos fanáticos de 'las verdaderas'  distribuciones, Debian, slack.. y supongamos que no queremos utilizar programas que nos hagan la tarea sencilla (a la vez podemos tener mas control) utilizaremos un script que levante la interface al iniciar la pc.. este script lo hice yo y es medio 'caserito' pero funciona perfectamente ;)

 Utilizaremos un editor de textos, ya sea joe, pico, vi, emacs, etc. Creamos el archivo 'script-eth0', y en el ponemos lo siguiente:

Para el server:

#!/bin/sh
# Configuramos el 'loopback' si no lo hace solo al iniciar.
ifconfig lo 127.0.0.1
# Agregamos una ruta, con su respectiva mascara para el loopback.
route add -net 127.0.0.0 netmask 255.0.0.0 lo
# Si es preciso, hacemos que cargue el modulo para la placa.
modprobe ne2k-pci
# Ahora configuramos la interface de la ehternet (eth0)
ifconfig eth0 192.168.1.1 up
# Si lo necesitamos, agregamos la ruta respectiva (abajo explico)
route add -net 192.168.1.1 netmask 255.255.255.0
# Ahora nos ponemos como gateway
ipchains -P forward DENY
ipchains -A forward -s 192.168.1.0/24 -j MASQ -b
# Asegurarse que el archivo /proc/sys/net/ipv4/ip_forward contenga solo '1'
# Ahora un cartelito que nos avisa que se levanto la interface
echo "Levantando la interface eth0 (Servidor)"
# Fin del script.

Bueno, como verán acá apareció algo nuevo, el agregado de la ruta para eth0, ahora bien, en mi caso no necesite agregarlo, ya que lo hace solo cuando arranca, pero supongamos que nuestra distribución es muy 'hacelo por vos mismo' (de las buenas ;), en este caso tendremos que levantar el 'loopback' y 'eth0' y para cada una hacer su 'route'.

 Pero no se desesperen, para probar si necesitamos hacer la 'ruta' haremos así:

 Vamos al server, y una vez configurada la interface, ponemos:

# route add -net 192.168.1.1 netmask 255.255.255.0

Si nos sale la pantalla de error del comando 'route' diciendo en sus primeras lineas algo así:

route: netmask doesn't match route address
Usage: route [-nNvee] [-FC] [<AF>]           List kernel routing tables
       route [-v] [-FC] {add|del|flush} ...  Modify routing table for AF.

 Y abajo indicándonos como utilizar el comando, etc..
Esto quiere decir que no necesitamos utilizar el comando, entonces le quitaremos la linea que lo hace en nuestro 'script'.

 Luego chequearemos si levanta automáticamente el 'loopback' (de seguro lo hace, y si lo hace, de seguro no necesitaremos realizar el 'route' para eth0) lo hacemos así:

# ping 127.0.0.1

Si contesta los 'pings' es por que levanta el 'loopback' así que lo quitamos de nuestro 'script'.

 Entonces ya tenemos armado nuestro script para el servidor, guardamos el archivo, y lo ponemos por ejemplo, en '/usr/local/bin'. Luego le damos los permisos de ejecución, de esta manera:

# chmod u+x /usr/local/bin/script-eth0

Si tenemos una consola 'coqueta' con colores para los tipos de archivos, de seguro el color de nuestro script, será verde =)

 El ultimo paso, será hacer que lo ejecute al iniciar, para esto, vamos a '/etc/rc.d/' (en slackware, redhat, etc.). Editamos el archivo 'rc.local' y agregamos esta linea:

# script para levantar eth0
/usr/local/bin/script-eth0

Guardamos y cerramos. Si lo creemos conveniente, podemos poner para que cargue el script en algún otro archivo de inicio, ya sea, rc.inet1 o 2, etc.

 Ahora nos queda crear los scripts para los clientes Linux, y suponiendo que no necesitamos cargar el 'loopback' ni las 'rutas' quedara de la siguiente manera: (en /usr/local/bin)

#!/bin/sh
# Si es necesario, ponemos para que cargue el modulo
modprobe ne2k-pci
# Ahora la interface eth0
ifconfig eth0 192.168.1.2 #(cliente-1)
# Ruta al Gateway
route add default gw 192.168.1.1 eth0
# Ahora un aviso para ver al iniciarse
echo "Levantando interface eth0 (cliente-1)
# Fin del script

Podemos hacer que al arrancar, nos de datos sobre la interface eth0, de manera tal que podamos saber si levanto bien la interface:

ifconfig eth0

Agregamos esa linea al final de nuestro script, o suplantamos por el aviso
que pusimos al final.

RECOMENDACION: Sean ordenados en este tema, y piensen que puntos realizar primero y después. las cosas que hace por defecto cuando arranca, las que tenemos que hacer que haga, etc.

En nuestro caso:

# Hace solo al iniciar:
loopback y route
route de eth0

# No hace solo al iniciar:
cargar el modulo para la placa (ne2k-pci)
Levantar la interface eth0

 Una vez finalizados los scripts, nos aseguramos que en cada pc, el script tenga permisos de ejecución y que sea invocado al inicio por el archivo /etc/rd.c/rc.local, y entonces reiniciamos el sistema. Si todo anda bien,
cuando inicie la maquina vamos a ver el cartel indicando que se instala el modulo para la placa, se levanta la interface, etc. (obviamente, y ningún cartel de error )

 Una vez que reiniciamos las 5 PCs, y no aparecieron problemas, vamos a testear nuestra red local!  =)
 

----=====+++++++++++ Testeando nuestra red local ++++++++++======----

 Todo marcha perfecto, y ahora nos queda la ultima jugada, probar que todo este trabajo funcione. Antes que nada, si algo no marcha bien, no recurras a patear todos los equipos, ni nada por el estilo, con paciencia se logra todo. (igual de seguro que anda todo bien! =)

 El primer paso, vamos al server, entonces en la consola vamos a hacer un ping a cada una de las PCs, y si recibimos respuesta de las mismas, es porque esta PC se comunica con las demás. Entonces hacemos:

# ping 192.168.1.2

y así, hacemos un ping a cada uno de los clientes de nuestra red, si recibimos respuesta, todo marcha bien, y podemos probar hacer pings desde otras maquinas. Si hasta acá salió todo como debe ser, prepárese un café,
encienda un cigarrillo (si fuma) y pase a la sección 'unos minutos de descanso' y alégrese por que todo su esfuerzo tuvo un final feliz! jeje =)

 Si por lo contrario, no recibimos respuesta de ninguna de las maquinas, lo principal, revise TODAS las conexiones físicas, cables, etc, que todo este en su lugar, que cada punta este conectada donde debe, que el hub este funcionando, etc.

 Una vez verificado esto, cerciórese que en el server, este bien configurada la interface eth0, para esto, escriba:

# ifconfig eth0

Cerciore que el mensaje que obtenga sea este:

eth0      Link encap:Ethernet  HWaddr 00:00:21:D5:23:B6
          inet addr:192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          Interrupt:10 Base address:0x6400

En este mensaje fíjese lo siguiente:

La inet addr:(IP) esta bien indicada? '192.168.1.1'
El netmask:(mascara de red) esta bien indicado? '255.255.255.0'
En los demás ordenadores, esta bien indicado el gateway?
En los demás ordenadores, indico bien las IP y Mascaras de red?
Recuerde que debe utilizar la misma mascara de red en todas las PCs, ya que
todas las IP son de clase C y la clase C utiliza la mascara '255.255.255.0'

 Si no aparece ni siquiera la IP o algo por el estilo cuando hacemos 'ifconfig eth0' probemos echarle un ojo a la tabla de módulos, para ello hacemos un 'lsmod' y si obtenemos lo siguiente:

# lsmod
Module                  Size  Used by
ne2k-pci                4384   1
8390                    5888   0  [ne2k-pci]
bsd_comp                3568   0  (unused)
ppp                    20428   0  [bsd_comp]
slhc                    4300   0  [ppp slip]
parport_pc              5588   1
parport                 6724   1  [lp parport_pc]

Observamos arriba, vemos que el modulo ne2k-pci esta instalado (1ro y 2do)

 Entonces, si no tenemos los dos módulos instalados, utilizamos como antes dijimos, 'modprobe ne2k-pci' (o el modulo de nuestra placa) y vemos si lo instalo, si lo hizo, corregimos nuestros scripts, para que carguen todo como debe ser al iniciar, y reiniciamos la pc.

 Volvemos a testear el funcionamiento, y si anda relájese y pase a la
próxima sección =)

----=====+++++++++ Unos minutos de descanso ++++++++++======-----

  Bueno, ya es todo un alivio, tenemos nuestra red local andando de maravilla, y nos podemos sentir orgullosos de nuestro trabajo bien hecho.

 Pero antes de pensar en seguridad, etc. vamos a descansar, a la vez, podemos testear el funcionamiento correcto de la red mientras lo hacemos. para eso, podemos probar un 'Quake Multiplayer' en nuestra propia red =)

 Como hacemos? Fácil, ya sabemos las ip de cada pc, entonces en una PC cargamos un server dedicado por ejemplo, y desde las otras maquinas nos conectamos, y si tenemos a algún valiente colaborador a mano, lo hacemos jugar un ratito =o)

 Si no son fanáticos del juego, podemos  probar mandar mails a los usuarios de las otras pc, por ejemplo, vamos a la pc 'cliente-1' entonces mandamos un email utilizando 'sendmail' o programa cual sea, y lo mandamos a la dirección 'root@cliente-3.com.ar' (si es el dominio que elegimos) entonces vamos corriendo al cliente 3, nos logueamos como 'root' y chequeamos el mail. Divertido no? =)

 Podemos también probar ataques hacia las pc con Windows para reírnos un rato, por ejemplo, compilamos algún exploit, o nuke, etc. y le damos a alguna de las pc con Windows, y probamos el poder de Linux ! jaja

 Otra cosa divertida, podemos probar todos nuestras debilidades en el sistema, como también experimentarlos para aprender mas sobre seguridad. Por ejemplo, cargando un servidor X en una maquina, y desde otra tratando de atravesarlo para ingresar al sistema 'remoto'.

 Bueno, cuando se canse de jugar y testear su 'red local' vamos a proceder a la seguridad de nuestra red.
 

----=====++++++ La seguridad antes que nada +++++++=====----

 Como dicen algunos especializados en el tema: 'Lo mas seguro es la inseguridad', vamos a intentar hacer nuestro sistema lo mas seguro posible, de modo que para cuando nos conectemos a la internet, ningún pishuelo este seguro de poderse aprovechar de nuestra 'inseguridad' ;)

 Entonces nos haremos las siguientes preguntas:

- Brindaremos algún servicio a la red local, que no queremos compartir con la red externa? (en este caso internet)

- Hay algún tipo de protocolo, cuyos paquetes queremos que sean rechazados por el router, para que ni siquiera puedan 'oler' la red local?

- Hay algún tipo de limitación que queremos darle a los clientes cuando tengan acceso a la red externa?

 Para realizar la función de 'firewall' en el server, entre comillas porque no será un 'firewall' en realidad, utilizaremos dos herramientas que Linux trae consigo mismo, y que son muy útiles y precisas al momento de
brindarnos seguridad.

A. Primero y principal, TCP WRAPERS :
-------------------------------------

 Supongamos que queremos darle a nuestros equipos clientes de la red local, servicio de ftp y telnet, pero a la vez, no queremos darle dicho servicio a la red externa, la internet. Entonces vamos al servidor, y utilizamos algún editor de textos, ya sea, joe, vi, emacs, pico, etc, y editamos el archivo:
'/etc/inetd.conf', en el mismo, comentaremos los servicios que 'NO BRINDA A NADIE' con un '#' (sin comillas) entonces, nos quedara así:

# echo          stream  tcp     nowait  root    internal
# echo          dgram   udp     wait    root    internal
# discard       stream  tcp     nowait  root    internal
# discard       dgram   udp     wait    root    internal
# daytime       stream  tcp     nowait  root    internal
# daytime       dgram   udp     wait    root    internal
# chargen       stream  tcp     nowait  root    internal
# chargen       dgram   udp     wait    root    internal
# time   stream  tcp     nowait  root    internal
# time   dgram   udp     wait    root    internal
 ftp    stream  tcp     nowait  root    /usr/sbin/tcpd  wu.ftpd -l -i -a
 telnet stream  tcp     nowait  root    /usr/sbin/tcpd  in.telnetd
# telnet  stream  tcp     nowait  root    /usr/sbin/tcpd  in.telnetsnoopd
#smtp  stream  tcp     nowait  root    /usr/sbin/tcpd  sendmail -bs
#comsat        dgram   udp     wait    root    /usr/sbin/tcpd  in.comsat
#Shell  stream  tcp     nowait  root    /usr/sbin/tcpd  in.rshd -L
#login   stream  tcp     nowait  root    /usr/sbin/tcpd  in.rlogind
#exec   stream  tcp     nowait  root    /usr/sbin/tcpd  in.rexecd
#talk   dgram   udp     wait    root    /usr/sbin/tcpd  in.talkd
#ntalk  dgram   udp     wait    root    /usr/sbin/tcpd  in.talkd
#keklogin        stream  tcp     nowait  root    /usr/sbin/tcpd  rlogind -k-x
#kshell stream  tcp     nowait  root    /usr/sbin/tcpd  rshd -k
#kerbupdate      stream  tcp     nowait  root    /usr/sbin/tcpd  registerd
#kpasswd        stream  tcp     nowait  root    /usr/sbin/tcpd  kpasswdd
# pop2  stream  tcp     nowait  root    /usr/sbin/tcpd  in.pop2d
#pop3   stream  tcp     nowait  root    /usr/sbin/tcpd  in.pop3d
#pop3   stream  tcp     nowait  root    /usr/sbin/tcpd  ipop3d
#imap2   stream  tcp     nowait  root    /usr/sbin/tcpd  imapd
#uucp stream  tcp     nowait  uucp    /usr/sbin/tcpd  /usr/lib/uucp/uucico
#tftp   dgram   udp     wait    nobody  /usr/sbin/tcpd  in.tftpd
#finger stream  tcp     nowait  nobody  /usr/sbin/tcpd  in.fingerd -u
#systat stream  tcp     nowait  nobody  /usr/sbin/tcpd  /bin/ps -auwwx
#netstat        stream  tcp     nowait  root    /usr/sbin/tcpd  /bin/netstat
# Ident service is used for net authentication
#auth   stream  tcp     wait    nobody  /usr/sbin/in.identd     in.identd -w-t
#bootps dgram   udp     wait    root    /usr/sbin/in.bootpd     in.bootpd
# netbios-ssn     stream  tcp     nowait  root    /usr/sbin/smbd  smbd
# netbios-ns      dgram   udp     wait    root    /usr/sbin/nmbd  nmbd
#rstatd/1-3     dgram   rpc/udp wait    root    /usr/sbin/tcpd  rpc.rstatd
#rusersd/2-3    dgram   rpc/udp wait    root    /usr/sbin/tcpd  rpc.rusersd
#walld/1        dgram   rpc/udp wait    root    /usr/sbin/tcpd  rpc.rwalld
# End of inetd.conf.

Tenga presente que según en que sistema, y con que esta viendo el texto, pueden salir 'movidas' las lineas, pero al editar el archivo, estará viendo correctamente todo, y sabrá que solamente debe dejar sin comentar (ftp y telnet) (no deje sin comentar el telnetsnoop)

 Muy bien, entonces ya indicamos que servicios brindaremos, entonces es hora de indicar 'A quien le brindamos, y a quienes no le brindamos' estos servicios.

  Ahora editamos el archivo, /etc/hosts.deny. En el mismo indicamos a quien le negamos el uso de los servicios, y estos son a TODOS, entonces nos quedara así:

#
# hosts.deny    This file describes the names of the hosts which are
#               *not* allowed to use the local INET services, as decided
#               by the '/usr/sbin/tcpd' server.
#
# Version:      @(#)/etc/hosts.deny     1.00    05/28/93
#
# Author:       Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org
#
#
in.telnetd: 0.0.0.0/0.0.0.0
in.ftpd: 0.0.0.0/0.0.0.0
# End of hosts.deny.

También podemos utilizar la regla: 'ALL:ALL', si queremos denegar TODOS los servicios a TODAS las personas. (inet y local)

 Ahora bien, necesitamos indicarle al sistema, que hay ciertos equipos a los que SI les dejamos utilizar los servicios, entonces editamos el archivo '/etc/hosts.allow' y nos quedara así:

# hosts.allow   This file describes the names of the hosts which are
#               allowed to use the local INET services, as decided by
#               the '/usr/sbin/tcpd' server.
#
# Version:      @(#)/etc/hosts.allow    1.00    05/28/93
#
# Author:       Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org
#
#
in.telnetd: 192.168.0.0/255.255.255.0
in.ftpd: 192.168.0.0/255.255.255.0
# End of hosts.allow.

Supongamos que queremos habilitar el servicio de FTP para toda la internet, entonces, en el hosts.deny, no pondríamos restricción al ftp, y en el hosts.allow utilizaríamos la regla 'in.ftpd: 0.0.0.0/0.0.0.0' con eso ya
toda la internet tiene acceso a nuestro servidor ftp, al igual que la red local.

  Aclaro que algunos servicios, ya sea sendmail, los rpc, etc. No son desactivados simplemente comentándolos del 'inetd.conf', tenemos dos caminos:

1. El primero es desactivar a la fuerza el mismo, para ello, si sabemos que al inicio el sistema busca un archivo '/sbin/rpc.portma' y si lo encuentra, lo ejecuta para arrancar el deamon, lo mas útil que podemos hacer, es cambiarle el modo al archivo, ósea, si este archivo dejara de ser binario, lo encontraría, pero no lo podría ejecutar ;)

 Entonces vamos a escribir el siguiente comando:

# chmod 640 /sbin/rpc.portmap

Ya ven? Aprendimos como cerrar algunos deamons molestos que no se cierran por las buenas, y lo hicimos a lo 'wapo' pero este no se va a dejar pasar por arriba así nomas, y nos va a seguir molestando con una o dos lineas de 'connection refused' al iniciar, pero no le den importancia, ya que el objetivo principal lo cumplimos. =)

 A esta técnica que aprendimos, le vamos a sacar el jugo un poquito mas, vamos a ir a /etc/rc.d/ y vamos a ver cuales otros 'daemons' siguen molestando, estos estarán como binarios, y llevaran nombres como rc.httpd o
rc.irc, etc. Mucho ojo, antes de darle el 'chmod 640' a algún deamon, controlemos que sea en realidad un deamon y no un script de inicio!, para esto, editemos los archivos que nos den duda.

 Ahora buen, ya tenemos controlado el acceso a los servicios, un dolor de cabeza menos para el futuro, pero seria importante 'filtrar' ciertas cosas molestas que puedan llegar al router. En algunos textos leí que recomiendan filtrar todos los paquetes 'icmp' para prevenir ataques, como por ejemplo, un simple nuke, pero como el kernel de linux filtra 'icmp echo' por defecto, (por eso nunca vamos a poder nukear a un Linux en el irc =), no será muy necesario filtrar paquetes 'icmp'.

 Para realizar el filtrado de molestias, utilizaremos la tan útil herramienta 'ipchains', y como esta nos permite filtrar por ejemplo, paquetes de determinado protocolo, que lleguen por ejemplo, al puerto 6667
hasta el 7000, cosa que nos ayuda si tuviéramos un servidor irc por ejemplo.

 Les enseñare algunas formas de uso básicas de esta herramienta, ya que si me pongo a desarrollarla me llevaría unas 50 o 100 lineas, mas, y para eso todo usuario cuenta con el ipchains-howto en español (www.insflug.org)

 B. Utilización de ipchains:
----------------------------

Partamos con un ejemplo, el cual explicare parte por parte mas abajo:

# ipchains -A input -s 0.0.0.0/0.0.0.0 -p tcp -j DENY

* ipchains: El comando que invoca a la utilidad ipchains
* -A input: El parámetro que le dice a ipchains, que agregue una cadena.
* -s blabla: El parámetro -s (source) que significa 'origen', de donde tienen que venir los paquetes para que sean después tratados. En este caso, como se darán cuenta, le ordenamos a ipchains que trate a los paquetes que vengan de cualquier IP, ya que 0.0.0.0/0.0.0.0 significa a TODOS.
* -p tcp: -p es para indicar el protocolo, y como vemos, tcp es el protocolo que deseamos filtrar.
* -j DENY: Indica como tratar los paquetes que vienen hacia nosotros, en este caso, DENY hace que los paquetes no se acepten, se rechacen.

 Con un poquito de uso de imaginación, ya podremos evitar por ejemplo, que la gente de las afueras utilice el servicio 'sendmail' y dejar habilitado el mismo para la red local.

 Si bien pudimos insertar una cadena de ips, podremos quitarla cambiando el
'-A' por un '-D'.

 Ahora otro ejemplo bueno.

# ipchains -A input -s 200.16.0.0/24.24 -p ALL -j DENY

De esta manera, estaríamos  rechazando paquetes, de TODOS los protocolos, provenientes desde las IP que empiecen con 200.16 y terminen con cualquier numero sea, eso es útil si nuestro objetivo es evitar el acceso de todos los usuarios de un servidor de internet por ejemplo.
 Ahora bien, supongamos que ya tenemos una buena cadena de ipchains que se encarga de mantener fuera a los intrusos que vienen desde la internet. Pero así mismo, teníamos pensado utilizar nuestra red local para un Cyber-Bar, y queremos que la maquina 'cliente-2' no tenga acceso a la pagina 'www.sexo.com' por que hemos instalado dicha maquina como 'maquina para menores de 18'. Podemos utilizar ipchains de manera que deneguemos el acceso a dicha pagina, a la pc 'cliente-2' de la manera siguiente:

# ipchains -A input -s cliente-2.com.ar -d www.sexo.com -p www -j DENY

 Aquí vemos un nuevo parámetro '-d www.sexo.com', el mismo indica que todas las peticiones desde la pc 'cliente-2.com.ar' (ósea, cliente-2 es el host de la pc, y Destroyer77.com.ar es el dominio, a la vez, host del
servidor) y que vayan hacia www.sexo.com por medio del protocolo http (www) sean denegados, de manera que los menores de 18, en esa pc, no podrán acceder a esa pagina =)

 Una función que podemos utilizar, es indicarle un rango de puertos, por ejemplo:

# ipchains -A input -s 0.0.0.0/0.0.0.0 -p tcp -d
192.168.1.2/24 1024:2000 -j DENY

De esta manera, denegaremos el acceso desde TODA la red externa, hacia las maquinas de la red internet, por el protocolo TCP, que recaigan en los puertos desde el 1024 hasta el 2000

 No les parece una herramienta muy útil esta? y también podemos filtrar los diferentes tipos de paquetes ICMP, estos son en los que MAS hay que hacer puntapié. Un ejemplo concreto:

# ipchains -A input -s 0.0.0.0/0.0.0.0 -d 192.168.1.2/24 -p icmp 0

Con esto filtraríamos todos los paquetes icmp y con el 0 se refiere a 'echo reply' ósea, que filtraríamos los icmp del tipo 'echo reply' de esta manera podemos filtrar diferentes tipos de icmp, para obtener la lista, utilizar el comando 'ipchains -h icmp'
 

----=======+++++++ Un server FTP anónimo al pelo! +++++++=======----

 Bueno, ahora que ya estamos casi cancheros con el manejo de nuestra red local, podemos aprovechar ese inservible servidor de 'FTP' que trae nuestro linux, pero no lo usamos, y algunos ni saben que esta ahí.

 Como ya sabrán estoy hablando del 'wu-ftp'. Algunos usuarios de Linux ya mas experimentados se habrán avivado de no instalar este servidor, así que, si no lo tienen, pueden instalarlo desde el cd-rom de su distribución, o bien obtenerlo de la red, buscando en algunos de los links nombrados en el
apartado 'Links'.

 Como se imaginaran, este servidor de ftp dará servicio solo a la red local. Entonces vamos a comenzar el trabajo:

 Primero vamos a activar este servicio, en el archivo '/etc/inetd.conf' descomentando el mismo.Como ya vimos en la sección de seguridad, vamos a realizar las modificaciones necesarias sobre 'tcp wrapers' para no dar acceso a los de afuera. Una vez hecho todo esto, vamos a decirle al sistema, que tipo de usuarios, no pueden loguearse, esto mas que todo por seguridad, entonces, editamos el archivo '/etc/ftpusers', y agregamos los siguientes a la lista:

sys
bin
daemon
root

Ahora, vamos a chequear que la cuenta del usuario 'ftp'. La cuenta que utiliza el 'daemon'. Vamos a editar el archivo '/etc/passwd' veremos una de las lineas, como esta, si todo esta en orden:

ftp:*:100:101::/home/ftp:/bin/false

Cada elemento dignifica:

ftp : El nombre del usuario.
 *  : Prohibe que una persona se loguee con esa cuenta.
100 : UID del usuario ftp.
101 : Grupo al que pertenece el usuario.
/home/ftp : Es el directorio raíz del usuario.
/bin/false: Es la 'shell' que utilizara el usuario.

 Quizá se pregunten que clase de shell es esa '/bin/false', no es una shell, es simplemente una forma de 'truquear' la entrada del usuario, fíjense, si no tienen este archivo '/bin/false' lo deben crear así con este
contenido:

#!/bin/sh
exit 1

Listo, y como ven lo que hace es ejecutar el comando 'exit', y no le da en realidad una shell propiamente dicha.

 Una vez comprobado esto, cercioramos que el directorio '/home/ftp' exista, y si existe, vamos a darle los retoques necesarios.

 Tenemos que indicarle al sistema que este directorio es del 'root', y con acceso de escritura prohibido para todos los usuarios, pero si con acceso de lectura, para esto le damos 'chmod 550' (chmod 550 /home/ftp).

 Quizás escucharon por ahí que este directorio debe ser apropiado por el usuario 'ftp' pero esto es un grave error, que nos puede dejar algún 'agujerito' en cuanto a seguridad. Así que no le den importancia, y hagan como yo les dije.

 Mas directorios dentro de /home/ftp:

1. /home/ftp/bin : Este directorio también tendrá las mismas características que el anterior, apropiado por el usuario 'root' y pondremos aquí todos los archivos ejecutables que dejamos para que utilicen los usuarios, por ejemplo
podemos poner:

compress
cpio
gzip
ls
sh
tar

 Todos estos archivos con en 'chmod 111' ya que no queremos que se puedan escribir, solo ejecutar. Hay que tener cuidad con los que ponemos, por que pueden aprovecharse de estos los usuarios que anden haciendo sus practicas de hacker =)

2. /home/ftp/etc : Este directorio también tendrá 'chmod 550'. En el pondremos los archivos de configuración, libs, etc:

group
ld.so.cache
passwd
pathmsg

 Como siempre, todos con 'chmod 111', con la menor información posible, por ejemplo:

group:{
       root::0:
       staff:::
       }

passwd:{
        root:*:0:0:root::
        ftp:*:10::Anonymous FTP::
        }

El archivo 'pathname' contiene un mensaje para cuando el usuario ingresa un comando erróneo. Existe un mensaje por defecto, pero lo podemos modificar por algo así:

'Comando incorrecto, vuelva a intentar.. mucho Cute-FTP pibe..'

O lo que se nos ocurra, algo divertido, estúpido, o serio, todo sirve =)

El archivo ld.so.cache contiene nombres de las librerías, no lo modifiquen si no es muy necesario.

3. /home/ftp/lib : Obviamente acá vamos a poner las librerías, y como siempre, chmod 550. Los links hacia las librerías aquí dentro, conservan todos los permisos, pero las librerías, solo lectura. Por ejemplo:

ld-2.0.5.so
ld-linux.so.2 -> ld-2.0.5.so

4. /home/ftp/pub : Este directorio debe ser apropiado por el usuario 'ftp' no por el 'root', con acceso de solo lectura y ejecución para los archivos aquí dentro, con 'chmod 555'. Por supuesto aquí vamos a poner los archivos que querríamos.

5. /home/ftp/incoming : Esta es una opción para mantener seguro el ftp, vamos a crear este directorio, y le damos permiso de escritura, aquí podrán los usuarios subir archivos, y que hagan lo que quieran con los que hay acá, total a nosotros nos interesan los archivos anteriores. Igualmente podemos hacer que solo algunos de los usuarios accedan al mismo dándole propiedades de 'acceso', pero eso ya nos costaría unos 20 reglonsitos mas, y nos estaríamos alejando demasiado del tema 'Redes en Linux'.

 Ahora podemos editar los 'mensajes' del servidor en el directorio '/etc/msgs' y reiniciando el inetd con 'killall -HUP inetd' ya tendremos montado un servidor FTP para los usuarios de nuestra red local =)

 Ahora bien, se preguntaran a que se debe esto de irse tanto por las ramas con el tema de un servidor ftp, en un texto que es específicamente de 'redes en linux' ?

 La respuesta es que esta es una manera de mostrarles que cuando tengan la posibilidad de armar esta red local, con los conocimientos de seguridad, y filtrado, podemos tener una red, ofreciendo servicio FTP para 'adentro, afuera o ambas cosas'. Así como podremos tener servidores de mail, irc, http, etc. Justamente, el servicio que iba a comentar era el de 'irc' pero me pareció algo mas serio el servidor 'ftp'. Pero de seguro estaré creando un texto bastante completo sobre un servidor 'irc' en el futuro =).

 Espero que sepan sacarle el jugo, ya que con lo explicado sobre 'ipchains' podemos controlar el uso de este servicio, como el de cualquiera que querríamos utilizar en nuestra red local con Linux =)


----=======+++++++ Despedida y agradecimientos ++++++++========----

 Bueno, llegamos al fin de este texto, me llevo exactamente: 6 Hs en escribirlo, espero que hayan aprendido mucho de aquí, y que sepan disculparme si metí la pata en alguna parte =)
 Quisiera agradecerle a la gente que si ayuda a otros con respecto a linux, por que si hay algo que me gusta, es explicarle a otro sobre algo que si se. Y espero que ustedes lo hagan también! =)

 SALUDOS A LA GENTE DEL CANAL #Linux de irc.ciudad.com.ar que muchos de ahí compartieron conmigo sus conocimientos. ADIOS! =)

                                      by ^eDU

---- CONTACTO ------------------------------------------------------

irc: CIUDAD INTERNET:
     - irc.prima.com.ar
     - irc.ciudad.com.ar
     - conectados.ciudad.com.ar
       #Linux (^eDU)

mail: quaker@sienctis.com.ar
icq: 32879093

 ------------------------------ GrAcIaS por leerme! -----------------
 \        Este texto esta dedicado a mi amigo 'Tito'.               /
  \                                                                /
   \__ ___________________________>>>>>> /\/\/\<<<<<______________/