lunes, 24 de febrero de 2014

Cómo saber lo que se ejecuta en el background en cada terminal


Para conocer los procesos debemos instalar el paquete jobs y ejecutar este comando. O sea:
1. Instalamos el paquete jobs
En distros como Debian, Ubuntu u derivados sería ya está instalado por defecto.
En ArchLinux o derivados sería:
sudo pacman -S jobs
2. Luego, ejecutamos jobs en la terminal:
jobs
Nos aparecerá algo como esto:
comando-jobs

O sea, nos aparece lo que está en ejecución en esa terminal.
En fin, espero que le sea de interés a algunos.
Saludos

Cómo enviar comandos/procesos al background o segundo plano


Muchas veces cuando trabajamos en una terminal deseamos ejecutar un comando pero, luego poder cerrar la terminal y que lo que ejecutamos NO se cierre, por ejemplo, ejecutar en la terminal un script y luego cerrar la terminal pero que el script siga ejecutándose … ¿cómo lograr esto?
Para lograr esto simplemente debemos poner un & al final de la línea, por ejemplo, tenemos un script llamado wifi-log.sh y para ejecutarlo y que se quede en el background sería:
./wifi-log.sh &
Vean acá un screenshot:
comando-en-background
Aquí vemos claramente que luego de que ejecutamos la línea de arriba no aparece nada más, excepto [1] 29675 ¿Qué significa esto?
29675 es el PID (número de proceso) del script que ejecutamos, o sea, si deseamos matar el script y que deje de ejecutarse simplemente ponemos:
kill 29675
Y listo, se dejó de ejecutar.
O sea y a modo de resumen, para mandar al background (o segundo plano) un proceso (comando, varios comandos o script) debemos poner al final de la línea & y luego presionar Enter

Comandos para comprobar si un puerto está abierto en nuestra PC/Servidor

En caso de que no deseen hacer todo un scan, sino que simplemente deseen saber si en X ordenador/servidor está abierto un determinado puerto, sería así:
nmap {IP_O_DOMINIO} -p {PUERTO} | grep -i tcp
Ejemplo:
nmap localhost -p 22 | grep -i tcp
O bien:
nmap 127.0.0.1 -p 22 | grep -i tcp
Lo que hace esto es simple, pregunta a la IP o Host si el puerto dado está abierto o no, luego el grep filtra y solo muestra la línea que desean leer, la que les indica si está abierto (open) o cerrado (closed) ese puerto:
nmap
Pues… sí, nmap (Herramienta de exploración de redes y de sondeo de puertos) nos sirve pero, hay aún otras variantes donde hay que teclear menos :)

nc

nc o netcat, es una opción mucho más simple para saber si un puerto está o no abierto:
nc -zv {IP_O_DOMINIO} {PUERTO}
O sea:
nc -zv 192.168.122.88 80
Aquí tienen un screenshot haciendo una prueba a un puerto que sí está abierto (80) y otra a otro puerto que no lo está (53):
nc
El -zv lo que hace es simple, la v nos permite ver si está abierto o no el puerto, mientras que la z cierra la conexión tan pronto se comprueba el puerto, de no poner la z entonces tendríamos que hacer un Ctrl + C para cerrar el nc.

telnet

Esta es la variante que hace un tiempo usaba (por desconocimiento de las antes mencionadas), a su vez telnet nos sirve para mucho más que solo saber si un puerto está abierto o no.
telnet {IP_O_HOST} {PUERTO}
Aquí un ejemplo:
telnet 192.168.122.88 80
El problema de telnet es el cierre de la conexión. O sea, en determinadas ocasiones no podremos cerrar la solicitud de telnet y nos veremos obligados a cerrar esa terminal, o de lo contrario en otra terminal hacer un killall telnet o algo similar. Es por eso que evito usar telnet a no ser que me sea muy necesario.

Ver puertos abiertos con NMap

Buen día.  Hoy les traigo unos pequeños tips,  vamos a ver los puertos abiertos que tengamos.  Para ello haremos uso de NMap por lo que procedemos a instalarlo.
En Debian/Ubuntu:
# apt-get install nmap
luego para ver los puertos abiertos en tu pc.  (En local)
#nmap localhost

Estos son los puertos que están abiertos en local, o sea que no necesariamente salen a internet.. En mi caso están abiertos el 22 que es de ssh y el 25 de smtp.
Para ver los puertos abiertos en mi pc pero en internet hago el mismo nmap pero con mi dirección ip

En mi caso sale que el host esta prendido pero no ve ningún puerto abierto (solo escanea 1000). Esto se debe a que aunque el puerto está en mi pc abierto, el Router lo está filtrando.
Pero si abro el puerto respectivo en el router…

El hecho de que puedan ver que puertos están abiertos en mi pc supone algún riesgo en mi máquina. Asi que voy asegurar un poco mi servidor ssh. Para ello voy a cambiar el puerto por defecto (22) por otro cualquiera…
Voy como root a el archivo /etc/ssh_config:
# nano /etc/ssh/ssh_config
vamos donde dice  # port 22 .. le borramos el # y cambiamos el puerto por el que queramos..
buscamos con CTRL-W.  Guardamos con CTRL-O  y ceramos con CTRL-C o CTRL-X

En mi caso voy a usar el 2222
Hacemos lo mismo buscando la palabra “port” en el archivo /etc/ssh/sshd_config  cambiándolo por el mismo puerto que vamos a usar. Ahora editamos /etc/services
Buscamos ssh y cambiamos los dos puertos por el que cambiamos antes.

Ahora reseteamos el servicio..

Y hacemos nmap de nuevo.

Como ven.  No sale nada referente e nuestro puerto y/o a el servicio ssh.
Pero el ssh funciona?

CLARO QUE SI.
Importante es que si vas a entrar desde otro ordenador tienes que indicar obviamente el puerto que estés usando..
ssh -p 2222 IP

Listado de Puertos TCP/UDP

