
Допустим, у меня есть компьютер внутри типичного домашнего маршрутизатора (но, скажем, доступ к маршрутизатору через брандмауэр/переадресацию портов недоступен). Его внутренний IP может быть 192.168.1.81. В этой локальной сети есть машина злоумышленника с IP 192.168.1.85, которая хочет выполнить типичную атаку MITM с подменой ARP на 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.