7.1.- Fichero de Configuración del Firewall (firewall.sh).
#!/bin/bash
## Script de Proteccion. ## I. Municipalidad de Chanco ## Luis Vega. ([email protected]) ## eth0: conectada al modem (RDSI)
## eth1: conectada al hub que mira la red local # Activando el forward en el Kernel
echo 1 > /proc/sys/net/ipv4/ip_forward echo -n Aplicando Reglas de Firewall... ## FLUSH de reglas
iptables -F iptables -X iptables -Z iptables -t nat -F ## Politicas por defecto iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT iptables -t nat -P POSTROUTING ACCEPT
# --- # Redirecciones, Desde la U. de Chile
# Desde 146.83.8.186 , .252, .235, al puerto 23 y 21 de la maquina 192.168.1.80 (LAN)
iptables -t nat -A PREROUTING -s 146.83.8.186 -i eth0 -p tcp --dport 21 -j DNAT --to 192.168.1.80:21 iptables -t nat -A PREROUTING -s 146.83.8.186 -i eth0 -p tcp --dport 23 -j DNAT --to 192.168.1.80:23 iptables -t nat -A PREROUTING -s 146.83.8.235 -i eth0 -p tcp --dport 21 -j DNAT --to 192.168.1.80:21 iptables -t nat -A PREROUTING -s 146.83.8.235 -i eth0 -p tcp --dport 23 -j DNAT --to 192.168.1.80:23 iptables -t nat -A PREROUTING -s 146.83.8.252 -i eth0 -p tcp --dport 21 -j DNAT --to 192.168.1.80:21 iptables -t nat -A PREROUTING -s 146.83.8.252 -i eth0 -p tcp --dport 23 -j DNAT --to 192.168.1.80:23 # Desde SMC
# Desde la 216.241.23.178 al puerto 3389,4899,1433 a la maquina 192.168.1.254
iptables -t nat -A PREROUTING -s 216.241.23.178 -i eth0 -p tcp --dport 3389 -j DNAT --to 192.168.1.254:3389
iptables -t nat -A PREROUTING -s 216.241.23.178 -i eth0 -p tcp --dport 4899 -j DNAT --to 192.168.1.254:4899
iptables -t nat -A PREROUTING -s 216.241.23.178 -i eth0 -p tcp --dport 1433 -j DNAT --to 192.168.1.254:1433
# --- # Detener Equipos
#iptables -A OUTPUT -s 192.168.1.47 -j REJECT # Dejo el localhost (para conexiones locales)
iptables -A INPUT -i lo -j ACCEPT # Denegar Ping
# Bloquear FTP desde afuera
iptables -A INPUT -i eth0 -p TCP --dport 20 -m state --state NEW -j DROP iptables -A INPUT -i eth0 -p TCP --dport 21 -m state --state NEW -j DROP # Bloquear SSH desde afuera
iptables -A INPUT -i eth0 -p TCP --dport 22 -m state --state NEW -j DROP # Bloquear X11 desde afuera
iptables -A INPUT -i eth0 -p TCP --dport 6000 -m state --state NEW -j DROP # Bloquear rpcbind desde afuera
iptables -A INPUT -i eth0 -p TCP --dport 111 -m state --state NEW -j DROP # Permitir salida de la LAN
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE # ---
# Denegar el acceso a sitios web # denegar acseso a jugarjuegos.com
iptables -A FORWARD -d 207.44.228.41 -j REJECT # denegar acseso a juegos666.com
iptables -A FORWARD -d 207.44.134.136 -j REJECT # denegar acseso a minijuegos.com
iptables -A FORWARD -d 80.69.64.154 -j REJECT iptables -A FORWARD -d 67.19.243.131 -j REJECT iptables -A FORWARD -d 80.69.64.200 -j REJECT # denegar acseso a juegosjuegos.com
iptables -A FORWARD -d 66.98.172.17 -j REJECT # denegar acseso a elchat.com
iptables -A FORWARD -d 200.76.190.254 -j REJECT # denegar acseso a latinchat.com
iptables -A FORWARD -d 62.37.236.14 -j REJECT iptables -A FORWARD -d 200.68.58.83 -j REJECT iptables -A FORWARD -d 200.68.58.76 -j REJECT # denegar acseso a latinchat.cl
iptables -A FORWARD -d 200.74.171.188 -j REJECT # denegar acseso a michat.com
iptables -A FORWARD -d 213.41.125.162 -j REJECT # denegar acseso a juegos10.com
iptables -A FORWARD -d 66.98.192.66 -j REJECT iptables -A FORWARD -d 67.19.251.114 -j REJECT # denegar acseso a juegos.com
iptables -A FORWARD -d 161.58.17.20 -j REJECT # denegar acseso a geojuegos.com
iptables -A FORWARD -d 62.151.20.51 -j REJECT # denegar acseso a estasmuerto.com
iptables -A FORWARD -d 205.209.172.112 -j REJECT # denegar acseso a tonterias.com
# denegar acseso a quefuerte.com
iptables -A FORWARD -d 194.143.194.246 -j REJECT # denegar acseso a estasvivo.com
iptables -A FORWARD -d 65.75.182.200 -j REJECT # denegar acseso a podrido.com
iptables -A FORWARD -d 207.44.238.114 -j REJECT # denegar acseso a jocjuegos.com
iptables -A FORWARD -d 212.0.105.123 -j REJECT iptables -A FORWARD -d 213.86.246.154 -j REJECT # denegar acseso a rotten.com
iptables -A FORWARD -d 216.218.248.174 -j REJECT # denegar acseso a 1001juegos.com
iptables -A FORWARD -d 64.49.219.154 -j REJECT # denegar acseso a 101juegos.com
iptables -A FORWARD -d 212.227.34.3 -j REJECT # denegar acseso a barbie.com
iptables -A FORWARD -d 200.68.58.71 -j REJECT # denegar acseso a cartoonnetwork.com
iptables -A FORWARD -d 207.25.71.118 -j REJECT iptables -A FORWARD -d 64.236.16.231 -j REJECT # denegar acseso a l1.lopeor.com
iptables -A FORWARD -d 207.21.211.86 -j REJECT # denegar acseso a cartoonnetwork.cl
iptables -A FORWARD -d 207.25.71.228 -j REJECT # denegar acseso a jetrixtv.com
iptables -A FORWARD -d 199.181.132.33 -j REJECT # denegar acseso a miniclick.com
iptables -A FORWARD -d 64.40.102.42 -j REJECT # denegar acseso a irc.cl
iptables -A FORWARD -d 200.14.80.69 -j REJECT # denegar acseso a etc.cl
iptables -A FORWARD -d 200.29.0.11 -j REJECT # denegar acseso a latinchat
iptables -A FORWARD -d 200.68.58.70 -j REJECT iptables -A FORWARD -d 200.68.58.101 -j REJECT iptables -A FORWARD -d 213.149.241.129 -j REJECT iptables -A FORWARD -d 200.68.58.98 -j REJECT # denegar acseso a juegosjuegos.com
iptables -A FORWARD -d 67.19.251.90 -j REJECT iptables -A FORWARD -d 217.11.100.83 -j REJECT iptables -A FORWARD -d 207.21.211.56 -j REJECT # denegar acseso a escalofrio.com
iptables -A FORWARD -d 80.69.64.112 -j REJECT # denegar acseso a private.com
# denegar acceso a miniclip.comv
iptables -A FORWARD -d 66.165.172.181 -j REJECT iptables -A FORWARD -d 212.113.31.48 -j REJECT # denegar acceso a irc
iptables -A FORWARD -d 200.83.0.166 -j REJECT # denegar accesoa mejorbusqueda.com
iptables -A FORWARD -d 213.173.190.47 -j REJECT iptables -A FORWARD -d 213.173.188.160 -j REJECT # denegar acceso a juegoramas.com
iptables -A FORWARD -d 64.233.246.142 -j REJECT iptables -A FORWARD -d 64.235.246.150 -j REJECT iptables -A FORWARD -d 64.235.246.158 -j REJECT iptables -A FORWARD -d 64.235.246.141 -j REJECT # denegar accesoa chile.com/chat
iptables -A FORWARD -d 200.29.90.58 -j REJECT # denegar acceso a terra.cl/chat
iptables -A FORWARD -d 200.28.222.214 -j REJECT # denegar acceso a canal13.cl/chat
iptables -A FORWARD -d 200.27.99.32 -j REJECT # Fin del script
7.2.- Fichero de Configuración Servidor FTP (proftpd.conf).
# Configuracion basica de ProFTPD # Luis Vega M.
# [email protected] # FTP de Uso Interno
ServerName "I. Municipalidad de Chanco."
ServerType standalone
DefaultServer on
# Permitir Resumir
AllowStoreRestart on
# Puerto Standard del FTP
Port 21
# Umask 022 is a good standard umask to prevent new dirs and files # from being group and world writable.
Umask 022
# To prevent DoS attacks, set the maximum number of child processes # to 30. If you need to allow more than 30 concurrent connections # at once, simply increase this value. Note that this ONLY works # in standalone mode, in inetd mode you should use an inetd server # that allows you to limit maximum number of processes per service # (such as xinetd).
MaxInstances 30
# Set the user and group under which the server will run.
User nobody
Group nogroup
# To cause every FTP user to be "jailed" (chrooted) into their home # directory, uncomment this line.
DefaultRoot ~
# Normally, we want files to be overwriteable.
7.3.- Pantallas de módulos funcionales Sitio Web.
A.- Índice Noticioso.
Figura 15. Pantalla de la página Índice Noticioso. B.- Solicitud de Información Turística.
C.- Respuesta al enviar formulario de solicitud.
Figura 17. Respuesta al enviar una solicitud de información. D.- Formulario de contacto.
Figura 18. Formulario de Contacto. E.- Chat.
No se mostrará el sistema de estadísticas ya que una imagen de él ya fue mostrada en la figura 13, además no es parte de la programación el sitio porque es un servicio gratuito que ofrece netstadbasic.net.
7.4 Códigos módulos funcionales Sitio Web.
A.- Índice Noticioso.
Es solo código HTML que no tiene mayor programación esa es la razón por la que se sugirió un sistema automatizado de noticias.
<table width="95%" border="0" align="center" cellpadding="3" cellspacing="0" height="1319"> <tr>
<td height="10" valign="top"><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="10"><strong>
<font size="1" face="Verdana"><img src="images/arrow.gif" width="7" height="7"></font></strong></td>
<td><strong>
<font size="2" face="Verdana" color="#000000"> ÍNDICE NOTICIOSO</font></strong></td> </tr> </table></td> </tr> <tr> <td valign="top" height="1297"> <p align="left">
<font color="#FFFFFF" face="Verdana" size="1"> ...<br> </font><b><font face="Verdana" size="2">
<font color="#800000">
<a href="noticias/halcones_fotos.htm">FOTOS HALCONES
TOUR 2005</a></font><a href="noticias/halcones_fotos.htm">.</a></font><font color="#800000" face="Verdana" size="2"><br>
</font></b>
<font face="Verdana" size="1" color="#000000">Chanco (21
de febrero 2005).<br>
Imágenes de la espectacular presentación del Grupo Halcones de la Fuerza Aérea de Chile (FACH) en la celebración de sus 75 años.<br>
<b>Página con fotos
<a href="noticias/halcones_fotos.htm">1</a> y
<a href="noticias/halcones_fotos2.htm">2</a>.</b><br> </font><b><font face="Verdana" size="1">
<br> </font></b> </td>
</tr> </table>
B.- Solicitud de información turística.
• Comprobar si hemos recibido datos de algún formulario.
La variable HTTP_POST_VARS, se encarga de verificar si hemos enviado datos a través de algún formulario, en este caso la antepone un signo “!”, lo que quiere decir es “si es diferente a”, si es positivo, entonces mostrará el formulario de contacto, de lo contrario “else” que esta mas abajo, enviará lo que hay en HTTP_POST_VARS.
<?
if (!$HTTP_POST_VARS){ ?>
• Creación del formulario.
El formulario poseerá unos check box para seleccionar el o los tipo de información que el visitante desee, luego mas abajo habrán campos de texto que el visitante tendrá que llenar para poder saber sus datos y así enviarle la información. No se usa ningún tipo de validación.
<form action="turismo.php" method=post>
<table border="1" cellpadding="3" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber4" bgcolor="#C0C0C0"> <tr>
<td width="50%"><font face="Verdana" color="#000000" size="2"> <b>
<input type="checkbox" name="general" value="Folleto información general de la comuna">Folleto información general de la comuna</b></font></td>
</tr> <tr>
<td width="50%"><font face="Verdana" color="#000000" size="2"> <b>
<input type="checkbox" name="urbana" value="Folleto Zona Urbana">Folleto Zona Urbana</b></font></td>
</tr> <tr>
<td width="50%"><font face="Verdana" color="#000000" size="2"> <b>
<input type="checkbox" name="calendario" value="Calendario de eventos">Calendario de eventos</b></font></td>
</tr> <tr>
<td width="50%"><font face="Verdana" color="#000000" size="2"> <b>
<input type="checkbox" name="areas" value="Folleto de áreas naturales">Folleto de áreas naturales</b></font></td>
</tr> <tr>
<td width="50%"><font face="Verdana" color="#000000" size="2"> <b>
<input type="checkbox" name="borde" value="Folleto borde costero">Folleto borde costero</b></font></td>
</tr> <tr>
<td width="50%"><font face="Verdana" color="#000000" size="2"> <b>
<input type="checkbox" name="servicios" value="Guía de comercio y servicios">Guía de comercio y servicios</b></font></td>
<tr>
<td width="50%"><font face="Verdana" color="#000000" size="2"> <b>
<input type="checkbox" name="mapa" value="Mapa Rutero">Mapa Rutero</b></font></td> </tr>
</table>
<p align="justify"><b><font face="Verdana" size="2">Datos del solicitante:<br>
</font></b><table border="1" cellpadding="3" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber5" bgcolor="#C0C0C0">
<tr>
<td width="15%"><b><font face="Verdana" size="2">Nombre Completo</font></b></td> <td width="85%">
<p>
<input type="text" name="nombre" size="34"></p> </td>
</tr> <tr>
<td width="15%"><b><font face="Verdana" size="2">Dirección</font></b></td> <td width="85%"><input type="text" name="direccion" size="35"></td>
</tr> <tr>
<td width="15%"><b><font face="Verdana" size="2">Ciudad</font></b></td> <td width="85%"><input type="text" name="ciudad" size="20"></td>
</tr> <tr>
<td width="15%"><b><font face="Verdana" size="2">Región</font></b></td> <td width="85%"><input type="text" name="region" size="5"></td>
</tr> <tr>
<td width="15%"><b><font face="Verdana" size="2">País</font></b></td> <td width="85%"><input type="text" name="pais" size="25"></td>
</tr> <tr>
<td width="15%"><b><font face="Verdana" size="2">E-Mail</font></b></td> <td width="85%"><input type="text" name="email" size="30"></td>
</tr> <tr>
<td width="15%" valign="top"><b><font face="Verdana" size="2">Comentarios</font></b></td> <td width="85%">
<p>
<textarea rows="8" name="comentarios" cols="26"></textarea></p> </td></tr>
<tr>
<td width="15%"> </td> <td width="85%"><p>
<input type="submit" value="Enviar" name="enviar"> <input type="reset" value="Limpiar" name="limpiar"></p> </td> </tr> </table>
</form>
Si nos fijamos bien es un formulario que se llama así mismo y que tiene como método de envío post, el cual permite enviar los datos por la entrada estándar STDIO.
A cada elemento del formulario se le da un nombre que luego se usará como variable en el código PHP. Al final del formulario hay declarado un botón que tiene como acción enviar (submit) todos los datos del formulario y un botón que tiene como acción reset, el cual borra todos los datos escritos en los campos de textos.
• Código PHP que permitirá enviar le formulario por mail. Declaramos $hostname para saber el nombre del host del visitante. Declaramos $hostaddressip para saber la dirección IP del visitante.
Y por ultimo creamos el cuerpo del mensaje con la variable $cuerpo. Observar el uso de “.=”, para indicar que el contenido de la línea va junta con la anterior.
Usamos isset para evaluar si la variable esta declarada.
Usamos la función mail() que provee PHP para el envío del formulario al los correos indicados.
<? }else{
//Estoy recibiendo el formulario, compongo el cuerpo
$hostname = gethostbyaddr($_SERVER['REMOTE_ADDR']); $hostaddressip = $_SERVER['REMOTE_ADDR'];
$cuerpo = "Solicitud de informacion turisica.\n";
$cuerpo .= "Desde: " . $hostname . " con IP: " . $hostaddressip . "\n \n"; if (isset($_POST["general"])) $cuerpo .= $HTTP_POST_VARS["general"] . "\n"; if (isset($_POST["urbana"])) $cuerpo .= $HTTP_POST_VARS["urbana"] . "\n"; if (isset($_POST["calendario"])) $cuerpo .= $HTTP_POST_VARS["calendario"] . "\n"; if (isset($_POST["areas"])) $cuerpo .= $HTTP_POST_VARS["areas"] . "\n"; if (isset($_POST["borde"])) $cuerpo .= $HTTP_POST_VARS["borde"] . "\n"; if (isset($_POST["servicios"])) $cuerpo .= $HTTP_POST_VARS["servicios"] . "\n"; if (isset($_POST["mapa"])) $cuerpo .= $HTTP_POST_VARS["mapa"] . "\n";
$cuerpo .= "\n Nombre: " . $HTTP_POST_VARS["nombre"] . "\n"; $cuerpo .= "Direccion: " . $HTTP_POST_VARS["direccion"] . "\n"; $cuerpo .= "Ciudad: " . $HTTP_POST_VARS["ciudad"] . "\n"; $cuerpo .= "Region: " . $HTTP_POST_VARS["region"] . "\n"; $cuerpo .= "Pais: " . $HTTP_POST_VARS["pais"] . "\n"; $cuerpo .= "E-Mail: " . $HTTP_POST_VARS["email"] . "\n";
$cuerpo .= "Comentarios: \n \n " . $HTTP_POST_VARS["comentarios"] . "\n"; //mando el correo...
mail("[email protected], [email protected]","Solicitud de Informacion Turistica",$cuerpo); //doy las gracias por el envío;
echo "<font face=\"Verdana\" size=\"2\">";
echo "<font color=\"800000\" face=\"Verdana\" size=\"2\"><b>SOLICITUD DE INFORMACION TURISTICA</b></font><br><br>";
echo "Gracias por rellenar el formulario. Se ha enviado correctamente."; echo "<br><a href=\"turismo.php\">Enviar otra solicitud</a>";
echo "</font>"; }
C.- Formulario de contacto.
Tiene un parecido con el formulario anterior, solo que acá no hacemos uso de check box, si no que una lista desplegable.
• Primero evaluamos si hay datos por enviar en el formulario.
<?
if (!$HTTP_POST_VARS){ ?>
• Luego creamos el formulario
<form action="recomendar.php" method=post> <tr>
<td width="16%" align="justify"><font face="Verdana" size="2">Nombre: </font></td> <td width="84%" align="justify"><input type=text name="nombre" size=30></td> </tr>
<tr>
<td width="16%" align="justify"><font face="Verdana" size="2">Tu E-Mail: </font></td> <td width="84%" align="justify"><input type=text name=email size=20></td>
</tr> <tr>
<td width="16%" align="justify"><font face="Verdana" size="2">Dirigido a: </font></td> <td width="84%" align="justify">
<select size="1" name="dirigido">
<option selected value="Alcaldesa">Alcaldesa</option> <option value="Concejales">Concejales</option>
<option value="Secretaria Municipal">Secretaria Municipal</option> <option value="Finanzas">Finanzas</option>
<option value="Informatica">Informática</option> <option value="Control">Control</option>
<option value="Relaciones Publicas">Relaciones Públicas</option> <option value="Salud">Salud</option>
<option value="Educacion">Educación</option> <option value="Turismo">Turismo</option>
<option value="Transito y Patentes">Tránsito y Patentes</option> <option value="Social">Social</option>
<option value="Obras">Obras</option> <option value="Prodesal">Prodesal</option> <option value="Omdel">Omdel</option>
<option value="Juzgado de Policia Local">Juzgado de Policia Local</option> <option value="*Otros">*Otros</option>
</select> </td> </tr> <tr>
<td width="16%" align="justify"><font face="Verdana" size="2">Comentarios: </font></td> <td width="84%" align="justify"><textarea name=coment cols=30 rows=10></textarea></td> </tr>
<tr>
<td width="16%" align="justify"></td>
<td width="84%" align="justify"><input type=submit value="Enviar"> <input type=reset value="Limpiar"></td>
</tr> </form>
• Enviamos el formulario
Se especifica el o los correos de destino, además se envían el nombre del host y la IP del visitante.
<? }else{
//Estoy recibiendo el formulario, compongo el cuerpo
$hostname = gethostbyaddr($_SERVER['REMOTE_ADDR']); $hostaddressip = $_SERVER['REMOTE_ADDR'];
$cuerpo = "Mensaje desde el Sitio Web de Chanco.\n";
$cuerpo .= "Desde: " . $hostname . " con IP: " . $hostaddressip . "\n"; $cuerpo .= "Nombre: " . $HTTP_POST_VARS["nombre"] . "\n"; $cuerpo .= "Email: " . $HTTP_POST_VARS["email"] . "\n"; $cuerpo .= "Dirigido a: " . $HTTP_POST_VARS["dirigido"] . "\n"; $cuerpo .= "Comentarios: \n \n " . $HTTP_POST_VARS["coment"] . "\n"; //mando el correo...
mail("[email protected], [email protected]","Contacto desde el Sitio Web de Chanco",$cuerpo); //doy las gracias por el envío;
echo "<font face=\"Verdana\" size=\"2\">";
echo "<font color=\"004080\" face=\"Verdana\" size=\"2\"><b>CONTÁCTESE CON LA ILUSTRE MUNICIPALIDAD DE CHANCO</b></font><br><br>";
echo "Gracias por rellenar el formulario. Se ha enviado correctamente."; echo "<br><a href=\"recomendar.php\">Enviar otro mensaje</a>"; echo "</font>";
} ?>
D.- Chat.
El Chat está programado completamente en ASP y no fue programado por el Webmaster, es por esto que no se darán mayores detalles. Se compone de un frame con dos divisiones, una superior y una inferior. La página principal que muestra los frames es la siguiente.
<html> <head>
<title>Chanco Chat</title> </head>
<frameset rows="280,180" noresize> <frame SRC="visualizacion.asp"> <frame SRC="incluir.asp" target="_self"> <noframes> <body> </body> </noframes> </frameset> </html>
E.- Visualización del Chat
Muestra los datos que son enviados por el visitante en la división inferior de la página.