Linux

重定向埠 A -> B 並在外部阻塞 B

  • August 3, 2013

我想將埠 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

引用自:https://serverfault.com/questions/528110