Linux

Linux 以 hosts.allow 與 hosts.deny 限制連線來源 IP 位址教學與範例

介紹如何在 Linux 系統上使用 hosts.allowhosts.deny 的設定來限制各種服務的連線來源 IP 位址。

確認 TCP Wrappers 支援性

並不是每一種服務都支援 TCP Wrappers,若要檢查特定服務是否有支援 TCP Wrappers,可以使用 ldd 來查閱該服務執行檔有沒有需要用到 libwrap,若要確認 sshd 是否支援 TCP Wrappers 則可執行:

# 確認 sshd 支援 TCP Wrappers
ldd `which sshd` | grep libwrap
libwrap.so.0 => /lib/x86_64-linux-gnu/libwrap.so.0 (0x00007fd85b09e000)

若有出現類似這樣的 libwrap 路徑資訊,就代表該服務執行檔有支援 TCP Wrappers,可以使用 hosts.allowhosts.deny 來限制連線 IP 位址。

設定 hosts.allowhosts.deny

TCP Wrappers 可透過以下兩個設定檔案來連線來源的 IP 位址:

設定檔 優先順序 說明
hosts.allow 允許的來源 IP 位址。
hosts.deny 拒絕的來源 IP 位址。

在優先順序上,hosts.allow 高於 hosts.deny,也就是說如果寫在 hosts.allow 中被允許的 IP 位址,就一定可以連線,如果 hosts.allow 沒有寫到的,才再去檢查 hosts.deny。如果這兩個檔案都沒有寫到的 IP 位址,預設也是可以進行連線的。

這裡我們希望只有我們指定的 IP 位址可以進行連線(白名單),所以我們將允許連線的 IP 位址寫在 hosts.allow 中,例如若希望 sshd 服務允許接受 192.168.0.0/24 這個 IP 網段連線,就可以加入以下設定:

# 允許 sshd 接受 192.168.0.0/24 網段 IP 連線
sshd: 192.168.0.0/24

# 允許 sshd 接受本機連線
sshd: 127.0.0.1
sshd: [::1]

通常服務都會允許本機自己的連線,如果感覺沒必要的話,可以自行移除。

接著在 hosts.deny 中加入以下設定,禁止其他所有來源 IP 的連線:

# 禁止所有來源 IP 的連線
sshd: ANY

這樣設定完 hosts.allowhosts.deny 之後,就只有 192.168.0.0/24 這個 IP 網段連線能夠透過 SSH 連線至伺服器了。

常用 hosts.allow 範例

以下是一些常用的 hosts.allow 寫法範例:

# 允許 sshd 接受 192.168.0.1 與 192.168.0.2 的連線
sshd: 192.168.0.1, 192.168.0.2

# 允許 sshd 接受相同網域的機器連線
sshd: LOCAL

# 允許 sshd 接受 .officeguide.cc 網域的機器連線
sshd: .officeguide.cc

# 允許 sshd 接受 .officeguide.cc 網域的機器連線,但 cracker.officeguide.cc 除外
sshd: .officeguide.cc EXCEPT cracker.officeguide.cc

# 允許任何服務接受 192.168.0.1 與 192.168.0.2 的連線
ALL: 192.168.0.1, 192.168.0.2

參考資料

Share
Published by
Office Guide
Tags: 資訊安全

Recent Posts

Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤

本篇介紹如何在 Python ...

1 年 ago

Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例

本篇介紹如何在 Ubuntu ...

1 年 ago

Linux 網路設定 ip 指令用法教學與範例

本篇介紹如何在 Linux 系...

1 年 ago

Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例

介紹如何在 Linux 系統中...

1 年 ago