Apa aturan iptables yang tepat untuk memperbolehkan apt-get mengunduh program?

12

Ketika saya mengetik sesuatu seperti sudo apt-get install firefox, semuanya berfungsi sampai ia bertanya:

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

Kemudian pesan kesalahan ditampilkan: Failed to fetch: <URL>

Aturan iptables saya adalah sebagai berikut:

-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

Apa yang harus saya tambahkan untuk memungkinkan pembaruan apt-get untuk mengunduh? Terima kasih

anthony01
sumber

Jawaban:

17

apt-get hampir selalu mengunduh melalui HTTP tetapi juga dapat menggunakan FTP, jadi jawaban singkatnya mungkin untuk memungkinkan koneksi HTTP keluar ... dan juga DNS, tentu saja.

Konfigurasi yang sekarang Anda miliki melarang semua lalu lintas jaringan keluar ( ESTABLISHEDaturan yang Anda miliki pada OUTPUTrantai tidak efektif karena tidak ada sesi yang akan dibuat). Apakah Anda hanya perlu mengizinkan pembaruan apt-get ONLY sementara masih melarang semua yang lain? iptablesmungkin alat yang salah untuk pekerjaan itu karena tidak benar-benar akan menafsirkan URL dan memungkinkan transfer HTTP secara selektif. Anda ingin menggunakan server proxy HTTP untuk pekerjaan ini.

Anda dapat menggunakan pengaturan yang lebih sederhana yang memungkinkan unduhan apt-get, tetapi perlu diketahui bahwa ini juga memungkinkan semua koneksi DNS dan HTTP keluar lainnya, yang mungkin bukan yang Anda inginkan.

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

Jika sumber APT Anda menyertakan sumber HTTPS atau FTP atau sumber HTTP pada port selain 80, Anda juga harus menambahkan port tersebut.

Selanjutnya, Anda harus mengizinkan lalu lintas kembali. Anda dapat melakukannya dengan aturan tunggal ini yang mengizinkan koneksi yang dibuat:

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

(Aman untuk mengizinkan semua koneksi masuk yang masuk saat menggunakan pelacakan koneksi, karena hanya koneksi yang telah Anda izinkan yang akan masuk ke status ESTABLISHED.)

Celada
sumber
Hai, terima kasih atas tanggapan Anda. Itu berhasil, tetapi apakah Anda pikir mungkin ada masalah keamanan dengan membuka port OUTPUT ini? Terima kasih
anthony01
1
Sebagian besar firewall, termasuk hampir semua kotak bergaya SOHO, mengizinkan koneksi keluar yang tidak dibatasi. Orang biasanya tidak memiliki persyaratan untuk membatasi lalu lintas keluar. Tetapi itu tergantung pada kebutuhan Anda. Pengaturan Anda yang ada mencegah pengguna di workstation yang dimaksud dari menjelajahi Internet. Jika ini yang perlu Anda lakukan, maka Anda tidak dapat menggunakan solusi berbasis iptables ini karena itu menyebabkan penjelajahan web diizinkan.
Celada
Dan jika tujuannya adalah untuk memblokir penjelajahan web, itu adalah alat yang salah. Menggunakan NetFilter / IPTables untuk memblokir semua koneksi keluar untuk mencegah penjelajahan web staf seperti menggunakan bazooka untuk membuka kenari. Anda memerlukan proxy web transparan yang akan mencatat penggunaan yang tidak pantas sambil memungkinkan penelusuran terkait pekerjaan untuk pengguna yang berwenang.
Magellan
Setelah berjam-jam mencari, jawaban ini akhirnya membantu saya memecahkan masalah dengan server lokal saya sendiri. Tidak peduli apa yang saya lakukan, semua lalu lintas keluar diblokir sampai saya secara eksplisit mengizinkan koneksi DNS melalui port 53. Namun masuk akal, karena manajer paket saya mengeluh bahwa itu tidak dapat menyelesaikan host.
Bawang