¿Cómo controlar el acceso a internet para cada programa?

60

Me gustaría utilizar un software para controlar qué programa puede conectarse a Internet. Sé que este comportamiento está asociado con la palabra "firewall", pero algunos usuarios de Linux están muy molestos si alguien exige un Firewall personal. No quiero molestarte exigiendo tal programa.
No quiero "asegurar puertos" u otras cosas que un Firewall personal promete en Windows. Lo investigué iptablespero no cumple con mis requisitos.

Vi una excelente respuesta aquí ( "Cómo bloquear el acceso a Internet para las aplicaciones de vino" ) pero es muy incómodo configurarlo.

¿Existe un software que pregunte por cada programa si puede acceder a Internet?

guerda
fuente
En Mac hay un software llamado Little Snitch que hace esto. Creo que también hay una versión de Windows ...
Alvar

Respuestas:

6

Hay un script de Perl en el foro alemán de Ubuntu ( traducido por Google al inglés ) que parece hacer eso. Nunca lo intenté y no le eché un vistazo más de cerca al guión, pero tal vez funcione para ti. La descripción está solo en alemán, por lo que es posible que necesite un servicio de traducción (como Google Translate; consulte más arriba).

Florian Diesch
fuente
Lo echaré un vistazo. Es interesante y puede ser la herramienta adecuada. Desafortunadamente, no hay interfaz
gráfica de usuario
35

En caso de que todavía esté buscando este tipo de aplicación, actualmente estoy desarrollando exactamente esa aplicación: http://douaneapp.com/ https://gitlab.com/douaneapp/Douane

Mi aplicación bloquea cualquier aplicación desconocida (se bloquean las nuevas versiones de una aplicación autorizada) y le pregunta si permite o deniega su tráfico.

Echa un vistazo a la página web ;-)

captura de pantalla

ZedTuX
fuente
¡Bueno! Miré también a ppa pero no hay paquete a pesar de que la aplicación se crea allí. ¿También me pregunto si podría mostrar la IP resuelta a un nombre de sitio legible? Y, voy a seguir las instrucciones de compilación, vi muchos consejos para los paquetes ubuntu dep allí, y usaré checkinstall para crear mi copia local de los paquetes .deb para administrar fácilmente las actualizaciones (eliminar / instalar). Puede que checkinstall también se pueda usar para crear sus distribuibles, creo.
Acuario Power
Puede abrir la solicitud de función en Github ( github.com/Douane/Douane/issues ) :)
ZedTuX
2
eh, parece exactamente lo que necesitaba! Pero no puedo encontrar un paquete para instalarlo en Ubuntu.
azerafati
¿Todavía no paquete para Ubuntu?
Anwar
1
¡Douaneapp.com ha vuelto! :)
ZedTuX
26

Me encontré una solución conveniente que resuelve el problema. Usted crea un grupo que nunca puede usar Internet e inicia el programa como miembro de este grupo.

  1. Crea un grupo no-internet. No te unas a este grupo

    sudo addgroup no-internet
    
  2. Agregue una regla a iptables que evite que todos los procesos que pertenecen al grupo no-internetusen la red (use ip6tablestambién para evitar el tráfico IPv6)

    sudo iptables -A OUTPUT -m owner --gid-owner no-internet -j DROP
    
  3. Ejecutar en sudo -g no-internet YOURCOMMANDlugar de YOURCOMMAND.

Puede escribir fácilmente un script de envoltura que use sudo para usted. Puede deshacerse de la solicitud de contraseña agregando

%sudo     ALL=(:no-internet)      NOPASSWD: ALL

o algo similar con sudo visudo

Use iptables-savey iptables-restorepara mantener las reglas del firewall.

Tim
fuente
1
Probé tu guía, se sudo -g no-internet firefoxconecta más rápido que el predeterminado. No funciona
kenn
1
@kenn Solo puedo decir que funciona bien aquí. Supongo que estás haciendo algo mal al crear la regla. No guardar la regla, no hacer que el script sea ejecutable o algo así.
Tim
Reinicié y apliqué las reglas anteriores nuevamente sin suerte
kenn
1
funcionó perfectamente para mí, incluso con firefox. ¡gracias!
Kostanos
1
Esto tampoco parece funcionar para mí, en Ubuntu 19.04. Tuve que instalar iptables-persistent para permitir que los cambios se guarden entre reinicios. (Por lo tanto, es posible que desee agregar eso a la solución anterior). Sin embargo, sudo -g no-internet firefox no restringe el acceso de Firefox a internet. Conceptualmente, esta solución parece que debería funcionar. ¿Hay algo fundamental que se pasa por alto? Por ejemplo, ¿necesitamos configurar AMBOS ipv4 e ipv6 para que esto funcione?
PJ Singh
5

