Cómo escribir rutas para el enrutador freebsd manualmente. Configuración de un enrutador FreeBSD

13.04.2022

Router wifi con servidores DHCP y DNS FreeBSD 8.2

Lo que queremos conseguir:
- para que los clientes Wi-Fi estén en la misma subred que los cableados.
- para que los clientes cableados e inalámbricos reciban direcciones automáticamente a través de DHCP
- tener un DNS de almacenamiento en caché
- por supuesto, queremos que todos se conecten
- tener acceso RDP al servidor interno

En general, queremos obtener algo similar en funcionalidad al enrutador Dlink DIR-300

Que tenemos:
Celeron 700, 256 MB de RAM, 80 GB de tornillo IDE y una extraña madre que solo funciona con cordura con ACPI desactivado
tarjetas de red:

LAN - rl0 (10\100 algunos Realtek encontrados detrás de un armario en el trabajo) [correo electrónico protegido]:1 :8 :0 :clase=0x020000 tarjeta=0x813910ec chip=0x813910ec rev=0x10 hdr=0x00 proveedor = dispositivo "Realtek Semiconductor" = familia Realtek RTL8139 PCI FastEthernet NIC RTL- 8139 /8139C/8139D clase = subclase de red = ethernet WAN - stge0 (10\100\1000 adaptador asus) [correo electrónico protegido]:1 :5 :0 :class=0x020000card=0x81801043chip=0x102313f0 rev=0x41 hdr=0x00 proveedor = "Sundance Technology Inc" dispositivo = "IC Plus IP1000 Family Gigabit Ethernet Adapter" clase = subclase de red = ethernet WLAN - ral0 (tarjeta Wi-Fi económica de Dlink) [correo electrónico protegido]:1 :10 :0 :class=0x028000card=0x3a711186chip=0x03021814 rev=0x00 hdr=0x00 proveedor = "Ralink Technology, Corp." dispositivo = "inalámbrico a/b (RT2525 2 Transceptor .4GHz + RT2560 MAC/BBP)" clase = red

Dirección IP blanca proporcionada por el ISP:
IP 9.9.9.9
mascarilla 255.255.255.0
puerta de enlace 9.9.9.1
DNS1 9.9.9.254
DNS1 9.9.9.253
los escenarios son diferentes a los reales, pero esto no cambia la esencia

Rango LAN: 192.168.0.0 con una máscara de 255.255.255.0

FreeBSD 8.2 instalado:

# uname -a FreeBSD GATE 8 .2 -LIBERAR FreeBSD 8 .2 -LIBERAR #0: sábado 9 de abril 20:13:28 OMSST 2011 [correo electrónico protegido]:/usr/src/sys/i386/compilar/GATE i386

contenido de /etc/rc.conf:

9 .9 .9 .1 9 .9 .9 .9 máscara de red 255 .255 .255 .0 "ifconfig_rl0="inet 192 .168 .0 .1 máscara de red 255 .255 .255 .0 "

contenido de /etc/resolv.conf (servidor DNS):

nombre del servidor 9 .9 .9 .254 nombre del servidor 9 .9 .9 .253

Empecemos a preparar:

Eliminamos todos los controladores innecesarios del kernel (bueno, o no los eliminamos, según le convenga), dejando todos los controladores para dispositivos inalámbricos. Si sabe qué controlador es adecuado para su tarjeta, déjelo y puede eliminar el resto. No sabía cuál me convenía, así que dejé todo. Reconstruye el kernel con opciones:

dispositivo if_bridge # Módulo para operación de puente wifi del dispositivo # Soporte 802.11 (Wifi) # no sé qué es, se carga automáticamente dispositivo wlan_amrr # Algoritmo de control de velocidad de transmisión AMRR dispositivo wlan_xauth # Módulo de soporte de autorización para el modo de punto de acceso dispositivo wlan_wep # Módulo de soporte de algoritmo de seguridad WEP dispositivo wlan_tkip # Módulo de soporte de cifrado TKIP dispositivo wlan_ccmp # Módulo de soporte de cifrado CCMP dispositivo pf # como cortafuegos uso Packet Filter # soporte para algoritmo de cola (priorización de tráfico) opciones ALTQ opciones ALTQ_CBQ # Class Bases Queuing (CBQ) opciones ALTQ_RED # Detección temprana aleatoria (RED) opciones ALTQ_RIO # ROJO Opciones de entrada/salida ALTQ_HFSC # Planificador jerárquico de paquetes (HFSC) opciones ALTQ_PRIQ # Cola de prioridad (PRIQ) # dado que tengo un procesador de un solo núcleo, no necesito soporte para muchos núcleos #opciones ALTQ_NOPCC # Requerido para compilación SMP

construir e instalar el kernel:

#cd/usr/src # hacer buildkernel KERNCONF=GATE && \ hacer installkernel KERNCONF=GATE

Reinicie y vea lo que sucedió:

