Firewall
阻止正在執行的程序的傳出連接
我有一個我一直在開發的 java 應用程序。我使用了一個我無法控制的外部數據庫伺服器。我想模擬它的連接錯誤,但我做不到。我曾嘗試使用 iptables 和 tc 來創建情況,但是在 java 程序執行後它可以創建對數據庫的查詢。如果我重新啟動應用程序,則阻止成功。有什麼我不明白的嗎?
您不明白的第一件事是,如果您不向我們展示它們,我們將無法調試您的 iptables 規則。
話雖如此,我看到了一個潛在的陷阱。但當然我不知道這是否是你的問題。
Java 應用程序很可能在啟動時一勞永逸地建立到數據庫的 TCP 連接。如果您的防火牆僅阻止連接建立數據包並允許數據包通過(如果它們是已建立 TCP 會話的一部分
iptables -A -p tcp -m state --state ESTABLISHED,RELATED -j ALLOW
),那麼您的應用程序將能夠繼續與數據庫通信。為了阻止通信,您需要在啟動應用程序之前設置防火牆,或者阻止所有目標為數據庫埠的 TCP 數據包。