## Firewall

## Cortafuegos

Un cortafuegos es un sistema de seguridad de red que controla el tráfico de entrada y salida desde/a la red. Mantener un cortafuegos habilitado y apropiadamente configurado reduce el riesgo de amenazas a la seguridad desde Internet.

La operación del cortafuegos desde el interfaz web Plinth de FreedomBox es automática. Cuando habilitas un servicio se le abre automáticamente el cortafuegos y cuando lo deshabilitas se le cierra también automáticamente. Para servicios habilitados por defecto en FreedomBox los puertos se abren en el cortafuegos por defecto durante el proceso de la primera ejecución.

La administración del cortafuegos en FreedomBox se hace empleando FirewallD.

### Interfaces

Cada interfaz de red necesita asignarse a 1 (y sólo 1) zona. Las reglas que tenga activas la zona se aplicarán al interfaz. Por ejemplo, si se permite el trafico HTTP en una zona en particular las peticiones web se acceptarán en todas las direcciones configuradas para todos los interfaces asignados a esa zona.

Principalmente se emplean 2 zonas de cortafuegos. La zona `interna` está pensada para servicios ofrecidos a todas las máquinas de la red local. Esto podría incluir servicios como streaming multimedia o compartición simple de archivos. La zona `externa` está pensada para servicios públicamente expuestos a Internet. Esto podría incluir servicios como blog, sitio web, cliente web de correo electrónico etc.

Para más detalles acerca de como se configuran por defecto los interfaces de red mira la sección Networks.

### Puertos/Servicios

La siguiente tabla trata de documentar los puertos, servicios y sus estados por defecto en FreedomBox. Si encuentras esta página desactualizada mira lib/freedombox/first-run.d/90_firewall en el código fuente de Plinth y la página de estado del cortafuegos en Plinth.

Servicio | Puerto | Externo | Habilitado por defecto | Estado mostrado en Plinth | Administrado por Plinth
Minetest | 30000/udp |  |  |  |
XMPP Client | 5222/tcp |  |  |  |
XMPP Server | 5269/tcp |  |  |  |
XMPP Bosh | 5280/tcp |  |  |  |
NTP | 123/udp |  |  |  |
Plinth | 443/tcp |  |  |  |
Quassel | 4242/tcp |  |  |  |
SIP | 5060/tcp |  |  |  |
SIP | 5060/udp |  |  |  |
SIP-TLS | 5061/tcp |  |  |  |
SIP-TLS | 5061/udp |  |  |  |
RTP | 1024-65535/udp |  |  |  |
SSH | 22/tcp |  |  |  |
mDNS | 5353/udp |  |  |  |
Tor (Socks) | 9050/tcp |  |  |  |
Obfsproxy | <random>/tcp |  |  |  |
OpenVPN | 1194/udp |  |  |  |
Mumble | 64378/tcp |  |  |  |
Mumble | 64378/udp |  |  |  |
Privoxy | 8118/tcp |  |  |  |
JSXC | 80/tcp |  |  |  |
JSXC | 443/tcp |  |  |  |
DNS | 53/tcp |  |  |  |
DNS | 53/udp |  |  |  |
DHCP | 67/udp |  |  |  |
Bootp | 67/tcp |  |  |  |
Bootp | 67/udp |  |  |  |
Bootp | 68/tcp |  |  |  |
Bootp | 68/udp |  |  |  |
LDAP | 389/tcp |  |  |  |
LDAPS | 636/tcp |  |  |  |

### Operación Manual

Para completar información acerca de los conceptos basicos o más allá, mira la documentación de FirewallD.

#### Habilitar/deshabilitar el cortafuegos

Para deshabilitar el cortafuegos

    service firewalld stop

o con systemd

    systemctl stop firewalld

Para vover a habilitar el cortafuegos

    service firewalld start

o con systemd

    systemctl start firewalld

#### Modificar servicios/puertos

Puedes añadir o eliminar un servicio de una zona manualmente.

Para ver la lista de servicios habilitados:

    firewall-cmd --zone=<zone> --list-services

Ejemplo:

    firewall-cmd --zone=internal --list-services

Para ver la lista de puertos habilitados:

    firewall-cmd --zone=<zone> --list-ports

Ejemplo:

    firewall-cmd --zone=internal --list-ports

Para eliminar un servicio de una zona:

    firewall-cmd --zone=<zone> --remove-service=<service>
    firewall-cmd --permanent --zone=<zone> --remove-service=<interface>

Ejemplo:

    firewall-cmd --zone=internal --remove-service=xmpp-bosh
    firewall-cmd --permanent --zone=internal --remove-service=xmpp-bosh

Para eliminar un puerto de una zona:

    firewall-cmd --zone=internal --remove-port=<port>/<protocol>
    firewall-cmd --permanent --zone=internal --remove-port=<port>/<protocol>

Ejemplo:

    firewall-cmd --zone=internal --remove-port=5353/udp
    firewall-cmd --permanent --zone=internal --remove-port=5353/udp

Para añadir un servicio a una zona:

    firewall-cmd --zone=<zone> --add-service=<service>
    firewall-cmd --permanent --zone=<zone> --add-service=<interface>

Ejemplo:

    firewall-cmd --zone=internal --add-service=xmpp-bosh
    firewall-cmd --permanent --zone=internal --add-service=xmpp-bosh

Para añadir un puerto a una zona:

    firewall-cmd --zone=internal --add-port=<port>/<protocol>
    firewall-cmd --permanent --zone=internal --add-port=<port>/<protocol>

Ejemplo:

    firewall-cmd --zone=internal --add-port=5353/udp
    firewall-cmd --permanent --zone=internal --add-port=5353/udp

#### Modificar la zona de interfaces

Puedes cambiar la asignación de zona de cada interfaz de red manualmente tras la asignación automática del proceso de primer arranque.

Para ver la asignación actual de interfaces de red a las zonas.

    firewall-cmd --list-all-zones

Para eliminar un interfaz de una zona:

    firewall-cmd --zone=<zone> --remove-interface=<interface>
    firewall-cmd --permanent --zone=<zone> --remove-interface=<interface>

Ejemplo:

    firewall-cmd --zone=external --remove-interface=eth0
    firewall-cmd --permanent --zone=external --remove-interface=eth0

Para añadir un interfaz a una zona:

    firewall-cmd --zone=<zone> --add-interface=<interface>
    firewall-cmd --permanent --zone=<zone> --add-interface=<interface>

Ejemplo:

    firewall-cmd --zone=internal --add-interface=eth0
    firewall-cmd --permanent --zone=internal --add-interface=eth0