Puerto Descripción
1 TCP Port Service Multiplexer (TCPMUX)
5 Remote Job Entry (RJE)
7 Protocolo Echo (Responde con eco a llamadas remotas)
9 Protocolo Discard (Elimina cualquier dato que recibe)
13 Daytime (Fecha y hora actuales)
17 Quote of the Day (Cita del Día)
18 Message Send Protocol (MSP)
19 Protocolo Chargen, Generador de caractéres
20 FTP — Datos
21 FTP — Control
22 SSH, scp, SFTP – Remote Login Protocol
23 Telnet
25 Simple Mail Transfer Protocol (SMTP)
29 MSG ICP
37 Time
42 Host Name Server (Nameserv)
43 WhoIs
49 Login Host Protocol (Login)
53 Domain Name System (DNS)
66 Oracle SQLNet
67 BOOTP (BootStrap Protocol) (Server), también usado por DHCP
68 BOOTP (BootStrap Protocol) (Client), también usado por DHCP
69 Trivial File Transfer Protocol (TFTP)
70 Gopher Services
79 Finger
80 HTTP
88 Agente de autenticación Kerberos
103 X.400 Standard
107 Remote Telnet Service
108 SNA Gateway Access Server
109 POP2
110 POP3
115 Simple File Transfer Protocol (SFTP)
118 SQL Services
119 Newsgroup (NNTP)
123 NTP
137 NetBIOS Name Service
138 NetBIOS Datagram Service
139 NetBIOS Session Service
143 Internet Message Access Protocol (IMAP)
156 SQL Server
161 SNMP
162 SNMP-trap
177 XDMCP (Protocolo de gestión de displays en X11)
179 Border Gateway Protocol (BGP)
190 Gateway Access Control Protocol (GACP)
194 Internet Relay Chat (IRC)
197 Directory Location Service (DLS)
209 Quick Mail Protocol
217 dBASE Unix
389 Lightweight Directory Access Protocol (LDAP)
396 Novell Netware over IP
443 HTTPS
444 Simple Network Paging Protocol (SNPP)
445 Microsoft-DS (Active Directory, compartición en Windows, gusano Sasser, Agobot)
458 Apple QuickTime
500 IPSec ISAKMP, Autoridad de Seguridad Local
512 exec
513 login
514 syslog usado para logs del sistema
515 Printer
520 RIP
522 Netmeeting
531 Conference
546 DHCP Client
547 DHCP Server
563 SNEWS
569 MSN
631 CUPS: sistema de impresión de Unix
666 identificación de Doom para jugar sobre TCP
992 Telnet SSL
993 IMAP4 SSL
995 POP3 SSL
1080 Socks Proxy
1352 IBM Lotus Notes/Domino RCP
1433 Microsoft-SQL-Server
1434 Microsoft-SQL-Monitor
1494 Citrix MetaFrame Cliente ICA
1512 WINS
1521 Oracle listener
1701 Enrutamiento y Acceso Remoto para VPN con L2TP
1723 Enrutamiento y Acceso Remoto para VPN con PPTP
1761 Novell Zenworks Remote Control utility
1863 MSN Messenger
2049 NFS
2082 CPanel
2086 WHM (Web Host Manager)
2427 Cisco MGCP
3000 Calista IP phone (saliente)
3030 NetPanzer
3128 Squid Proxy
3306 MySQL
3389 Microsoft Terminal Server
3396 Novell agente de impresión NDPS
3690 SubVersion
4099 AIM Talk
4662 eMule
4672 eMule
4899 RAdmin
5000 UPNP (Universal plug-and-play)
5060 SIP (Session Initiation Protocol)
5190 Calista IP phone (entrante)
5222 XMPP/Jabber: conexión de cliente
5223 XMPP/Jabber: puerto por defecto para conexiones de cliente SSL
5269 XMPP/Jabber: conexión de servidor
5432 PostgreSQL
5500 VNC (Virtual Network Computing)
5517 Setiqueue proyecto SETI@Home
5631 pcAnyWhere (host)
5632 pcAnyWhere (host)
5400 VNC (Virtual Network Computing)
5500 VNC (Virtual Network Computing)
5600 VNC (Virtual Network Computing)
5700 VNC (Virtual Network Computing)
5800 VNC (Virtual Network Computing)
5900 VNC (Virtual Network Computing)
6000 X11 usado para X-windows
6112 Blizzard Entertainment
6129 Dameware: Software conexión remota
6346 Gnutella
6347 Gnutella
6348 Gnutella
6349 Gnutella
6350 Gnutella
6355 Gnutella
6667 IRC
6881 BitTorrent: puerto por defecto
6891-6900 MSN Messenger (archivos)
6901 MSN Messenger (voz)
6969 BitTorrent: puerto de tracker
7100 Servidor de Fuentes X11
8000 Shoutcast
8080 HTTP alternativo al puerto 80. También Tomcat default
8118 privoxy
8291 routers Microtik
9009 Pichat peer-to-peer chat server
9898 Dabber (troyano)
10000 Webmin (Administración remota web)
12345 Netbus (troyano)
19226 Puerto de comunicaciones de Panda Agent
20000-20019 ICQ
28800-29000 MSN Game Zone
31337 Back Orifice (troyanos)

viernes, 21 de febrero de 2014

Conexión a un servidor mediante túnel inverso ssh

A la hora de administrar servidores u otros equipos con unas medidas de seguridad específicas que no se deben modificar, existen varias herramientas, pero ninguna tan simple y eficaz como el túnel inverso por ssh.
No se trata más que de una conexión entre equipos puerto a puerto mediante ssh, con la característica de que la petición principal la realiza la máquina a la que queremos tener acceso y no desde la que accederemos. ¿Que cómo que qué? Pues supongamos que queremos acceder a un servidor, pero que ese servidor tiene por delante un router o firewall al que no tenemos acceso. Nosotros nos encontramos en la misma tesitura, nuestro router o firewall también bloquea las peticiones entrantes a cualquier puerto y de la misma forma nos es inaccesible. Con lo que sí contamos es con una tercera máquina a la que sí podremos acceder mediante ssh, lo que nos deja con la única solución de acceso al servidor desde el exterior mediante el túnel inverso ssh.
Lo que haremos para conectarnos a ese servidor, es establecer una conexión desde dicha máquina a aquel tercer equipo que dijimos sí teníamos acceso ssh, para luego conectarnos a ese equipo y enlazar indirectamente con el servidor desde nuestra ubicación, o cualquier otro equipo. Vamos con la configuración que quedará todo más claro.
Esta sería la configuración a establecer en el servidor al que queremos acceder:
ssh -R 16789:localhost:2222 usuario@servidor.o.ip
Aquí le especificamos que abra una conexión inversa (-R) al puerto 16789 del equipo al que sí podemos acceder vía ssh (localhost) mediante el puerto 2222 del servidor, con un usuario (usuario) determinado en, obviamente la dirección ip (@servidoroip) de esa tercera máquina.
Con esto configurado en el servidor, lo único que tendremos que realizar nosotros será una conexión ssh normal hacia el puerto 16789 de esa ‘máquina puente’ para que nos redirija mediante ese túnel inverso hacia el servidor.
ssh usuario@servidor.o.ip -p 16789
Y ya nos responde el servidor mediante la conexión que configuramos con la primera línea en el propio server.
Un último esquema para aclarar aún más la idea:
A=Desde donde conectaremos.
B=Servidor al que queremos conectar.
C=Equipo intermedio al que sí podemos acceder vía ssh.
ssh_reverso
B abrirá una conexión a C, con la que el puerto 2222 de B estará escuchando todo aquello que pase por el puerto 16789 de C. Luego nostros desde A podremos conectarnos al puerto 16789 de C, con lo que indirectamente estableceremos conexión con el puerto 2222 de B, que es lo que queríamos desde un principio, y todo esto gracias al túnel inverso ssh.

comando de linux muy buenos

- sshfs user@host:/path/to/dir /path/to/mount/point – monta el directorio/sistema de ficheros a través de SSH.
- !!:gs/foo/bar – ejecuta el comando anterior reemplazando la cadena “foo” por “bar”.
- mount | column –t – muestra los sistemas de ficheros montados de una forma ordenada.

