¿Bloquear conexiones salientes en RHEL7 / CentOS7 con firewalld?

12

RHEL7 / CentOS7 presenta un nuevo firewalldservicio de cortafuegos, que reemplaza al iptables service(ambos utilizan la iptablesherramienta para interactuar con el Netfilter del núcleo debajo).

firewalldse puede ajustar fácilmente para bloquear el tráfico entrante, pero como señaló Thomas Woerner hace 1,5 años, "limitar el tráfico saliente no es posible con firewalld de una manera simple en este momento". Y hasta donde puedo ver, la situación no ha cambiado desde entonces. O lo tiene? ¿Hay alguna forma de bloquear el tráfico saliente firewalld? Si no, ¿hay alguna otra forma "estándar" (en la distribución RHEL7) de bloquear el tráfico saliente, excepto agregar reglas manualmente a través de la iptablesherramienta?

golem
fuente

Respuestas:

11

No encontré ninguna opción en esa buena GUI, pero es posible a través de la interfaz directa

Para habilitar solo el puerto de salida 80:

firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 -p tcp -m tcp --dport=80 -j ACCEPT
firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 1 -j DROP

Esto lo agregará a las reglas permanentes, no a las reglas de tiempo de ejecución.
Deberá volver a cargar las reglas permanentes para que se conviertan en reglas de tiempo de ejecución.

firewall-cmd --reload

para mostrar reglas permanentes

firewall-cmd --permanent --direct --get-all-rules

para mostrar reglas de tiempo de ejecución

firewall-cmd --direct --get-all-rules
Usuario de Fedora
fuente
¿Cómo se logra esto usando el lenguaje real de reglas ricas?
Casey
@Casey Según tengo entendido, las reglas completas se usan estrictamente para las cadenas de ENTRADA.
Arroz
Supongo que las reglas anteriores solo funcionan para ipv4(iptables). Puede ser deseable tener reglas similares para ipv6(para ip6tables) o eb(para ebtables).
mwfearnley
Además, esto mató mi conexión SSH al servidor. Consulte la respuesta del usuario253068 para saber cómo conservar las conexiones establecidas.
mwfearnley
5

Después de hacerme la misma pregunta, y con algunos ajustes, he reunido algunas buenas reglas para restringir el tráfico saliente a consultas HTTP / HTTPS y DNS:

Permitir conexiones establecidas:

# firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 -m state --state ESTABLISHED,RELATED -j ACCEPT

Permitir HTTP:

# firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 1 -p tcp -m tcp --dport 80 -j ACCEPT

Permitir HTTPS:

# firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 1 -p tcp -m tcp --dport 443 -j ACCEPT

Permitir consultas DNS:

# firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 1 -p tcp -m tcp --dport 53 -j ACCEPT
# firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 1 -p udp --dport 53 -j ACCEPT

Negar todo lo demás:

# firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 2 -j DROP

Puede ser una buena idea probar primero omitiendo el argumento "permanente".

De ninguna manera soy un experto, pero esto parece funcionar bien para mí :)

Adobe
fuente
En algún momento puede resultarle útil eliminar las reglas. Eliminar reglas directas simples parece complicado, pero para un mazo, firewall-cmd [--permanent] --direct --remove-rules ipv4 filter OUTPUThará una eliminación masiva.
mwfearnley
1

En cuanto a la GUI; Creo que encuentras esto en " Configuración directa ". Para acceder a él, debe seleccionarlo en " Ver ". Podría estar equivocado.

Nota al margen

Para eliminar reglas; tienes que salir y luego volver a entrar.

usuario301864
fuente