//\
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'.
/
\
/
\__
___________________________>>>>>>
/\/\/\<<<<<______________/