2017-09-29

CentOS 7 設定防火牆允許特定 PORT 連線

一直以來接觸的作業系統都是 Windows 為主,加上自己熟悉的程式語言是 C#,production 環境部署及相關設定都是 Windows,也就一直沒有機會熟悉 Linux ,但軟體界有愈來愈開放的趨勢,微軟更是如此,現在微軟甚至是 GitHub 上最大的貢獻者

也因為 open source 的盛行,讓很多方便好用的工具跟軟體漸漸多元了起來,讓軟體開發也更加有趣,只是常見的 open source 工具多數以 linux 為主,就算有 porting 至 windows ,穩定性及更新速度上還是遠不及 linux 版本,以 redis 為例,linux 已經 release 4.0 版本,windows 還停留在一年前的 3.0 版本

今天遇到的問題就是因為 redis 而起的,因為公司 redis 架設在 linux 上,為了模擬 production issue,所以透過 virtualbox 安裝 CentOS 7 並在上面架設 redis instance,在測試連線時發現根本無法對外服務,就來看看如何確認問題及解決吧


問題確認

  1. 無法連線 redis instance

    1connectdeny

  2. 確認防火牆是否開啟

    firewall-cmd --zone=public --list-all

    2list

解決方式

  1. 對外開放 6379 port

    firewall-cmd --zone=public --add-port=6379/tcp --permanent

    --permanent 指定為永久設定,否則在 firewalld 重啟或是重新讀取設定,就會失效

  2. 重新讀取 firewall 設定

    firewall-cmd --reload

  3. 可以檢查是否成功加入開放清單

    firewall-cmd --zone=public --list-all

    3addoirt

設定成功

4success

心得

上述動作非常簡單,但我卻找了好一陣子才真正解決問題,主因就是對於作業系統,我一直都只會操作 Windows,不確定上述的作法是否合乎 linux 的操作模式,也不清楚這樣設定會不會造成安全疑慮,只是剛好遇到問題紀錄一下,如果各位朋友有更好的做法還煩請指教,感激不盡

參考資訊

  1. How to open a port in the firewall on CentOS or RHEL
  2. Centos7 - 新的防火牆firewalld

3 則留言:

  1. 就開放防火牆而己
    不會有什麼更好的處理方式呀

    Debian 是可以用 ufw

    現在的年代不用再搞 iptables 了
    可以看看 ArchWiki 對 iptables 的設定指令
    https://wiki.archlinux.org/index.php/iptables
    的「From the command line」段
    包準一堆人縮回去 Windows

    回覆刪除
    回覆
    1. 感謝大大幫忙確認做法,我只知道概念方向是要開防火牆,但不曉得我的開法是不是正確、會不會造成其他問題,我想就是對 Linux 連基本了解都沒有的關係 (汗顏 ^_^||) 謝謝大大指教

      刪除
    2. 如果是真的有在用 CentOS 架站
      才會開始對「現代的」 Linux 譙起來
      那個 SELinux 有夠煩人

      但是個人認為 Docker 在 Windows 的世界應用不大,因為 IIS 和 SQL 都己經可以很輕鬆分隔了
      但 Docker 對 Linux 的影響才深遠
      在 Linux 一個程式過三年沒有改程式碼基本上要執行就有困難了
      好險有 Docker ...

      刪除