¿Cuál es la regla correcta de iptables para permitir que apt-get descargue programas?

12

Cuando escribo algo así sudo apt-get install firefox, todo funciona hasta que me pregunta:

After this operation, 77 MB of additional disk space will be used.
Do you want to continue [Y/n]? Y

Luego se muestran mensajes de error: Failed to fetch: <URL>

Mis reglas de iptables son las siguientes:

-P INPUT DROP
-P OUTPUT DROP
-P FORWARD DROP

-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT

-A INPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

¿Qué debo agregar para permitir que apt-get descargue actualizaciones? Gracias

anthony01
fuente

Respuestas:

17

apt-get casi siempre descarga a través de HTTP, pero también puede usar FTP, por lo que la respuesta breve es probablemente permitir conexiones HTTP salientes ... y también DNS, por supuesto.

La configuración que tiene ahora no permite todo el tráfico de red saliente (la ESTABLISHEDregla que tiene en la OUTPUTcadena no es efectiva ya que nunca se establecerán sesiones). ¿Necesita permitir SOLAMENTE actualizaciones de apt-get mientras sigue sin permitir todo lo demás? iptableses probablemente la herramienta incorrecta para ese trabajo, ya que realmente no va a interpretar las URL y permitir transferencias HTTP selectivamente. Desea utilizar un servidor proxy HTTP para este trabajo.

Puede usar una configuración más simple que permita descargas de apt-get, pero tenga en cuenta que esto también permite todas las demás conexiones DNS y HTTP salientes, que pueden no ser lo que desea.

iptables -F OUTPUT  # remove your existing OUTPUT rule which becomes redundant
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT

Si sus fuentes APT incluyen fuentes HTTPS o FTP o fuentes HTTP en puertos que no sean 80, también deberá agregar esos puertos.

A continuación, deberá permitir el tráfico de retorno. Puede hacerlo con esta regla única que permite cualquier conexión establecida:

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

(Es seguro permitir todas las conexiones entrantes establecidas cuando se usa el seguimiento de conexiones, porque solo las conexiones que de otro modo haya permitido llegarán al estado ESTABLECIDO).

Celada
fuente
Hola gracias por tu respuesta Funcionó, pero ¿crees que podría haber algún problema de seguridad con la apertura de estos puertos de SALIDA? Gracias
anthony01
1
La mayoría de los firewalls, incluidos prácticamente todos los cuadros de estilo SOHO, permiten conexiones salientes sin restricciones. Las personas generalmente no tienen el requisito de restringir el tráfico saliente. Pero depende de tus requerimientos. Su configuración actual evita que los usuarios de la estación de trabajo en cuestión naveguen por Internet. Si esto es lo que necesita hacer, entonces no puede usar esta solución basada en iptables porque hace que se permita la navegación web.
Celada
Y si la intención es bloquear la navegación web, esa es la herramienta incorrecta de todos modos. Usar NetFilter / IPTables para bloquear todas las conexiones salientes para evitar que la navegación web del personal sea como usar una bazuca para abrir una nuez. Necesita un proxy web transparente que registre el uso inapropiado mientras permite la navegación relacionada con el trabajo para usuarios autorizados.
Magellan
Después de horas de búsqueda, esta respuesta finalmente me ayudó a resolver problemas con mi propio servidor local. No importa lo que hice, todo el tráfico saliente se bloqueó hasta que permití explícitamente las conexiones DNS a través del puerto 53. Sin embargo, tiene sentido, porque mi administrador de paquetes se quejó de que no podía resolver los hosts.
Cebolla