31 мая 2010 г.

FTP protocol and your firewall administrator.

Цель: Пробиться по ФТП протоколу в то время когда Ваш администратор закрыл всё и вся мегафаерволом или еще чем либо (спиной к примеру ... =) )

Дано: Бурная фантазия ... =)

Решение:

Задача оказалось вроде даже как из легких – та ... но были свои нюансы ...

Первым делом пришло на "ум" мысля: а не загнуть ли wget, curl или fetch через SOCKS5, аля есть сервер за пределами Интранета и порт 22 открыт (если и закрыт, то практически всегда остается 443 порт открытым, вам только на своем сервере демона SSH завесить нужно будет на 443 порт, предварительно убрав с него апач или кто там у вас его может занимать,
netstat -lanp | grep -e "443.*LISTEN"



вполне возможно что последние деяние рутовые привилегии захочет ... да в любом случае стягивать с данного порта кого либо понадобятся рутовые привилегии ), аля: ssh -T my.remotehost.net -D port &

Да не все та тут было легко и просто, погуглив просторы тырнету, пролистав маны особогу решения та и не нашлось, как завернуть трафик в данный сокс та. Были идеи связок varnish && tsocks ... толи с непривычки испугала сложность самого решения то ли душа капризничала требуя решения проще - знакомым инструментарием ...

Одним словом от сокса (SOCKS5) пришлось отказаться ...
вторым вариантом рассматривалось проброс портов, аля всё тем же клиентом ssh'a, но реализация сия идеи сама по себе приводила в дикий ужас не только меня, на каждый хост отдельно прицеливаться ..: "ssh -T my.remotehost.net -L port:dist_host:21 &" … мда … не наше это … не наше. А так с каждым запрашиваемым хостом! Засада тут полная =)

Как еще? да проще простого, благо стоял сквид (SQUID) на удаленке, вопрос решился весьма приятно и менее болезненно по правкам конфигов ...
**) обратите внимание какие интерфейсы листит squid, в конфиге или по netstat'у, дальше по контексту в пункте 4 будет назван как dist_host

1) лезем на удаленке в кофиг сквида и разрешаем ему ftp поток,
acl FTP proto FTP
always_direct allow FTP


2) Могут уже быть, но на всякий непредвиденный случай:
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp 


3) рестартуем сквид:
/etc/init.d/squid restart


4) аля пробрасываем порт:
ssh -T my.remotehost.net -L 3128:dist_host:3128 &

тут маленькое примечание ... при дисконнекте кранты всей связке, придется заново запускать ssh туннель. Поэтому, можно зациклить в вечном цикле по "while [ 1 ]...etc" и вынести в rc.local для автоматического подъема при запусках с записью в логи и прочее... Мне же хватило вышеуказанной строчки =) так как острой нужды в скачке с ФТП серверов не наблюдалось, да и более человечнее можно всё это делать когда есть удаленные хосты ;)

5) на локальной машине с рутовскими привилегиями дописываем файлик make.conf
echo "FETCH_ENV= FTP_PROXY=http://127.0.0.1:3128/" >> /etc/make.conf


вот и всё ...

оффтоп: далее бежим пока туннель живой в порты и make make make))))


если что то пошло не так:
1) смотрим фаерволы что на удаленке, что на вашей машине…
2) помним что есть незаменимый помошник tcpdump



PS// хотя можно просто подойти к администратору и сказать что есть нужда в сия протоколе для скачивания нужных тебе сырцов, и если грамотно всё обосновать, каков суров бы не был Ваш администратор, он пойдет на уступки, 100% факт проверен! следом после реализации сия незамысловатой схемы =))

1 комментарий:

  1. Коллега подсказал мне что есть такая замечательная программулька как Proxifier (хотя их в своем роде и более чем достаточно, гугл помогёт)
    так вот фишка в том что родные штатные виндовые проги консольные не поддались данной уловке, а уловка заключалась в следующем:
    ========================================
    1) plink -pw YourPasswordSSHServer -D 1080 -N -A IPSSHServer

    2) Настраиваем Proxifier на работу с 127.0.0.1 порт 1080

    3) юзаем opera, firefox, chrome, etc... вопросов не возникает, рулится через Proxifier.

    4) а вот telnet, ftp (штатный виндовый ftp клиент), wget (не штатный и более того был перенесенный в чужеродную среду =) ), etc ... идут лесом =(
    ========================================

    Замечание 1. Вполне возможно что резольв будет отрабатываться на стороне серверов указанных при получении конфигурации по DHCP, иными словами куда и что вы полезли увидеть возможно. /не проверял/ Лучше ручками подправить у кого резольвить имена =)

    Замечание 2. ФТП клиент и не обязательно юзать штатный виндовый, встроенные в браузеры выше упомянутые прекрасно справились с данной задачей. (возможно грабли в прослойке библиотеке виндовой ...)

    Итак, подсказка коллеги по работе - есть еще одно решение данной задачи, более того через SOCKS5 и с минимальными усилиями.

    ОтветитьУдалить