FireWall in FreeBSD.

30.4. IPFW
IPFW es un firewall stateful escrito para FreeBSD que soporta IPv4 e IPv6. Se
compone de varios componentes: el procesador regla de filtro cortafuegos del
núcleo y su instalación integrada de contabilidad de paquetes, la facilidad de
registro, NAT, el dummynet (4) de conformación de tráfico, servicio de adelante,
un crédito puente, y una instalación ipstealth.
FreeBSD ofrece un conjunto de reglas de ejemplo en /etc/rc.firewall que
define varios tipos de firewall para escenarios comunes para ayudar a los nuevos
usuarios en la generación de un conjunto de reglas apropiado. IPFW proporciona
un potente sintaxis que los usuarios avanzados pueden usar para elaborar
conjuntos de reglas personalizadas que cumplan con los requisitos de seguridad
de un entorno determinado.
En esta sección se describe cómo habilitar IPFW, ofrece una visión general de su
sintaxis regla, y demuestra varios conjuntos de reglas para escenarios comunes
de configuración.
30.4.1. Habilitación IPFW
IPFW está incluido en el FreeBSD instalación básica como módulo del kernel, lo
que significa que no es necesario un kernel personalizado para permitirIPFW.
Para aquellos usuarios que desean compilar estáticamente apoyo IPFW en un
kernel personalizado, consulte las instrucciones en el capítulo 9,Configuración
del kernel de FreeBSD . Las siguientes opciones están disponibles para el
archivo de configuración del kernel personalizado:
Opciones IPFIREWALL # permite IPFW
Opciones IPFIREWALL_VERBOSE # Habilita el registro de reglas con la
palabra clave de registro
Opciones IPFIREWALL_VERBOSE_LIMIT = 5 # límites número de paquetes
registrados por entrada
opciones de política IPFIREWALL_DEFAULT_TO_ACCEPT # sets por defecto
para pasar lo que no se negó explícitamente
Opciones IPDIVERT # permite NAT
Para configurar el sistema para permitir IPFW en el arranque, agregue la
siguiente entrada a /etc/rc.conf :
firewall_enable = "YES"
Para utilizar uno de los tipos de cortafuegos por defecto proporcionados por
FreeBSD, añadir otra línea que especifica el tipo:
firewall_type = "open"
Los tipos disponibles son:







