Ubuntu 伺服器上一個埠的基於 IP 的白名單
目前我正在嘗試為一個特殊埠創建一個白名單 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
參數列表和名稱。