我的應用程式伺服器位於受組織範圍防火牆保護的網路上,並且我的伺服器也使用fail2ban
.也就是說,我想設定一個額外的保護層iptables
。我的配置有點問題。
要求:
- 拒絕所有人訪問,然後允許特定 IP 範圍 (4.3.4.0/16)
- 應用程式中的延續 LDAP 功能(
ldap_connect
在 PHP 中使用) - 能夠透過 URL 檢索外部內容
已知:
- 應用伺服器IP為1.2.3.4
- LDAP 伺服器解析為 1.2.100.200 並使用連接埠 636
- 我的筆記型電腦的靜態IP是4.3.2.1
我嘗試過的:
從iptables
允許透過連接埠 22、80 和 443 進行流量的普通配置開始,我新增了以下內容。
# explicitly allow ssh access from my laptop
iptables -A INPUT -s 4.3.2.1 -d 1.2.3.4 -p tcp --dport 22 -j ACCEPT
# deny all traffic
iptables --policy INPUT DROP
# allow traffic from a specific IP range
iptables -A INPUT -s 4.3.4.0/24 -j ACCEPT
# allow traffic from LDAP server IP
iptables -A INPUT -s 1.2.100.200 -j ACCEPT
iptables -A INPUT -p tcp --dport 636 -j ACCEPT
我使用 儲存該配置service iptables save
,然後重新啟動服務。
問題:
如果我已經登錄,我可以瀏覽和使用該應用程式(下面的一件事除外)。如果我沒有登入,LDAP 驗證就會掛起。
第二個問題是我無法使用新配置來存取外部內容。我使用 HTTPS 從另一台機器檢索資料。這只是添加一條規則以允許出站流量到達外部電腦的 IP 的問題嗎?
答案1
LDAP 伺服器是否可能使用非標準連接埠?
您可以透過以下方式查看 ldap 伺服器正在偵聽哪個端口netstat -tlpn
第二個問題是我無法使用新配置來存取外部內容
我假設您的意思是應用這些規則後您無法從這台電腦連接到網路資源。請求可能會發出(因為您顯然沒有將OUTPUT
預設策略設為 DROP),但遠端伺服器的回應將被防火牆丟棄。
您可以在產生您關心的流量時透過監控預設策略的資料包計數來驗證是否發生了這種情況:
root@xxxxxxvld02 ~ $ iptables -nvL
Chain INPUT (policy ACCEPT 157 packets, 18048 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 63 packets, 6998 bytes)
pkts bytes target prot opt in out source destination
在上面,157 packets
鏈上INPUT
是最終應用預設策略的資料包的計數(規則在左側有自己的計數,並且不要更改頂部的數字)。
您可能想要建立一條規則,明確允許與現有連線相關的流量:
iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT