firewalld menerima respons terhadap permintaan DNS multicast dari porta sesaat

4

Saya mencoba untuk mengkonfigurasi firewalld (Fedora 21) sehingga respons dapat melewati untuk permintaan MDNS yang dikirim dari aplikasi klien menggunakan port sumber UDP singkat ke target multicast. Responsnya unicast. Urutannya seperti ini (seperti yang ditangkap menggunakan wireshark)

  1. UDP: local-address: 45325 (ephemeral) -> 224.0.0.251-05353; kueri
  2. UDP: some-system: 5353 -> local-address: 45325; responnya
  3. ICMP: local-address -> some-system: Type: 3 (Destination unreachable), Kode: 10 (Host secara administratif dilarang)

Layanan firewalld mdns, yang menambahkan port 5353 UDP diaktifkan tetapi ini tidak membantu dengan respons.

Pointer apa pun akan dihargai.

sangat buruk
sumber
Apakah Anda pernah menyelesaikan ini? Saya mengalami masalah yang sama dengan seperangkat perangkat khusus menggunakan multicast yang menghubungkan ke server dan melihat kesalahan ICMP yang sama yang Anda sebutkan dalam tcpdump capture.
James White
Tidak, tidak ada jawaban, dan saya sendiri belum menemukan solusi apa pun.
awy
Saya menyerah dan untuk mengatasi masalah ini, saya menambahkan aturan kaya khusus untuk mengizinkan semua dari sumber IP tertentu. Bukan praktik keamanan terbaik tetapi berfungsi untuk kasus khusus ini.
James White
Semoga temuan saya dapat membantu Anda.
James White

Jawaban:

2

Selamat, Anda menemukan batasan dalam konsep penyaringan paket. Melacak protokol multicast: respons tidak dapat kembali dari alamat yang sama, karena Anda dilarang mengirim dari alamat multicast. Firewall tidak dapat mencocokkan respons terhadap permintaan Anda, jadi itu memblokirnya. Jelas sistem MDNS dameon, avahi, menghindari ini dengan mengirim dari port tetap 5353, jadi di situlah ia mendapat respons juga. Port 5353 diizinkan secara khusus oleh aturan firewall. Jika Anda dapat meminta perangkat lunak untuk berbicara dengan avahi , itulah solusi yang akan direkomendasikan avahi.

Atau dimungkinkan untuk mengandalkan opsi avahi default disallow-other-stacks=no, dan konfigurasikan aplikasi klien untuk menggunakan port tetap 5353 . Tidak jelas apa efeknya terhadap keandalan Avahi. Atau Anda bisa menonaktifkan Avahi jika Anda tidak membutuhkannya. Tentu saja jika aplikasi memungkinkan Anda memilih port sumber tetap, Anda bisa menambahkannya ke firewall & itu akan berfungsi ...

... kecuali ketika Anda mengatakan "aplikasi klien", Anda mungkin bermaksud kelas perangkat lunak yang secara teori dapat menjalankan beberapa instance secara bersamaan. Itu tidak menjalankan semua permintaan jaringan melalui daemon tunggal. Dan saya yakin aplikasi ini tidak menggunakan hack SO_REUSEPORT yang mengimplementasikan avahi disallow-other-stacks=no, jadi ini hanya akan membiarkan Anda menjalankan satu instance aplikasi sekaligus .

Banyak perangkat lunak Linux untuk Desktop atau kotak jaringan lokal mungil mungkin tidak dirancang untuk dijalankan dengan firewall host. Fedora adalah distribusi utama yang melakukannya. Fedora Workstation baru-baru ini mengubah zona standar firewall mereka menjadi "FedoraWorkstation", yang memungkinkan koneksi ke port TCP atau UDP di atas 1024. Baik konfigurasi FedoraWorkstation, atau berjalan tanpa firewall, akan memungkinkan perangkat lunak Anda untuk bekerja tidak berubah.

Sulit untuk mengungkapkan titik firewall host seperti Firewalld. Itu tidak memiliki dukungan untuk routing antara zona seperti Shorewall. Itu memungkinkan Anda memilih untuk mengatur zona default ke sesuatu yang lebih ketat, dengan pengaturan yang lebih permisif untuk jaringan nirkabel di rumah Anda, atau VPN. Mungkin jika Anda bekerja keras di NetworkManager, Anda juga bisa menggunakannya untuk jaringan kabel rumah. Tapi itu sangat tidak jelas untuk sesuatu yang diaktifkan secara default.

