Назад | Перейти на главную страницу

Перенаправление порта A -> B и внешняя блокировка B

Я хочу перенаправить порт A на порт B и ВНЕШНИЙ блокировать порт B.

А = 9922

В = 22

(Да, это ssh, и НЕТ, я не могу изменить его в конфигурации.)

У меня есть три интерфейса:

У меня есть такие правила:

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         

Это не работает.

Пока порты маршрутизации перенаправляются на localhost? Я проверял это с моим коллегой-админом (я новичок), и он тоже не мог этого узнать. Похоже, он был заблокирован где-то в beetwen после маршрутизации. Но где и почему? Не имеют ни малейшего представления о.

И да, я погуглил и попробовал все найденные мной правила.

Возможно, просто возможно, стоит упомянуть, что я использую iptables, но изначально система поставлялась с firewalld (fedora 19). Я отключил их и включил iptables.

Когда трафик достигает таблицы filter (по умолчанию), он уже был изменен таблицей nat, поэтому у вас нет информации об исходном пункте назначения (порт 9922).

Что вы можете сделать, так это отметить трафик, входящий на 9922, а затем использовать его, чтобы (запретить) его разрешить. (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