2016-04-07 98 views
1

我想在嵌入式linux設備上使用Alljoyn框架。由於安全原因,有必要爲該設備配置防火牆。這是通過iptables完成的。Linux防火牆後面的Alljoyn服務(iptables)

我到目前爲止所做的: 我試圖在沒有防火牆的設備上運行AboutService示例,然後檢查TCPDump。作爲客戶端,我使用AllJoyn(Windows 10)的物聯網瀏覽器,但AboutClient也應該運行良好。使用wireshark檢查TCPDump,公告的端口是清楚的,我必須打開UDP的端口(alljoyn-mcm)(alljoyn)和(MDNS?!?)。我通過以下規則解決了這個問題:

$ iptables -A OUTPUT -p udp --sport 9955 -j ACCEPT 
$ iptables -A OUTPUT -p udp --sport 9956 -j ACCEPT 
$ iptables -A OUTPUT -p udp --dport 5353 -j ACCEPT 
$ iptables -A INPUT -p udp --sport 9955 -j ACCEPT 

通過這些規則,設備在物聯網瀏覽器中成功發現。

但是,當啓動設備(例如獲取完整的數據)TCP通信時。這不是在某個港口。港口似乎是隨機的。 NMap顯示例如跟隨端口,何時(重新)啓動關於服務。

  • 46368/TCP開放不明,或
  • 52739/TCP開放未知

我怎麼能確定端口?我該如何強制Alljoyn框架將TCP通信連接到某個端口或至少是小端口範圍,例如41000-41100?還是有沒有其他方式來配置防火牆,以便Alljoyn通信不被阻塞?

回答

0

我解決它以另一種方式:

開始我Alljoyn服務之前,我推出從Alljoyn核心lib中alljoyn-daemon二進制文件。默認通過端口(alljoyn-mcm)將流量路由到可定義的端口。

有了這個設置,我可以配置以下防火牆規則和一切工作:

$ iptables -A INPUT -p udp -m multiport --dports 9955,9956,5353 -j ACCEPT 
$ iptables -A INPUT -p udp -m multiport --sports 9955,9956,5353 -j ACCEPT 
$ iptables -A INPUT -p tcp -m multiport --dports 9955,9956,5353 -j ACCEPT 
$ iptables -A INPUT -p tcp -m multiport --sports 9955,9956,5353 -j ACCEPT 
$ iptables -A OUTPUT -p udp -m multiport --dports 9955,9956,5353 -j ACCEPT 
$ iptables -A OUTPUT -p udp -m multiport --sports 9955,9956,5353 -j ACCEPT 
$ iptables -A OUTPUT -p tcp -m multiport --dports 9955,9956,5353 -j ACCEPT 
$ iptables -A OUTPUT -p tcp -m multiport --sports 9955,9956,5353 -j ACCEPT 

提示:我覺得這些都是過分開放的端口,但是這足以讓我。隨着更多的調查,名單肯定會減少。

0

通常AllJoyn框架使用UDP進行發現用於直接通信的TCP

Wellkown(註冊)的港口是;

  • 端口號9956:用於AllJoyn IANA分配的UDP多播端口
  • 端口號5353:IANA分配的UDP多播端口的mDNS

當設備發現彼此,TCP通信開始上隨機臨時端口。這個實現是一個目標相關代碼,你可以檢查目標的源代碼。