: todo el tráfico que pasa.
client : protege sólo esta máquina.
simple : protege toda la red.
closed : desactiva por completo el tráfico IP a excepción de la interfaz de
bucle invertido.
workstation : sólo protege esta máquina utilizando reglas con estado.
UNKNOWN : desactiva la carga de reglas de firewall.
filename : ruta completa del archivo que contiene el conjunto de reglas de
firewall.
open
Si firewall_type se establece en cualquiera de client o simple , modificar las
reglas predeterminadas que se encuentran en /etc/rc.firewall para adaptarse a
la configuración del sistema.
Tenga en cuenta que el filename tipo se utiliza para cargar un conjunto de reglas
de encargo.
Una forma alternativa de cargar un reglamento personalizado es establecer
el firewall_script variable para la ruta absoluta de un script ejecutable que
incluye comandos IPFW. Los ejemplos utilizados en esta sección asumen que
el firewall_script se establece en /etc/ipfw.rules :
firewall_script = "/ etc / ipfw.rules"
Para habilitar el registro, incluya esta línea:
firewall_logging = "YES"
No hay /etc/rc.conf variable para establecer límites de tala. Para limitar el
número de veces que una regla se registra por intento de conexión, especifique el
número con esta línea en /etc/sysctl.conf :
net.inet.ip.fw.verbose_limit = 5
Después de guardar los cambios necesarios, inicie el firewall. Para activar límites
de registro ahora, también establecer el sysctl valor especificado anteriormente:
# service ipfw start
# sysctl net.inet.ip.fw.verbose_limit= 5
30.4.2. Sintaxis de reglas de IPFW
Cuando un paquete entra en el servidor de seguridad IPFW, que se compara con
la primera regla en el conjunto de reglas y progresa una regla a la vez,
moviéndose de arriba a abajo en secuencia. Cuando el paquete coincide con los
parámetros de selección de una regla, se ejecuta la acción de la regla y la
búsqueda del conjunto de reglas termina para ese paquete. Esto se conoce
como "gana el primer partido". Si el paquete no coincide con ninguna de las
reglas, se ve atrapado por la obligatoria regla número
predeterminado IPFW 65535, que niega todos los paquetes y en silencio los
descarta. Sin embargo, si el paquete coincide con una regla que contiene
los count , skipto o tee palabras clave, la búsqueda
continúa. Consulte ipfw (8) para más detalles sobre estas palabras clave afectan
el proceso de reglas.
Al crear una regla de IPFW, palabras clave deben escribirse en el siguiente
orden. Algunas palabras clave son obligatorios mientras que otras palabras clave
son opcionales. Las palabras que se muestran en mayúsculas representan una
variable y las palabras que se muestran en minúsculas debe preceder la variable
que le sigue. El # símbolo se utiliza para marcar el inicio de un comentario y puede
aparecer al final de una regla o en su propia línea. Las líneas en blanco se
ignoran.
CMD RULE_NUMBER set SET_NUMBER ACTION log LOG_AMOUNT PROTO from
SRC SRC_PORT to DST DST_PORT OPTIONS
Esta sección proporciona una visión general de estas palabras clave y sus
opciones. No es una lista exhaustiva de todas las opciones
posibles. Consulteipfw (8) para obtener una descripción completa de la sintaxis
de reglas que se puede utilizar al crear reglas de IPFW.
CMD
Cada regla debe comenzar con ipfw add .
RULE_NUMBER
Cada regla está asociada con un número de 1 a 65534 . El número se utiliza
para indicar el orden de procesamiento de reglas. Normas múltiples pueden
tener el mismo número, en cuyo caso se aplican de acuerdo con el orden
en que se han añadido.
SET_NUMBER
Cada regla está asociada a un número determinado de 0 a 31 . Los
conjuntos se pueden bloquear o habilitar de forma individual, por lo que es
posible añadir o eliminar un conjunto de reglas rápidamente. Si no se
especifica un SET_NUMBER, se agregará la regla para establecer 0 .
ACCIÓN
Una regla puede estar asociada con una de las siguientes acciones. La
acción especificada se ejecutará cuando el paquete coincide con el criterio
de selección de la regla.
: estas palabras clave son equivalentes y
permiten que los paquetes que coincidan con la regla.
allow | accept | pass | permit
: comprueba el paquete contra la tabla de estado dinámico. Si
se encuentra una coincidencia, ejecutar la acción asociada con la regla que
generó esta regla dinámica, si no pasar a la siguiente regla. Un checkstate regla no tiene criterio de selección. Si no hay ningún checkstate regla está presente en el conjunto de reglas, la tabla de reglas
dinámicas se comprueba en el primer keep-state o limit regla.
check-state
: actualizaciones de contadores para todos los paquetes que
coincidan con la regla. La búsqueda continúa con la siguiente regla.
count
: o palabra silenciosamente descarta los paquetes que
cumplen esta regla.
deny | drop
Acciones adicionales están disponibles. Consulte ipfw (8) para más
detalles.
LOG_AMOUNT
Cuando un paquete coincide con una regla con el log la palabra clave, un
mensaje se registrará en syslogd (8) con un nombre de la instalación
deSECURITY . Inicio de sesión sólo se produce si el número de paquetes
registrados para esa regla concreta no supere un LOG_AMOUNT
especificado.Si no se especifica LOG_AMOUNT, el límite se toma del valor
de net.inet.ip.fw.verbose_limit . Un valor de cero elimina el límite de
registro. Una vez que se alcanza el límite, el registro se puede volver a
activar en la limpieza del mostrador de registro o el contador de paquetes
para esa regla, utilizando ipfw reset log .
Nota:
El registro se realiza después de que se han cumplido todas las demás
condiciones que coinciden paquete, y antes de realizar la acción final en
el paquete. El administrador decide qué reglas para permitir iniciar la
sesión.
PROTO
Este valor opcional se puede utilizar para especificar cualquier nombre de
protocolo o el número que se encuentra en /etc/protocols .
SRC
El from la palabra clave debe ser seguido por la dirección de origen o una
palabra clave que representa la dirección de origen. Una dirección puede
ser representado por any , me (cualquier dirección configurada en una
interfaz de este sistema), me6 , (cualquier dirección IPv6 configurado en
una interfaz de este sistema), o table seguido por el número de una tabla
de consulta que contiene una lista de direcciones. Al especificar una
direcciónIP, se puede opcionalmente seguido de su máscara CIDR o
máscara de subred. Por ejemplo, 1.2.3.4/25 o 1.2.3.4:255.255.255.128 .
SRC_PORT
Un puerto de origen opcional se puede especificar utilizando el número de
puerto o el nombre de /etc/services .
DST
El to debe ir seguida por la dirección de destino o una palabra clave que
representa la dirección de destino. Las mismas palabras clave y direcciones
descritos en la sección SRC se pueden utilizar para describir el destino.
DST_PORT
Un puerto de destino se puede especificar utilizando el número de puerto o
el nombre de /etc/services .
OPCIONES
Varias palabras clave pueden seguir el origen y el destino. Como su
nombre indica, las opciones son opcionales. Opciones usadas comúnmente
incluyen in o out , que especifican la dirección del flujo de
paquetes, icmptypes seguido por el tipo de mensaje ICMP, y keep-state .
Cuando un keep-state se corresponde regla, el firewall crear una regla
dinámica que coincide con el tráfico bidireccional entre las direcciones y los
puertos de origen y de destino utilizando el mismo protocolo.
La instalación reglas dinámicas es vulnerable a agotamiento de los recursos
de un ataque SYN-inundación que abriría un gran número de reglas
dinámicas. Para contrarrestar este tipo de ataque
con IPFW, utilice limit . Esta opción limita el número de sesiones
simultáneas marcando las reglas dinámicas abiertas, contando el número
de veces que se produjo esta regla y la combinación de la dirección IP. Si
este contador es mayor que el valor especificado por limit , el paquete se
descarta.
Decenas de opciones están disponibles. Consulte ipfw (8) para obtener
una descripción de cada opción disponible.
30.4.3. Ejemplo de conjuntos de reglas
En esta sección se muestra cómo crear un ejemplo stateful firewall guión conjunto
de reglas con nombre /etc/ipfw.rules . En este ejemplo, todas las reglas de
conexión utilicen in o out de aclarar la dirección. También utilizan via interfacename para especificar la interfaz que el paquete está viajando más.
Nota:
Cuando primero crear o probar un conjunto de reglas de firewall, considere
temporalmente establecer este sintonizable:
net.inet.ip.fw.default_to_accept = "1"
Esto establece la política por defecto de ipfw (8) para ser más permisivo que el
defecto deny ip from any to any , por lo que es un poco más difícil de conseguir
encerrados fuera del sistema después de un reinicio.
El script de firewall comienza indicando que es un script de shell Bourne y los
colores de las normas vigentes. A continuación, crea el cmd variable de modo
que ipfw add no tiene que ser escrito en el comienzo de cada regla. También
define el pif variable que representa el nombre de la interfaz que está conectado
a la Internet.
#! / Bin / sh
# Lave la lista antes de comenzar.
ras -f ipfw -q
Reglas # Establecer prefijo de comando
cmd = "ipfw -q agregar"
pif = "dc0" # nombre del interfaz de NIC conectado a Internet
Las dos primeras reglas permiten todo el tráfico en la interfaz interna de confianza
y en la interfaz de bucle invertido:
# Cambio xl0 a nombre de la interfaz LAN NIC
$ Cmd 00005 permitir que todos los de cualquier a cualquier vía xl0
# No hay restricciones a la Interfaz loopback
$ Cmd 00010 permitir que todos los de cualquier a cualquier vía lo0
La siguiente regla permite que el paquete a través de si coincide con una entrada
existente en la tabla de reglas dinámica:
$ Cmd 00101 check-estado
El siguiente conjunto de reglas que define conexiones stateful sistemas internos
pueden crear a los hosts en Internet:
# Permitir el acceso a DNS público
# Reemplace xxxx con la dirección IP de un servidor DNS público
# Y repita para cada servidor DNS en /etc/resolv.conf
$ Cmd 00110 permiten tcp de cualquier a xxxx 53 a través de la
configuración pif $-estado mantener
$ Cmd 00111 permitir udp desde cualquier a xxxx 53 a través de $ pifestado mantener
# Permitir el acceso al servidor DHCP del ISP para configuraciones de
cable / DSL.
# Utilice la primera regla y comprobar ingrese la dirección IP.
# A continuación, elimine la segunda regla, introduzca la dirección IP y
eliminar la primera regla
$ Cmd 00120 permitir udp registro de cualquier a cualquier 67 a través
de $ pif-estado mantener
# $ Cmd 00120 permitir udp desde cualquier a xxxx 67 a través de $ pifestado mantener
# Permitir conexiones HTTP y HTTPS salientes
$ Cmd 00200 permiten tcp de cualquier a cualquier 80 a través de la
configuración pif $-estado mantener
$ Cmd 00220 permiten tcp de cualquier a cualquier 443 a través de la
configuración pif $-estado mantener
# Permitir conexiones de correo electrónico salientes
$ Cmd 00230 permiten tcp de cualquier a cualquier 25 a través de la
configuración pif $-estado mantener
$ Cmd 00231 permiten tcp de cualquier a cualquier 110 a través de la
configuración pif $-estado mantener
# Deje de ping saliente
$ Cmd 00250 permiten icmp desde cualquier a cualquier cabo a través de $
pif-estado torreón
# Permitir NTP saliente
$ Cmd 00260 permiten tcp de cualquier a cualquier 37 a través de la
configuración pif $-estado mantener
# Permitir SSH salientes
$ Cmd 00280 permiten tcp de cualquier a cualquier 22 a través de la
configuración pif $-estado mantener
# Negar y registrar todas las otras conexiones salientes
$ Cmd 00299 deny registrar toda la de cualquier a cualquier cabo a
través de $ pif
El siguiente conjunto de reglas controla las conexiones de servidores de Internet a
la red interna. Comienza negando paquetes típicamente asociados con los
ataques y luego permite explícitamente determinados tipos de conexiones. Todos
los servicios autorizados que se originan en el uso de Internet limitpara evitar las
inundaciones.
# Denegar todo el tráfico entrante de espacios de direcciones
reservadas no enrutables
$ Cmd 00300 niegan todo desde 192.168.0.0/16 a cualquier via #RFC $ pif
1918 IP privada
$ Cmd 00301 niegan todo desde 172.16.0.0/12 a cualquier via #RFC $ pif
1918 IP privada
$ Cmd 00.302 niegan todo desde 10.0.0.0/8 a cualquier via #RFC $ pif
1918 IP privada
$ CMD 00303 niegan todo desde 127.0.0.0/8 a cualquier vía en $ pif
#loopback
$ CMD 00304 niegan todo desde 0.0.0.0/8 a cualquier vía en $ pif
#loopback
$ Cmd 00305 niegan todo desde 169.254.0.0/16 a cualquier vía en $ #DHCP
pif auto-config
$ Cmd 00306 niegan todo desde 192.0.2.0/24 a cualquier vía en $ pif
#reserved para docs
$ Cmd 00.307 niegan todo desde 204.152.64.0/23 a cualquier vía en $ pif
interconexión del clúster #Sun
$ Cmd 00308 niegan todo desde 224.0.0.0/3 a cualquier vía en $ pif
#Class D & E multidifusión
# Denegar pings públicos
$ Cmd 00310 niegan icmp desde cualquier a cualquier vía en $ pif
# Denegar ident
$ Cmd 00315 niegan tcp de cualquier a cualquier 113 en vía $ pif
# Denegar todos los servicios de NetBIOS.
$ Cmd 00320 niegan tcp de cualquier a cualquier 137 en vía $ pif
$ Cmd 00321 niegan tcp de cualquier a cualquier 138 en vía $ pif
$ Cmd 00322 niegan tcp de cualquier a cualquier 139 en vía $ pif
$ Cmd 00323 niegan tcp de cualquier a cualquier 81 en medio de $ pif
# Denegar fragmentos
$ Cmd 00330 niegan todo desde cualquier a cualquier fragmentación en
medio de $ pif
# Denegar paquetes ACK que no coinciden con la tabla de reglas dinámica
$ Cmd 00332 niegan tcp de cualquier a cualquier establecida en medio de
$ pif
# Permitir el tráfico del servidor DHCP del ISP.
# Reemplace xxxx con la misma dirección IP que se utiliza en la regla
00120.
# $ Cmd 00360 permitir udp desde cualquier a xxxx 67 en medio de $ pifestado mantener
# Permitir conexiones HTTP al servidor web interno
$ Cmd 00400 permiten tcp de cualquier conmigo 80 en medio de $ límite
configuración pif src-addr 2
# Permitir conexiones SSH entrantes
$ Cmd 00410 permiten tcp de cualquier conmigo 22 en medio de $ límite
configuración pif src-addr 2
# Rechazar y registrar todas las conexiones entrantes
$ Cmd 00.499 deny registrar toda la de cualquier de cualquier vía en $
pif
La última regla registra todos los paquetes que no coinciden con ninguna de las
reglas en el conjunto de reglas:
# Todo lo demás es negada y se registra
$ Cmd 00.999 deny registrar toda la de cualquier a cualquier
30.4.4. Configuración de NAT
Contribución de Chern Lee.
FreeBSD incorporado en demonio NAT, natd (8) , trabaja en conjunto
con IPFW para proporcionar traducción de direcciones de red. Esto se puede
utilizar para proporcionar una solución de conexión compartida a Internet para que
varios ordenadores internos pueden conectarse a Internet mediante una única
dirección IP.
Para ello, la máquina FreeBSD conectado a Internet debe actuar como puerta de
entrada. Este sistema debe tener dos NIC s, donde uno está conectado a Internet
y el otro está conectado a la LAN interna. Cada máquina conectada a la red local
debe asignar una dirección IP en el espacio de la red privada, como se define
en el RFC 1918 , y tienen la puerta de enlace predeterminada se establece en
la natd (8) dirección IP interna del sistema.
Se necesita alguna configuración adicional con el fin de activar la función
de NAT de IPFW. Si el sistema tiene un kernel personalizado, el archivo de
configuración del kernel debe incluir option IPDIVERT junto con los
otros IPFIREWALL opciones descritas en la Sección 30.4.1, "Habilitación
de IPFW" .
Para habilitar el soporte de NAT en el arranque, el siguiente tiene que estar
en /etc/rc.conf :
gateway_enable = "YES" # permite la entrada
natd_enable = "YES" # permite NAT
natd_interface = "rl0" # especificar nombre de la interfaz de NIC
conectado a Internet
natd_flags = "- -m dinámica" # -m = conservar los números de puerto;
Opciones adicionales figuran en natd (8)
Nota:
También es posible especificar un archivo de configuración que contiene las
opciones de pasar a natd (8) :
natd_flags = "- f /etc/natd.conf"
El archivo especificado debe contener una lista de opciones de configuración, uno
por línea. Por ejemplo:
redirect_port tcp 192.168.0.2:6667 6667
tcp redirect_port 192.168.0.3:80 80
Para obtener más información acerca de este archivo de configuración,
consulte natd (8) .
A continuación, agregue las reglas NAT al conjunto de reglas de firewall. Cuando
el enseñoreas contiene reglas con estado, el posicionamiento de las reglas
de NAT es crítica y la skipto se utiliza la acción. El skipto acción requiere un
número de la regla para que sepa qué regla saltar.
El siguiente ejemplo se basa en el conjunto de reglas de cortafuegos se muestra
en la sección anterior. Añade algunas entradas adicionales y modifica algunas
normas existentes con el fin de configurar el firewall para NAT. Se inicia mediante
la adición de algunas variables adicionales que representan el número de regla
para saltar, el keep-state opción, y una lista de los puertos TCP que se utilizarán
para reducir el número de reglas:
#! / Bin / sh
ras -f ipfw -q
cmd = "ipfw -q agregar"
skip = "skipto 500"
pif = dc0
ks = "mantener el estado"
good_tcpo = "22,25,37,53,80,443,110"
La regla NAT entrante se inserta después de las dos reglas que permiten todo el
tráfico en la interfaz interna de confianza y en la interfaz de bucle de retorno
y antes del check-state regla. Es importante que el número regla seleccionada
para esta regla NAT, en este ejemplo 100 , es más alto que las dos primeras
reglas e inferior a la check-state regla:
$ Cmd 005 permitir que todos desde cualquier a cualquier vía xl0 #
excluir el tráfico LAN
$ Cmd 010 permitir que todos desde cualquier a cualquier vía Lo0 #
excluir el tráfico loopback
$ Cmd 100 desviar ip natd de cualquiera a cualquiera en medio de $ pif #
NAT todos los paquetes entrantes
# Permitir el paquete a través de si tiene una entrada existente en la
tabla de reglas dinámica
$ 101 cmd check-estado
Las reglas de salida se modifican para reemplazar al allow la acción con
el $skip variables, lo que indica que el proceso de reglas continuará en
regla 500 .Los siete tcp reglas han sido reemplazados por la
regla 125 como $good_tcpo variable contiene los siete puertos salientes
permitidos.
# paquetes de salida autorizados
$ 120 $ cmd saltar udp desde cualquier a xxxx 53 a través de $ pif $ ks
$ 121 $ cmd saltar udp desde cualquier a xxxx 67 a través de $ pif $ ks
$ 125 $ cmd saltar tcp de cualquier a cualquier $ good_tcpo a cabo a
través de $ configuración pif $ ks
$ 130 $ cmd saltar icmp desde cualquier a cualquier cabo a través de $
pif $ ks
Las reglas de entrada siguen siendo los mismos, a excepción de la última regla
que elimina el via $pif para coger reglas entrantes y salientes. La
reglaNAT debe seguir esta última regla de salida, debe tener un número mayor
que la última regla, y el número de la regla debe ser referenciado por
el skiptoacción. En este conjunto de reglas, la regla número 500 desvía todos los
paquetes que se ajustan a las reglas de salida a natd (8) para el procesamiento
deNAT. La siguiente regla permite que cualquier paquete que ha sufrido una
transformación NAT pasar.
$ Cmd 499 deny registrar toda la de cualquier a cualquier
$ Cmd 500 desvío ip natd de cualquier a cualquier cabo a través de $ pif
# Ubicación skipto de reglas con estado de salida
$ Cmd 510 permiten ip de cualquier a cualquier
En este ejemplo, las reglas 100 , 101 , 125 , 500 , y 510 de control de la traducción
de direcciones de la salida y de los paquetes de entrada para que las entradas de
la tabla de estado dinámico siempre registran la dirección IP de la LAN privada.
Considere la posibilidad de un navegador web interno que inicializa una nueva
sesión HTTP saliente a través del puerto 80. Cuando el primer paquete saliente
entra en el servidor de seguridad, que no coincide con la regla 100 , ya que se
dirige a cabo en lugar de en. Pasa a la regla 101 , porque este es el primer
paquete y no se ha publicado en la tabla de estado dinámico todavía. El paquete
finalmente coincide con la regla 125 , ya que es de salida en un puerto permitido y
tiene una dirección IP de origen de la LAN interna. En coincidiendo esta regla,
dos acciones tienen lugar. En primer lugar, el keep-stateacción agrega una
entrada a la tabla de estado dinámico y la acción especificada, skipto rule 500 ,
se ejecuta. A continuación, el paquete se somete a NATy se envía a
Internet. Este paquete se abre paso en el servidor web de destino, donde se
genera un paquete de respuesta y enviado de vuelta. Este nuevo paquete entra en
la parte superior del conjunto de reglas. Coincide con la regla 100 y tiene su
dirección IP de destino asignado a la dirección interna originales. Luego es
procesada por el check-state general, se encuentra en la tabla como una sesión
existente, y se libera a la LAN.
En el lado de entrada, el conjunto de reglas tiene que negar los paquetes erróneos
y permitir que los servicios autorizados. Un paquete que coincide con una regla de
entrada se contabiliza en la tabla de estado dinámico y el paquete se libera a
la LAN. El paquete generado como respuesta es reconocido por el checkstate regla como pertenecientes a una sesión existente. Se envía entonces a
gobernar 500 a someterse a NAT antes de ser liberado a la interfaz de salida.
30.4.4.1. Puerto de redirección
El inconveniente con natd (8) es que los clientes de LAN no son accesibles
desde Internet. Los clientes de la LAN pueden hacer conexiones salientes al
mundo, pero no pueden recibir los entrantes. Esto presenta un problema si intenta
ejecutar los servicios de Internet en una de las máquinas cliente LAN.Una forma
sencilla de evitar esto es redireccionar puertos de Internet seleccionados en
el natd (8) de la máquina a un cliente LAN.
Por ejemplo, un servidor de IRC se ejecuta en el cliente A y un servidor web se
ejecuta en el cliente B . Para que esto funcione correctamente, las conexiones
recibidas en los puertos 6667 (IRC) y 80 (HTTP) debe ser redirigido a las
respectivas máquinas.
La sintaxis para -redirect_port es como sigue:
targetIP proto -redirect_port: targetPORT [-targetPORT]
[AliasIP:] aliasPORT [-aliasPORT]
[RemoteIP [: RemotePort [-remotePORT]]]
En el ejemplo anterior, el argumento debe ser:
tcp -redirect_port 192.168.0.2:6667 6667
tcp -redirect_port 192.168.0.3:80 80
Esto redirige los puertos TCP propias a las máquinas clientes de LAN.
Rangos de puertos a través de puertos individuales se pueden indicar con redirect_port . Por ejemplo, tcp 192.168.0.2:2000-3000 2000-3000 sería redirigir
todas las conexiones recibidas en los puertos 2000 a 3000 a los puertos 2000 a
3000 en el cliente A .
Estas opciones se pueden utilizar cuando se ejecuta directamente natd (8) ,
colocado dentro de los natd_flags="" opción en /etc/rc.conf , o se pasan a
través de un archivo de configuración.
Para más opciones de configuración, consulte natd (8)
30.4.4.2. Dirección redirección
Redirección de direcciones es útil si más de una dirección IP está
disponible. Cada cliente LAN puede asignar su propia dirección IP externa
por natd (8) , que se vuelva a grabar paquetes que salen de los clientes de
LAN con la dirección IP externa adecuada y redirige todo el tráfico entrante de
esa direcciónIP en particular vuelta al cliente LAN específico. Esto también se
conoce como NAT estática. Por ejemplo,
si las direcciones IP 128.1.1.1 , 128.1.1.2 , y128.1.1.3 están
disponibles, 128.1.1.1 se puede utilizar como el (8) natd dirección IP externa de
la máquina, mientras que 128.1.1.2 y 128.1.1.3 se envían de nuevo
a LAN clientes A y B .
El -redirect_address sintaxis es la siguiente:
-redirect_address LocalIP publicIP
LocalIP
publicIP
La dirección IP interna del cliente de LAN.
La dirección IP externa correspondiente a la LAN cliente.
En el ejemplo, este argumento sería el siguiente:
-redirect_address 192.168.0.2 128.1.1.2
-redirect_address 192.168.0.3 128.1.1.3
Como -redirect_port , estos argumentos se colocan dentro de
los natd_flags="" opción de /etc/rc.conf , o se pasan a través de un archivo de
configuración.Con la redirección de direcciones, no hay necesidad de redirección
de puertos ya que todos los datos recibidos en una determinada dirección IP se
redirige.
Las direcciones IP externas en la natd (8) de la máquina deben estar activos y
alias a la interfaz externa. Consulte rc.conf (5) para más detalles.
30.4.5. El Comando IPFW
puede ser utilizado para hacer, adiciones de reglas sencillas manuales o
supresiones al cortafuegos activo mientras se está ejecutando. El problema con el
uso de este método es que todos los cambios se pierden cuando se reinicia el
sistema. Se recomienda no escribir todas las reglas en un archivo y utilizar ese
archivo para cargar las reglas en el arranque y para reemplazar las reglas de
firewall actualmente en ejecución siempre que los cambios en los archivos.
ipfw
es una forma útil para mostrar los que se ejecutan las reglas del cortafuegos
a la pantalla de la consola. La función de cuentas IPFW crea dinámicamente un
contador para cada regla que cuenta cada paquete que coincide con la
regla. Durante el proceso de probar una regla, la regla de la lista con su mostrador
es una manera de determinar si la regla está funcionando como se esperaba.
ipfw
Para una lista de todas las reglas de funcionamiento en secuencia:
# ipfw list
Para una lista de todas las reglas de funcionamiento con una marca de tiempo de
cuando la última vez que la regla fue igualada:
# ipfw -t list
El siguiente ejemplo enumera la información contable y la cantidad de paquetes de
reglas coincidentes, junto con las propias normas. La primera columna es el
número de la regla, seguido por el número de paquetes y bytes emparejados,
seguido por la regla misma.
# ipfw -a list
Para una lista de reglas dinámicas, además de reglas estáticas:
# ipfw -d list
Para mostrar las reglas dinámicas caducados:
# ipfw -d -e list
Para poner a cero los contadores:
# ipfw zero
Para poner a cero los contadores de sólo la regla número NUM :
# ipfw zero NUM
30.4.5.1. Registro de mensajes del servidor de seguridad
Incluso con la facilidad de registro habilitado, IPFW no generará ningún registro
regla por sí misma. El administrador del servidor de seguridad decide que
gobierna en el conjunto de reglas se registrarán, y agrega el log de palabras clave
a esas reglas. Normalmente sólo niegan reglas se registran. Se acostumbra a
duplicar el "default ipfw niegan todo" regla con el log palabra clave incluida
como la última regla en el conjunto de reglas. De esta manera, es posible ver
todos los paquetes que no coinciden con ninguna de las reglas en el conjunto de
reglas.
El registro es un arma de doble filo. Si uno no es cuidadoso, una abundancia
excesiva de datos de registro o un ataque DoS puede llenar el disco con archivos
de registro. Mensajes de registro no sólo se escriben en syslogd, pero también se
muestran en la pantalla de la consola raíz y pronto se convierten molesto.
El IPFIREWALL_VERBOSE_LIMIT=5 opción del kernel limita el número de mensajes
consecutivos enviados a syslogd (8) , relativa a la adaptación de paquetes de
una regla dada. Cuando esta opción está activada en el kernel, el número de
mensajes consecutivos en relación con una regla en particular tiene un tope en el
número especificado. No hay nada que ganar de 200 mensajes de registro
idénticos. Con esta opción se ajusta a cinco, cinco mensajes consecutivos
relativos a una regla particular se registran en syslogd y el resto mensajes
consecutivos idénticos serían contados y se publicarán a syslogd con una frase
como la siguiente:
último mensaje repitió 45 veces
Todos los mensajes de paquetes registrados se escriben de forma predeterminada
en /var/log/security , que se define en /etc/syslog.conf .
30.4.5.2. La construcción de una secuencia de comandos Regla
La mayoría de los usuarios experimentados IPFW crear un archivo que contiene
las reglas y el código de una manera compatible con el funcionamiento de ellos
como un guión. El principal beneficio de hacer esto es las reglas del firewall se
pueden actualizar en masa sin necesidad de reiniciar el sistema para
activarlos. Este método es conveniente en el ensayo de nuevas normas y el
procedimiento se puede realizar tantas veces como sea necesario. Siendo una
secuencia de comandos, la sustitución simbólica puede ser utilizado para valores
utilizados con frecuencia para estar sustituido en varias reglas.
Este script de ejemplo es compatible con la sintaxis utilizada por
el sh (1) , csh (1) , y tcsh (1) conchas. Campos de sustitución simbólicos son
prefijadas con un símbolo de dólar ($). Campos simbólicos no tienen el prefijo $. El
valor para rellenar el campo simbólico debe ir entre comillas ("").
Iniciar el archivo de reglas de esta manera:
############### Empezar de ejemplo ipfw guión reglas #############
#
ipfw -q -f flush # Borra todas las reglas
# Defina los valores predeterminados
OIF = # cabo interfaz "tun0"
ODN = "192.0.2.11" dirección IP del servidor DNS de su proveedor de
Internet #
cmd = "ipfw -q añadir" prefijo regla de construcción #
ks = "mantener el estado" # demasiado perezosos para teclear esto cada
vez
$ Cmd 00500 check-estado
$ Cmd 00502 niegan todo desde cualquier a cualquier frag
$ Cmd 00501 niegan tcp de cualquier a cualquier establecida
$ Cmd 00600 permiten tcp de cualquier a cualquier 80 a través de $ oif
setup $ ks
$ Cmd 00610 permiten tcp de cualquier a $ ODN 53 a través de $ oif setup
$ ks
$ Cmd 00611 permiten udp desde cualquier a $ ODN 53 a través de $ OIF $
ks
################### Fin del ejemplo ipfw guión reglas ############
Las reglas no son importantes como es el foco de este ejemplo de cómo se llenan
los campos de sustitución simbólicos.
Si el ejemplo anterior estaba en /etc/ipfw.rules , las reglas pueden ser
recargadas mediante el siguiente comando:
# sh /etc/ipfw.rules
pueden ser ubicadas en cualquier parte y el archivo puede tener
cualquier nombre.
/etc/ipfw.rules
Lo mismo podría lograrse mediante la ejecución de estos comandos a mano:
# ipfw -q -f flush
# ipfw -q add check-state
# ipfw -q add deny all from any to any frag
# ipfw -q add deny tcp from any to any established
# ipfw -q add allow tcp from any to any 80 out via tun0 setup keep-state
# ipfw -q add allow tcp from any to 192.0.2.11 53 out via tun0 setup
keep-state
# ipfw -q add 00611 allow udp from any to 192.0.2.11 53 out via tun0
keep-state