Mengelola aturan paralel untuk iptables ipv4 dan ipv6?

10

Kami baru-baru ini mulai bereksperimen dengan IPv6, dan salah satu masalah pertama yang harus kami hadapi adalah berurusan dengan aturan firewall (Linux iptables / ip6ables) yang benar-benar terpisah untuk kedua tumpukan protokol. Logika firewall kami sebagian besar didasarkan pada sejumlah jaringan tujuan khusus (misalnya, 10.0.0.0/24 adalah jaringan stasiun kerja staf, 10.1.0.0/24 adalah jaringan basis data, 10.2.0.0/24 adalah jaringan server web, dll. ), dan logika untuk IPv6 dan IPv4 sebagian besar akan sama, modulo berbagai jaringan awalan.

Apa yang dilakukan orang mengelola situasi semacam ini? Idealnya saya ingin dapat menghasilkan iptables dan aturan ip6table dari file sumber yang sama. Saya sudah melempar bersama sesuatu menggunakan bash, tapi itu belum tentu cantik dan saya menduga bahwa solusi yang lebih baik harus ada di suatu tempat di luar sana.

Saya akan sangat tertarik pada solusi berbasis Wayang yang memanfaatkan mekanisme ketergantungan Wayang sendiri untuk menerapkan urutan aturan relatif (atau kelompok aturan).

larsks
sumber

Jawaban:

5

Firewall Builder memiliki apa yang Anda butuhkan. Anda dapat membuat satu set aturan, tandai sebagai "gabungan ipv4 + ipv6" dan letakkan jaringan ipv4 dan ipv6 Anda yang ditugaskan ke segmen yang sama (seperti "basis data jaringan" dll) dalam aturan yang sama. Program kemudian menghasilkan dua konfigurasi iptables yang terpisah satu untuk ipv4 dan lainnya untuk ipv6. Bab Panduan Pengguna ini menggambarkan hal ini, meskipun ia menggunakan daftar akses router Cisco sebagai contoh. Ini berfungsi persis sama untuk iptables.

http://www.fwbuilder.org/4.0/docs/users_guide5/combined-ipv4-ipv6-rule-set.html

vadimk
sumber
4

Saya juga baru-baru ini dihadapkan dengan membuat aturan iptables untuk keduanya, IPv4 dan IPv6. Setelah beberapa pencarian saya akhirnya menggunakan cabang FireHOL IPv6 oleh Phil Whineray .

FireHOL adalah generator firewall iptables yang menghasilkan firewall penyaringan paket iptables stateful, pada host dan router Linux dengan sejumlah antarmuka jaringan, sejumlah rute, sejumlah layanan yang dilayani, sejumlah kompleksitas antara variasi layanan (termasuk positif dan negatif ekspresi). (Sumber: situs web FireHOL)

Sayangnya versi resmi tidak memiliki dukungan untuk IPv6. Tetapi Phil Whineray telah menambahkan dukungan di cabang yang tidak resmi.

Beberapa contoh tentang bagaimana konfigurasi itu terlihat:

# allowing outgoing http and https requests for ipv4 and ipv6 (default setting when nothing is specified):
client "http https" accept

# allow incoming ssh only on ipv4
ipv4 server ssh accept

# allow incoming IMAP requests only for ipv6
ipv6 server imap accept

Anda dapat checkout cabang firehol ini di:

git clone git://repo.or.cz/fireholvi.git

Dokumentasi tambahan dapat ditemukan di dokumentasi FireHOL resmi atau di Readme tambahan tentang IPv6 .

Secara pribadi saya mungkin akan berhati-hati ketika menggunakannya pada mesin produksi di mana memiliki firewall yang andal 100% penting. Tapi tetap saja layak untuk dilihat.

generasi bb
sumber
3

Untuk kepentingan penginjilan yang terus-menerus, saya menyarankan Leveraging Puppet untuk mengangkat Anda. Saat ini tidak ada skrip yang baik untuk menangani aturan iptables 4 dan 6, tetapi tidak akan terlalu sulit untuk menulisnya begitu Anda menyesuaikan diri dengan bahasa tersebut.

