Как использовать SSH туннель, чтобы избежать атак MITM?
Скажем, у меня есть компьютер внутри обычного домашнего маршрутизатора (но, скажем, брандмауэр / перенаправление портов, доступ к маршрутизатору недоступен). Это внутренний IP может быть 192.168.1.81. В этой локальной сети есть компьютер атакующего с IP 192.168.1.85, который хочет выполнить типичную ARP-спуфинговую MITM-атаку на 192.168.1.81 (скажем, он хочет запустить что-то вроде urlsnarf, чтобы прослушивать посещаемые сайты). Машина 192.168.1.81 хочет предотвратить любую форму атаки MITM и оставаться в безопасности при работе в Интернете в Chrome. У него есть сервер с SSH-доступом, который он хочет использовать для шифрования своего просмотра веб-страниц, чтобы злоумышленник не мог прослушать его с помощью атаки MITM. Как я могу (пользователь, который хочет использовать SSH-туннелирование для обеспечения безопасности) использовать SSH-туннелирование на моем сервере (с общедоступным IP-адресом 162.xx.xxx.xx), чтобы предотвратить потенциальную атаку MITM? Это для проекта научной ярмарки. Какие (если они есть) настройки мне нужно будет установить на моем сервере (у меня есть полный root-доступ)? Мой SSH-порт отличается от нормального, поэтому, пожалуйста, укажите SSH-порт 25512 для справки. Я также открыл порт 4567 на брандмауэре для сервера, поэтому, пожалуйста, используйте этот порт для справки. Пожалуйста, используйте 72.xxx.xx.xxx в качестве публичного IP для домашней сети. Пожалуйста, включите любые необходимые команды. Дайте мне знать, если мне нужно быть более ясным. Большое спасибо всем, кто может помочь!
1 ответ
Самый простой способ - запустить прокси (например, squid) на удаленном сервере и заставить его слушать только локальный интерфейс. 127.0.0.1 (потому что вы не хотите открывать прокси в интернете).
Затем вы подключаетесь по ssh к удаленному серверу и создаете пересылку tcp на локальный интерфейс прокси на удаленном сервере.
Например, допустим, ваш прокси на удаленном сервере 162.xx.xx.xx слушает по TCP 127.0.0.1:3128, Теперь вы можете подключиться к нему с помощью ssh с помощью этой команды:
ssh -p 25512 -L 3128:127.0.0.1:3128 -C 162.xx.xx.xx
Это открывает туннель от вашего клиента 127.0.0.1:3128 на удаленные хосты 127.0.0.1:3128, Затем вы можете просто настроить свой браузер на клиенте для использования прокси 127.0.0.1:3128 который затем через туннель ssh направляется на удаленный хост и передается туда через прокси.
-C Параметр включает сжатие и, как мы надеемся, должен сделать ваш просмотр немного быстрее, потому что нужно передавать меньше данных.
Это соответствующие части man 1 ssh:
-L [bind_address:]port:host:hostport
Specifies that the given port on the local (client) host is to be forwarded to
the given host and port on the remote side. This works by allocating a socket
to listen to port on the local side, optionally bound to the specified
bind_address. Whenever a connection is made to this port, the connection is
forwarded over the secure channel, and a connection is made to host port
hostport from the remote machine. Port forwardings can also be specified in
the configuration file. IPv6 addresses can be specified by enclosing the
address in square brackets. Only the superuser can forward privileged ports.
By default, the local port is bound in accordance with the GatewayPorts
setting. However, an explicit bind_address may be used to bind the connection
to a specific address. The bind_address of “localhost” indicates that the
listening port be bound for local use only, while an empty address or ‘*’
indicates that the port should be available from all interfaces.
-C Requests compression of all data (including stdin, stdout, stderr, and data for
forwarded X11 and TCP connections). The compression algorithm is the same used
by gzip(1), and the “level” can be controlled by the CompressionLevel option
for protocol version 1. Compression is desirable on modem lines and other slow
connections, but will only slow down things on fast networks. The default
value can be set on a host-by-host basis in the configuration files; see the
Compression option.
-p port
Port to connect to on the remote host. This can be specified on a per-host
basis in the configuration file.