Linux
重定向埠 A -> B 並在外部阻塞 B
我想將埠 A 重定向到埠 B 並外部阻止埠 B。
A = 9922
乙 = 22
(是的,它是 ssh,不,我不能在配置中更改它。)
我有三個介面:
- lo(環回)
- p36p1(乙太網)$$ that’s this ‘EXTERNALLY’ $$
- tun0 (vpn)
我有這些規則:
Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 240 17755 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED 0 0 ACCEPT tcp -- tun0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:9922 0 0 ACCEPT tcp -- * * 127.0.0.0/8 0.0.0.0/0 tcp dpt:22 4 240 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 32 packets, 3854 bytes) pkts bytes target prot opt in out source destination
這些用於路由:
Chain PREROUTING (policy ACCEPT 1 packets, 60 bytes) pkts bytes target prot opt in out source destination 4 240 REDIRECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:9922 redir ports 22 Chain INPUT (policy ACCEPT 1 packets, 60 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 1 packets, 68 bytes) pkts bytes target prot opt in out source destination 0 0 REDIRECT tcp -- * lo 0.0.0.0/0 0.0.0.0/0 tcp dpt:9922 redir ports 22 Chain POSTROUTING (policy ACCEPT 1 packets, 68 bytes) pkts bytes target prot opt in out source destination
這是行不通的。
雖然路由埠被轉發到本地主機?我正在和我的管理員同事(我是新手)一起檢查,他也找不到。在路由之後,它看起來像是在 beetwen 的某個地方被阻塞了。但是在哪里以及為什麼?不知道。
是的,我已經用Google搜尋過,並嘗試了我找到的所有規則。
也許,只是也許,值得一提的是,我正在使用 iptables,但最初系統附帶了 firewalld(fedora 19)。我已停用它們並啟用了 iptables。
當流量到達過濾器(預設)表時,它已經被 nat 表修改,因此您沒有關於原始目的地(埠 9922)的資訊。
您可以做的是標記進入 9922 的流量,然後使用它來 (dis) 允許它。(本例中 br0 為外部介面)
iptables -t nat -A PREROUTING -i br0 -p tcp --dport 9922 -j MARK --set-mark 1 iptables -t nat -A PREROUTING -i br0 -p tcp --dport 9922 -j REDIRECT --to-port 22 iptables -A INPUT -i br0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT iptables -A INPUT -i br0 -p tcp --dport 22 -m conntrack --ctstate NEW -m mark --mark 1 -j ACCEPT iptables -A INPUT -i br0 -p tcp --dport 22 -m conntrack --ctstate NEW -j DROP
編輯
似乎還有其他方法可以實現相同的目標。畢竟,Conntrack 可以訪問原始埠。這使得標記變得不必要。
iptables -t nat -A PREROUTING -i br0 -p tcp --dport 9922 -j REDIRECT --to-port 22 iptables -A INPUT -i br0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT iptables -A INPUT -i br0 -p tcp --dport 22 -m conntrack --ctstate NEW --ctorigdstport 9922 -j ACCEPT iptables -A INPUT -i br0 -p tcp --dport 22 -m conntrack --ctstate NEW -j DROP