Saya perlu mengkonfigurasi mesin saya untuk mengizinkan lalu lintas HTTP ke / dari serverfault.com saja. Semua situs web lain, port layanan tidak dapat diakses. Saya datang dengan aturan iptables ini:
#drop everything
iptables -P INPUT DROP
iptables -P OUTPUT DROP
#Now, allow connection to website serverfault.com on port 80
iptables -A OUTPUT -p tcp -d serverfault.com --dport 80 -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
#allow loopback
iptables -I INPUT 1 -i lo -j ACCEPT
Itu tidak bekerja dengan baik:
Setelah saya meninggalkan semuanya, dan lanjutkan ke aturan 3:
iptables -P OUTPUT -p tcp -d serverfault.com --port 80 -j MENERIMA
Saya mendapatkan kesalahan ini:
iptables v1.4.4: host/network `serverfault.com' not found
Try `iptables -h' or 'iptables --help' for more information.
Apakah Anda pikir ini terkait dengan DNS? Haruskah saya mengizinkannya juga? Atau haruskah saya memasukkan alamat IP ke aturan? Apakah Anda pikir apa yang saya coba lakukan dapat dicapai dengan aturan yang lebih sederhana? Bagaimana?
Saya sangat menghargai bantuan atau petunjuk tentang ini. Terima kasih banyak!
Jawaban:
Dengan aturan IPTables, masalah pemesanan. Aturan ditambahkan, dan diterapkan, secara berurutan. Selain itu, ketika menambahkan aturan secara manual, peraturan itu segera diterapkan. Jadi, dalam contoh Anda, paket apa pun yang melalui rantai INPUT dan OUTPUT mulai turun segera setelah kebijakan default ditetapkan. Ini juga, kebetulan, mengapa Anda menerima pesan kesalahan yang Anda lakukan. Apa yang terjadi adalah ini:
Sementara opsi sumber / tujuan akan menerima nama host, itu sangat tidak dianjurkan. Mengutip halaman manual,
Slillibri mengenai paku di kepala yang jawabannya, Anda melewatkan aturan DNS ACCEPT. Dalam kasus Anda itu tidak masalah, tetapi umumnya saya akan menetapkan kebijakan default nanti pada proses. Hal terakhir yang Anda inginkan adalah bekerja dari jarak jauh dan mengizinkan SSH setelah mengaktifkan default deny.
Juga, tergantung pada distribusi Anda, Anda harus dapat menyimpan aturan firewall Anda sehingga mereka akan diterapkan secara otomatis pada waktu mulai.
Mengetahui semua itu, dan mengatur ulang skrip Anda, berikut adalah apa yang akan saya rekomendasikan.
sumber
iptables -P
pernyataan Anda di mana saja di skrip Anda, karena kebijakan berantai hanya diterapkan ketika paket "jatuh" di ujung rantai. Saya biasanya meletakkan pernyataan kebijakan (biasanyaDROP
kebijakan) di bagian atas skrip iptables saya.sudo iptables -I OUTPUT 1 -o lo -j ACCEPT
. Bukankah itu harus ditambahkan?Menambahkan
untuk mengizinkan pencarian DNS.
sumber
Persyaratan semacam ini mungkin lebih baik ditangani dengan proxy web dan / atau filter. Dansgaurdian dapat dikonfigurasi untuk melakukan ini. Anda harus menggunakan aturan NAT untuk memaksa lalu lintas Anda melalui filter.
Menggunakan iptables untuk memfilter akan memungkinkan situs apa pun tersedia dari alamat IP yang relevan. Ini biasanya sebagian kecil dari keseluruhan web.
sumber
iptables
mungkin alat yang salah untuk digunakan di sini, karena tidak menangani dengan baik dengan nama DNS. Proxy web dengan pengaturan filter yang sesuai jauh lebih cocok.Saya khawatir iptables tidak berfungsi pada level ini, ia hanya peduli dengan alamat ip, bukan nama host. Jika Anda ingin memblokir akses ke host virtual nama lain di ip yang sama, Anda harus melihat cara memasukkan file .htaccess.
sumber
Anda perlu mengkonfigurasi ini di server web Anda. iptables adalah filter paket. Transaksi HTTP mengirim nama situs (yaitu stackoverflow) sebagai bagian dari payload TCP (yaitu bukan sebagai bagian dari header TCP yang mudah dibaca oleh iptables).
Mengingat itu, dan fakta bahwa transaksi HTTP hampir pasti akan tersebar di beberapa paket (yaitu Anda tidak bisa hanya mencocokkan string di header HTTP), ini jauh lebih baik ditangani oleh konfigurasi server web Anda atau oleh proxy di depan itu.
Akan berguna untuk mengetahui alasan di balik ini, ada beberapa alternatif lain:
sumber