Iptables
主機無法通過 http 訪問,懷疑是 iptables 問題
我正在嘗試重新配置我的虛擬專用伺服器的 httpd,但我似乎無法訪問它。伺服器本身的 curl 可以正常工作,但嘗試在另一台 PC 上使用 chrome 訪問伺服器會出現“此站點響應時間過長”錯誤消息。
我的 vps 有 centos 7,但奇怪的是它有 iptables 而沒有安裝 firewalld。
這是我的 /etc/sysconfig/iptables 文件的內容,我是否需要更改某些內容以允許埠 80 上的 http 和 443 上的 https?
# Generated by iptables-save v1.4.21 on Wed Mar 27 19:30:55 2019 *raw :PREROUTING ACCEPT [654:52805] :OUTPUT ACCEPT [577:72088] COMMIT # Completed on Wed Mar 27 19:30:55 2019 # Generated by iptables-save v1.4.21 on Wed Mar 27 19:30:55 2019 *mangle :PREROUTING ACCEPT [654:52805] :INPUT ACCEPT [654:52805] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [577:72088] :POSTROUTING ACCEPT [577:72088] COMMIT # Completed on Wed Mar 27 19:30:55 2019 # Generated by iptables-save v1.4.21 on Wed Mar 27 19:30:55 2019 *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [44:9111] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT -A FORWARD -j REJECT --reject-with icmp-host-prohibited -A OUTPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate ESTABLISHED -j ACCEPT COMMIT # Completed on Wed Mar 27 19:30:55 2019 # Generated by iptables-save v1.4.21 on Wed Mar 27 19:30:55 2019 *nat :PREROUTING ACCEPT [392:22692] :POSTROUTING ACCEPT [14:1008] :OUTPUT ACCEPT [14:1008] COMMIT # Completed on Wed Mar 27 19:30:55 2019
看起來您的“允許”規則在“拒絕”規則之後。這部分:
-A INPUT -j REJECT --reject-with icmp-host-prohibited -A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
您需要移動允許規則一的排列。
要進行故障排除,您可以執行以下操作:
sudo watch -n1 -d iptables -t filter -L INPUT -nvx --line-numbers
你會看到這樣的東西:
Every 1.0s: iptables -t filter -L INPUT -nvx localhost: Mon Apr 1 14:08:04 2019 Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 12 956 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 2 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 3 3 281 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 4 1 90 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited 5 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 80,443 ctstate NEW,ESTABLISHED
現在觀察通過每個規則的數據包數量,並查看執行測試時哪個數據包增長。這可能是你的暗示。
要解決此問題,您可以進行線上規則更改。例如,將最後一條規則添加為第 4 條規則,然後刪除最後一條規則。
使用上面的輸出,您想插入“允許規則”作為規則編號 4。
$ sudo iptables -I INPUT 4 -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
現在再次檢查規則
$ sudo iptables -L INPUT -n --line-numbers Chain INPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 80,443 ctstate NEW,ESTABLISHED 5 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited 6 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 80,443 ctstate NEW,ESTABLISHED
現在刪除最後一條已過時的規則。
$ sudo iptables -D INPUT 6
再次仔細檢查您的輸出。
$ sudo iptables -t filter -L INPUT --line-numbers Chain INPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 80,443 ctstate NEW,ESTABLISHED 5 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
平心而論,我不經常看到預設為“REJECT”的規則。更常見的是“DROP”,您可以將其設置為預設策略。例如,
$ sudo iptables -t filter -P INPUT DROP
然後您可以完全刪除“拒絕”規則
$ sudo iptables -t filter -D INPUT -j REJECT --reject-with icmp-host-prohibited $ sudo iptables -L INPUT -n Chain INPUT (policy DROP) target prot opt source destination ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 80,443 ctstate NEW,ESTABLISHED
現在確定您的作業系統是什麼,但您可能
sudo service iptables save
可以將執行時更改保存到/etc/sysconfig/iptables
.