Ya hay un firewall en Ubuntu ufw, pero está deshabilitado de manera predeterminada. Puede habilitarlo y usarlo mediante la línea de comando o su interfaz, gufw , que se puede instalar directamente desde el Centro de software de Ubuntu.

Si necesita bloquear el acceso a Internet a una aplicación específica, puede probar LeopardFlower , que todavía está en versión beta y no está disponible en el Centro de software de Ubuntu:

heiko81
fuente
4

La ejecución de un programa con otro usuario utilizará los archivos de configuración para ese usuario y no para el suyo.

Aquí hay una solución que no requiere modificar las reglas del firewall, y se ejecuta bajo el mismo usuario (vía sudo) con un entorno modificado, donde está su usuario my_usery la aplicación que desea ejecutar es my_app:

# run app without access to internet
sudo unshare -n sudo -u my_user my_app

Para más detalles ver man unsharey esta respuesta .

Cortafuegos de Linux GUI

Si está buscando un cortafuegos GUI, he tenido buenos resultados con OpenSnitch : todavía no está en repositorios de ubuntu y no lo llamaría nivel de producción, pero seguir los pasos de compilación de la página de github funcionó para mí.

ccpizza
fuente
3

@psusi: Realmente deseo que la gente no venda información mala y no útil. IPTables le permite a uno hacer esto, por lo que difícilmente lo consideraría "insensato". Simplemente decir "NO" sin entender un caso de uso es algo de mente estrecha. http://www.debian-administration.org/article/120/Application_level_firewalling

EDITAR bodhi.zazen

NOTA: ESTA OPCIÓN SE RETIRÓ DE IPTABLES EN 2005, 8 AÑOS ANTES DE ESTA PUBLICACIÓN DE LA RESPUESTA

VER - http://www.spinics.net/lists/netfilter/msg49716.html

cometer 34b4a4a624bafe089107966a6c56d2a1aca026d4 Autor: Christoph Hellwig Fecha: dom 14 de agosto 17:33:59 2005 -0700

[NETFILTER]: eliminar el abuso tasklist_lock en ipt {, 6} propietario

Extraiga la coincidencia cmd / sid / pid, ya que no se puede reparar y se interpone en el bloqueo de los cambios en tasklist_lock.

Signed-off-by: Christoph Hellwig <hch@xxxxxx>
Signed-off-by: Patrick McHardy <kaber@xxxxxxxxx>
Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx>
usuario141987
fuente
2
Para cualquiera que esté considerando marcar esto: Esto no debería ser un comentario, sino que responde a la pregunta que se hizo . @ user141987 Sin embargo, recomiendo expandir esto para proporcionar más información sobre cómo configurar iptablespara implementar restricciones por aplicación. Recomiendo incluir la información importante en su respuesta (y aún proporcionar el enlace, como referencia).
Eliah Kagan
2
iptables NO filtra por aplicación.
Panther
Ese artículo parece ser información errónea ya que no existe tal opción. La razón por la cual las solicitudes para crear tal opción en el pasado fueron rechazadas es porque sería inherentemente poco confiable; una aplicación simplemente puede cambiar su nombre.
psusi
3
@psusi ¿Está diciendo que "si su núcleo se compiló con CONFIG_IP_NF_MATCH_OWNER, entonces puede configurar su firewall de iptables para permitir o rechazar paquetes por orden" es incorrecto? ¿O simplemente que la mayoría de los núcleos no incluyen la opción? Si esto es incorrecto, ¿hay fuentes de información que lo desacrediten? (Además, tenga en cuenta que el propósito principal de las restricciones de firewall por aplicación no es tratar de hacer que sea perfectamente seguro ejecutar aplicaciones no confiables. El propósito es principalmente dar al usuario una medida de control más allá de las opciones de configuración incorporadas de las aplicaciones. )
Eliah Kagan
Esta opción se eliminó del núcleo en 2005, 8 años antes de que se diera esta respuesta: spinics.net/lists/netfilter/msg49716.html y, a pesar de que las afirmaciones en contrario son inexactas, NO se puede aplicar el filtro con iptables.
Panther
3

Otra opción es firejail . Ejecuta la aplicación dentro de sandbox donde controlas si la aplicación puede ver la red:

firejail --net=none firefox

Este comando iniciará el navegador Firefox sin acceso a internet. Tenga en cuenta que la distribución de firejail en el repositorio de Ubuntu está desactualizada ; mejor descargue su última versión LTS de la página de inicio de firejail.