- [space] command – ejecuta un comando sin guardarlo en el historial.
- ssh user@host cat /path/to/remotefile | diff /path/to/localfile – compara un fichero remoto con un fichero local.
- ffmpeg –f x11grab –s wxga –r 25 –I :0.0 –sameq /tmp/out.mpg – captura el video de un escritorio Linux.
- $ssh-copy-id user@host – copia las claves SSH a user@host para permitir inicios de sesión sin contraseña SSH.
- mtr google.com – mtr combina la funcionalidad de traceroute y ping.
- cd - – cambia a directorio de trabajo anterior.
- :w !sudo tee % – guarda un fichero que has editado en vim sin los permisos necesarios.
- python –m SimpleHTTPServer – ejecuta un servidor web en el directorio actual accesible mediante http://$HOSTNAME:8000/.
- sudo !! – ejecuta el último comando como root.
- wget –random-wait –r –p –e robots=off –U mozilla http://www.example.com – descarga un sitio web entero.
- du -h --max-depth=1 – lista el tamañao de todos los subdirectorios desde la posición actual.
- man ascii – acceso rápido a la tabla ASCII.
- net rpc shutdown –I WindowsIPAddr –U user%password – apaga un Windows desde Linux.
- (cd /tmp && ls) – salta a un directorio, ejecuta un comando y vuelve al directorio actual.
- ps –aux | sort –nk + 4 | tail – muestra el top 10 de procesos ordenados por uso de memoria.
- history | awk ‘{a[$2]++}END{for(i in a}{print a[i] “ ” i}’ | sort –rn | head – lista los comandos más usados.
- ping –i 60 –a IPAddr – configura una alarma sonora cuando la dirección IP se pone en línea.
- echo “you can simulate on-screen typing” | pv –qL 10 – simula escritura.
- python –m smtpd –n –c DebuggingServer localhost:1025 – arranca un sencillo servidor SMTP escuchando en el puerto 1025 de localhost.
- lsof –i – ver la actividad del servicio de red en tiempo real.
- mplayer –ao pcm –vo null –vc dummy –dumpaudio –dumpfile – ripea audio desde un fichero de video-
- sudo dd if=/dev/mem | cat | strings – muestra todos los valores string en memoria.
- cat /etc/issue –  muestra la distribución Linux instlada.
- wget –qO – http://www.tarbal.com/tarball.gz | tar zxvf - – extrae tarball desde Internet.
- nc –vv –l –p 1234 –e /bin/bash – crea un backdoor para permitir conexiones remotas a bash.

jueves, 13 de febrero de 2014

Servidores Virtuales con Apache2

Lo que sigue es una breve nota técnica que me sirva (y a otros) como recordatorio para la próxima vez , dado que hoy he perdido un rato con la configuración de un host virtual en Ubuntu.

Doy por supuesto que tienen apache2 instalado y funcionando
en sus maquina, sino, le dan:

$ sudo apt-get install apache2

En /etc/apache2 disponemos de varios subdirectorios, dos de ellos importantes para nuestra tarea. El primero sites-available y el segundo sites-enabled.

Los ficheros de configuración de los hostings virtuales se configuran en sites-available. El segundo subdirectorio sólo contiene enlaces a aquellos virtulhost que queremos activar.

Queremos crear un virtualhost de nombre hackit. Es decir, cuando ponga en mi navegador http://hackit me debe de llevar a la página principal de ese host. Si pongo http://localhost me llevará al virtualhost por defecto (distinto del de hackit).

Lo primero, creo una nueva entrada en /etc/hosts (mantengo lo que había y añado lo siguiente):

127.0.0.1 hackit

Copio los archivos del nuevo site en /var/www/hackit.

Comienza el procedimiento de configuración del nuevo virtualhost en Apache2:

$ cd /etc/apache2/sites-available

Edito las dos primeras líneas del fichero default para que queden así:

NameVirtualHost *:80
<VirtualHost *:80>

$ cp default hackit

Edito hackit para que las primeras líneas queden así:

<VirtualHost *:80>
ServerAdmin webmaster@hackit

ServerName hackit

DocumentRoot /var/www/hackit
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/hackit>

$ cd /etc/apache2

El siguiente comando, a2ensite (available2enablesite) crea un enlace en sites-enable al site que le indiquemos (es decir, activa el virtualhost que acabamos de crear)

# a2ensite hackit

Comprobamos:

$ ls -al sites-enabled/

Recargamos apache2:

#/etc/init.d/apache2 force-reload

Como Crear una VPN entre dos Linux


Descargar en ambas maquinas el openvpn

# aptitude install openvpn

# cd /etc/openvpn/easy-rsa/
# . vars (asigna la ruta de certificados y firmas)
#sh clean-all (borra cualquier certificado o basura que aya)
#sh build-ca (Generación certi_cado Autoridad Certi_cadora (CA))

Generación de certificado y clave del servidor

#sh build-key-server server

Esto genera los ficheros server.crt, server.csr y server.key que moveremos a la ubicación /etc/openvpn

Generación del certi_cado y clave para tres clientes
Ejecutar el siguiente comando:
./build-key cliente1
./build-key cliente2
./build-key cliente3

esto será movido a /etc/openvpn de cada cliente.

El resultado del script es muy similar al obtenido para el servidor. Se crean dos
ficheros cliente.crt, cliente.key,
también hay que mover el fichero ca.crt que genera el servidor.


Configuración del server.conf

VM-debian:/etc/openvpn# more server.conf
;local a.b.c.d

port 1194

;proto tcp
proto udp

;dev tap
dev tun

;dev-node MyTap

ca ca.crt
cert server.crt
key server.key # This file should be kept secret

dh dh1024.pem

server 10.8.0.0 255.255.255.0

ifconfig-pool-persist ipp.txt

;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100
;push "route 192.168.10.0 255.255.255.0"
;push "route 192.168.20.0 255.255.255.0"
;client-config-dir ccd
;route 192.168.40.128 255.255.255.248
;client-config-dir ccd
;route 10.9.0.0 255.255.255.252
;learn-address ./script
;push "redirect-gateway"
;push "dhcp-option DNS 10.8.0.1"
;push "dhcp-option WINS 10.8.0.1"
;client-to-client
;duplicate-cn

keepalive 10 120
;tls-auth ta.key 0 # This file is secret

;cipher BF-CBC # Blowfish (default)
;cipher AES-128-CBC # AES
;cipher DES-EDE3-CBC # Triple-DES

comp-lzo

;max-clients 100

user nobody
group nogroup

persist-key
persist-tun

status openvpn-status.log
log openvpn.log
log-append openvpn.log

verb 3

;mute 20

Configuración del Client.conf

client

;dev tap
dev tun
;dev-node MyTap
;proto tcp
proto udp

remote 192.168.0.105 1194
;remote my-server-2 1194

;remote-random

resolv-retry infinite

nobind

user nobody
group nogroup

persist-key
persist-tun

;http-proxy-retry # retry on connection failures
;http-proxy [proxy server] [proxy port #]
;mute-replay-warnings

ca ca.crt
cert client.crt
key client.key

;ns-cert-type server
;tls-auth ta.key 1
;cipher x
;mute 20

comp-lzo

verb 3
status openvpn-status.log
log openvpn.log
log-append openvpn.log


corro el daemon /etc/init.d/openvpn start en ambos lados......y si tiro un ping a 10.8.0.1 tiene que llegar.

Instalacion y configuracion de Fail2ban



Fail2ban es una aplicación escrita en Python para la prevención de intrusos en un sistema, que se basa en la penalización de conexión (bloquear conexión) a los orígenes que intentan accesos por fuerza bruta. Se distribuye bajo la licencia GNU y típicamente funciona en todos los sistemas POSIX que tengan interfaz con un sistema de control de paquetes o un firewall local.
Más info...

Instalacion


apt-get install fail2ban


Configuracion

Para configurar fail2ban tenemos que acceder a los archivos ubicados en en/etc/fail2ban/.
El archivo principal y el que vamos a configurar en este post en jail.conf

Les dejo un pequeño listado con las palabras y definiciones mas comunes que vamos a encontar en este archivo:

ignoreip : IP que deseamos que ignore fail2ban
bantime : Tiempo que tendra que esperar el usuario que supero la cantidad maxima de logueos (segundos)
maxretry : Numero de intentos de logeo.
destemail: Dirección de correo donde nos enviará las nuevas alertas (se debe tener configurado un SMTP)
action : Simboliza la manera en que iptables aplicara las reglas
enable : Activa o desactiva la verificación del servicio para Fail2ban (TRUE , FALSE)
port : Nombre del servicio que está relacionado con el puerto por ejemplo "ssh"
logpath : Ruta donde se ubicaran los ficheros Logs para ver toda la información según cual sea el servicio.


Bueno empecemos a modificar el archivo jail.conf

Ahora modificaremos la siguiente linea para agregar el correo de destino para las notificaciones de fail2ban, en caso de no estar presente en el archivo la podemos agregar.


destemail = piruo7@debian.com 



Es recomendable que agreguemos en la linea “ignoreip” nuestra ip local, o la de algun servidor con el que podamos conectar en caso de que por error nos bloqueemos nosotros mismos:


ignoreip = 127.0.0.1



Buscar la siguiente linea y establecer el tiempo de prohibicion:


bantime = 600


Proteger el servidor SSH contra intentos de accesos fallidos:


[ssh]

enabled = true
port        = ssh
filter        = sshd
logpath  = /var/log/auth.log
maxretry = 6



Habilitar proteccion para Apache:


[apache]

enabled = true
port        = http,https
filter        = apache-auth
logpath  = /var/log/apache*/*error.log
maxretry = 6


Habilitar proteccion para vsftpd:


[vsftpd]
 
enabled  = true
port     = ftp,ftp-data,ftps,ftps-data
filter   = vsftpd
logpath  = /var/log/vsftpd.log
maxretry = 4


Tambien podemos habilitar y configurar la proteccion otros servicios como, Nginx, qmail, proftpd, sasl, asterisk, postfix, courier, Bind, etc.

Reiniciareamos Fail2ban


 /etc/init.d/fail2ban restart


Probar la configuracion


fail2ban-client -d


El comando anterior vertera la configuracion y mostrara los errores de la misma

Monitorear el registro de Fail2ban:


tail -f /var/log/fail2ban.log


Si quieren monitorear el servicio SSH lo que tiene que hacer es lo siguiente:


tail -f var/log/auth.log


La ruta del archivo cambia dependiendo a la configuracion que ustedes pusieron.

Apache 2 con Secure Sockets Layer (SSL)

Introducción a SSL

El estándar SSL fue desarrollado por NetscapeCommunications Corporation , junto con Mastercard,
Bank of America, MCI y Silicon Graphics. Lanzando en 1996 SSL v3.0, el cual se utilizó para
desarrollar en 1999 el TLS versión 1.0, un estándar protocolo IETF definido por primera vez en el
RFC 2246. Se encuentra en la pila OSI entre los niveles de TCP/IP y de los protocolos HTTP, FTP,
SMTP, SSH, etc.
SSL opera de una manera modular: sus autores lo diseñaron extensible, con soporte para
compatibilidad hacia delante y hacia atrás, y negociación entre las partes (peer-to-peer).
Proporciona sus servicios de seguridad cifrando los datos intercambiados entre el servidor y el
cliente con un algoritmo de cifrado simétrico, típicamente el RC4 o IDEA, y cifrando la clave de
sesión de RC4 o IDEA mediante un algoritmo de cifrado de clave pública, típicamente el RSA. La
clave de sesión es la que se utiliza para cifrar los datos que vienen del y van al servidor seguro. Se
genera una clave de sesión distinta para cada transacción, lo cual permite que aunque sea reventada
por un atacante en una transacción dada, no sirva para descifrar futuras transacciones. MD5 se usa
como algoritmo de hash.
Proporciona cifrado de datos, autenticación de servidores, integridad de mensajes y, opcionalmente,
autenticación de cliente para conexiones TCP/IP.
Cuando el cliente pide al servidor seguro una comunicación segura, el servidor abre un puerto
cifrado, gestionado por un software llamado Protocolo SSL Record, situado encima de TCP. Será el
software de alto nivel, Protocolo SSL Handshake, quien utilizara el Protocolo SSL Record y el
puerto abierto para comunicarse de forma segura con el cliente.
Funcionamiento
Cuando el cliente pide al servidor seguro una comunicación segura, el servidor abre un puerto
cifrado (443), gestionado por un software llamado Protocolo SSL Record, situado encima de TCP.
Será el software de alto nivel el protocolo SSL Handshake, quien utilice el Protocolo SSL Record y
el puerto abierto para comunicarse de forma segura con el cliente.
1. El protocolo SSL Handshake, es donde el cliente y el servidor intercambian una serie de
mensajes para negociar las mejoras de seguridad.
La fase de Saludos.
La fase de intercambio de claves.
La fase de producción de clave de sesión.
La fase de verificación del servidor.
La fase de autenticación del cliente.
La fase de finalización.

2. El Protocolo SSL Record especifica la forma de encapsular los datos transmitidos y
recibidos. La porción de datos del protocolo tiene tres componentes:
MAC-DATA, el código de autenticación del mensaje.
ACTUAL-DATA, los datos de aplicación a transmitir.
ADDING-DATA, los datos requeridos para rellenar el mensaje al usa cifrado en bloque.
Este invento que ha propiciado una navegación segura más transacciones comerciales, motivando a
los usuarios de la red y a las empresas a que tengan confianza de ser usurpados por usuarios
maliciosos del internet, lo cual ha dado un mejor funcionamiento a un nivel económico. Visa,
MasterCard, American Express y muchas de las principales instituciones financieras han aprobado
SSL para el comercio sobre Internet.
Referencias: RFC 4346, reemplazada por RFC 5246, 5746, 5878 (estándar propuesto); modificada
por RFC 4366, 4680, 4681, 5746 (correcciones).
Primero que nada necesitamos habilitar el modulo SSL con lo cual tenemos que hacerlo ejecutando
“a2enmod ssl” esto activara los módulos que necesitamos para continuar nuestra configuración.

$ a2enmod ssl

Luego creamos en /etc/apache2/sites-available un archivo con el nombre del dominio pero con -ssl
para diferenciarlo del precedente “gato.linux.com-ssl.conf” en el escribimos el siguiente
script.

<IfModule mod_ssl.c> ## Módulos para el protocolo SSL
<VirtualHost *:443> ## Puerto de HTTPS por defecto 443
DocumentRoot "/home/gatoe/www/gato.linux.com" ## Localización de documentos
ServerName gato.linux.com ## Nombre del dominio
ServerAlias *.gato.linux.com ## Alias del dominio
<Directory "/home/gato/www/gato.linux.com"> ## Localización del sitio
Options -Indexes FollowSymLinks MultiViews
allow from all
</Directory>
ErrorLog /var/log/apache2/gato.linux.com-ssl.error.log ## archivo log auto-generable
LogLevel warn
CustomLog /var/log/apache2/gato.linux.com.access.log combined ## log de acceso
## auto-generable
ServerSignature On
SSLEngine on
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
<FilesMatch ".(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-6]"
nokeepalive ssl-unclean-shutdown
downgrade-1.0 force-response-1.0
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
</VirtualHost>


Ahora vamos a modificar el archivo que se encuentra en “/etc/apache2/ports.conf” aquí tendremos
que hacer algunas modificaciones, dejándolos de esta manera
SCRIPT “/etc/apache2/ports.conf”

NameVirtualHost *:80
Listen 80
<IfModule mod_ssl.c>
NameVirtualHost *:443
Listen 443
</IfModule>

Apache 2 con Secure Sockets Layer (SSL)


Ahora tendremos que activarlos ejecutando lo siguiente.

a2ensite gato.linux.com-ssl.conf


Ahora reiniciamos apache2

/etc/init.d/apache2 restart

y ya tendríamos que podes acceder usando el protocolo HTTPS.

web

# Creamos las llaves con el comando openssl usando “genrsa -des3” para generar parámetros de
RSA, utilizando un algoritmo DES encriptando 3 veces, y quedara contenida en un archivo que
generara con el nombre servidor.key con una encriptación de 1024 bits en el directorio
/etc/apache2/.
En caso de querer generar una contraseña con una seguridad mayor, se puede usar 2048 bits, y
direccionarla a algún archivo “openssl genrsa -des3 2048 >> /archivo_a_alojar/”
Podemos usar muchos parámetros mas como por ejemplo usar Diffie-Hellman o parámetros DSA
para conocer un poco mas recomiendo ejecutar “man openssl”.
openssl genrsa -des3 1024 >> /etc/apache2/servidor.key
en mi caso como estoy en el directorio /etc/apache2/ obvio la redirección final “>> /etc/apache2”

apache

Donde nos pide que ingresemos una passwd para crear una llave que estará contenida en
servidor.key, luego nos pedirá que repitamos la contraseña.

Aclaración: al ingresar las contraseñas no esperes ver caracteres de ningún tipo.

Ahora tenemos que creamos un certificado con la llave que ya creamos, así que primero que nada
nos posicionamos en el directorio /etc/apache2/ y ejecutamos el comando openssl con el parámetro
“-req” para los certificado X.509 con una solicitud de firma RSE de administración, generando una
nueva llave que sera direccionado todo al archivo servidor.csr.
openssl req -new -key servidor.key -out servidor.csr
en la cual tendremos que llenar un formulario con algunos campos como:
El código del país en mi caso es Argentina así que ingreso “AR”.
La provincia donde nos encontramos, en mi caso “Corrientes”.
Ciudad en la que nos encontramos “Corrientes”.
El nombre de la empresa a la que pertenecemos “GaTux”.
Nombre de la sección en la organización “Informatica”.
Nombre completo “Leandro Facundo Carril”.
Tu E-mail “lean1989gatux@gmail.com”
Luego continua con Atributos extras del formulario donde nos vuelve a pedir la Password ingresada
en las llaves generadas y un nombre opcional el que podemos dejar en blanco.

redes


Ahora crearemos un certificado nuevo autofirmado de tipo x509 usando req (recuest), que
durará un año usando como certificado raíz a servidor.key. Con out marcamos el
certificado que deseamos firmar “servidor.crt”. En caso que no usemos la opción days se
creara un certificado por 30 días.

openssl x509 -req -days 365 -in servidor.csr -signkey servidor.key -out servidor.crt

Donde tendremos que ingresar nuevamente nuestra contraseña.

LAN


#Cambiamos de carpeta la llave y certificado

cp servidor.crt /etc/ssl/certs/
cp servidor.key /etc/ssl/private/


Abrimos el archivo de configuracion gato.linux.com-ssl.confmcedit /etc/apache2/sites-availables/gato.linux.com-ssl.conf
# reemplazamos y habilitamos la siguiente configuracion

SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
SSLCertificateFile /etc/ssl/certs/servidor.crt
SSLCertificateKeyFile /etc/ssl/private/servidor.key


debian


# habilitamos el archivo

a2ensite /etc/apache2/sites-availables/gato.linux.com-ssl.conf

servidores


# Reiniciamos apache y listo!!

/etc/init.d/apache2 restart

Configuracion

Linux

desplazamos donde dice Comprendo los Riegos.

le damos clik en agregar excepcion.

y por ultimo confirmar excepcion de seguridad.

y Whoala!!!

ssl

configuracion de apache

INSTALACION DE APACHE2
En este caso se realizara sobre un Debian 6.0.5 con un kernel 2.6.32-5-686, con lo cual nos valdremos
para instalar el servidor del comando aptitude o apt-get, si lo quieres hacer de una manera mas
gráfica se puede usar synaptic o de una manera más cruda seria, bajarnos los paquetes binarios de
su sitio oficial http://httpd.apache.org/ e instalarlos.

Instalando el servidor

Configuración de servidor Apache2

Configuración
Como todo lo que instalemos en GNU-Linux sus archivos de configuración se encuentran en /etc,
por lo general en un directorio que recibe el nombre del servidor o servicio, en este caso seria
/etc/apache2, en el que encontraremos directorios y archivos con directivas de configuración. Nos
podemos direccionar con el comando “cd /etc/apache2” si queremos chequear donde estamos solo
ejecutamos “pwd” y usamos “ls” listamos los archivos que el directorio contiene.(cd /etc/apache2;
pwd; ls).
web

apache2.conf : Este es el archivo principal de configuración del servidor apache2, el mismo
contiene las directivas, las que se dividen en tres secciones.
1- Las primera se encarga de las directivas que controlan el funcionamiento del proceso del servidor
Apache en forma global.
2- Los parámetros que definen al servidor por defecto, principal o aquellas que no manejan un hosts
virtual. Es por ejemplo cuando simplemente instalamos y dejamos todos por defecto incluso los
hosts virtuales.
3- En la tercera incluye la mas compleja pero mas útil y es configurar servidores virtuales que
permitan solicitudes Web que son enviadas a diferentes direcciones IP manejados por el mismo
proceso del servidor Apache.
En definitiva podremos configurar módulos, tiempos de respuestas, acceso a archivos de
configuración, archivos de log, etc.
conf.d: en el directorio conf.d encontraremos archivos como (charset, gosa.conf, localized-error-
pages, nagvis.conf, other-vhosts-access-log y security). Donde encontraremos manejo de módulos
de PHP, CGI, configuración de log y de seguridad. Así como servicios externos que requieran
Apache, por ejemplo NAGIOS u otros.
envvars: es una variable de entorno por defecto para apache2.ctl, el cual soporta múltiples
instancias. Se recomienda tocar solo si se sabe exactamente lo que se hace.

httpd.conf: Antiguamente era el archivo de configuración principal, donde se definían las
directivas, hoy en día este archivo se encuentra dividido en los que encontramos en /etc/apache2/.

magic: aquí se configura los módulos de imagen, vídeo y sonido usados en el servidor.

mods-available: encontraremos muchos archivos de configuración, con directivas de los dominios
que configuremos en sites-available.

mods-enabled: encontraremos muchos archivos de configuración, con directivas de los dominios
que configuremos en sites-enabled.
ports.conf: aquí configuraremos los puertos de los hosts virtuales, por defecto Apache atiende en el
puerto 80 (HTTP) o en caso de usar SSL en el puerto 443 (HTTPs).

sites-available: En este directorio podremos configurar los servidores virtuales que queramos,
teniendo un archivo “default y default-ssl” por defecto, aquí nosotros generaremos un archivo para
cada dominio que tengamos, son sus respectivas directivas de configuración.

Sites-enabled: En este directorio se configuran los archivos de los sitios que habilitemos en el
directorio de sites-available.

Configuración de sitios virtuales
Primero que nada nos dirigiremos a el directorio sites-available (“cd /etc/apache2/sites-available”).

apache

Aquí encontramos dos archivo, “default” donde se encuentra configurado el puerto y un dominio
por defecto que levanta cuando se inicia por primera vez nuestro apache2. La configuración del
mismo es la siguiente. En el script se define el puerto donde escucha <VirtualHost *:80> siendo el
80 (HTTP) el correcto por defecto, el E-Mail del administrador “ServerAdmin
webmaster@localhost” donde podemos poner nuestro correo. Luego modificaremos
“DocumentRoot /var/www/” Y “<Directory /var/www> “ donde deberemos especificar el directorio
que aloja nuestros sitio Web. Personalmente considero una buena norma de seguridad no dejarlo en
“/var/www” ya que es el directorio por defecto y me parece mas sencillo utilizar el /home de cada
usuario, pudiendo especificar directivas de seguridad como encarcelándolo al mismo, para que solo
tenga permisos en su directorio y no pueda moverse por las demás carpetas. Para finalizar se
configura donde estarán los archivos CGI, dejando como esta por defecto.

GNU

Hasta aquí tenemos una configuración por defecto, para ejecutarlo ejecutamos en consola
“/etc/init.d/apache2 start” para frenar el mismo usamos “stop”, en caso que queramos pararlo y
luego arrancarlo ejecutamos “restart” y si queremos saber si esta corriendo ejecutamos “status” en
tal caso tendremos que recibir algo como “Apache2 is running”.
Para configurar hosts virtuales, primero que nada tenemos que crear un archivo por cada dominio
que tengamos, lo mejor es poner un nombre representativo el cual termine en “.conf”. Para ello me
valdré del comando “touch”. Por ejemplo estando posicionados en /etc/apache2/sites-available
ejecutamos
touch serpiente.homelinux.com.conf serpiente.homelinux.org.conf
Con esa linea creamos ambos demonios un .com y un .org.

debian

Luego editamos con nano, mcedit o gedit según la herramienta que tengamos a disposición, y
escribimos el script para cada uno con la redirección a sus directorios respectivos.
Código del Script (solo reemplaza con el nombre de tu dominio y lugar donde lo alojas)

*********************************************************************************************************************
<VirtualHost *:80>
DocumentRoot "/home/nuestro_usuario/nuestro_dominio" # Directorio de root
ServerName nuestro_dominio.com # Nombre del domino
ServerAlias *.nuestro_dominio.com # Alias del miso es importante el *.
<Directory "/home/serpiente/www/serpiente.org"> # Directorio que aloja el Dominio.
Options -Indexes FollowSymLinks MultiViews
allow from all
</Directory>
ErrorLog /var/log/apache2/nuestro_dominio.com.error.log # log que se auto-generara
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/nuestro_dominio.com.access.log combined #log auto-generable
ServerSignature On
</VirtualHost>

*********************************************************************************************************************

Configuracion para "gato.linux.com"

servidores


Como podemos apreciar solo cambiamos los parámetros del Directorio de contención /var/www
por el /home/serpiente/www/ donde contendremos el directorio serpiente.homelinux.com que
contendrá su archivo index.html, también cambiamos ServerAlias donde ponemos el nombre de
nuestro dominio y si queremos dejamos por defecto el directorio de donde se registrara el sistema
de logueo en /var/log/apache2/ pero con el nombre de nuestros dominios
“serpiente.homelinux.com.error.log y serpiente.homelinux.com.access.log” así tenemos un orden
donde ir a buscar datos cuando ocurra un problema, estos dos últimos archivos se auto-generan. Lo
mismo repetiremos para el archivo de serpiente.homelinux.org.conf.

Configuración para gato.linux.org

Linux

Cuando ya creamos los sitios que queramos tener, los cuales están en sites-available, tendremos que
realizar un enlace simbólico hacia sites-anabled para que puedan funcionar. Para ello ejecutamos lo
siguiente, estando posicionados en /etc/apache2/sites-available
a2ensite serpiente.homelinux.com.conf
a2ensite seriamente.homelinux.org.conf
y veremos algo así
Enabling site serpiente.homelinux.com.conf.
Run '/etc/init.d/apache2 reload' to activate new configuration!
Ahora si listamos sites-enabled usando la opción “ls -l” veremos algo así

ssl

Luego solo nos queda crear nuestros directorios en nuestro /home donde tendremos una carpeta
www.

apache2


Listamos para ver que este todo en orden donde además podemos tener el index.html de la
configuración que realizamos antes por defecto y ahora entramos a nuestro directorio donde
creamos un index.html.


Ahora en nuestro index.html ponemos un poco de código como para que aparezca algo que nos
indique que el servidor esta funcionando perfectamente.

Configuración de servidor Apache2

Luego editaremos el archivo /etc/hosts donde especificaremos cada host con su IP, los cuales en este
caso serán todas dirigidas al localhost la IP 127.0.0.1. Esto es para que cuando en nuestro browser
coloquemos gaot.linux.com o gato.linux.org nos muestre el sitio
correspondiente.

web


Si queremos por algún motivo deshabilitar alguno de los sitios lo podemos hacer con el comando
a2dissite por ejemplo si quisiéramos desactivar serpiente.homelinux.com, solo ejecutamos.
a2dissite serpiente.homelinux.com.conf
Si todo sale bien tendríamos que ver nuestro sitios web en nuestra maquina local.

apache

GNU

squid proxy server + dhcp + 2 tarjetas de red + ejaberd

Ubuntu server + squid proxy server + dhcp + 2 tarjetas de red + mysql, php, apache, phpmyadmin, + servidor ejabberd + cliente spark

Que tal compañeros les vengo a compartir varios dias de desvelo y conocimiento que he obtenido.

En este post aprenderan a montar squid proxy server mas un servidor ejabber (de mensajeria) con el cual podran conectarse con cuentas que se encuentren fuera de su red (del exterior)

requisitos:
* ubuntu server en mi caso tengo la vercion 12.04
* 2 tarjetas de red
* squid proxy server
* dhcp
* mysql, php y apache
* servidor ejabber
* cliente spark


NOTA: PARA GUARDAR CAMBIOS EN LOS ARCHIVOS QUE SE ABREN CON NANO POR CONSOLA SOLO DEBEN PRECIONAR CTRL + O (ESTO PARA GUARDAR) Y CTRL + X (ESTO PARA SALIR)


OPCIONAL: PARA INSTALAR SSH EJECUTAN LA SIGUIENTE INSTRUCCION

apt-get install openssh-server

una vez instalado pueden descargase el cliente putty de la siguiente pagina:

http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe

una vez descargado lo abren y esciben la ip del servidor ubuntu server y dan enter y les mostrara un mensaje cuando se baia a conectar solo le disen que si y ya tendran la consola del servidor en su pc.


--------------paso numero 1:
* conectar los cables de red en su respectivo lugar.

tenemos 2 tarjetas de red conectadas a la pc con ubuntu server que son, "etho" y "etho1". En la tarjeta "eth0" (la que viene integrada a la tarjeta madre) vamos a conectar un cable que balla de esta tarjeta directa al modem (su routeador de su proovedor de internet) y en la "eth1" vamos a conectar otro cable que balla conectada a un switch y todas sus maquinas que quieran pasar por squid proxy server deberan de estas conectadas al switch.

*Diagrama de red como quedaria ya con las tarjetas conectadas:

Ubuntu server + squid proxy server + dhcp + 2 tarjetas de re



------------paso numero 2 configuracion de ips en las tarjetas de red:

escribimos: sudo nano /etc/network/interfaces
aca la imagen como deben quedar configuradas las 2 tarjetas de red, pueden borrar todo el contenido que tiene este archivo y solo dejan esta configuracion

server


ajecutan la siguiente instruccion: sudo /etc/init.d/networking restart
esto para cargar la nueva configuracion, luego hacen un ifconfig y podran ver que sus tarjetas ya estan configuradas correctamente.

Ubuntu


------------paso numero 3: agregar dns

ejecutamos lo siguiente en la consola: sudo nano /etc/resolv.conf
aqui van a dejar la ip que tiene su modem el que les ofrece su provedor de internet por default los de telmex tiene la ip 192.168.1.254.

apache


------------------paso numero 4: instalacion del dhcp

ejecutamos en la consola el siguiente comando:

sudo apt-get install dhcp3-server

esto instalara el servidor dhcp

ahora tendremos que desirle con que interface de red nos va escuchar, para ello ejecutamos la siguiente sentencia:

sudo nano /etc/default/dhcp3-server y al final tenemos que dejar "eth1" como se muestra en la imagen:

PHP


---------------------------paso numero 5: configurar el dhcp

ejecutamos la siguiente sentencia: sudo nano /etc/dhcp3/dhcpd.conf

aqui vamos a dejar lo siguiente:

ddns-update-style none;
default-lease-time 3600;
max-lease-time 180000;
log-facility local7;
ddns-update-style interim;
authoritative;
subnet 192.168.2.0
netmask 255.255.255.0{
range 192.168.2.2 192.168.2.253;
option domain-name-servers 192.168.1.254;
option routers 192.168.2.1;
option broadcast-address 192.168.2.255;
}

aqui indicamos la red que vamos a usar el rango de las ips el dns.

reiniciamos el dhcp con el siguiente comando: sudo /etc/init.d/dhcp3-server restart
nos debe de mostrar ok


----------------------------------paso numero 6: instalar squid proxy server

ejecutamos la siguiente instruccion: sudo apt-get install squid3

ya instalado tenemos que activar el forward para ello crearemos un archivo que se ejecutara durante el inicio del servidor esto para no tenerlo que activar cada que se reinicie el server.

pero primero escribiremos unas reglas iptables las cuales nos serviran para que digan que va pasar por la red y por donde va pasar.

ejecutamos la siguiente instruccion: sudo nano /etc/init.d/iptables.cf

y pegamos lo siguiente:
[color=#000000]
iptables -X iptables -Z iptables -t nat -F
iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT 
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A PREROUTING -s 192.168.2.0/24 -d ! 192.168.2.0/24 -p tcp -- dport 80 -j REDIRECT --to-port 3128 
iptables -A INPUT -s 192.168.2.0/24 -i eth1 -j ACCEPT
iptables -A FORWARD -s 192.168.2.0/24 -i eth1 -p tcp --dport 993 –j ACCEPT 
iptables -A FORWARD -s 192.168.2.0/24 -i eth1 -p tcp --dport 110 -j ACCEPT 
iptables -A FORWARD -s 192.168.2.0/24 -i eth1 -p tcp --dport 465 -j ACCEPT 
iptables -A FORWARD -s 192.168.2.0/24 -i eth1 -p tcp --dport 25 -j ACCEPT 
iptables -A FORWARD -s 192.168.2.0/24 -i eth1 -p tcp --dport 80 -j ACCEPT 
iptables -A FORWARD -s 192.168.2.0/24 -i eth1 -p tcp --dport 443 -j ACCEPT 
iptables -A FORWARD -s 192.168.2.0/24 -i eth1 -p tcp --dport 53 -j ACCEPT 
iptables -A FORWARD -s 192.168.2.0/24 -i eth1 -p udp --dport 53 -j ACCEPT 

[/color]


seguido ejecutamos la siguiente instruccion para habilitar el forward:

echo 1 > /proc/sys/net/ipv4/ip_forward


damos permisos de ejecucion al archivo creado con el siguiente comando:

sudo chmod a+x /etc/init.d/iptables.cf


instalaremos un programa para que se ejecute al arranque del servidor con el siguiente comando:

sudo apt-get install rcconf

y lo ejecutamos con la siguiente instruccion:

sudo rcconf

veran la siguiente imagen: aqui seleccionaran iptables.cf
Nota: para seleccionar posicionarce sobre iptables.cf y precionas la tecla espaciadora.

proxy


---------------------paso numero 7: configurar squid

borrar el archivo de configuracion de squid para ello ejecutamos el siguiente comando:
sudo rm /etc/squid3/squid.conf

ahora creamos de nuevo el archivo y pegamos lo siguiente con el siguiente comando.
ejecutamos el siguiente comando: sudo nano /etc/squid3/squid.conf

y pegamos lo siguiente:

cache_mem 16 MB
cache_dir ufs /var/spool/squid 700 16 256
ie_refresh on
offline_mode on

#acl all src 0.0.0.0/0.0.0.0
acl red_local src 192.168.2.0/24
acl bloquearip src "/etc/squid3/bloquearip"
acl restringidas src "/etc/squid3/restringidas"
acl libres src "/etc/squid3/libres"

acl localhost src 127.0.0.1/255.255.255.255
acl palabras url_regex "/etc/squid3/palabras"

http_access deny bloquearip
http_access deny restringidas palabras
http_access allow libres
http_access allow red_local
http_access allow localhost
http_access deny all

nota:crearemos 3 archivos con los siguientes comandos
sudo nano /etc/squid3//bloquearip
192.168.2.6
192.168.2.7
192.168.2.8
en este archivo ponemos las ips de las maquinas que no tendran derecho a navegar por internet

sudo nano /etc/squid3/restringidas
en este archivo pondremos las ips que no podran entrar a los sitios que esten registrados en el archivo de abajo que es palabras,
192.168.2.10
192.168.2.11

sudo nano /etc/squid3/libres
squi pondremos las ips de las maquinas que tengan acceso libre a internet
192.168.2.120
192.168.2.121

sudo nano /etc/squid3/palabras
facebook
youtube
taringa
twitter

aqui pondremos palabras comunen, toda pagina que contenga esta palabra en la url sera bloqueada


hasta aqui la configuracion de squid proxy server: dudas las contesto en los comentarios.

------------------------paso numero 8: instalacion php mysql apache.


instalamos lamp (linux, apache, mysql, php) con el siguiente comando:

sudo tasksel install lamp-server

les mostrara la siguiente pantalla, aqui ponen la contraseña que gusten para la base de datos mysql

MySQL

seguido nos pedira confirmar la contraseña ponemos la misa que la imagen anterior.

ok, hasta aqui ya hemos instalado php mysql y apache, ahora podemos ingresar a nuestro navegador y escribimos la ip de nuestro servidor ubuntu server que en este caso es la 192.168.1.100 y si nos muestra la siguiente pantalla quiere desir que vamos bien.

lamp

---------------------paso numero 9: crear cuenta en no-ip.org

ahora creamos un dominio para ello entramos a la pagina https://www.noip.com/sign-up
ya que tenemos la cuenta creada nos logeamos en la siguiente pagina https://www.noip.com/sign-up

PHPMyAdmin

una vez dentro escogemos la opcion manage host

squid

luego precionamos donde dise ADD A HOST un boton rojo a la derecha y nos mostrara la siguiente pantalla donde tenemos que escoger un hostame y un dominio como lo muestra la imagen: una vez que escojas un hostname y un dominio precionar add host abajo a la derecha

dhcp

listo ya tenemos nuestro dominio en no-ip.org esto nos servira para poder ver nuestro servidor de fuera.

ahora abrimos el archivo host para ello ejecutamos la siguiente sentencia:

sudo nano /etc/hosts

y agregamos esta linea al final
192.168.1.100 nuetro nombre de dominio que creamos en no-ip
ejemplo
192.168.1.100 zeok.no-ip.org

aqui ya podemos poner nuestro nombre de dominio en el navegador y nos debe de mostrar el its work de la imagen anterior

-----------------------------------paso 10: instalar phpmyadmin
nota:opcional

sudo aptitude install phpmyadmin

*durante la instalacion nos preguntara para que tipo quiere que adapte la instalacion le decimos que para apache2 y damos aceptar

*nos mostrara un mensaje que dise que ocupa una base de datos para funcionar le desimos que si luego aceptar

*nos pedira una contraseña, aqui tendremos que poner la que pusimos anteriormente al instalar php mysql y apache para la base de datos mysql

Ubuntu server + squid proxy server + dhcp + 2 tarjetas de re

ahora phpmyadmin nos pide otra contraseña esta es la que pondremos para poder acceder a el por medio de la web ponemos la que gusten pero qe no se les olvide.

server

confirman contraseña.

ahora ya pueden acceder al phpmy admin de la siguiente manera:

ingresan al navegador y escriben: 192.168.1.100/phpmyadmin

usuario:root
contraseña: la que pusieron durante la instalacion del php myadmin.

---------------------------------paso numero 11:instalar ejabberd:

ejecutamos la siguiente instruccion: sudo apt-get install ejabberd

una vez instalado paramos el servicio con el siguiente comando

sudo /etc/init.d/ejabberd stop

ahora vamos a configurar el administrador y el host para ello entramos en el siguiente archivo:

sudo nano /etc/ejabberd/ejabberd.cfg

y buscamos las siguientes lineas:

%% Admin user
{acl, admin, {user, "", "localhost"}}.
%% Hostname
{hosts, ["localhost"]}.

y la editamos por esta

%% Admin user
{acl, admin, {user, "admin", "192.168.1.100"}}.
%% Hostname
{hosts, ["192.168.1.100", "localhost", "dominio que creamos en no-ip"]}.

Ubuntu

iniciamos el servicio con el siguiente comando:

sudo /etc/init.d/ejabberd start

ahora vamos aconfigurar el usuario administrador que configuramos en el paso anterior que es "admin" para ello ejecutamos la siguiente instruccion
nota:donde dise mypassword va ser su contraseña

sudo ejabberdctl register admin 192.168.1.100 mypassword

ahora ya pueden entrar al administrador por medio del navegador con esta direccion
http://192.168.1.100:5280/admin

usuario:admin
contraseña: la que pusieron en el comando anterior

podremos ver la siguiente pagina: en donde dise 192.168.1.100 crearemos usuarios que esten dentro de nuestra red y en donde esta el nombre de dominio los usuarios que se conectaran de fuera.
para crear usuarios dan click en donde dise 192.168.100 o el nombre de dominio luego precionan donde dise usuarios y ahi puden crearlos.

apache

---------------------------------- paso 12: instalar spark y configurar los clientes en las pcs

instalacion de spark: para ello entramos en la pagina del desarrollador que es la siguiente

http://www.igniterealtime.org/projects/spark/

una vez descargado el programa lo instalamos en nuestras maquinas que tengamos en nuestra red.

una vez instalado agregamos la cuenta de la siguiente forma:

el nombre juan es un nuevo usuario que hice en el administrador de spark http://192.168.1.100:5280/admin si el usuario esta dentro de nuestra red lan crearemos este usuario en el apartado 192.168.1.100
como se muestra en la imagen

PHP

y quedaria configurado de la siguiente manera

proxy

pero si nuestro usuario que va usar la cuenta esta fuera de nuestra red lan entonces crearemos otra cuenta en el apartado "nombre de dominio" como lo muestra la siguiente imagen

MySQL

y la configuramos de la siguiente manera

lamp

y aqui estan las 2 cuentas funcionando, es una captura de logmein es una maquina que esta en el exterior de mi red es una maquina de mi trabajo.

PHPMyAdmin

fin del post. espero este claro, muchas grasias por su visita, compartan sus conocimientos por el bien de todos. grasias.