Bagaimana saya bisa menulis tes otomatis untuk iptables?

13

Saya mengkonfigurasi router Linux dengan iptables. Saya ingin menulis tes penerimaan untuk konfigurasi yang menyatakan hal-hal seperti:

  • lalu lintas dari beberapa pria di internet tidak diteruskan, dan
  • TCP ke port 80 pada server web di DMZ dari host di LAN perusahaan diteruskan.

Sebuah FAQ kuno menyinggung iptables -Copsi yang memungkinkan seseorang untuk bertanya sesuatu seperti, "diberikan paket dari X, ke Y, pada port Z, apakah itu akan diterima atau dibatalkan?" Meskipun FAQ menyarankannya berfungsi seperti ini, untuk iptables(tapi mungkin tidak ipchainsseperti yang digunakan dalam contoh) -Copsi tersebut tampaknya tidak mensimulasikan paket pengujian yang berjalan melalui semua aturan, tetapi memeriksa keberadaan untuk aturan yang sama persis. Ini memiliki nilai kecil sebagai ujian. Saya ingin menegaskan bahwa aturan memiliki efek yang diinginkan, bukan hanya aturan itu ada.

Saya telah mempertimbangkan untuk membuat lebih banyak VM uji dan jaringan virtual, kemudian memeriksa dengan alat seperti nmapuntuk efek. Namun, saya menghindari solusi ini karena kompleksitas menciptakan semua mesin virtual tambahan, yang sebenarnya merupakan cara yang cukup berat untuk menghasilkan beberapa traffic pengujian. Akan lebih baik jika memiliki metodologi pengujian otomatis yang juga dapat bekerja pada server nyata dalam produksi.

Bagaimana lagi saya bisa mengatasi masalah ini? Apakah ada beberapa mekanisme yang mungkin saya gunakan untuk menghasilkan atau mensimulasikan lalu lintas yang sewenang-wenang, lalu tahu apakah itu (atau akan) dijatuhkan atau diterima oleh iptables?

Phil Frost
sumber
Yang ini mungkin menarik juga: security.stackexchange.com/questions/31957/…
dawud
1
@ Dawud Saya tidak berpikir salah satu dari itu adalah duplikat. Saya tahu cara menjalankan pemindaian port: itu bukan tes yang baik karena saya terbatas pada pengujian ke dan dari tujuan dan sumber yang dapat saya kontrol. Kekhawatiran saya juga tidak mengunci diri saya dari server. Saya ingin menguji secara otomatis bahwa aturan firewall sebenarnya memiliki efek yang saya rancang untuk mereka miliki.
Phil Frost

Jawaban:

2

Jika Anda siap melakukan sedikit pengkodean, Anda dapat mencoba ini:

  • Buat namespace jaringan baru dengan menggunakan CLONE_NEWNETbendera untuk clonepanggilan sistem, atau dengan menggunakan ip netns adddan ip netns execperintah.
  • Dalam namespace ini, satu set antarmuka jaringan virtual menggunakan tundriver atau ip link add.
  • Muat konfigurasi menggunakan iptables-restore
  • Berikan sejumlah paket ke aturan melalui perangkat tunatauveth
  • Perhatikan bahwa Anda mendapatkan paket yang benar dari perangkat tunatauveth

Pendekatan ini mungkin akan bekerja paling baik untuk menguji aturan untuk paket yang diteruskan. Koneksi ke / dari mesin tempat iptables digunakan membutuhkan sedikit usaha, tetapi harus layak untuk menguji cara ini juga.

Berikut adalah contoh urutan perintah, yang dapat digunakan:

ip netns add test-iptables
ip netns add test-iptables-some-guy-on-the-internet
ip netns add test-iptables-lan-host

ip netns exec test-iptables ip link add eth0 type veth peer name eth0-peer
ip netns exec test-iptables ip link set eth0-peer netns test-iptables-some-guy-on-the-internet
ip netns exec test-iptables ip link add eth1 type veth peer name eth1-peer
ip netns exec test-iptables ip link set eth1-peer netns test-iptables-lan-host

ip netns exec test-iptables ifconfig eth0 192.0.2.2 netmask 255.255.255.0
ip netns exec test-iptables ifconfig eth1 203.0.113.1 netmask 255.255.255.0

ip netns exec test-iptables-some-guy-on-the-internet ifconfig eth0-peer 192.0.2.1 netmask 255.255.255.0
ip netns exec test-iptables-some-guy-on-the-internet route add default gateway 192.0.2.2

ip netns exec test-iptables-lan-host ifconfig eth1-peer 203.0.113.2 netmask 255.255.255.0
ip netns exec test-iptables-lan-host route add default gateway 203.0.113.1

ip netns exec test-iptables-some-guy-on-the-internet telnet 203.0.113.2
ip netns exec test-iptables iptables-restore < /tmp/iptables-test
ip netns exec test-iptables-some-guy-on-the-internet telnet 203.0.113.2

ip netns del test-iptables
ip netns del test-iptables-some-guy-on-the-internet
ip netns del test-iptables-lan-host

Ini akan membuat tiga ruang nama jaringan untuk pengujian dan memuat seperangkat aturan iptables di salah satunya. Dua lainnya berfungsi sebagai peran beberapa pria di internet dan menjadi tuan rumah di LAN.

Dalam contoh di atas telnetperintah pertama yang menerima koneksi ditolak dari test-iptables-lan-hostnamespace, telnetperintah kedua mendapatkan batas waktu jika set aturan menjatuhkan paket.

Ini tidak menyentuh namespace jaringan awal, yang mana semua produksi Anda akan terjadi secara default. Satu-satunya cara untuk mendapatkan lebih banyak pemisahan dari produksi Anda adalah dengan menjalankannya pada host yang terpisah (fisik atau virtual).

kasperd
sumber
0

dunia profesional melakukannya dengan bantuan perangkat keras / lunak yang disediakan oleh 2 perusahaan.

www.ixiacom.com

www.spirent.com

Dalam kasus pertama Anda dapat menggunakan sesuatu seperti sasis Ixia 400T + Ixload.

Dalam kasus kedua, baris Smartbits atau Testcenter dengan aplikasi yang sesuai

Perangkat ini dapat (antara lain) meniru banyak klien yang melakukan berbagai jenis permintaan pada server target yang Anda pilih. Mereka siap menguji keamanan server Anda termasuk serangkaian tes serangan yang telah ditentukan plus Anda selalu dapat menentukan set Anda sendiri. Mereka juga memiliki banyak kemampuan lain seperti tes tegangan beban dan sejenisnya.

Bukan pilihan yang murah.

Menepuk
sumber
Sungguh menakjubkan melihat bagaimana ketidaktahuan bisa menurunkan peringkat jawaban yang sah ...
Pat