Repositori publik Mediawiki adalah tambang yang fantastis dari pola konfigurasi dan termasuk kelas iptables yang akan memberikan basis yang baik untuk memulai. Anda bisa mengeditnya untuk menerapkan aturan ke dua tumpukan sekaligus secara default dan memiliki tanda untuk aturan yang berbeda saat Anda mendasarkan sesuatu pada aturan IPv4 atau IPv6.

Bonus utama pada akhir ini adalah bahwa aturan firewall untuk layanan dapat ditulis ke dalam definisi layanan dan secara otomatis digunakan dan dihapus ketika suatu layanan dikerahkan atau dihapus.

Jeff Ferland
sumber
Aku akan melihatnya. Sejauh ini saya belum terkesan dengan solusi khas Wayang untuk mengelola iptables. Secara khusus, mereka semua tampaknya menerapkan pemesanan secara eksplisit, baik melalui nama file file fragmen atau melalui indeks eksplisit yang disediakan dalam aturan Wayang, daripada menggunakan mekanisme resolusi ketergantungan Puppet, yang merupakan apa yang saya inginkan. Jika solusi yang ditautkan di sini menghindari masalah ini, saya siap untuk itu.
larsks
@ larsks Saya setuju dan sama-sama frustrasi karena solusi generik yang baik belum dirilis ... tapi mungkin sudah saatnya saya melakukannya sendiri. Wayang akan memungkinkan penggunaan before => Resource['declared_name']pada definisi apa pun, sehingga Anda dapat memesannya menggunakan implementasi yang tidak mencoba untuk memesan sesuatu dengan fragmen. Penggunaan Augueas untuk struktur yang baik juga akan mencegah masalah ini - buat komentar pohon teratas Anda dan pemesanan Anda di bawah itu sesuai keinginan.
Jeff Ferland
Upaya saya sendiri untuk menyelesaikan ini belum terlalu jauh. Apa yang saya lakukan untuk saat ini adalah (a) menginstal fragmen ke dalam subdirektori dan kemudian (b) menggunakan rcorder untuk menempatkannya dalam urutan ketergantungan. Ini berfungsi, tetapi karena ini didasarkan secara eksklusif pada pengelolaan file fragmen, ia tidak cocok dengan lingkungan campuran ipv4 / ipv6. Saya belum benar-benar memperhatikan penggunaan Augeas untuk membantu menyelesaikan masalah. Saya ingin tahu apakah Anda memiliki kode prototipe di luar sana.
larsks
2

Menjawab pertanyaan saya sendiri di sini, tetapi saya pikir informasi ini mungkin menarik secara umum:

Sambil melihat pertanyaan ini, saya menemukan ufw (Uncomplicated FireWall) dari orang-orang Ubuntu. Dengan IPV6 diaktifkan di konfigurasi ufw, ufw akan mengelola aturan iptables dan ip6tables secara paralel. Ini berarti Anda dapat melakukan sesuatu seperti ini:

# ufw allow ssh/tcp

Dan berakhir dengan:

# ufw status
Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
22/tcp                     ALLOW       Anywhere (v6)

Yang menghasilkan aturan iptables / ip6tables yang terlihat seperti ini:

# iptables-save | grep 'dport 22'
-A ufw-user-input -p tcp -m tcp --dport 22 -j ACCEPT
# ip6tables-save | grep 'dport 22'
-A ufw6-user-input -p tcp -m tcp --dport 22 -j ACCEPT

Ufw juga mendukung profil aplikasi, yang memungkinkan Anda membuat grup bernama port. Kamu bisa melakukan ini:

# ufw allow 'WWW Full'

Dan akhirnya membuka kedua port 80 dan 443 (untuk IPv4 dan IPv6).

Saya baru saja mulai melihatnya, tetapi tampaknya disatukan dengan cukup baik.

larsks
sumber
0

Karena masih belum ada dalam daftar: Shorewall adalah alat konfigurasi filter paket kaya fitur yang diadopsi secara luas dan diperbarui secara luas. Itu memiliki dukungan IPv6 untuk sementara waktu sekarang.

the-wabbit
sumber
1
Saya mengerti bahwa "shorewall" hanya ipv4 dan "shorewall6" hanya ipv6, anod harus menggunakan keduanya untuk mencakup kedua protokol. Bisakah mereka berbagi konfigurasi yang sama?
larsks