Kafka安裝時遇到的錯誤-防火牆

問題描述:

controller服務器不能連接到另外兩臺kafka服務器,但是telnet卻可以通。

 WARN [RequestSendThread controllerId=137] Controller 137's connection to broker 192.168.154.138:9092 (id: 138 rack: null) was unsuccessful (kafka.controller.RequestSendThread)
java.net.SocketTimeoutException: Failed to connect within 30000 ms
        at kafka.controller.RequestSendThread.brokerReady(ControllerChannelManager.scala:272)
        at kafka.controller.RequestSendThread.doWork(ControllerChannelManager.scala:225)
        at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:82)
[2019-09-02 17:30:45,535] WARN [RequestSendThread controllerId=137] Controller 137's connection to broker 192.168.154.139:9092 (id: 139 rack: null) was unsuccessful (kafka.controller.RequestSendThread)
java.net.SocketTimeoutException: Failed to connect within 30000 ms
        at kafka.controller.RequestSendThread.brokerReady(ControllerChannelManager.scala:272)
        at kafka.controller.RequestSendThread.doWork(ControllerChannelManager.scala:225)
        at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:82)

詳細問題描述:

服務器環境:
服務器一:192.168.154.137
服務器二:192.168.154.138
服務器三:192.168.154.139
服務器一無法連接服務器二,三,服務器二三無法互聯,但可以連接服務器一。
服務器之間可以ping通,但是telnet無法與服務器二三通信。

問題發現:

服務器二三的防火牆沒有設置白名單,而服務器一的防火牆已關閉。

解決措施:

一:將二三的防火牆關閉,一勞永逸。

service iptable stop

簡單粗暴的同時,安全性略有降低。

二:爲二三的防火牆設置白名單,將我們的端口放行。
在設置之前我們需要先了解一下防火牆的配置文件所代表的含義
1、工作機制
iptables在linux內核中涉及的五個位置:

  1. 內核空間中:從一個網絡接口進來,到另一個網絡接口去的
  2. 數據包從內核流入用戶空間的
  3. 數據包從用戶空間流出的
  4. 進入/離開本機的外網接口
  5. 進入/離開本機的內網接口

這五個位置也被稱爲五個鉤子函數(hook functions),也叫五個規則鏈。

  1. PREROUTING (路由前)
  2. INPUT (數據包流入口)
  3. FORWARD (轉發管卡)
  4. OUTPUT(數據包出口)
  5. POSTROUTING(路由後)

這是NetFilter規定的五個規則鏈,任何一個數據包,只要經過本機,必將經過這五個鏈中的其中一個鏈。

2、iptables規則寫法
iptables定義規則的方式比較複雜:
格式:iptables [-t table] COMMAND chain CRETIRIA -j ACTION

  • -t table :3個filter nat mangle
  • COMMAND:定義如何對規則進行管理
  • chain:指定你接下來的規則到底是在哪個鏈上操作的,當定義策略的時候,是可以省略的
  • CRETIRIA:指定匹配標準
  • -j ACTION :指定如何進行處理

eg:

 比如:不允許202.110.0.0/24的進行訪問。
 iptables -t filter -A INPUT -s 202.110.0.0/16 -p udp --dport 53 -j DROP
 當然你如果想拒絕的更徹底:
 iptables -t filter -R INPUT 1 -s 202.110.0.0/16 -p udp --dport 53 -j REJECT

3、iptables配置文件
iptables配置文件在系統的/etc/sysconfig/目錄下,主要記錄系統中iptables的規則,下面是定義某些ip爲系統可訪問白名單的配置,主要是在INPUT (數據包流入口)這個規則下攔截白名單以外的ip進行具體端口的訪問:

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2181 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2888 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3888 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9092 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

我們在後面爲我們的服務追加一個白名單記錄,這樣子,防火牆就不會阻攔我們了。
最後我們需要對防火牆重啓並保存

service iptables restart
service iptables save

最後問題完美解決

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章