Add spanish version of "Dialup Firewall with FreeBSD" article.
Submitted by: carvay@tikismikis.org
This commit is contained in:
parent
aca4521a51
commit
7af6bacb39
Notes:
svn2git
2020-12-08 03:00:23 +00:00
svn path=/head/; revision=19687
2 changed files with 443 additions and 0 deletions
14
es_ES.ISO8859-1/articles/dialup-firewall/Makefile
Normal file
14
es_ES.ISO8859-1/articles/dialup-firewall/Makefile
Normal file
|
@ -0,0 +1,14 @@
|
|||
# $FreeBSD$
|
||||
|
||||
DOC?= article
|
||||
|
||||
FORMATS?= html
|
||||
|
||||
INSTALL_COMPRESSED?=gz
|
||||
INSTALL_ONLY_COMPRESSED?=
|
||||
|
||||
SRCS= article.sgml
|
||||
|
||||
DOC_PREFIX?= ${.CURDIR}/../../..
|
||||
|
||||
.include "${DOC_PREFIX}/share/mk/doc.project.mk"
|
429
es_ES.ISO8859-1/articles/dialup-firewall/article.sgml
Normal file
429
es_ES.ISO8859-1/articles/dialup-firewall/article.sgml
Normal file
|
@ -0,0 +1,429 @@
|
|||
<!--
|
||||
The FreeBSD Documentation Project
|
||||
-->
|
||||
|
||||
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook V4.1-Based Extension//EN" [
|
||||
<!ENTITY % man PUBLIC "-//FreeBSD//ENTITIES DocBook Manual Page Entities//EN">
|
||||
%man;
|
||||
]>
|
||||
|
||||
<article lang=es>
|
||||
<articleinfo>
|
||||
<title>Cortafuegos con Dialup en FreeBSD</title>
|
||||
|
||||
<authorgroup>
|
||||
<author>
|
||||
<firstname>Marc</firstname>
|
||||
<surname>Silver</surname>
|
||||
|
||||
<affiliation>
|
||||
<address><email>marcs@draenor.org</email></address>
|
||||
</affiliation>
|
||||
</author>
|
||||
</authorgroup>
|
||||
|
||||
<pubdate>$FreeBSD$</pubdate>
|
||||
|
||||
<abstract>
|
||||
<para>En éste artículo se describe cómo
|
||||
configurar un cortafuegos que utiliza conexión PPP con
|
||||
FreeBSD e IPFW y más concretamente el uso de un
|
||||
cortafuegos en una conexión telefónica
|
||||
a la que se le asigna una IP dinámica. Éste
|
||||
documento no se ocupa de la configuración de la
|
||||
conexión PPP necesaria.</para>
|
||||
</abstract>
|
||||
</articleinfo>
|
||||
|
||||
<sect1 id="preface">
|
||||
<title>Prefacio</title>
|
||||
|
||||
<para>Uso de un Cortafuegos en una Conexión Telefónica
|
||||
en FreeBSD</para>
|
||||
|
||||
<para>En éste documento se expone el proceso necesario para
|
||||
configurar un cortafuegos en FreeBSD cuando la dirección IP
|
||||
es asignada dinámicamente por el ISP. Aunque se ha hecho
|
||||
todo lo posible por hacer éste documento tan informativo
|
||||
y correcto como sea posible puede enviar comentarios y/o
|
||||
sugerencias al autor a <email>marcs@draenor.org</email>, que
|
||||
serán bien recibidas.</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="kernel">
|
||||
<title>Configuración del Kernel</title>
|
||||
|
||||
<para>Lo primero que tendrá que hacer es recompilar su
|
||||
kernel. Si necesita más información sobre cómo
|
||||
hacerlo el mejor recurso es <ulink
|
||||
URL="../../books/handbook/kernelconfig.html">la sección de
|
||||
Handbook acerca de la configuración del
|
||||
kernel</ulink>. Necesitará añadir a su fichero de
|
||||
configuración del kernel las siguientes opciones:</para>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><literal>options IPFIREWALL</literal></term>
|
||||
|
||||
<listitem>
|
||||
<para>Activa el código necesario para el cortafuegos
|
||||
en el kernel.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><literal>options IPFW2</literal></term>
|
||||
|
||||
<listitem>
|
||||
<para>Activa la nueva versión de IPFW.</para>
|
||||
<important><para>Esto solo debe hacerse en FreeBSD 4.X puesto
|
||||
que en las versiones más recientes vienen incluído
|
||||
por defecto.</para></important>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><literal>options IPFIREWALL_VERBOSE</literal></term>
|
||||
|
||||
<listitem>
|
||||
<para>Envia los paquetes que se ha decidido sean incluídos
|
||||
en un <filename>log</filename> a la aplicación encargada
|
||||
de gestionar los <filename>logs</filename> del sistema.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><literal>options
|
||||
IPFIREWALL_VERBOSE_LIMIT=<replaceable>100</replaceable></literal></term>
|
||||
|
||||
<listitem>
|
||||
<para>Limita el número de veces que una entrada que cumple
|
||||
las reglas puede ser incluída en los <filename>logs
|
||||
</filename> del sistema. Esto previene que sus <filename>logs
|
||||
</filename> se vean inundados por entradas repetidas.
|
||||
<replaceable>100</replaceable> es un número razonable,
|
||||
pero puede ajustarlo a sus necesidades.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><literal>options IPDIVERT</literal></term>
|
||||
|
||||
<listitem>
|
||||
<para>Activa los <quote>sockets</quote> <emphasis>divert</emphasis>,
|
||||
que serán descritos más tarde.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
|
||||
<para>Hay otras entradas <emphasis>opcionales</emphasis> que pueden
|
||||
compilarse en el kernel para incrementar la seguridad. No hacen
|
||||
falta para el funcionamiento del cortafuegos pero algunos usuarios
|
||||
especialmente paranoicos pueden querer usarlos.</para>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><literal>options TCP_DROP_SYNFIN</literal></term>
|
||||
|
||||
<listitem>
|
||||
<para>Ignorar paquetes TCP con SYN y FIN. Esto evita ser
|
||||
vulnerable al uso de herramientas como
|
||||
<filename role="package">security/nmap</filename>, que permiten
|
||||
identificar la pila TCP/IP de la máquina, pero incumple
|
||||
el soporte a las extensiones incluídas en el
|
||||
RFC1644. <emphasis>No</emphasis> se recomienda hacer tal cosa
|
||||
si la máquina va a ejecutar un servidor web.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
|
||||
<para>No reinicie tras recompilar el kernel. Si todo sale bien
|
||||
sólo necesitaremos reiniciar una vez en todo el proceso
|
||||
de instalación del cortafuegos.</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="rcconf">
|
||||
<title>Modificación de <filename>/etc/rc.conf</filename> para
|
||||
cargar el cortafuegos</title>
|
||||
|
||||
<para>Necesitamos hacer algunos cambios en
|
||||
<filename>/etc/rc.conf</filename> para darle ciertos detalles
|
||||
del cortafuegos. Es tan simple como añadir las siguientes
|
||||
líneas:</para>
|
||||
|
||||
<programlisting>firewall_enable="YES"
|
||||
firewall_script="/etc/firewall/fwrules"
|
||||
natd_enable="YES"
|
||||
natd_interface="tun0"
|
||||
natd_flags="-dynamic"</programlisting>
|
||||
|
||||
<para>Para más información sobre éstas entradas
|
||||
consulte
|
||||
<filename>/etc/defaults/rc.conf</filename> y lea
|
||||
&man.rc.conf.5;</para>
|
||||
</sect1>
|
||||
|
||||
<sect1>
|
||||
<title>Desactivación de la Traducción de Direcciones
|
||||
de Red (NAT) de PPP</title>
|
||||
|
||||
<para>Es posible que ya esté usando la NAT que incluye
|
||||
PPP. Si es su caso tendrá que desactivarla puesto que
|
||||
los casos que vamos a usar emplean &man.natd.8; para hacerlo.</para>
|
||||
|
||||
<para>Si ya dispone de un grupo de entradas para arrancar
|
||||
automáticamente PPP probablemente se parezca a
|
||||
ésto:</para>
|
||||
|
||||
<programlisting>ppp_enable="YES"
|
||||
ppp_mode="auto"
|
||||
ppp_nat="YES"
|
||||
ppp_profile="<replaceable>profile</replaceable>"</programlisting>
|
||||
|
||||
<para>Si es su caso, tendrá que desactivar
|
||||
específicamente <literal>ppp_nat</literal>
|
||||
asegurándose de que
|
||||
<literal>ppp_nat="NO"</literal> existe en su
|
||||
in <filename>/etc/rc.conf</filename>. Tendrá tambié que
|
||||
borrar todas las entradas como
|
||||
<literal>nat enable yes</literal> o
|
||||
<literal>alias enable yes</literal> en
|
||||
<filename>/etc/ppp/ppp.conf</filename>.</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="rules">
|
||||
<title>Las Reglas del Cortafuegos</title>
|
||||
|
||||
<para>Casi hemos acabado. Lo único que nos falta es
|
||||
definir las reglas del cortafuegos, reiniciar y deberíamos
|
||||
tener nuestro cortafuegos funcionando perfectamente. Soy
|
||||
consciente de que cada cual tendrá necesidades distintas
|
||||
como reglas básicas. He intentado escribir unas reglas
|
||||
básicas que puedan cubrir las necesidades de un usuario
|
||||
de conexión telefónica normal. Vamos a comenzar
|
||||
por lo básico de un cortafuegos cerrado. Lo que se
|
||||
busca es rechazar todo por defecto y dejar pasar solamente
|
||||
lo que necesitemos. Las reglas deberían ir en la forma
|
||||
<quote>al principio permitir, luego rechazar</quote>. La premisa
|
||||
es que vamos a an˜adir reglas para lo que vamos a aceptar y
|
||||
luego rechazamos todo lo demás. :)</para>
|
||||
|
||||
<para>Ahora vamos a crear el directorio <filename
|
||||
class="directory">/etc/firewall</filename>. Sitúese en el
|
||||
directorio y edite el fichero <filename>fwrules</filename> tal y
|
||||
como hemos escrito dentro de <filename>rc.conf</filename>. Por favor,
|
||||
no olvide que puede cambiar el nombre del fichero por cualquier otro
|
||||
que prefiera. Éste documento solamente facilita un ejemplo
|
||||
del nombre del fichero.</para>
|
||||
|
||||
<para>Vamos a echar un vistazo a un ejemplo de fichero de
|
||||
configuración del cortafuegos que hemos comentado
|
||||
cuidadosamente.</para>
|
||||
|
||||
<programlisting># Definimos el comando con el que invocamos al cortafuegos
|
||||
# (tal y como hemos incluído en /etc/rc.firewall) para
|
||||
# facilitarnos la lectura.
|
||||
fwcmd="/sbin/ipfw"
|
||||
|
||||
# Fuerza el borrado de todas las reglas existentes en nuestro
|
||||
# cortafuegos antes de cargar el contenido de éste fichero.
|
||||
$fwcmd -f flush
|
||||
|
||||
# Desvía todos los paquetes a través del interfaz tunnel.
|
||||
$fwcmd add divert natd all from any to any via tun0
|
||||
|
||||
# Permite todas las conexiones incluídas en reglas
|
||||
# dinámicas pero rechaza todas aquellas conexiones
|
||||
# establecidas que no estén incluídas en alguna
|
||||
# regla dinámica.
|
||||
$fwcmd add check-state
|
||||
$fwcmd add deny tcp from any to any established
|
||||
|
||||
# Aceptar todas las conexiones de localhost.
|
||||
$fwcmd add allow tcp from me to any out via lo0 setup keep-state
|
||||
$fwcmd add deny tcp from me to any out via lo0
|
||||
$fwcmd add allow ip from me to any out via lo0 keep-state
|
||||
|
||||
# Aceptar todas las conexiones desde mi tarjeta de red que yo inicie.
|
||||
$fwcmd add allow tcp from me to any out xmit any setup keep-state
|
||||
$fwcmd add deny tcp from me to any
|
||||
$fwcmd add allow ip from me to any out xmit any keep-state
|
||||
|
||||
# Todo el mundo a lo largo y ancho de Internet puede conectarse
|
||||
# a los siguientes servicios de la máquina. Éste
|
||||
# ejemplo permite específicamente las conexiones a sshd
|
||||
# y al servidor web.
|
||||
$fwcmd add allow tcp from any to me dst-port 22,80 in recv any setup keep-state
|
||||
|
||||
# Ésto envía un RESET a todos los paquetes ident.
|
||||
$fwcmd add reset log tcp from any to me 113 in recv any
|
||||
|
||||
# Activa ICMP: borre el tipo 8 si no quiere que su máquina
|
||||
# responda al ping.
|
||||
$fwcmd add allow icmp from any to any icmptypes 0,3,8,11,12,13,14
|
||||
|
||||
# Rechazamos todo lo demás.
|
||||
$fwcmd add deny log ip from any to any</programlisting>
|
||||
|
||||
<para>Ya tiene usted un cortafuegos totalmente funcional que
|
||||
acepta todas las conexiones a los puertos 22 y 80 y registrará
|
||||
cualquier otro tipo de intento de conexión en un fichero
|
||||
<filename>log</filename>. Ahora podemos reiniciar tranquilamente
|
||||
y su cortafuegos debería empezar a trabajar tal y como le
|
||||
hemos dicho. Si le parece que hay algún dato incorrecto o
|
||||
tiene alguna sugerencia para mejorar éste documento por
|
||||
favor envíeme un correo electrónico.</para>
|
||||
</sect1>
|
||||
|
||||
<sect1>
|
||||
<title>Preguntas</title>
|
||||
|
||||
<qandaset>
|
||||
<qandaentry>
|
||||
<question>
|
||||
<para>¿Por qué utiliza &man.natd.8; y
|
||||
&man.ipfw.8; cuando podría usar los filtros
|
||||
incluídos en &man.ppp.8;?</para>
|
||||
</question>
|
||||
|
||||
<answer>
|
||||
<para>Seré honesto y diré que no hay una
|
||||
razón clara por la que use <command>ipfw</command> y
|
||||
<command>natd</command> en lugar de los filtros que incorpora
|
||||
<command>ppp</command>. Tras hablarlo con mucha gente el
|
||||
consenso parece ser que <command>ipfw</command>
|
||||
es mucho más potente y configurable que el filtrado
|
||||
de <command>ppp</command> pero lo que se gana en
|
||||
funcionalidad lo pierde en facilidad de
|
||||
personalización. Una de las razones por las que
|
||||
prefiero usar esas aplicaciones es que creo má conveniente
|
||||
ejecutar un cortafuegos desde el kernel que desde una
|
||||
aplicación de entorno de usuario.</para>
|
||||
|
||||
</answer>
|
||||
</qandaentry>
|
||||
|
||||
<qandaentry>
|
||||
<question>
|
||||
<para>Me aparecen mensajes como <errorname>limit 100 reached on
|
||||
entry 2800</errorname> y después de eso ya no me aparecen
|
||||
más entradas indicando tráfico rechazado en mis
|
||||
<filename>logs</filename>. ¿Funciona mi
|
||||
cortafuegos?</para>
|
||||
</question>
|
||||
|
||||
<answer>
|
||||
<para>Esto significa simplemente que se ha alcanzado el
|
||||
máximo de entradas que pueden incluírse en el
|
||||
<filename>log</filename> cuando una determinada regla
|
||||
se ha cumplido. Esa regla sigue
|
||||
funcionando pero no enviaría más entradas al
|
||||
<filename>log</filename> hasta que el contador vuelva a
|
||||
cero. Puede poner a cero ese contador mediante
|
||||
<command>ipfw resetlog</command>. Además es posible
|
||||
elevar el límite de entradas a introducir en el
|
||||
<filename>log</filename> incluyendo la <quote>option</quote>
|
||||
<option>IPFIREWALL_VERBOSE_LIMIT</option> en el fichero de
|
||||
de configuración del kernel. Por otra parte puede
|
||||
modificar ese valor (sin modificar su kernel y en consecuencia
|
||||
sin reiniciar la máquina) mediante el valor de
|
||||
&man.sysctl.8; net.inet.ip.fw.verbose_limit.</para>
|
||||
</answer>
|
||||
</qandaentry>
|
||||
|
||||
<qandaentry>
|
||||
<question>
|
||||
<para>Supongamos que estoy usando direcciones privadas internas,
|
||||
por ejemplo el rango 192.168.0.0. ¿Puedo añadir
|
||||
una regla al cortafuegos mediante un comando como
|
||||
<literal>$fwcmd add
|
||||
deny all from any to 192.168.0.0:255.255.0.0 via tun0</literal>
|
||||
para prevenir intentos de acceso desde el exterior para conectar
|
||||
con máquinas de mi red?.</para>
|
||||
</question>
|
||||
|
||||
<answer>
|
||||
<para>La respuesta corta es no. La razón es que
|
||||
<command>natd</command> efectúa la traducción
|
||||
de direcciones para <emphasis>cualquier cosa</emphasis> que
|
||||
sea redirigida a través del dispositivo
|
||||
<devicename>tun0</devicename>. Eso significa que todos los
|
||||
paquetes entrantes hablarán exclusivamente con la IP
|
||||
asignada dinámicamente y <emphasis>no</emphasis> con la
|
||||
red interna. Hay que tener en cuenta sin embargo que es posible
|
||||
añadir una regla como
|
||||
<literal>$fwcmd add deny all from 192.168.0.4:255.255.0.0
|
||||
to any via tun0</literal>, que evitaría que una de las
|
||||
máquinas de esa red enviara tráfico al exterior
|
||||
a través del cortafuegos.</para>
|
||||
</answer>
|
||||
</qandaentry>
|
||||
|
||||
<qandaentry>
|
||||
<question>
|
||||
<para>Debo de haber hecho algo mal. He seguido las instrucciones
|
||||
al pie de la letra y no tengo acceso a Internet.</para>
|
||||
</question>
|
||||
|
||||
<answer>
|
||||
<para>Estamos asumiendo que está usando
|
||||
<emphasis>userland-ppp</emphasis>, en consecuencia el conjunto
|
||||
de reglas que aquí se proponen operan en el interfaz
|
||||
<devicename>tun0</devicename>, que corresponde a la primera
|
||||
conexión efectuada mediante &man.ppp.8; (más
|
||||
conocido como <emphasis>user-ppp</emphasis>). Las conexiones
|
||||
efectuadas más tarde recibirán nombres como
|
||||
<devicename>tun1</devicename>, <devicename>tun2</devicename> y
|
||||
así sucesivamente.</para>
|
||||
|
||||
<para>Hay que tener también presente que &man.pppd.8;
|
||||
en cambio utiliza el interfaz <devicename>ppp0</devicename>,
|
||||
de modo que si se inicia la conexión con &man.pppd.8; hay
|
||||
que sustituír <devicename>tun0</devicename> por
|
||||
<devicename>ppp0</devicename>. A continuación se muestra
|
||||
una forma muy limpia de modificar las reglas del
|
||||
cortafuegos. Conservaremos un fichero con las reglas originales
|
||||
con el nombre de
|
||||
<filename>fwrules_tun0</filename>.</para>
|
||||
|
||||
<screen> &prompt.user; <userinput>cd /etc/firewall</userinput>
|
||||
/etc/firewall&prompt.user; <userinput>su</userinput>
|
||||
<prompt>Password:</prompt>
|
||||
/etc/firewall&prompt.root; <userinput>mv fwrules fwrules_tun0</userinput>
|
||||
/etc/firewall&prompt.root; <userinput>cat fwrules_tun0 | sed s/tun0/ppp0/g > fwrules</userinput>
|
||||
</screen>
|
||||
|
||||
<para>Para saber exactamente si está usando &man.ppp.8; o
|
||||
&man.pppd.8; examine la salida de &man.ifconfig.8; una vez que
|
||||
establezca la conexión. V.g., en una conexión
|
||||
hecha mediante &man.pppd.8; debería encontrarse con
|
||||
algo muy similar a lo siguiente (se muestran sólo las
|
||||
líneas relevantes):</para>
|
||||
|
||||
<screen> &prompt.user; <userinput>ifconfig</userinput>
|
||||
<emphasis>(eliminado...)</emphasis>
|
||||
ppp0: flags=<replaceable>8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1524</replaceable>
|
||||
inet <replaceable>xxx.xxx.xxx.xxx</replaceable> --> <replaceable>xxx.xxx.xxx.xxx</replaceable> netmask <replaceable>0xff000000</replaceable>
|
||||
<emphasis>(eliminado...)</emphasis>
|
||||
</screen>
|
||||
|
||||
|
||||
<para>Si por el contrario la conexión fué
|
||||
establecida mediante &man.ppp.8;
|
||||
(<emphasis>user-ppp</emphasis>) ésto es más o
|
||||
menos lo que se encontraría:</para>
|
||||
|
||||
<screen> &prompt.user; <userinput>ifconfig</userinput>
|
||||
<emphasis>(eliminado...)</emphasis>
|
||||
ppp0: flags=<replaceable>8010<POINTOPOINT,MULTICAST> mtu 1500</replaceable>
|
||||
<emphasis>(skipped...)</emphasis>
|
||||
tun0: flags=<replaceable>8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1524</replaceable>
|
||||
<emphasis>(IPv6 stuff skipped...)</emphasis>
|
||||
inet <replaceable>xxx.xxx.xxx.xxx</replaceable> --> <replaceable>xxx.xxx.xxx.xxx</replaceable> netmask <replaceable>0xffffff00</replaceable>
|
||||
Opened by PID <replaceable>xxxxx</replaceable>
|
||||
<emphasis>(eliminado...)</emphasis></screen>
|
||||
</answer>
|
||||
</qandaentry>
|
||||
</qandaset>
|
||||
</sect1>
|
||||
</article>
|
Loading…
Reference in a new issue