Was ist die richtige iptables-Regel, um apt-get das Herunterladen von Programmen zu ermöglichen?

12

Wenn ich so etwas schreibe sudo apt-get install firefox, funktioniert alles so lange, bis ich gefragt werde:

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

Dann werden Fehlermeldungen angezeigt: Failed to fetch: <URL>

Meine Iptables-Regeln lauten wie folgt:

-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

Was muss ich hinzufügen, damit apt-get Updates herunterladen kann? Vielen Dank

anthony01
quelle

Antworten:

17

apt-get lädt fast immer über HTTP herunter, kann aber auch FTP verwenden. Daher lautet die kurze Antwort wahrscheinlich, ausgehende HTTP-Verbindungen zuzulassen ... und natürlich auch DNS.

Die Konfiguration, die Sie jetzt haben, lässt den gesamten ausgehenden Netzwerkverkehr nicht zu (die ESTABLISHEDRegel, die Sie in der OUTPUTKette haben, ist nicht wirksam, da keine Sitzungen jemals eingerichtet werden). Müssen Sie NUR passende Updates zulassen, ohne alles andere zuzulassen ? iptablesist wahrscheinlich das falsche Tool für diesen Job, da es URLs nicht wirklich interpretiert und selektiv HTTP-Übertragungen zulässt. Sie möchten für diesen Job einen HTTP-Proxyserver verwenden.

Sie können ein einfacheres Setup verwenden, das das Herunterladen von Inhalten ermöglicht. Beachten Sie jedoch, dass dies auch alle anderen ausgehenden DNS- und HTTP-Verbindungen zulässt, die möglicherweise nicht Ihren Wünschen entsprechen.

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

Wenn Ihre APT-Quellen HTTPS- oder FTP-Quellen oder HTTP-Quellen an anderen Ports als 80 enthalten, müssen Sie diese Ports ebenfalls hinzufügen.

Als Nächstes müssen Sie den Rückverkehr zulassen. Sie können dies mit dieser einzigen Regel tun, die jede hergestellte Verbindung zulässt:

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

(Es ist sicher, alle eingehenden Verbindungen zuzulassen, wenn Sie die Verbindungsverfolgung verwenden, da nur Verbindungen, die Sie ansonsten zugelassen haben, in den Status ESTABLISHED versetzt werden.)

Celada
quelle
Hallo, danke für deine Antwort. Es hat funktioniert, aber glauben Sie, dass beim Öffnen dieser OUTPUT-Ports Sicherheitsbedenken bestehen könnten? Vielen Dank
anthony01
1
Die meisten Firewalls, einschließlich praktisch aller SOHO-Boxen, ermöglichen uneingeschränkte ausgehende Verbindungen. Normalerweise müssen die Leute den ausgehenden Verkehr nicht einschränken. Aber es hängt von Ihren Anforderungen ab. Ihre vorhandene Konfiguration verhindert, dass Benutzer auf der betreffenden Workstation im Internet surfen. Wenn Sie dies tun müssen, können Sie diese iptables-basierte Lösung nicht verwenden, da dadurch das Surfen im Internet zugelassen wird.
Celada
Und wenn das Surfen im Internet blockiert werden soll, ist dies sowieso das falsche Tool. Die Verwendung von NetFilter / IPTables zum Blockieren aller ausgehenden Verbindungen, um zu verhindern, dass Mitarbeiter im Internet surfen, entspricht der Verwendung einer Panzerfaust zum Öffnen einer Walnuss. Sie benötigen einen transparenten Webproxy, der bei unangemessener Verwendung protokolliert und autorisierten Benutzern das Surfen im Zusammenhang mit der Arbeit ermöglicht.
Magellan
Nach stundenlangem Suchen half mir diese Antwort schließlich, Probleme mit meinem eigenen lokalen Server zu lösen. Egal, was ich getan habe, der gesamte ausgehende Datenverkehr wurde blockiert, bis ich ausdrücklich DNS-Verbindungen über Port 53 zugelassen habe. Dies ist jedoch sinnvoll, da mein Paketmanager sich darüber beschwerte, dass Hosts nicht aufgelöst werden konnten.
Zwiebel