Ubuntu

Ubuntu 伺服器上一個埠的基於 IP 的白名單

  • January 13, 2022

目前我正在嘗試為一個特殊埠創建一個白名單 IP。背後的應用程序只是一個簡單的 TeamSpeak3 Server。

IP 白名單通過 HTTP 腳本獲取訪客 IP。所以IP在白名單內(到目前為止效果很好)。

但是我怎樣才能允許埠“9987”的這些 IP,並阻止其他所有內容?到目前為止,我已經通過對白名單中的特殊 IP 使用 iptables ACCEPT 進行了嘗試,但這不是很好,因為我可以使用非白名單 IP 加入 Teamspeak?

你能抱怨其他靈魂嗎?我感謝任何有用的建議!

編輯:目前腳本

# Create chain
iptables -N teamspeakCommunication

# Add ip
iptables -A teamspeakCommunication --src 127.0.0.1 -j ACCEPT

# Deny everything else
iptables -A teamspeakCommunication -j DROP

# Use this chain for port
iptables -I INPUT -m udp -p udp --dport 9987 -j teamspeakCommunication
iptables -I INPUT -m tcp -p tcp --dport 10011 -j teamspeakCommunication
iptables -I INPUT -m tcp -p tcp --dport 30033 -j teamspeakCommunication

另一個編輯:我嘗試了一點,是的:每個包裹都在下降。所以沒有人可以連接到 TeamSpeak - 正如我想要的那樣!問題是另一個鏈條。所以我已經清除了它們。

但新問題是:鏈/規則執行良好,所以我將自己的 ip 添加到鏈中,並嘗試重新載入。但我無法連接。

我添加 IP 的命令:

iptables -A teamspeakCommunication --src 1.2.3.4 -j ACCEPT # 1.2.3.4 stands for my ip

並重新載入:

iptables-save > /etc/network/iptables.up.rules && iptables-apply -t 60

iptables-restore < /etc/network/iptables.up.rules

但是重載不關心新IP?我想,這只是一件簡單的事情..

首先,最好養成只使用-A添加規則的習慣,而不是-I讓規則在鏈中的最終順序與您在腳本中看到的相同。

其次,除此之外,您的腳本似乎還可以。

也許使用了另一個埠,或者它是 TCP 而不是 UDP。我更喜歡明確允許我需要的那些埠,並拒絕所有其他連接嘗試(也許在開始時使用登錄,以便我可以看到試圖進入的內容):

iptables -A chainname -p tcp --dport 1234 -j ACCEPT
...
iptables -A chainname -j LOG -m limit --log-prefix "chainname drop: " --limit 4/minute --limit-burst 20
iptables -A chainname -j DROP

編輯:

您正在使用 向teamspeakCommunication鏈中添加規則-A,正如我上面提到的,這通常是一個好主意。但是,在這種情況下,它不是一次性填充鏈的腳本,而是增量維護鏈。現在您將規則附加到一攬子-j ALLOW規則之後-j DROP,因此未達到 ALLOW。在這種情況下,我允許您使用-I;-)添加這些規則

編輯2:

可以將 IP 地址臨時添加到鏈中,該鏈會在一段時間不活動後自動刪除:

iptables -N teamspeakCommunication
iptables -A teamspeakCommunication -m recent --update --name teamspeak --seconds 1800 -j ACCEPT
iptables -A teamspeakCommunication -j DROP

這會在 中設置一個recent模組iptables,它匹配“最近看到的”IP 地址。您可以通過執行以下操作將 IP 地址添加到此模組:

echo "+127.0.0.1" > /proc/net/xt_recent/teamspeak

執行此操作後,只要在過去 1800 秒內看到來自該 IP 地址的流量(如配置--seconds),就會接受來自該 IP 地址的流量。在 1800 秒內沒有看到任何流量後,該 IP 地址將從列表中刪除並再次被阻止。

如果要在配置的秒數之前刪除 IP 地址,請執行以下操作:

echo "-127.0.0.1" > /proc/net/xt_recent/teamspeak

您可以簡單地檢查列表

cat /proc/net/xt_recent/teamspeak

它顯示了有關何時看到最後一個數據包等的各種資訊。

載入xt_recent核心模組時,您可以傳遞每個列表要記住的 IP 數量,以及/proc/net/xt_recent/*文件的預設所有者/組/權限;這些也可以使用正常chown/chmod命令進行操作。參看modinfo xt_recent參數列表和名稱。

引用自:https://serverfault.com/questions/731135