將埠 8080 重定向到埠 80 - 如何在 /etc/sysconfig/iptables 文件中添加?
在 CentOS 7 Linux(充當 LAMP - 而不是“防火牆/網關”)上,我創建了一個自定義 systemd 服務,用於在埠 8080 上以使用者身份執行嵌入式 Jetty
nobody
:[Unit] Description=WebSocket Handler Service After=network-online.target [Service] Type=simple User=nobody Group=nobody ExecStart=/usr/bin/java -classpath '/usr/share/java/jetty/*' de.afarber.MyHandler 123.123.123.123:8080 ExecStop=/bin/kill ${MAINPID} SuccessExitStatus=143 [Install] WantedBy=multi-user.target
但是,我實際上需要伺服器在埠 80 上進行偵聽 - 這樣即使通過公司防火牆,與它的 WebSocket 連接也能正常工作。
關於為非根使用者設置埠 80 訪問的 Jetty 文件建議執行以下命令:
# iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
幸運的是,我已經
iptables-services
在我的專用伺服器上使用了包,目前/etc/sysconfig/iptables
文件包含:*filter :INPUT DROP :FORWARD DROP :OUTPUT ACCEPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp -m multiport --dports 25,80,443,8080 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 --tcp-flags FIN,SYN,RST,ACK SYN -m limit --limit 2/min --limit-burst 1 -j ACCEPT COMMIT
我的問題是我不知道上述文件的正確 PREROUTING 語法。
我已經嘗試執行上面的命令,然後
iptables -S
希望 iptables 會為我列出所需的行——但這並沒有發生。更新:
不幸的是,以下
/etc/sysconfig/iptables
文件不起作用:*nat :INPUT ACCEPT :OUTPUT ACCEPT :PREROUTING ACCEPT :POSTROUTING ACCEPT -A PREROUTING -p tcp -m tcp --dst 123.123.123.123 --dport 80 -j REDIRECT --to-ports 8080 COMMIT *filter :INPUT ACCEPT :OUTPUT ACCEPT :FORWARD ACCEPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT -A INPUT -p tcp -m tcp -m state --state NEW -m multiport --dports 25,80,443,8080 -j ACCEPT -A INPUT -p tcp -m tcp -m state --state NEW --dport 22 --tcp-flags FIN,SYN,RST,ACK SYN -m limit --limit 2/min --limit-burst 1 -j ACCEPT -A FORWARD -p tcp -m tcp --dst 123.123.123.123 --dport 8080 -j ACCEPT COMMIT
我需要將傳入 123.123.123.123:80 的 HTTP 連接重定向到 123.123.123.123:8080 (Jetty 正在以使用者“nobody”的身份監聽),但由於某種原因,這不會發生。
當我瀏覽到http://123.123.123.123:8080時,我看到了 Jetty 響應。
但是當我瀏覽到http://123.123.123.123連接被拒絕。
有人可以幫我找出錯誤嗎?
這是我目前的
nat
表:# iptables -t nat -L Chain PREROUTING (policy ACCEPT) target prot opt source destination REDIRECT tcp -- anywhere afarber.de tcp dpt:http redir ports 8080 Chain INPUT (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination
這是我目前的
filter
表:# iptables -t filter -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT all -- anywhere anywhere ACCEPT icmp -- anywhere anywhere icmp any ACCEPT tcp -- anywhere anywhere tcp state NEW multiport dports smtp,http,https,webcache ACCEPT tcp -- anywhere anywhere tcp dpt:ssh flags:FIN,SYN,RST,ACK/SYN state NEW limit: avg 2/min burst 1 Chain FORWARD (policy ACCEPT) target prot opt source destination ACCEPT tcp -- anywhere afarber.de tcp dpt:webcache Chain OUTPUT (policy ACCEPT) target prot opt source destination
這是我的
/etc/sysctl.conf
文件:net.ipv4.ip_forward=1 net.ipv6.conf.all.disable_ipv6=1 net.ipv6.conf.default.disable_ipv6=1
問題:請求
-d 123.123.123.123 --dport 80
沒有被重定向到8080
更新 2:
該行也無濟於事:
-A PREROUTING -p tcp -m tcp -i eth0:1 --dst 123.123.123.123 --dport 80 -j DNAT --to-destination :8080
與的連接
123.123.123.123:80
仍然斷開
它會是這樣的:
*nat :PREROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :OUTPUT ACCEPT [3:353] :POSTROUTING ACCEPT [3:353] -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080 COMMIT # Completed on Mon Jun 20 23:41:41 2016
你知道如何簡單地做到這一點嗎?我假設你已經禁用了 firewalld 並安裝了 iptables-services,因為你希望你的 centos7 像 centos6 一樣工作。
“/etc/sysconfig/iptables”是 iptables-services 保存規則的文件。您可以手動編輯它,但沒有必要。您可以使用“iptables”命令輸入任何規則,然後使用“service iptables save”將目前活動的規則保存到文件中。
您還可以通過在此處設置 “/etc/sysconfig/iptables-config” IPTABLES_SAVE_ON_STOP 和 IPTABLES_SAVE_ON_RESTART 來使每次重新啟動 iptables 服務時都會保存規則