Ini sepenuhnya aman untuk menjalankan instalasi default Fedora (atau Ubuntu) tanpa firewall. Apa yang Anda menyerah adalah kebijakan terpusat untuk port yang terbuka - jika Anda nanti membuat beberapa perangkat lunak acak, dan tidak menyadari bahwa ia ingin mendengarkan pada port.

Orang-orang mencoba membandingkan firewall di Linux dan Windows, tetapi Windows Firewall jelas diperlukan dan sebenarnya mungkin dipahami oleh manusia, tidak seperti Firewalld . Windows memiliki port terbuka secara default, dan mengandalkan firewall host untuk melindunginya. Ini mengimplementasikan zona tepercaya / tidak dipercaya untuk jaringan kabel. Jaringan baru default untuk tidak dipercaya, dan muncul untuk menanyakan apakah Anda ingin mengubahnya. Jaringan kabel yang berbeda diidentifikasi oleh alamat MAC dari server DHCP. Setidaknya sejak Window 8, "express" first-run juga menandai jaringan saat ini sebagai tepercaya, yang menurut saya menjengkelkan tetapi dalam praktiknya mungkin cukup membantu.

Secara teknis, Anda juga dapat memodifikasi perangkat lunak untuk berbicara dengan Firewalld over dbus dan meminta agar porta porta yang diikat terbuka untuk tanggapan. Entah bagaimana saya tidak berpikir itu saran yang membantu.

sourcejedi
sumber
2

Saya memiliki masalah yang sama dengan beberapa perangkat tertentu yang terhubung ke server. Apa pun yang saya coba, firewall tetap memblokir permintaan.

Redhat merekomendasikan dua metode, sesuai basis pengetahuan:

Solusi 1:

Buka port UDP lalu lintas masuk akan berada di:

firewall-cmd --permanent --zone=public --add-port=12345/udp
firewall-cmd --reload

Ini mungkin tidak akan berhasil karena mdnslayanan membuka UDP 5353 dan Anda telah menyebutkan ini tidak membantu.

Solusi 2:

Buat layanan:

<?xml version="1.0" encoding="utf-8"?>
<service>
    <short>My Multicast Listener</short>
    <description>A service which allows traffic to a fictitious multicast listener.</description>
    <port protocol="udp" port="12345"/>
    <destination ipv4="224.0.0.251"/>
</service>

Namun contoh ini tampaknya untuk keluar daripada masuk. Sebagai gantinya, Anda dapat mencoba mengganti <destination>for <source address="xx.xx.xx.xx">dan melihat apakah itu membantu.

Solusi 3:

Saya pribadi, tidak bisa bekerja. Saya pada dasarnya memasukkan daftar putih sumber IP ke semua port. Sesuatu yang saya tidak akan merekomendasikan, tapi saya bosan menghabiskan berjam-jam main-main dengan firewalld dan karena klien yang dimaksud adalah perangkat Raspberry Pi pada LAN pribadi, risikonya minimal.

firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="xx.xx.xx.xx" accept'

Anda akan ingin menyesuaikan zona jika Anda menggunakan sesuatu yang berbeda. Saya juga hanya melakukan ini untuk klien IPv4 internal pada LAN.

Sumber: https://access.redhat.com/solutions/1587673

James White
sumber
1

Sudah ada Layanan-Templat:

firewall-cmd --add-service=mdns              # runtime
firewall-cmd --permanent --add-service=mdns  # permanent

mungkin Anda perlu menginstal firewalld-config-workstation.

Jika Anda masih tidak bisa membuatnya berfungsi. Bisakah Anda menambahkan aturan ke pertanyaan Anda? Misalnya dengan:

iptables-save | grep ' 5353 '

atau mungkin hanya mencoba:

firewall-cmd --remove-service=mdns
firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -d 224.0.0.251/32 -p udp -m udp --dport 5353 -m conntrack --ctstate NEW,RELATED -j ACCEPT
xx4h
sumber
1
OP memang menyebutkan dia sudah mencoba mengaktifkan layanan mdns dan itu tidak berhasil.
James White