Jaka jest właściwa reguła iptables, aby umożliwić apt-get pobieranie programów?

12

Kiedy piszę coś takiego sudo apt-get install firefox, wszystko działa, dopóki mnie nie zapyta:

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

Następnie wyświetlane są komunikaty o błędach: Failed to fetch: <URL>

Moje zasady iptables są następujące:

-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

Co powinienem dodać, aby umożliwić apt-get pobieranie aktualizacji? Dzięki

anthony01
źródło

Odpowiedzi:

17

apt-get prawie zawsze pobiera przez HTTP, ale może także używać FTP, więc krótka odpowiedź prawdopodobnie pozwoli na wychodzące połączenia HTTP ... i oczywiście DNS.

Konfiguracja, którą masz teraz, uniemożliwia cały wychodzący ruch sieciowy ( ESTABLISHEDreguła, którą masz w OUTPUTłańcuchu, nie działa, ponieważ żadna sesja nigdy się nie ustanowi). Czy musisz zezwolić TYLKO na aktualizacje apt-get, jednocześnie nie zezwalając na wszystko inne? iptablesjest prawdopodobnie niewłaściwym narzędziem do tego zadania, ponieważ tak naprawdę nie zamierza interpretować adresów URL i zezwalać na selektywne przesyłanie HTTP. Do tego zadania chcesz użyć serwera proxy HTTP.

Możesz użyć prostszej konfiguracji, która pozwoli na pobieranie apt-get, ale pamiętaj, że pozwala to również na wszystkie inne wychodzące połączenia DNS i HTTP, co może nie być tym, czego chcesz.

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

Jeśli twoje źródła APT obejmują źródła HTTPS lub FTP lub źródła HTTP na portach innych niż 80, musisz również dodać te porty.

Następnie musisz zezwolić na ruch powrotny. Możesz to zrobić za pomocą tej jednej reguły, która zezwala na każde ustanowione połączenie:

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

(Podczas śledzenia połączeń można bezpiecznie zezwalać na wszystkie ustanowione połączenia przychodzące, ponieważ tylko połączenia, które w innym przypadku byłyby dozwolone, przejdą w stan USTANOWIONY).

Celada
źródło
Cześć, dzięki za odpowiedź. Udało się, ale czy uważasz, że otwieranie portów OUTPUT może budzić obawy związane z bezpieczeństwem? Dzięki
anthony01,
1
Większość zapór ogniowych, w tym praktycznie wszystkie urządzenia w stylu SOHO, umożliwiają nieograniczone połączenia wychodzące. Ludzie zwykle nie mają obowiązku ograniczania ruchu wychodzącego. Ale to zależy od twoich wymagań. Twoja obecna konfiguracja uniemożliwia użytkownikom danej stacji roboczej przeglądanie Internetu. Jeśli to właśnie musisz zrobić, nie możesz użyć tego rozwiązania opartego na iptables, ponieważ powoduje to przeglądanie stron internetowych.
Celada
A jeśli celem jest zablokowanie przeglądania Internetu, i tak jest to niewłaściwe narzędzie. Korzystanie z NetFilter / IPTables do blokowania wszystkich połączeń wychodzących w celu zapobiegania przeglądaniu stron przez pracowników przypomina korzystanie z bazooki do otwierania orzecha włoskiego. Potrzebujesz przejrzystego internetowego serwera proxy, który będzie rejestrował nieprawidłowe użycie, jednocześnie umożliwiając przeglądanie związane z pracą autoryzowanym użytkownikom.
Magellan,
Po wielu godzinach szukania ta odpowiedź w końcu pomogła mi rozwiązać problemy z moim lokalnym serwerem. Bez względu na to, co zrobiłem, cały ruch wychodzący został zablokowany, dopóki wyraźnie nie zezwoliłem na połączenia DNS przez port 53. Ma to jednak sens, ponieważ mój menedżer pakietów narzekał, że nie może rozwiązać hostów.
Cebula