8843 mtu 1500 opciones=8209b éter 01 :01 :01 :01 :01 :01 inet 9 .9 .9 .9 9 .9 .9 .255 8802 métrico 0 mtu 1500 opciones= 3808 éter 00 :50 :fc :ef:4d: 75 inet 192 .168 .0 .1 máscara de red 0xffffff00 transmisión 192 .168 .0 .255 medios: selección automática de Ethernet (100baseTX 8802 métrico 0 mtu 2290 éter 00 :26 :5a: 77 :38 :ba medios: IEEE 802 .11 Estado de selección automática de Ethernet inalámbrica (autoselección): sin operador lo0: banderas = 8049 mtu 16384 opciones= 3 inet 127 .0 .0 .1 máscara de red 0xff000000

La tarjeta Wi-Fi se definió como ral0. Ya bueno. Puede reconstruir el kernel nuevamente y eliminar los controladores innecesarios para la conexión inalámbrica.

Edite /etc/hostapd.conf a este estado:

Edite /etc/rc.conf:

keymap="en.koi8-r" nombre de host ="GATE" gateway_enable="YES" defaultrouter=" 9 .9 .9 .1 " sshd_enable="SÍ" ifconfig_stge0="inet 9 .9 .9 .9 máscara de red 255 .255 .255 .0 " # configurar la tarjeta inalámbrica como punto de acceso wlans_ral0="wlan0" create_args_wlan0="wlanmode hostap" ifconfig_wlan0="up mediaopt hostap" # eliminar la dirección IP de la interfaz rl0 #ifconfig_rl0="inet 192.168.0.1 máscara de red 255.255.255.0" # crear un puente entre LAN inalámbricas y cableadas # y ponle la dirección IP de la puerta de enlace LAN interfaces_clonadas="puente0" ifconfig_bridge0="inet 192 .168 .0 .1 máscara de red 255 .255 .255 .0 \ addm wlan0 addm rl0 arriba" ifconfig_rl0="arriba" # habilitar la funcionalidad del punto de acceso hostapd_enable="SÍ"

Reiniciamos. Vamos a ver que pasó:

# ifconfig stge0:flags= 8843 mtu 1500 opciones=8209b éter 01 :01 :01 :01 :01 :01 inet 9 .9 .9 .9 máscara de red 0xffffff00 transmisión 9 .9 .9 .255 medios: selección automática de Ethernet (100baseTX ) estado : activo rl0: flags= 8943 mtu 1500 opciones= 3808 éter 00 :50 :fc :ef:4d: 75 medios: selección automática de Ethernet (100baseTX ) estado : activo ral0: banderas = 8843 métrico 0 mtu 2290 éter 00 :26 :5a: 77 :38 :ba medios: IEEE 802 .11 estado: en ejecución lo0: banderas = 8049 métrico 0 mtu 16384 opciones= 3 inet 127 .0 .0 .1 máscara de red 0xff000000 bridge0:flags= 8843 mtu 1500 éter a6: 09 :ed :c1: 23 :38 inet 192 .168 .0 .1 máscara de red 0xffffff00 transmisión 192 .168 .0 .255 identificación 00 :00 :00 :00 :00 :00 prioridad 32768 hola hora 2 retardo de avance 15 maxage 20 mantener 6 proto rstp maxaddr 100 se acabó el tiempo 1200 identificación raíz 00 :00 :00 :00 :00 :00 prioridad 32768 si el costo 0 Puerto 0 miembro: rl0 banderas= 143 ifmaxaddr 0 Puerto 2 prioridad 128 costo de ruta 200000 miembro: banderas wlan0= 143 ifmaxaddr 0 Puerto 6 prioridad 128 costo de ruta 370370 wlan0:banderas= 8943 mtu 1500 éter 00 :26 :5a: 77 :38 :ba medios: IEEE 802 .11 Modo de selección automática de Ethernet inalámbrica 11g estado: ejecutando ssid canal 1 (2412 MHz 11g) bsid 00 :26 :5a: 77 :38 :ba país US authmode WPA2/ 802 .11i privacidad MIXTO deftxkey 2 AES-CCM 2 :128 -bit AES-CCM 3 :128 -bit txpower 0 scanvalid 60 protmode CTS dtimperiod 1 -dfs

Todo está bien, las tarjetas Wi-Fi y cableadas están conectadas por un puente y una dirección IP cuelga de este puente

Comencemos a configurar PF. PF le permite habilitar la priorización del tráfico. Vea una breve descripción aquí:
http://www.freebsd.org/doc/ru/books/handbook/firewalls-pf.html
cree un archivo /usr/local/etc/pf.conf y llévelo al siguiente estado:

# Aquí defino variables con las que me conviene más escribir un script. WAN="stge0" LAN="puente0" LAN_POOL=" 192 .168 .0 .0 /24 "WANIP=" 9 .9 .9 .9 "SERVIDOR=" 192 .168 .0 .3 "ADMINISTRADOR=" 192 .168 .0 .2 "RDP_PORT=" 3389 "EXTRDP_PORT=" 33389 " # el tráfico hacia y desde estos puertos será denegado en la interfaz externa DROP_PORTS="(135: 139 ,445}" # Qué hacer después de golpear un paquete en una regla de bloqueo (bloqueo) # set block-policy drop - descartar el paquete y no hacer nada # establece el rechazo de la política de bloque: rechaza el paquete y envía un mensaje de error # al host que lo envió. establecer caída de política de bloqueo # No verifique el tráfico para lo0 establecer omitir en lo0 # No verifique el tráfico en la interfaz bridge0 (no tenemos restricciones internas) establecer omitir en $LAN # "Normalizar" paquetes. La descripción de esta opción, en mi opinión, es suficiente. # son vagos, pero deberían ayudar contra ciertos tipos de ataques a la red. fregar en todo #Mi velocidad es ~5000 kbps y debe ingresar su velocidad aquí altq en $WAN priq ancho de banda 5000Kb cola (priv, otro) # tengo 2 colas # Para tráfico de mayor prioridad (RDP desde el servidor) qlimit privado de la cola 25 prioridad 14 precio (rojo) # Para todos los demás poner en cola otro qlimit 30 prioridad 10 precio (predeterminado) # Los tamaños de las colas se toman, se podría decir, desde el techo: (No demasiado # Concéntrate en ellos, por favor. Intenta elegir el tamaño de la cola tú mismo # habilitar NAT en la interfaz externa para la red LAN nat en $WAN desde $LAN_POOL a cualquier -> ($WAN) # Reenviar un puerto al servidor Reenviar un puerto diferente al estándar # para protegerse contra los monos de fuerza bruta que escanean puertos estándar rdr en $WAN proto tcp de cualquiera a $WANIP \ puerto $EXTRDP_PORT -> $SERVER puerto $RDP_PORT # Cortar las solicitudes de ping a nuestra dirección bloque rápido en $WAN proto icmp de cualquier tipo a $WANIP icmp-type 8 # No debería haber tráfico NETBIOS en la interfaz externa bloque rápido en $WAN proto (tcp udp) de cualquier a cualquier puerto $DROP_PORTS # habilitar anti-spoofing en la interfaz WAN # Citando http://openbsd.corebsd.or.id/faq/pf/ru/filter.html: # Las direcciones se falsifican cuando un atacante falsifica el original # Direcciones IP en paquetes, se pasan al shell de sus direcciones reales, # representar a otro host en la red Después de que el usuario haya sido falsificado # podrán lanzar un ataque de red sin revelar la fuente real # atacar o intentar acceder a servicios de red que # restringido a ciertas direcciones IP. antispoof rápido para $WAN # Denegar todo el tráfico explícitamente no permitido bloquear todo # ### Tráfico entrante # tráfico privilegiado pase rápido en $WAN proto tcp desde cualquiera a $WANIP puerto $EXTRDP_PORT cola priv # Tráfico normal pase rápido en $WAN desde cualquiera a $WANIP mantener cola de estado otro # En realidad, la priorización en PF no funciona con el tráfico entrante, pero # todavía escribió. # ### Tráfico saliente # tráfico privilegiado transferencia rápida en $WAN proto tcp desde $WANIP \ puerto $EXTRDP_PORT a cualquier cola de mantenimiento de estado priv # Tráfico normal transferencia rápida en $WAN desde $WANIP a cualquier cola de mantenimiento de estado otro
pf_enable="SÍ" pf_rules="/usr/local/etc/pf.conf"

y reiniciar pf:

# /etc/rc.d/pf reiniciar

Verificamos la corrección de la creación de reglas usando los comandos:

pfctl-sn Reglas NAT existentes
pfctl-sr Reglas de traducción existentes
pfctl-ss Conexiones establecidas
pfctl-si Varios contadores
pfctl-sa Todo lo anterior a la vez
pfctl -sq -vvv Muestra el estado de las colas

Actualizar puertos con portsnap:

# portsnap fetch Buscando réplicas de portsnap.FreeBSD.org... 5 espejos encontrados. Obteniendo la etiqueta de instantánea de portsnap5.FreeBSD.org... hecho. Obteniendo metadatos de la instantánea... hecho. Actualizado de mié jun 15 14 :21 :31 MSD 2011 a jue jul 21 11 :37 :27 MSD 2011 . Atractivo 3 parches de metadatos... hecho. Aplicando parches de metadatos... hecho. Atractivo 3 archivos de metadatos... hecho. Atractivo 9656 parches..... 10 .... <Часть вывода удалена> ...........9650 ...hecho. Aplicando parches... hecho. Atractivo 1282 nuevos puertos o archivos... hecho. # extracto de portsnap /usr/ports/.cvsignore /usr/ports/CHANGES ..................<Часть вывода удалена>................. /usr/ports/x11/yelp/ /usr/ports/x11/zenity/ Construyendo nuevos archivos INDEX... hecho.

Usamos dnscache del paquete djbdns como servidor DNS de almacenamiento en caché, ya que consume menos memoria y se considera más seguro que el servidor DNS BIND de FreeBSD.

Instalar djbdns:

# cd /usr/ports/dns/djbdns && hacer que la instalación sea limpia

Recolectamos e instalamos con las siguientes opciones:

DUMPCACHE caché persistente para dnscache IPV6 Compatibilidad con IPv6 de Felix von Leitner IGNOREIP parche ignoreip2 de Russell Nelson JUMBO parche jumbo de Claudiu Costin [X] páginas del manual MAN de Gerritt Pape PERSISTENT_MMAP parche mmap persistente de Lennert Buytenhek [X] SRV parche de registro SRV de Michael Handler

djbdns también extraerá el puerto daemontools con él. daemontools está diseñado para iniciar demonios y monitorear su trabajo. Es decir, si algún demonio bajo su control "cae", entonces daemontools lo reiniciará.

Cree el grupo dnsusers, que incluirá a los usuarios bajo los cuales se ejecutará dnscache y dnslog (registrador para djbdns):

crear un usuario para dnslog:

# pw useradd dnslog -s /sbin/nologin -d /dev/null -G dnsusers

crea una carpeta con el contenido del cual funciona daemontools:

iniciar daemontools:

como la configuración de dnscache se encuentra en /usr/local/etc/djbdns, y daemontools funciona con la carpeta /var/service, hacemos un enlace:

# ln -s /usr/local/etc/dnscache /var/service/dnscache

La carpeta /usr/local/etc/dnscache/env contiene archivos con una configuración de dnscache más avanzada, pero en este caso los valores predeterminados nos vendrán bien.

Para el funcionamiento normal del servidor, debe configurar las direcciones de los servidores ascendentes. Cada zona es responsable de un archivo con el mismo nombre que el nombre de la zona, ubicado en /usr/local/etc/dnscache/root/servers. Las direcciones IP de los servidores responsables de esta zona caben en cada archivo. Dado que redireccionamos cualquier solicitud a los servidores DNS del proveedor, escribimos sus nombres en un archivo llamado "@" (responsable de la zona raíz).

Reiniciar dnscache:

Instale el servidor DHCP (lo construí con las siguientes opciones):

# cd /usr/ports/net/isc-dhcp41-server && hacer la instalación limpia Opciones para isc-dhcp41-server 4 .1 .e_1, 2 DHCP_IPV6 Habilitar soporte para IPv6 [X] DHCP_PARANOIA Habilitar soporte para chroot DHCP_LDAP Soporte de back-end LDAP experimental DHCP_LDAP_SSL Admite conexión LDAP sobre SSL/TLS

Llevamos la configuración del servidor DHCP (/usr/local/etc/dhcpd.conf) al siguiente estado:

dirección local 192 .168 .0 .1 ; tiempo de arrendamiento predeterminado 600 ; tiempo máximo de arrendamiento 7200 ; autoritario; ddns-actualización-estilo interino; instalación de registro local7; subred 192 .168 .0 .0 máscara de red 255 .255 .255 .0 (rango 192 .168 .0 .10 192 .168 .0 .250 ; enrutadores opcionales 192 .168 .0 .1 ; # Si tiene SAMBA activado, puede intentar dar a los clientes # también el valor del servidor WINS. # opción netbios-name-servers 192.168.0.1; # ya hemos subido nuestro propio servidor DNS, así que le damos su dirección opción servidores de nombres de dominio 192 .168 .0 .1 ; } # "vincular" direcciones MAC específicas a direcciones IP específicas administrador de host (hardware ethernet 03 :03 :03 :03 :03 :03 ; dirección fija 192 .168 .0 .2 ; ) servidor host (hardware ethernet 04 :04 :04 :04 :04 :04 ; dirección fija 192 .168 .0 .3 ; }

Agregue las siguientes líneas a /etc/rc.conf:

e inicie el servidor DHCP:

Todo esta bien. Se ha logrado la funcionalidad del dir-300 más simple.

La distribución fryuhi a menudo se denomina la más adecuada para resolver problemas de red aplicados en una red de área local. Hoy abordaremos una de las tareas de red: configurar una puerta de enlace en Freebsd 10 para acceder a Internet desde LAN. Esta es una funcionalidad de servidor simple, popular y en demanda que se puede ampliar con funciones adicionales.

Usaremos la siguiente versión del sistema para resolver nuestra tarea de configurar la puerta de enlace:

# uname -v FreeBSD 10.2-RELEASE-p8 #0 r292756M: sábado 26 de diciembre 22:49:34 MSK 2015 [correo electrónico protegido]:/usr/obj/usr/src/sys/GENÉRICO

El servidor tiene 2 tarjetas de red instaladas:

  • hn0- interfaz externa, recibe Internet del proveedor, configuración de dhcp
  • hn1- red local, dirección 10.20.30.1, configurada manualmente

Nuestra tarea de configurar un enrutador freebsd de software incluirá configurar el enrutamiento en el servidor, instalar y configurar ipfw, habilitar nat, configurar un servidor dhcp y dns local.

Preparación del servidor para configurar la puerta de enlace

La información sobre las concesiones de dhcp emitidas del servidor dnsmasq se puede encontrar en el archivo /var/db/dnsmasq.alquileres.

Analiza la actividad de la red en freebsd con iftop

A veces, desea ver qué está sucediendo en el enrutador y quién está usando Internet en este momento. Por defecto, el sistema no cuenta con una herramienta preparada para obtener esta información. Un programa iftop simple vendrá en nuestra ayuda, que le permite ver la actividad en la interfaz de red en tiempo real.

Instalar si arriba a la puerta de enlace Freebsd configurada:

# paquete instalar iftop

Comenzamos iftop con la interfaz especificada y los puertos utilizados mostrados:

# iftop -i hn1 -P

Vemos una imagen curiosa: quién, dónde, en qué puerto ya qué velocidad sube.

Por ejemplo, lancé un generador de tráfico de Internet en una de las computadoras. Ocupaba casi todo el canal y se hacía perfectamente visible en el router mediante iftop. Por supuesto, esta sencilla utilidad no resuelve todos los problemas de monitoreo de la actividad de la red, pero es adecuada para presentar la imagen actual si no necesita algo más.

Conclusión

Resumamos lo que hicimos. En poco tiempo, configuramos una puerta de enlace completa (esencialmente, un enrutador de software) basada en Freebsd 10 para brindar acceso a Internet a los clientes detrás del servidor. Al mismo tiempo, la configuración se recibió automáticamente. Incluso en un servidor virtual modesto, una puerta de enlace de este tipo puede digerir una gran cantidad de tráfico.

Toda la configuración lleva literalmente de 10 a 15 minutos. La mayor parte del tiempo se dedica a construir el núcleo. Cuanto mayor sea la versión de Freebsd, más tiempo llevará construir, a pesar de que las velocidades del hardware aumentan significativamente.

Repasemos los puntos y descubramos qué hicimos exactamente:

  1. Preparó el servidor para configurar la puerta de enlace.
  2. Reconstruimos el kernel con los parámetros necesarios.
  3. Configurado ipfw y nat, enrutamiento habilitado.
  4. dnsmasq instalado y configurado para distribuir configuraciones de red a través de servidores dhcp y dns.
  5. Iftop instalado para el análisis más simple de la actividad de la red en la interfaz externa.

Esto es suficiente para el funcionamiento completo de la puerta de enlace en Freebsd 10. Si es necesario contar el tráfico de usuarios o restringir el acceso a ciertos recursos, puede usarlo.

Mucha gente nueva en redes y FreeBSD se enfrenta a la pregunta:

"¿Cómo conectar dos redes si el servidor en FreeBSD tiene una conexión física a ambas redes?"

En otras palabras, el servidor FreeBSD debe actuar como enrutador.

Entonces que tenemos:

  • red ethernet
  • Dos subredes clase "C" (/24 - máscara 255.255.255.0)
  • Servidor FreeBSD con dos tarjetas de red
  • Clientes en ambas subredes

Nuestro objetivo es que los clientes de la subred 192.168.1.0/24 puedan intercambiar tráfico con clientes de la subred 192.168.0.0/24.

Primero, configuremos el servidor FreeBSD y hagamos que reenvíe (enrute) los paquetes de una subred a otra.

El parámetro net.inet.ip.forwarding se encarga de esto, veamos que valor tiene:

# sysctl net.inet.ip.reenvío
red.inet.ip.reenvío: 0

Por el momento su valor es "0", lo que significa que el servidor FreeBSD no realizará ningún enrutamiento.

Habilitemos esta función:

# sysctl net.inet.ip.forwarding=1
red.inet.ip.reenvío: 0 -> 1

Así que cambiamos el valor de "0" a "1". Ahora debemos asegurarnos de que después del reinicio este valor sea siempre 1. Esto se puede hacer de 2 maneras:

  1. agregue la línea al archivo /etc/rc.conf: gateway_enable="YES"
  2. agregue la siguiente línea al archivo /etc/sysctl.conf: net.inet.ip.forwarding=1

En el servidor tenemos dos tarjetas de red y, en consecuencia, dos interfaces: em0 y em1.

Deje que em0 "mire" la red de la izquierda y em1 la red de la derecha. Asigne direcciones IP a las interfaces del servidor FreeBSD:

# ifconfig em0 agregar 192.168.1.1/24
# ifconfig em1 agregar 192.168.0.1/24

Nota:

Si recibe una respuesta al comando ifconfig:
Comando no encontrado
usa el comando
# donde esta ifconfig
ifconfig: /sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz /usr/src/sbin/ifconfig
que indicará exactamente dónde se encuentra la utilidad ifconfig
como puede ver en el resultado de ejecutar el comando whereis, la utilidad ifconfig es /sbin/ifconfig
ingrese la ruta completa a la utilidad ifconfig, luego el comando de inscripción no encontrado no aparecerá y el comando se ejecutará

Vamos a ver que pasó:

# ifconfig -a

em0: banderas=8843 métrica 0 mtu 1500 éter 00:02:a5:4e:92:48 inet 192.168.1.1 máscara de red 0xffffff00 difusión 192.168.1.255 medios: selección automática de Ethernet (100baseTX ) Estado: Activo em1: banderas=8802 métrica 0 mtu 1500 éter 00:02:a5:4e:92:49 inet 192.168.0.1 máscara de red 0xffffff00 difusión 192.168.0.255 medios: selección automática de Ethernet (100baseTX ) Estado: Activo

Echemos un vistazo a lo que todo esto significa:

em0 y em1- nombres de interfaz de red
indicador UP: significa que la tarjeta de red está habilitada, si este indicador no está configurado, entonces los paquetes no se recibirán en esta interfaz (para habilitar, use el comando: ifconfig INTERFACE_NAME up)
ether es la dirección mac de esta tarjeta de red
inet: dirección IP asignada para esta interfaz y dirección de transmisión para esta subred
medios de comunicación- información sobre la velocidad y el dúplex de la interfaz
status es el estado actual de la interfaz. Si el estado: sin operador, significa que no hay enlace en la tarjeta de red.

Guardemos la configuración para que las direcciones IP se asignen a las interfaces después de reiniciar el servidor, para esto debe agregar las siguientes líneas al archivo /etc/rc.conf:

ifconfig_em0="inet 192.168.1.1 máscara de red 255.255.255.0"
ifconfig_em1="inet 192.168.0.1 máscara de red 255.255.255.0"

Si usa un firewall en el servidor, por ejemplo, ipfw, agregue reglas que permitan que los paquetes pasen de una red a otra:

ipfw agregar 100 permitir ip de 192.168.1.1/24 a 192.168.0.1/24
ipfw agregar 110 permitir ip de 192.168.1.0/24 a 192.168.1.1/24

Ahora configure los equipos cliente:

  • Configure la dirección IP de la subred deseada: 192.168.1.XXX o 192.168.0.XXX
  • Establezca la máscara de subred en 255.255.255.0
  • Configure la puerta de enlace predeterminada: para la subred 192.168.1.XXX es 192.168.1.1 y para la subred 192.168.0.XXX es 192.168.0.1 (estas son las direcciones IP en las interfaces de nuestro servidor FreeBSD)

Es hora de verificar si hay una conexión entre el servidor y los clientes. Para hacer esto, tomemos una computadora cliente en funcionamiento conocida de 2 redes, por ejemplo, estas serán computadoras con direcciones IP:

  • 192.168.1.11
  • 192.168.0.15

Usemos la utilidad de ping en el servidor:

# ping 192.168.1.11

Si el resultado es así:

PING 192.168.1.11 (192.168.1.11): 56 bytes de datos
64 bytes de 192.168.1.11: icmp_seq=0 ttl=64 tiempo=0,466 ms
64 bytes de 192.168.1.11: icmp_seq=1 ttl=64 tiempo=0,238 ms
64 bytes de 192.168.1.11: icmp_seq=2 ttl=64 tiempo=0,272 ms
^C
— 192.168.1.11 estadísticas de ping —
3 paquetes transmitidos, 3 paquetes recibidos, 0,0 % de pérdida de paquetes
min/avg/max/stddev de ida y vuelta = 0,238/0,325/0,466/0,100 ms

Entonces todo está bien y hay una conexión entre el servidor y el cliente. Haz lo mismo con 192.168.0.15.

Si el resultado del ping es negativo, asegúrese de que la dirección IP y la máscara de subred estén configuradas correctamente en la computadora del cliente, así como la presencia de un enlace en la tarjeta de red.

Ahora puede intentar verificar la conexión entre las computadoras cliente de diferentes subredes.

También utilizaremos la utilidad ping, pero ya en un ordenador con dirección IP 192.168.1.11:

ping 192.168.0.15

Si hay una respuesta, entonces hay una conexión entre computadoras de diferentes subredes.

Si no hay respuesta, usaremos la utilidad tracert (para Windows) o traceroute (para FreeBSD):

tracert 192.168.0.15

Si las estrellas se van enseguida:

1 * * *

Luego verifique la configuración correcta de la puerta de enlace predeterminada.

Si la ruta se ve así:

1 192.168.1.1 (192.168.1.1) 0,421 ms 0,447 ms 0,485 ms
2 * * *

Luego el paquete llega al servidor, asegúrese de que el firewall del servidor no bloquee los paquetes y que la computadora cliente con la dirección IP 192.168.0.15 esté configurada correctamente y "vea" el servidor (verifique la dirección IP, máscara de subred, puerta de enlace predeterminada y la presencia de ping al servidor)

¿Has revisado todo, pero todavía nada funciona? Usemos la utilidad tcpdump en el servidor, que mostrará los paquetes que pasan a través de las interfaces del servidor:


y

Inicie un ping desde una computadora cliente en una subred a otra computadora cliente en una subred diferente (como hicimos en los ejemplos anteriores) y observe el resultado del comando tcpdump en el servidor, que será algo como esto:

# tcpdump -ni em0

12:17:23.398376 IP 192.168.1.11 > 192.168.0.15: solicitud de eco ICMP, id 49222, seq 0, longitud 64
12:17:24.399906 IP 192.168.1.11 > 192.168.0.15: solicitud de eco ICMP, id 49222, seq 1, longitud 64

Aquellos. la computadora 192.168.1.11 envía un paquete de solicitud de eco ICMP a la computadora 192.168.0.15, pero no vemos ninguna respuesta. Vea si el servidor envía estos paquetes a otra tarjeta de red:

# tcpdump -ni em1

12:21:18.167017 IP 192.168.1.11 >
12:21:19.168022 IP 192.168.1.11 > 192.168.0.15: solicitud de eco ICMP, id 50246, sec 5, longitud 64

Vemos que las solicitudes se transmiten a otra interfaz de servidor, pero todavía no hay respuestas. Verifique la configuración 192.168.0.15 de su computadora y vea si tiene algún problema de conectividad de red física.

Cuando todo funcione, la salida será así:

12:21:17.165998 IP 192.168.1.11 > 192.168.0.15: solicitud de eco ICMP, id 50246, sec 3, longitud 64
12:21:17.171199 IP 192.168.0.15 > 192.168.1.11: respuesta de eco ICMP, id 50246, seq 3, longitud 64
12:21:18.167017 IP 192.168.1.11 > 192.168.0.15: solicitud de eco ICMP, id 50246, sec 4, longitud 64
12:21:18.171353 IP 192.168.0.15 > 192.168.1.11: respuesta de eco ICMP, id 50246, sec 4, longitud 64

Vemos la salida de solicitud-respuesta estándar cuando un paquete de solicitud de eco ICMP recibe una respuesta en forma de paquete de respuesta de eco ICMP

Introducción == Brevemente, me gustaría lanzar un plan que se debe seguir para que el curso en Internet para la oficina sea correcto y nadie sea barrido. Observo de inmediato que una puerta de enlace en Unix no es un programa, sino una docena de programas, cada uno de los cuales realiza su propia acción y tiene su propia configuración. Usamos: * FreeBSD 7 * natd * named, routed * ipfw * squid * squidGuard * apache * dhcpd Mi servidor de prueba ya está dentro de la red local, así que creo que mi red externa es 192.168.- 172.16.0.0/16. Los números, al final, no importan, lo principal es el significado. Instalé FreeBSD como mínimo y mi rc.conf solo contiene: hostname="vm=freepro.local" ifconfig_em0="DHCP" linux_enable="SÍ" sshd_enable="SÍ"== Configurando NAT == Mi interfaz externa - em0 - por defecto recibe su dirección IP a través de DHCP desde un enrutador regular con una dirección de 192.168.1.1. Obviamente, el mismo enrutador actúa como servidor DNS. En el primer paso, hago NAT (¡siempre en la interfaz externa!) y modifico el archivo /etc/rc.conf de esta manera: hostname="vm=freepro.local" defaultrouter="192.168.1.1" ifconfig_em0="inet 192.168.1.10 máscara de red 255.255.255.0" linux_enable="SÍ" sshd_enable="SÍ" # Internet Gateway ifconfig_em1="inet 172.16.0.1 máscara de red 255.255 .0.0" gateway_enable="YES" natd_enable="YES" natd_interface="em0" #natd_flags="-f /etc/redirect.conf" firewall_enable="YES" firewall_type="open" #firewall_script="/etc/firewall . conf" router_enable="SÍ" router="/sbin/routed" router_flags="-q" Arreglé la dirección externa y configuré la interna. Ahora arreglemos el DNS en el archivo /etc/resolv.conf: servidor de nombres 192.168.1.1 ¡Eso es todo! Iniciando el servicio: # /etc/rc.d/inicio ipfw # /etc/rc.d/inicio natd # /etc/rc.d/inicio enrutado # /etc/rc.d/inicio con nombre¡Y el Internet funciona! Por supuesto, prescribimos al cliente con nuestras manos: IP: 172.16.0.2 MÁSCARA: 255.255.0.0 PUERTA: 172.16.0.1 DNS1: 192.168.1.1 Por supuesto, esta es una puerta de entrada muy mala. En primer lugar, no está protegido en absoluto, en segundo lugar, no se almacena en caché en absoluto, en tercer lugar, redirige todas las solicitudes de DNS "hacia arriba", bueno, carece por completo de la capacidad de recibir estadísticas y administrar cualquier cosa. Pero, por otro lado, esta es una puerta de enlace muy liviana y rápida, y desde configuraciones adicionales, su rendimiento solo aumentará, no disminuirá. Por cierto, tenga en cuenta que dos líneas ya están comentadas en el nuevo rc.conf. El primer comentario: me ayudará en el futuro a "reenviar" algunos puertos fuera, dentro de la red. Aquellos. por ejemplo, si quiero obtener acceso ssh a la computadora cliente 172.16.0.2, tendré que crear el siguiente archivo: # ARCHIVO /etc/redirect.conf redirect_port tcp 172.16.0.2:22 2222 Esto significa que cuando me conecte al servidor externo en el puerto 2222, accederé a la máquina en la red local exactamente en el puerto 22 (ssh). El segundo comentario es la configuración de mi cortafuegos personal, perfeccionada y probada. == Configuración de ipfw == Mi configuración para ipfw en esta etapa se ve así: #!/bin/sh # Configuración de IPFW para servidor NAT simple /etc/firewall.conf cmd="/sbin/ipfw -q" IfOut="em0" IpOut="192.168.1.10" NetOut="192.168.1.0/24 " IfIn="em1" IpIn="172.16.0.1" NetIn="172.16.0.0/16" ########################### # ##################### # Claro ########################### ####################### $(cmd) -f flush $(cmd) mesa 0 flush $(cmd) mesa 1 flush ##### ######################################### # Lista blanca / Lista negra # # ############################################$ (comando ) tabla 0 añadir 172.16.0.12 $(cmd) tabla 1 añadir 172.16.0.13 ############################## ## ################ # Bucle invertido ########################## ### ################## $(cmd) agregar permitir ip de cualquier a cualquier vía lo0 ################ ### ############################# # Bloquear mundo a privado ############ ## #################################### $(cmd) agregar deny ip from any to 127.0 . 0.0/8 $(cmd) agregue la IP denegada de 127.0.0.0/8 a cualquier #$(cmd) agregue la IP denegada de 172.16.0.0/16 a cualquier vía $(IfOut) #$(cmd) agregue d eny ip from 192.168.1.0/24 to any via $(IfOut) $(cmd) add deny ip from any to 10.0.0.0/8 via $(IfOut) #$(cmd) add deny ip from any to 172.16.0.0/ 12 a través de $(IfOut) #$(cmd) agregue la IP denegada de cualquiera a 192.168.0.0/16 a través de $(IfOut) $(cmd) agregue la IP denegada de cualquiera a 0.0.0.0/8 a través de $(IfOut) $(cmd) ) agregue la IP denegada de cualquiera a 169.254.0.0/16 a través de $(IfOut) $(cmd) agregue la IP denegada de cualquiera a 192.0.2.0/24 a través de $(IfOut) $(cmd) agregue la IP denegada de cualquiera a 224.0.0.0 /4 a través de $(IfOut) $(cmd) agregar IP denegada desde cualquiera a 240.0.0.0/4 a través de $(IfOut) ###################### ######################### # ICMP ##################### ############################ $(cmd) agregar denegar icmp desde cualquiera a cualquier fragmento $(cmd) agregar denegar registro icmp desde cualquiera a 255.255.255.255 a través de $(IfOut) $(cmd) agregar deny log icmp de cualquiera a 255.255.255.255 a través de $(IfOut) ################### ############################# # NAT ################# ################################# $(cmd) agregar desvío 8668 ip desde $(NetIn) a cualquier vía $ (IfOut) $(cmd) agregar desviar 8668 ip de cualquiera a $ (IpOut) vía $(IfOut) #$(cmd) agregar desvío 8668 ip de cualquier a cualquiera vía $(IfOut) ######################## ######################### # Bloquear privado al mundo ################### # ############################## $(cmd) agregar deny ip desde 10.0.0.0/8 a cualquier via $ (IfOut ) #$(cmd) agregue la IP denegada de 172.16.0.0/12 a cualquier vía $(IfOut) #$(cmd) agregue la IP denegada de 192.168.0.0/16 a cualquier vía $(IfOut) $(cmd) agregue denegar ip desde 0.0.0.0/8 a cualquier vía $(IfOut) $(cmd) agregar denegar ip desde 169.254.0.0/16 a cualquier vía $(IfOut) $(cmd) agregar denegar ip desde 192. 0.2.0/24 a cualquier vía $(IfOut) $(cmd) agregar denegar ip de 224.0.0.0/4 a cualquier vía $(IfOut) $(cmd) agregar denegar ip de 240.0.0.0/4 a cualquier vía $( Si fuera) ############################################# ## # Lista blanca ########################################## #### $(cmd) agregar permitir todo desde "tabla(0)" a cualquier $(cmd) agregar permitir todo desde cualquier a "tabla(0)" ############## ################################## # Lista negra ############ # ##################################### $(cmd) agregar negar todo desde "table (1 )" a cualquier ######################################### ## #### # Mantener establecido ###################################### ## ####### $(cmd) agregar permitir tcp de cualquiera a mí establecido ############################ # ################## # Principal ########################### # #################### $(cmd) agregar permitir ip de cualquiera a cualquier fragmento $(cmd) agregar permitir icmp de cualquiera a $(IpOut) icmptypes 0 , 8,11 # dns $(cmd) agregar permitir tcp de cualquier a $(IpOut) dst-port 53 setup $(cmd) agregar permitir udp de cualquiera a $(IpOut) dst-port 53 $ (cmd) agregar permitir udp desde $(IpOut) 53 a cualquier $(cmd) agregar permitir udp desde $(IpOut) a cualquier dst-port 53 keep-state # dns-client $(cmd) agregar permitir tcp desde cualquier a $ (NetIn) dst-port 53 configuración $(cmd) agregar permitir udp desde cualquier a $(NetIn) dst-port 53 $(cmd) agregar permitir udp desde $(NetIn) 53 a cualquier $(cmd) agregar permitir udp desde $ (NetIn) a cualquier puerto dst 53 keep-state # time $(cmd) agregue allow udp desde $(IpOut) a cualquier dst-port 123 keep-state # time-client $(cmd) agregue allow udp desde $(NetIn ) a cualquier puerto dst 123 keep-state # ssh-in $(cmd) agregar permitir tcp desde cualquier a $(IpOut) 22 $(cmd) agregar permitir tcp desde $(IpOut) 22 a cualquier # ssh-out $( cmd) agregar permitir tcp desde $(IpOut) a cualquier 22 $(cmd) agregar permitir tcp desde cualquier 22 a $(IpOut) # http $(cmd) agregar permitir tcp desde $(IpOut) a cualquier puerto dst 80 # http -cliente $(cmd) agregar permitir tcp desde $(NetIn) a cualquier dst-port 80 $(cmd) agregar permitir tcp desde cualquier 80 a $(NetIn) # smtp $(cmd) agregar permitir tcp desde cualquiera a $(IpOut ) dst-port 25 setup # forward 8080 to 81 $(cmd) add allow tcp from any to $(IpOut ) dst-port 8080 $(cmd) agregar permitir tcp desde $(IpOut) 8080 a cualquier $(cmd) agregar permitir tcp desde cualquiera a $(NetIn) dst-port 81 $(cmd) agregar permitir tcp desde $(NetIn) 81 a cualquier # salida $(cmd) agregar deny log tcp de cualquiera a cualquier entrada a través de la configuración de $(IfOut) #$(cmd) agregar permitir tcp de cualquiera a cualquier configuración ############# ##################################### # Red local ########## # ###################################### $(cmd) agregar permitir todo desde cualquiera a cualquiera vía $(IfIn) ######################################## ## ###### # Denegar todo #################################### ## ######### $(cmd) agregar denegar todo de cualquiera a cualquier Comenté específicamente algunas líneas que eliminan paquetes de las redes locales 192, 172 en la interfaz externa, ya que mi interfaz externa es la local. En realidad, estas líneas son necesarias. Vayamos más lejos. == Configuración de squid == Ahora necesito squid, un servidor proxy de almacenamiento en caché capaz de distribuir Internet de manera competente a todos los usuarios de acuerdo con las reglas que establece el administrador del sistema. pkg_add -r squid Nota: por supuesto, la opción más correcta es compilar software a partir de puertos nuevos y actualizados, pero ahorramos tiempo, por lo que instalamos paquetes. Algún día después actualizaremos con portupgrade. Para squid, hacemos la configuración más simple: edite el archivo /usr/local/etc/squid/squid.conf # Configuración mínima SQUID acl all src 0.0.0.0/0.0.0.0 acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255 acl to_localhost dst 127.0.0.0/8 acl localnet src 172.16.0.0/255.25 port4 SSL_3.0 acl CONNECT método CONECTAR http_access permitir administrador localhost http_access permitir localnet http_access denegar administrador http_access denegar !Safe_ports http_access denegar CONECTAR !SSL_ports http_access denegar todo icp_access permitir todo http_port 3128 transparente jerarquía_stoplist cgi-bin ? acl CONSULTA urlpath_regex cgi-bin \? caché denegar CONSULTA cache_dir ufs /usr/local/squid/cache 100 16 256 access_log /usr/local/squid/logs/access.log squid cache_log /usr/local/squid/logs/cache.log cache_store_log /usr/local/squid /logs/store.log actualizar_patrón ^ftp: 1440 20% 10080 actualizar_patrón ^gopher: 1440 0% 1440 actualizar_patrón. 0 20% 4320 acl apache rep_header Servidor ^Apache Broken_vary_encoding permitir apache cache_ective_user squid cache_ective_group squid visible_hostname vm-freepro.local icp_port 0 error_directory /usr/local/etc/squid/errors/English coredump_dir /usr/local/squid/cache Eliminé deliberadamente los comentarios del archivo de configuración, porque no hay muchos, pero sí muchos. No olvide editar /etc/rc.conf agregando la línea: squid_enable="YES" A continuación, reconstruya el caché e inicie squid: # squid -z # /usr/local/etc/rc.d/squid inicio Lo primero que hacemos después de instalar squid es evitar que los usuarios locales accedan a Internet en el puerto 80. Transferimos el puerto 80 al 3128, es decir. obligamos a todos los usuarios a pasar solo por squid. Hay un gran pequeño inconveniente aquí. Dicha operación solo se puede realizar implementando el soporte de IPFW en el kernel; de lo contrario, el reenvío no funciona. ¡Sí, esto significa que ahora tenemos que construir nuestro núcleo! No es fácil, pero es útil: después de ensamblar su kernel, la velocidad de su trabajo debería aumentar y el volumen debería disminuir notablemente. Primero, usando sysinstall, instalamos las fuentes del kernel: # sysinstall Vaya a /Configurar/Distribuciones Verifique dentro de la sección src src [X] base [X] sys Ahora tenemos las fuentes del kernel en la carpeta /usr/src. A continuación, copie la configuración GENÉRICA en "nuestro" MYKERNEL y edite MYKERNEL: # cd /usr/src/sys/i386/conf # cp MYKERNEL GENÉRICO # mcedit MYKERNEL Al editar la configuración, asegúrese de especificar las siguientes opciones: # Habilitar el firewall en las opciones del kernel IPFIREWALL # Habilitar las opciones del mecanismo de registro de "registro" IPFIREWALL_VERBOSE # Limitar registros - opciones de protección contra desbordamiento IPFIREWALL_VERBOSE_LIMIT=50 # Habilitar las opciones del mecanismo de reenvío de paquetes IPFIREWALL_FORWARD # Habilitar las opciones del mecanismo de traducción de direcciones NAT IPDIVERT # Habilitar el canal opciones de mecanismo de limitación de velocidad DUMMYNET Y también elimine todo el "hierro" innecesario, que en realidad no tiene. Ahora construyamos el núcleo. Esta operación puede demorar un poco más y puede fallar con un error, lo que requiere que instale fuentes adicionales desde sysinstall, según lo que haya escrito en la configuración. Esperamos que no haya nada superfluo. # cd /usr/src # hacer buildkernel KERNCONF=MYKERNEL # hacer installkernel KERNCONF=MYKERNEL Ahora necesita reiniciar, pero antes de reiniciar, asegúrese de leer el manual en caso de que falle el reinicio. Ojalá esto no sucediera, por supuesto. Entonces, reiniciamos y editamos /etc/firewall.conf nuevamente. #!/bin/sh # Configuración IPFW para servidor NAT y proxy SQUID cmd="/sbin/ipfw -q" IfOut="em0" IpOut="192.168.1.10" NetOut="192.168.1.0/24" IfIn= "em1 " IpIn="172.16.0.1" NetIn="172.16.0.0/16" ############################### ## ################ # Borrar ########################### ## ################### $(cmd) -f flush $(cmd) tabla 0 flush $(cmd) mesa 1 flush ######## ## ##################################### # Lista blanca / Lista negra #### ## ######################################## $(cmd) tabla 0 agregar 172.16.0.2 $(cmd) tabla 1 agregar 172.16.0.13 ################################ #### ############ # Bucle invertido ############################# ##### ############# $(cmd) agregar permitir ip de cualquier a cualquier vía lo0 ################## ##### ######################### # Bloquear mundo a privado ############### #### ############################### $(cmd) agregar denegar ip desde cualquiera a 127.0.0.0/ 8 $(cmd ) agregue la IP denegada de 127.0.0.0/8 a cualquier #$(cmd) agregue la IP denegada de 172.16.0.0/16 a cualquier vía $(IfOut) #$(cmd) agregue la IP denegada de 19 2.168.1.0/24 a cualquiera a través de $(IfOut) $(cmd) agregar denegar IP de cualquiera a 10.0.0.0/8 a través de $(IfOut) #$(cmd) agregar denegar IP de cualquiera a 172.16.0.0/12 a través de $ (IfOut) #$(cmd) agregue la IP denegada de cualquiera a 192.168.0.0/16 a través de $(IfOut) $(cmd) agregue la IP denegada de cualquiera a 0.0.0.0/8 a través de $(IfOut) $(cmd) agregue la denegación ip de cualquiera a 169.254.0.0/16 a través de $(IfOut) $(cmd) agregar denegar ip de cualquiera a 192.0.2.0/24 a través de $(IfOut) $(cmd) agregar denegar ip de cualquiera a 224.0.0.0/4 a través $(IfOut) $(cmd) agregar IP denegada desde cualquiera a 240.0.0.0/4 a través de $(IfOut) ######################### # ###################### # ICMP ####################### # ######################## $(cmd) agregue deny icmp from any to any frag $(cmd) agregue deny log icmp from any to 255.255 . 255.255 de entrada a través de $(IfOut) $(cmd) agregue deny log icmp de cualquiera a 255.255.255.255 de salida a través de $(IfOut) ###################### # ########################## # NAT ##################### ##############################$(cmd) agregar desvío 8668 ip desde $(NetIn) a cualquier via $(IfOut ) $(cmd) agregar desviar 8668 ip de cualquiera a $(IpOut) vía $( IfOut) #$(cmd) agregar desvío 8668 ip de cualquiera a cualquier vía $(IfOut) ############################# ################### # Bloquear privado al mundo ######################## # ######################## $(cmd) agregar deny ip desde 10.0.0.0/8 a cualquier vía $(IfOut) #$(cmd ) agregue la IP denegada de 172.16.0.0/12 a cualquier vía $(IfOut) #$(cmd) agregue la IP denegada de 192.168.0.0/16 a cualquier vía $(IfOut) $(cmd) agregue la IP denegada de 0.0.0.0/ 8 a cualquier via $(IfOut) $(cmd) agregue ip denegada desde 169.254.0.0/16 a cualquier via $(IfOut) $(cmd) agregue ip denegada desde 192. 0.2.0/24 a cualquier vía $(IfOut) $(cmd) agregar denegar ip de 224.0.0.0/4 a cualquier vía $(IfOut) $(cmd) agregar denegar ip de 240.0.0.0/4 a cualquier vía $( Si fuera) ############################################# ## # Lista blanca ########################################## #### $(cmd) agregar permitir todo desde "tabla(0)" a cualquier $(cmd) agregar permitir todo desde cualquier a "tabla(0)" ############## ################################## # Lista negra ############ # ##################################### $(cmd) agregar negar todo desde "table (1 )" a cualquier ######################################### ## #### # Mantener establecido ###################################### ## ####### $(cmd) agregar permitir tcp de cualquiera a mí establecido ############################ # ################## # Principal ########################### # #################### $(cmd) agregar permitir ip de cualquiera a cualquier fragmento $(cmd) agregar permitir icmp de cualquiera a $(IpOut) icmptypes 0 , 8,11 # dns $(cmd) agregar permitir tcp de cualquier a $(IpOut) dst-port 53 setup $(cmd) agregar permitir udp de cualquiera a $(IpOut) dst-port 53 $ (cmd) agregar permitir udp desde $(IpOut) 53 a cualquier $(cmd) agregar permitir udp desde $(IpOut) a cualquier dst-port 53 keep-state # dns-client $(cmd) agregar permitir tcp desde cualquier a $ (NetIn) dst-port 53 configuración $(cmd) agregar permitir udp desde cualquier a $(NetIn) dst-port 53 $(cmd) agregar permitir udp desde $(NetIn) 53 a cualquier $(cmd) agregar permitir udp desde $ (NetIn) a cualquier puerto dst 53 keep-state # time $(cmd) agregue allow udp desde $(IpOut) a cualquier dst-port 123 keep-state # time-client $(cmd) agregue allow udp desde $(NetIn ) a cualquier puerto dst 123 keep-state # ssh-in $(cmd) agregar permitir tcp desde cualquier a $(IpOut) 22 $(cmd) agregar permitir tcp desde $(IpOut) 22 a cualquier # ssh-out $( cmd) agregar permitir tcp desde $(IpOut) a cualquier 22 $(cmd) agregar permitir tcp desde cualquier 22 a $(IpOut) # http $(cmd) agregar permitir tcp desde $(IpOut) a cualquier puerto dst 80 # http -cliente #$(cmd) agregar permitir tcp desde $(NetIn) a cualquier puerto dst 80 #$(cmd) agregar permitir tcp desde cualquier 80 a $(NetIn) # squid $(cmd) agregar permitir todo desde $(NetIn) ) a $(IpIn) 3128 a través de $(IfIn) $(cmd) agregue fwd $(IpIn),3128 tcp de $(NetIn) a cualquier 80 # smtp $(cmd) agregar permitir tcp de cualquiera a $(IpOut) dst-port 25 setup # out $(cmd) agregar deny log tcp de cualquiera a cualquiera a través de $(IfOut) setup #$(cmd) agregar allow tcp de cualquiera a cualquier configuración ########################################## # ##### # Red local ###################################### # ######## $(cmd) agregar permitir todo de cualquiera a cualquier vía $(IfIn) ######################## # ####################### # Denegar todo ##################### ## ########################### $(cmd) agregar negar todo de cualquier a cualquier Reiniciamos los servicios y verificamos: todo funciona y los clientes pasan por el sistema de control sin darse cuenta. Pospongamos la configuración del control de acceso por ahora y resolvamos otro problema importante: obtener DNS. == Configuración de DNS == Ahora nuestros clientes tienen una dirección DNS 192.168.1.1 - externa a la red interna 172.16.0.0/16. Podemos decir que los clientes se suben por encima del servidor miles de veces al día en busca de direcciones. Mejoremos el sistema: configure un servidor DNS de almacenamiento en caché que nos permita evitar conexiones de extremo a extremo con el exterior, ahorrarnos tráfico y acelerar nuestro trabajo. No olvide antes de prohibir el acceso en el puerto 53 al exterior para todos los clientes. En el archivo /etc/namedb/named.conf, edite los parámetros de escucha, reenviadores: opciones (directorio "/etc/namedb"; archivo pid "/var/run/named/pid"; archivo de volcado "/var/dump/named_dump.db"; archivo de estadísticas "/var/stats/named.stats "; escuchar ( 127.0.0.1; 172.16.0.1; ); desactivar-zona-vacía "255.255.255.255.IN-ADDR.ARPA"; desactivar-zona-vacía "0.0.0.0.0.0.0.0.0.0.0.0 .0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA"; desactivar-zona-vacía "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0. 0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA"; reenviadores ( 192.168.1.1; ); // dirección de origen de consulta * puerto 53; ); En el archivo /etc/resolv.conf, cree primero el DNS local: servidor de nombres 127.0.0.1 servidor de nombres 192.168.1.1 En /etc/firewall.conf prohibimos a los clientes usar DNS externo (editar secciones con comentarios de dns-client) # dns-client # Deshabilitar DNS externo #$(cmd) agregar permitir tcp de cualquiera a $(NetIn) dst-port 53 setup #$(cmd) agregar permitir udp de cualquiera a $(NetIn) dst-port 53 #$( cmd) agregue allow udp desde $(NetIn) 53 a cualquier #$(cmd) agregue allow udp desde $(NetIn) a cualquier dst-port 53 keep-state # Solo permita DNS local $(cmd) agregue allow tcp desde $( NetIn) a $(IpIn) dst-port 53 setup $(cmd) add allow udp from $(NetIn) to $(IpIn) dst-port 53 Reiniciamos: # /etc/rc.d/reinicio con nombre # /etc/rc.d/ipfw reinicio Ahora volvamos al tema del control de acceso a Internet. Hay dos soluciones a la vez. Primero, configure las políticas de ACL en Squid. En segundo lugar, instale y configure squidGuard, una aplicación especial para el control de acceso. Comencemos en orden. == Configuración de squid acl == acl son reglas en la configuración de squid que son bastante efectivas para restringir el flujo de información a través del servidor proxy. En resumen, con acl en muy poco tiempo puede matar cualquier izquierda que interfiere con el trabajo. Todas las configuraciones predeterminadas de ACL están escritas en el archivo squid.conf, pero también se pueden mover a archivos externos. Por ejemplo, daré una parte de la configuración: # Denegar todos los volcados de archivos ACL comparte dstdomain .rapidshare.com .webfile.ru http_access deny share # Denegar a todos los sitios que solicitan por IP acl ip_urls url_regex http://+\.+\.+\.+[:/] http_access deny ip_urls # Restricciones de grupo src group_strict (ip 172.16.0.20-172.16.0.25) src group_allow (ip 172.16.0.26-172.16.0.30) acl (group_allow (pasar cualquiera) group_strict (pasar local ninguno)) Resulta genial. Pero es obvio que en un buen proxy debe haber muchas reglas de este tipo: una regla para cada "agujero". Averiguar "agujeros" y registrarlos uno por uno es tedioso, pero, como siempre, hay una solución preparada: squidGuard, una aplicación de filtro con un gran conjunto de reglas que, en principio, se puede reponer incluso de acuerdo con un horario cron. Estamos estudiando el tema. == Configurando squidGuard == Ahora intentemos instalar y configurar squidGuard. Esto no es difícil de hacer, pero hay que tener cuidado. Asi que: # pkg_add -r squidGuard # cp /usr/local/etc/squid/squidGuard.conf.sample /usr/local/etc/squid/squidGuard.conf El archivo squidGuard.conf almacena todas las configuraciones, algunas de las cuales deberán corregirse de inmediato, a saber: # Archivo squidGuard.conf ... fuente sample-clients ( ip 172.16.0.0/16 ) ... Vinculemos squidGuard a squid: agreguemos 3 líneas al archivo squid.conf: redirector_bypass en programa_redireccionamiento /usr/local/bin/squidGuard -c /usr/local/etc/squid/squidGuard.conf redirect_children 10 squidGuard mantiene su base de datos de configuración en /var/db/squidGuard. Antes del primer lanzamiento o después de realizar cambios, debe reconstruirse: # repetir # squidGuard -C all # chown -R squid:squid /var/db/squidGuard # /usr/local/etc/rc.d/squid restart Todo está bien, pero cuando un cliente intenta acceder a un sitio prohibido, por ejemplo, http://3warez.com/, observamos frenos. Y me gustaría recibir algún mensaje inteligible. Para esto necesitamos apache. == Configuración de apache == Como ya se mencionó, necesitamos apache para mostrar información sobre las direcciones bloqueadas y los motivos del bloqueo. Hacemos como de costumbre: # pkg_add -r apache22 # echo "apache22_enable="YES"" >> /etc/rc.conf La configuración de Apache está en el archivo /usr/local/etc/apache22/httpd.conf. Antes de comenzar, debe verificar las directivas DocumentRoot, ServerName; omitiré los detalles, porque. hay muchos artículos en Internet sobre cómo configurar este servidor. Hecho en 1 seg. Lanzamos: # echo "Acceso denegado" > /usr/local/www/apache22/data/index.html # /usr/local/etc/rc.d/apache22 start Arreglemos un poco la configuración de squidGuard.conf: # Al final del archivo acl ( ..... predeterminado ( redirigir http://172.16.0.1/index.html ) )== Configurando dhcpd == Y aquí estamos casi terminados. La red está configurada y funciona muy bien. Todo está bajo control, todo está estrictamente limitado. Pero después del látigo, es hora de ofrecer a los clientes la zanahoria, en forma de distribución automática de direcciones DHCP. Un buen administrador, por supuesto, también está haciendo trampa aquí: distribuirá direcciones solo por MAC, pero solo traeremos pasas. # pkg_add -r isc-dhcp3-server # cp /usr/local/etc/dhcpd.conf.sample /usr/local/etc/dhcpd.conf Agregue las siguientes líneas al archivo /etc/rc.conf: dhcpd_enable="SÍ" dhcpd_flags="-q" dhcpd_ifaces="em1" También debe corregir la configuración más importante /usr/local/etc/dhcpd.conf: opción nombre-dominio "ejemplo.com"; opción servidores de nombres de dominio 172.16.0.1; opción máscara de subred 255.255.255.0; tiempo de arrendamiento predeterminado 3600; tiempo máximo de arrendamiento 86400; ddns-actualización-estilo ninguno; subred 172.16.0.0 máscara de red 255.255.0.0 (rango 192.16.0.11 172.16.0.15; opción enrutadores 172.16.0.1;) Encender electricidad: # /usr/local/etc/rc.d/isc-dhcpd inicio Aquí, quizás, y todo, lo más importante. Este artículo no pretende ser completo ni completo, pero describe brevemente los pasos que se deben seguir para que el servidor funcione. Además, solo sintonizar y sintonizar nuevamente. No olvide también que esta no es la única forma de configurar un servidor: siempre hay una alternativa en Unix y puede usar aplicaciones completamente diferentes.

Tienes tu propia red local
decidiste que es hora de que lo conectes a Internet a través de una línea dedicada. Pues que bueno, hoy te voy a tratar
ayuda un poco con esto 🙂 Empecemos instalando FreeBSD, como estamos
seguridad, debe cuidarlo con anticipación 🙂 Apague todo, responda en todas partes
firmemente no :), luego activaremos lo que necesitamos más tarde 🙂 Durante la instalación del sistema, se le preguntará
"¿Te gustaría ver la colección de puertos?", responde que sí. Ahora instalaremos un adicional
software. Subimos a la sección de seguridad y seleccionamos un programa llamado PortSentry allí, luego nos será útil 🙂 Después de la instalación, necesitamos compilar
kernel... Tomemos como base el kernel GENERIC terminado. Se encuentra en /sys/i386/conf. Escriba con cuidado un nuevo kernel para el sistema, elimine todo lo que no necesite (por ejemplo, elimine la compatibilidad con USB, COM, LPT, SCSI, RAID y otros dispositivos que no usará en el sistema, no necesita USB, no vas a conectar al router dispositivos con soporte USB, y haz lo mismo con todo lo demás, más aumentará la velocidad del sistema en su conjunto... Encontrarás más detalles en el archivo LINT ). A continuación, agregue las siguientes líneas al nuevo núcleo:

Opciones IPFIREWALL #Activar compatibilidad con cortafuegos
Opciones IPDIVERT #esta opción es necesaria para que NAT funcione
Opciones IPFIREWLL_VERBOSE #Permitir que el cortafuegos escriba registros
Opciones IPFIREWALL_VERBOSE_LIMIT=10 #Limitación de entradas de registro para eventos
Opciones TCP_DROP_SYNFIN #No despertar paquetes dejados
Opciones ICMP_BANDLIMIT #Esta es una opción para prevenir ataques DOS :)
Opciones ACCEPT_FILTER_DATA #Usualmente habilito esta opción :)
Opciones TCP_RESTRICT_RST #Esta opción también debe estar habilitada

config proxy, cd ../../compile/proxy, hacer depender, hacer, hacer instalar

Eso es todo, felicidades, acabas de compilar tu kernel, si algo no funcionó y compila
detenido: mire, tal vez hizo algo mal, sucede e intente reconstruir el núcleo nuevamente. Luego hacemos un reinicio del sistema. Y la máquina debería arrancar con el nuevo kernel. Sin embargo, si esto no es
sucedió, no se moleste: el sistema se puede cargar con el kernel anterior. Para esto, cuando
arranque, cuando dice si desea ingresar al modo de recuperación, presione Entrar, allí
dé el comando de descarga, luego cargue kernel.old y arranque. Todo, el sistema arrancará con el kernel antiguo.

De forma predeterminada, el sistema espera 9 segundos antes de iniciarse.
Vamos a la carpeta /boot y allí editamos el archivo loader.conf, necesitamos agregar allí la siguiente línea
boot_autodelay=0, esto se hace para que el sistema no espere 9 segundos por la respuesta del usuario, pero lo necesitamos para que si el sistema se conecta rápido al reiniciar 🙂 Entonces vamos a
/etc y comience a editar el archivo rc.conf. A continuación se muestra un ejemplo con comentarios, así que comprenda
no será difícil:

hostname="zlobix.evil.com" #El nombre de red de su máquina
firewall_enable="YES" #Habilitar cortafuegos
firewall_script="/usr/local/etc/firewall.conf" #ruta al archivo con políticas de firewall
firewall_type="close" #Tipo de cortafuegos, ¡este tipo bloquea todo!
firewall_logging="YES" #Ajuste nuestro registro de firewall
natd_program="/sbin/natd" #Aquí al demonio natd
natd_interface="ed0" #En qué interfaz colgará NAT, la interfaz debe mirar hacia el ISP (proveedor de servicios de Internet)
tcp_extension="NO" #Cortar extensiones TCP/IP peligrosas
tcp_keepalive="YES" #Establezca esta opción, su enrutador se activa menos
susceptible a los ataques de DOS.
tcp_drop_synfin="YES" #No aceptar paquetes dejados
tcp_restrcit_rst="YES" #No recuerdo que significa, pero recomiendo habilitarlo 🙂
icmp_drop_redirect="YES" #No funciona con ICMP
paquetes
icmp_log_redirect="YES" #Registro de paquetes ICMP
ifconfig_lo0="inet 127.0.0.1" #configurar la dirección de loopback,
déjalo como dice

ifconfig_ed0="inet 167.65.89.147 nemask 255.255.255.192" #en este ejemplo tenemos esto
la interfaz mira hacia el proveedor, donde ed0 es el nombre de la interfaz, inet
IP: dirección emitida por el proveedor, máscara de subred máscara de red.

ifconfig_ed1="inet 192.168.0.1 netmask 255.255.255.0" #configurando la interfaz interna, es decir, que mira hacia la red local

ifconfig_ed1_alias0="inet 192.168.1.1 netmask 255.255.255.0" # Puede colgar varios en una interfaz de red a la vez
Direcciones IP (aliasing de IP), en este ejemplo se supone que nuestra red está dividida lógicamente en dos subredes 192.168.0.0/24 y 192.168.1.0/24 donde /24
- código de máscara según el método CIDR, que corresponde a
máscara de subred 255.255.255.0

syslogd_enable="YES" #Habilitar el demonio que
será responsable de los registros
inetd_enable="NO" #¡Mantener este servicio deshabilitado!
named_enable="NO" #Apaga este también, no quieres usar tu enrutador como un servidor DNS 🙂
nfs_client_enable="NO" # A continuación, los tres parámetros son responsables de admitir el Sistema de archivos de red, mi consejo para usted es cortarlo también
nfs_server_enbale="NO"
nfs_reserved_port_only="NO"
fsck_y_enable="SÍ"
portmap_enbale="NO" #deshabilitar asignador de puertos
sshd_enbale="YES" #Habilite ssh para que podamos administrar nuestro enrutador de forma remota :)
sshd_programm="/usr/sbin/sshd/" #ruta al demonio ssh
sshd_flags="" #Sshd indicadores de inicio, si no lo sabe, déjelo como está
defaultrouter="167.65.89.1" #Router ascendente de nuestro proveedor
getaway_enbale="YES" #Habilitar la puerta de enlace en nuestra máquina
icmp_bmcastecho="NO" #Kill respuestas a mensajes de eco ICMP, esto nos ahorrará nervios 🙂
cron_enable="NO" #No sé, pero la mayoría de la gente habilita Cron, pero yo lo apago porque no lo necesito en el enrutador...
clear_tmp_enable="YES" #Borrar el directorio tmp cada vez que se inicia el sistema
lpd_enable="NO" #Tampoco imprimirás desde el enrutador, así que córtalo también
usbd_enable="NO" #Eliminar el demonio para admitir dispositivos USB
sendmail_enable="NO" #Cortar sendmail, el lugar con más fugas en FreeBSD, siempre encuentra algunos errores :))))
kern_securelevel_enable="SÍ" #Habilitar seguridad
kern_securelevel="0" #Establecer tipo de seguridad

Entonces, después de que descubrimos rc.conf, necesitamos configurar nuestro enrutador para que funcione con DNS, para esto, abra el archivo resolv.conf en la misma carpeta y escriba esto allí:

nameserver="167.65.88.18" # dirección del servidor DNS de nuestro proveedor
nameserver="167.65.88.17" #Dirección del servidor DNS de respaldo de nuestro proveedor

Como ya entendiste, después de las comillas nameserver="" indican
La dirección IP del servidor DNS. Mejor no agregues un servidor DNS en la red local, Dios guarde la caja fuerte 🙂 Llegó a ssh.
Necesitamos asegurarlo 🙂 y aumentar la protección,
así que vaya a la carpeta /etc/ssh y abra el archivo sshd_config. Y editamos lo siguiente:

#sshd_config
Puerto 666 #En este puerto, ssh se despierta por nosotros 🙂
Protocolo 2 #Uso de un método de transferencia de datos más seguro
PermitRootLogin no # Desactive la capacidad de iniciar sesión en el usuario raíz, crearemos un usuario especial para nuestras necesidades 🙂
PrintLastLog sí #Muestra la última fecha de inicio de sesión
PermitEmptyPasswords no #Prohibir el inicio de sesión de usuarios con contraseña vacía

Después de que lo averigüemos, cruzaremos el cortafuegos...