Thank you for reading this post, don't forget to subscribe!
Большинство людей используют прокси Squid для прокси http / https трафика, но что если вам нужны прокси-соединения ssh / sftp?
Зачем это делать?
В основном по соображениям безопасности. Представьте, что у вас есть сеть (подсеть), которая не подключена напрямую к Интернету, но вы должны разрешить какое-либо исходящее соединение с некоторыми хостами в Интернете. В этом вам поможет прокси-сервер Squid, поскольку вы можете очень легко внедрить белый / черный список.
Установка прокси Squid
Если у вас уже есть прокси Squid, вы можете проигнорировать эту часть.
Начнем с установки прокси Squid:
1 2 3 |
yum install -y squid systemctl start squid |
Это даст нам полнофункциональный сервис Squid, работающий по умолчанию через порт TCP 3128.
1 2 3 |
$ sudo netstat -tlpn|grep 3128 tcp6 0 0 :::3128 :::* LISTEN 11515/(squid-1) |
А базовая конфигурация позволяет использовать ее сразу после запуска сервиса:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
$ curl -v -x localhost:3128 http://www.bbc.co.uk -o /dev/null -s * About to connect() to proxy localhost port 3128 (#0) * Trying ::1… * Connected to localhost (::1) port 3128 (#0) GET http://www.bbc.co.uk/ HTTP/1.1 User-Agent: curl/7.29.0 Host: www.bbc.co.uk Accept: */* Proxy-Connection: Keep-Alive HTTP/1.1 301 Moved Permanently Server: nginx X-BBC-No-Scheme-Rewrite: 1 X-Cache-Action: HIT X-Cache-Hits: 14999 Vary: X-BBC-Edge-Scheme Cache-Control: public, max-age=3600 X-Cache-Age: 2929 Content-Type: text/html Date: Sun, 23 Jun 2019 08:07:45 GMT |
Разрешить Squid туннелирование протокола SSH / SFTP
Squid не понимает протокол SSH, поэтому для туннелирования он использует метод CONNECT.
Чтобы разрешить туннелирование SSH / SFTP-соединений, откройте файл конфигурации Squid (обычно /etc/squid/squid.conf) в редакторе и добавьте строки в раздел Accesslist:
1 2 3 |
acl SSL_ports port 22 acl Safe_ports port 22 # ssh/sftp |
это будет выглядеть так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# Example rule allowing access from your local networks. # Adapt to list your (internal) IP networks from where browsing # should be allowed acl localnet src 10.0.0.0/8 # RFC1918 possible internal network acl localnet src 172.16.0.0/12 # RFC1918 possible internal network acl localnet src 192.168.0.0/16 # RFC1918 possible internal network acl localnet src fc00::/7 # RFC 4193 local private network range acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines acl SSL_ports port 443 acl SSL_ports port 22 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 22 # ssh/sftp acl Safe_ports port 443 # https acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl CONNECT method CONNECT |
Перезапустите сервис Squid, и мы готовы к тестированию:
1 |
systemctl restart squid |
тестирование
После добавления дополнительной конфигурации в конфигурационный файл Squid можно проверять подключение
Linux
1 2 3 4 |
$ sftp -oProxyCommand='nc -X connect -x 192.168.56.40:3128 %h %p' 192.168.1.252 test1@192.168.1.252's password: Connected to 192.168.1.252. sftp; quit |
Таким же образом мы производим подключение к серверу sftp и консоли ssh. Убедившись, что это соединение работает, мы можем добавить конфигурацию в '~./ssh/config', следующие параметры, чтобы туннелирование было автоматическим:
1 2 3 4 |
Host 192.168.1.252 ProxyCommand nc -X connect -x 192.168.56.40:3128 %h %p ServerAliveInterval 10 |
Windows
Два самых популярных SFTP-клиента в Windows:
WinSCP:
FileZilla
Putty