Ubuntu
為什麼這 3 條規則會在 iptables 中對我造成問題?(送出行錯誤)
我正在嘗試將我的規則從一台伺服器導出到另一台伺服器,但由於某種原因,它們在一台伺服器上失敗了。一台伺服器是 Xen,另一台是 OpenVZ(這台引起了麻煩)。它們都在執行 Ubuntu(儘管版本不同,分別為 8.04 和 10.10)以及不同版本的 iptables(分別為 1.3.8 和 1.4.4)。
我很好地導出了我的規則,但是當我執行它們時,我在 COMMIT 行上遇到錯誤。所以我將規則中的每一行一一註釋掉,發現這三行是罪魁禍首:
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -p tcp -m state --state NEW --dport 23 -j ACCEPT -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
這些行有什麼問題?它們在我看來很好,並且在我的 Xen 伺服器上執行良好……
這是原始規則文件的內容:
*filter # Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0 -A INPUT -i lo -j ACCEPT -A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT # Accepts all established inbound connections -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Allows all outbound traffic # You can modify this to only allow certain traffic -A OUTPUT -j ACCEPT # Allows HTTP and HTTPS connections from anywhere (the normal ports for websites) -A INPUT -p tcp --dport 80 -j ACCEPT -A INPUT -p tcp --dport 443 -j ACCEPT # Allows Tomcat, sms, and newrelic -A INPUT -p tcp --dport 8080 -j ACCEPT #-A INPUT -p tcp --dport 8009 -j ACCEPT # Allows SSH connections # # THE -dport NUMBER IS THE SAME ONE YOU SET UP IN THE SSHD_CONFIG FILE # -A INPUT -p tcp -m state --state NEW --dport 23 -j ACCEPT # Allow ping -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT # log iptables denied calls -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7 # Reject all other inbound - default deny unless explicitly allowed policy -A INPUT -j REJECT -A FORWARD -j REJECT COMMIT
更新:
好的,所以看起來這三個之間唯一的共同點是選項“-m”,沒有一個有效的規則有這個選項……什麼給了?
這些錯誤可能與您需要在執行某些選項之前載入相關核心模組有關。根據發行版的不同,其中一些是預設載入的,如果使用某些選項,其他的可能會自動載入。在您的情況下,您可能需要使用 modprobe 手動載入一些。
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
為了使用狀態條件,您需要載入 ip_conntrack 模組。
-A INPUT -p tcp -m state --state NEW --dport 23 -j ACCEPT
同樣的問題在這裡
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
不知道為什麼這個會導致問題。
我建議非常仔細地閱讀該特定發行版上 iptables 的手冊頁,然後檢查載入了哪些核心模組,並可能在批處理文件的頂部添加一些行以載入所需的核心模組。
這是我們的一個公共網關的相關輸出,它使用類似的 iptables 規則。
#> lsmod | grep ip iptable_mangle 11392 0 ipt_recent 16672 2 ipt_LOG 13828 4 iptable_nat 13840 0 nf_nat 25496 2 nf_nat_ftp,iptable_nat ipv6 287784 65 sit dm_multipath 23704 0