Dimitar II
fuente
2

He encontrado que la solución publicada aquí es buena. Implica crear un grupo de usuarios para el que se permite el acceso a Internet y configurar reglas de firewall para permitir el acceso solo para este grupo. La única forma de que una aplicación acceda a Internet es si la ejecuta un miembro de este grupo. Puede ejecutar programas en este grupo abriendo un shell con sudo -g internet -s.

Para recapitular lo que hay en la publicación que he vinculado anteriormente:

  1. Cree el grupo "internet" escribiendo lo siguiente en un shell: sudo groupadd internet

  2. Asegúrese de que el usuario que ejecutará el script a continuación se agregue al sudogrupo /etc/group. Si termina modificando este archivo, deberá cerrar sesión y volver a iniciarla antes de que el script que se encuentra a continuación funcione.

  3. Cree un script que contenga lo siguiente y ejecútelo:

    #!/bin/sh
    # Firewall apps - only allow apps run from "internet" group to run
    
    # clear previous rules
    sudo iptables -F
    
    # accept packets for internet group
    sudo iptables -A OUTPUT -p tcp -m owner --gid-owner internet -j ACCEPT
    
    # also allow local connections
    sudo iptables -A OUTPUT -p tcp -d 127.0.0.1 -j ACCEPT
    sudo iptables -A OUTPUT -p tcp -d 192.168.0.1/24 -j ACCEPT
    
    # reject packets for other users
    sudo iptables -A OUTPUT -p tcp -j REJECT
    
    # open a shell with internet access
    sudo -g internet -s
    
  4. Al ejecutar el script anterior, tendrá un shell en el que puede ejecutar aplicaciones con acceso a Internet.

Tenga en cuenta que este script no hace nada para guardar y restaurar sus reglas de firewall. Es posible que desee modificar el script para usar los comandos iptables-savey iptables-restoreshell.

marca
fuente
1

Para bien o para mal, Linux usa un enfoque diferente. No hay una interfaz gráfica simple para ofrecer esta funcionalidad. Hay muchas discusiones sobre este tema en Internet y puede encontrar discusiones interesantes si busca en Google. Si bien el debate es interesante, hasta la fecha no ha habido un grupo dedicado de programadores que quieran escribir y mantener esta funcionalidad.

Las herramientas que ofrecen esta funcionalidad en Linux son Apparmor, Selinux y Tomoyo.

Ninguna de estas herramientas es demasiado fácil de aprender y todas tienen ventajas y desventajas. Personalmente, prefiero SELinux, aunque SELinux tiene una curva de aprendizaje más pronunciada.

Ver:

http://www.linuxbsdos.com/2011/12/06/3-application-level-firewalls-for-linux-distributions/

Había (es) una aplicación a la que ya se ha hecho referencia, leopardflower. No estoy seguro del estado / mantenimiento.

Pantera
fuente
0

No, no es posible Tampoco forma parte de la definición tradicional de firewall. Es algo que a Microsoft se le ocurrió hace poco en un intento de corregir sus problemas de seguridad del sistema operativo fundamentalmente dañados. Se considera imprudente e inviable en la comunidad Linux porque un programa que no está permitido simplemente puede ejecutar otro programa que sí lo es y obtener acceso de esa manera.

Si no le gusta lo que hace un programa en la red cuando lo ejecuta, no ejecute ese programa.

psusi
fuente
77
El firewall de Microsoft no fue el primer firewall importante en ofrecer esta funcionalidad. Ni siquiera fue el primer firewall de Windows en ofrecerlo. BlackIce Defender, ZoneAlarm y una variedad de otros firewalls de software para Windows son anteriores a la introducción del Firewall de conexión a Internet de Windows por años. Además, no existe tal consenso en la comunidad Linux. A menudo usamos AppArmor (o SELinux) para restringir el comportamiento de las aplicaciones (y me pregunto si AppArmor podría adaptarse a este propósito ...). No hay razón para que sea "incorrecto" querer controlar qué aplicaciones pueden acceder a Internet.
Eliah Kagan
Y, como pueden atestiguar varias otras respuestas, las restricciones de firewall por aplicación son bastante posibles ; ¡Esta funcionalidad está integrada en iptables / netfilter!
Eliah Kagan
No, ni netfilter ni iptables pueden filtrar por aplicación. Pueden filtrar por usuario y puerto, pero no por aplicación.
Panther
"Simplemente puede ejecutar otro" ???? Entonces, obviamente, el creador de dicho programa que no bloquea los procesos secundarios del programa de destino es muy defectuoso.
trusktr