Quelle est la bonne règle iptables pour permettre à apt-get de télécharger des programmes?

12

Quand je tape quelque chose comme sudo apt-get install firefox, tout fonctionne jusqu'à ce qu'il me demande:

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

Ensuite, des messages d'erreur s'affichent: Failed to fetch: <URL>

Mes règles iptables sont les suivantes:

-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

Que dois-je ajouter pour permettre à apt-get de télécharger les mises à jour? Merci

anthony01
la source

Réponses:

17

apt-get télécharge presque toujours sur HTTP mais peut également utiliser FTP, donc la réponse courte est probablement d'autoriser les connexions HTTP sortantes ... et aussi DNS, bien sûr.

La configuration que vous avez maintenant interdit tout le trafic réseau sortant (la ESTABLISHEDrègle que vous avez sur la OUTPUTchaîne n'est pas efficace car aucune session ne sera jamais établie). Devez-vous autoriser UNIQUEMENT les mises à jour apt-get tout en interdisant tout le reste? iptablesest probablement le mauvais outil pour ce travail car il ne va pas vraiment interpréter les URL et autoriser les transferts HTTP de manière sélective. Vous souhaitez utiliser un serveur proxy HTTP pour ce travail.

Vous pouvez utiliser une configuration plus simple qui permettra les téléchargements apt-get, mais sachez que cela permet également toutes les autres connexions DNS et HTTP sortantes, ce qui n'est peut-être pas ce que vous voulez.

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 vos sources APT incluent des sources HTTPS ou FTP ou des sources HTTP sur des ports autres que 80, vous devrez également ajouter ces ports.

Ensuite, vous devrez autoriser le trafic de retour. Vous pouvez le faire avec cette règle unique qui autorise toute connexion établie:

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

(Il est sûr d'autoriser toutes les connexions établies entrantes lors de l'utilisation du suivi des connexions, car seules les connexions que vous avez autrement autorisées atteindront l'état ÉTABLI.)

Celada
la source
Bonjour, merci pour votre réponse. Cela a fonctionné, mais pensez-vous qu'il pourrait y avoir un problème de sécurité avec l'ouverture de ces ports de sortie? Merci
anthony01
1
La plupart des pare-feu, y compris pratiquement tous les boîtiers de style SOHO, permettent des connexions sortantes sans restriction. Les gens n'ont généralement aucune obligation de restreindre le trafic sortant. Mais cela dépend de vos besoins. Votre configuration existante empêche les utilisateurs du poste de travail en question de naviguer sur Internet. Si c'est ce que vous devez faire, vous ne pouvez pas utiliser cette solution basée sur iptables car elle rend la navigation Web autorisée.
Celada
Et si l'intention est de bloquer la navigation sur le Web, ce n'est pas le bon outil de toute façon. Utiliser NetFilter / IPTables pour bloquer toutes les connexions sortantes afin d'empêcher le personnel de naviguer sur le Web, c'est comme utiliser un bazooka pour ouvrir un noyer. Vous avez besoin d'un proxy Web transparent qui enregistrera les utilisations inappropriées tout en autorisant la navigation professionnelle pour les utilisateurs autorisés.
Magellan
Après des heures de recherche, cette réponse m'a finalement aidé à résoudre des problèmes avec mon propre serveur local. Peu importe ce que j'ai fait, tout le trafic sortant a été bloqué jusqu'à ce que j'autorise explicitement les connexions DNS via le port 53. Cela a du sens cependant, car mon gestionnaire de packages s'est plaint qu'il ne pouvait pas résoudre les hôtes.
Oignon