оплот ssh размещает команду прокси

[

] Я знаю, что это немного поздно, однако ... Знает ли хост []-T[], что он ответственен за этот IP? Вот схема, которую я разместил в верхней части файлов с правилами, которые я создаю. Подобные схемы можно найти где угодно, но их наличие в ASCII (не хотелось бы называть искусством ;)) может быть весьма полезно на терминале.[

] [

]Большую часть я знаю это от души, но не повредит иметь ссылку, если возникнет забывчивость.[

] [
###############################################################################
###
###            PACKET FLOW THROUGH NETFILTER TABLES AND CHAINS
###
###
###                          {Packet in}
###                               |
###                               v
###                       +-----------------+
###                       |mangle/PREROUTING|
###                       +-----------------+
###                               |
###                               v
###                       +-----------------+
###                       |  nat/PREROUTING |
###                       +-----------------+
###                               |
###                               v
###                       *~~~~~~~~~~~~~~~~~*
###                       |  kernel routing |
###                       *~~~~~~~~~~~~~~~~~*
###                               |
###                               v
###           .------------{?for this host?}------------.
###      yes! |                                         | no!
###           v                                         v
###  +-----------------+                       +-----------------+
###  |   mangle/INPUT  |                       |  mangle/FORWARD |
###  +-----------------+                       +-----------------+
###           |                                         |
###           v                                         v
###  +-----------------+                       +-----------------+
###  |   filter/INPUT  |                       |  filter/FORWARD |
###  +-----------------+                       +-----------------+
###           |                                         |
###           v                                         |
### *~~~~~~~~~~~~~~~~~~~~*                              |
### | response & routing |                              |
### *~~~~~~~~~~~~~~~~~~~~*                              |
###           |                                         |
###           v                                         |
###  +-----------------+                                |
###  |  mangle/OUTPUT  |                                |
###  +-----------------+                                |
###           |                                         |
###           v                                         |
###  +-----------------+                                |
###  |    nat/OUTPUT   |                                |
###  +-----------------+                                |
###           |                                         |
###           v                                         |
###  +-----------------+                                |
###  |  filter/OUTPUT  |                                |
###  +-----------------+                                |
###           |                                         |
###           .-------------------+---------------------.
###                               |
###                               v
###                      +------------------+
###                      |mangle/POSTROUTING|
###                      +------------------+
###                               |
###                               v
###                      +------------------+
###                      |  nat/POSTROUTING |
###                      +------------------+
###                               |
###                               v
###                          {Packet out}
###
###############################################################################
] [

]Что это значит?[

] [

]Маршрутизация может происходить как с помощью таблицы маршрутизации ("маршрутизация ядра" в вышеприведенной схеме), так и с помощью netfilter. Теперь, если - и это наиболее вероятный сценарий в вашем случае - вы не установили таблицу маршрутизации соответственно, ядро не будет знать, куда пакет должен пойти и в конце концов сбросит его. Btw: в таких случаях полезно создать пользовательскую цепочку, которая будет []LOG[], а затем []DROP[] или добавить правила в этом порядке. Таким образом вы увидите, какие правила были удалены. Также полезно использовать []iptables-save -c[], который подготовит счетчики пакетов и байтов к каждой строке правила так же, как он добавляет их для цепочек (формат [][пакеты:байты][]).[

] [

]Для портов, перенаправляемых на ВМ через []DNAT[] у меня есть следующий рецепт (будет объяснено ниже):[

] [
#!/bin/bash
VMNET=192.168.1.0/24
MAINIP=66.249.67.195
CONTIP=192.168.1.2
VMPORT=80
INPORT=80
ACTION="-I"
iptables -t nat    $ACTION PREROUTING  -d $MAINIP -p tcp --dport $INPORT -j DNAT --to-destination $CONTIP:$VMPORT
iptables -t nat    $ACTION POSTROUTING -s $VMNET ! -d $VMNET -p tcp -j MASQUERADE --to-ports 1024-65535
iptables -t nat    $ACTION POSTROUTING -s $VMNET ! -d $VMNET -p udp -j MASQUERADE --to-ports 1024-65535
iptables -t nat    $ACTION POSTROUTING -s $VMNET ! -d $VMNET -j MASQUERADE
iptables -t filter $ACTION INPUT       -p tcp -d $MAINIP --dport $INPORT -j ACCEPT
iptables -t filter $ACTION FORWARD     -p tcp --dport $INPORT -d $VMNET -j ACCEPT
iptables -t filter $ACTION FORWARD     -p tcp --dport $INPORT -d $MAINIP -j ACCEPT
] [

]Имейте в виду, что вы можете захотеть изменить порядок, чтобы подогнать правила под свои собственные. Также, если цепочка []OUTPUT[] не имеет в качестве политики по умолчанию []ACCEPT[], убедитесь, что вы добавили выходное правило, хотя для всех практических целей оно должно быть обработано с помощью правила состояния []RELATED,ESTABLISHED[]. Вы также можете уточнить интерфейсы для совпадения или подстановки подстановочного знака. Например, я дал мостам моих виртуальных гостей все префиксы []_[] (подчеркивание) и, следовательно, может совпадать с []-i _+[] и []-o _+[]. Аналогично для нескольких сетевых карт ([]eth0[], []eth1[]) вы бы совпали с []-i eth+[]. [

] [

]Так что здесь происходит следующее:[

] [
    ] [
  1. ]вставляется правило []DNAT[], которое принимает входной порт (хост) []$INPORT[] для TCP и "маршрутизирует" его в []$CONTIP:$VMPORT[], т.е. IP-адрес контейнера и порт в контейнере. Да, они могут отличаться. Если они этого не делают, то можно пропустить часть назначения (т.е. просто `$CONTIP`). [
  2. ] [
  3. ] три правила для маскировки трафика, который является [] из [] подсети виртуальных гостей, но не переходит [] к [] другому виртуальному гостю. [
  4. ] [
  5. ] правило []INPUT[], позволяющее входящим пакетам на публичном IP (интерфейс не указан, но может быть!) портировать []$INPORT[]. Я думаю, что это правило не является строго необходимым, по крайней мере, если вы привязываете его к публичному интерфейсу. [
  6. ] [
  7. ]правило для перенаправления трафика на []$INPORT[] для виртуальной гостевой подсети ([]$VMNET[])[
  8. ] [
  9. ]правило для перенаправления трафика на []$INPORT[]. на публичной IP ([]$MAINIP[])[
  10. ] [
] [

]И последнее, но не менее важное значение для []sysctl[] ([]/proc/sys/net/ipv4/ip_forward[]) должно быть: [

] [
# cat /proc/sys/net/ipv4/ip_forward
1
] [

], чтобы сделать ваш хост маршрутизатором. [

] [

] Если не используется []echo 1[] для записи в вышеприведенный "файл" в []procfs[] или лучше использовать []sysctl -w net.ipv4.ip_forward=1[] в качестве []root[].[

].
1
15.04.2015, 01:39
1 ответ

Вам нужно разрешить вашей командной строке ssh где-нибудь подключиться к ssh-серверу. Ваша существующая ProxyCommand не делает этого - она предоставляет все средства для входа куда-либо, и ничего не осталось для вашего исходного ssh.

Мне кажется, что это работает достаточно хорошо, и я думаю, что я правильно понял вашу цепочку (очевидно, мне сложнее тестировать с теми же самыми именами хостов, которые вы используете). Обратите внимание, что на бастионном хосте используется nc, а не ssh:

Host destination.net
        User user
        ProxyCommand ssh -A user@bastion.net nc %h %p
        ForwardAgent yes
        RemoteForward 40022 git.some.pt:22

я также рассматривал возможность запуска /usr/sbin/sshd -i в конце ssh -p %p user@%h (вместо nc %h %p), как предложил man ssh_config, но я не могу заставить это работать. Может быть, тебе повезет больше.

2
27.01.2020, 23:37

Теги

Похожие вопросы