- Notes
- Using netcat to build a simple TCP proxy in Linux
- Comments
- Использование HTTP proxy и SOCKS в Linux
- curl: передача данных через proxy
- wget: закачка файлов через proxy
- ssh: доступ к серверам
- Соксификатор dante
- DNS запросы через proxy
- tcp proxy
- Лучшие прокси серверы Linux
- 1. Squid
- 2. Privoxy
- 3. Polipo
- 4. TinyProxy
- 5. 3Proxy
- 6. Gate.js
- 7. Varnish Cache
- 8. Nginx
- Выводы
Notes
Using netcat to build a simple TCP proxy in Linux 
By Soultaker on Monday 11 June 2012 22:18 — Comments (5)
Category: -, Views: 135.854
Recently I wanted to analyze the network communication between a local application and a remote server. The usual way to accomplish this is to use a system-wide packet analyzer like Wireshark or tcpdump. These tools require the system to be set up to allow packet filtering with special privileges granted to the local user that wants to inspect the network traffic passing through the system.
A less intrusive approach that doesn’t require system-wide configuration is the use of a TCP proxy: a program that accepts a local connection, connects to a remote host, and forwards traffic between the two sockets, while also printing out the forwarded data for inspection by the user. Indeed, Google lists many such tools, but Linux users don’t need to resort to installing third-party applications when the same functionality can be recreated using already-installed tools!
The tools that we will use are GNU netcat, sed, tee, the ability to create named pipes (also called FIFOs, because they operate like queues with first-in first-out semantics) and the shell to tie everything together.
To create the TCP proxy, we will need two instances of netcat: one to listen for a TCP connection on the local host, and one to connect to the remote host. The output from the first instance should be fed as input into the second instance, and vice versa. We can use an (unnamed) pipe to make one connection, but the shell only supports linear pipelines, not loops. Fortunately, we can use a named pipe to connect the output of the pipeline to its input.
For example, if we want to create a pipeline that proxies an HTTP connection, we could achieve that like this:
Of course, at this point, we’ve only redirected the data, but we aren’t able to view it, which was the whole point! To achieve this, we can use the tee utility, which forwards its input to its output while also copying it to another file.
Although we could use two tees to write data sent and received to two separate files, that way we lose the correlation between requests and responses. I prefer to merge the output from the two tees, while prefixing each line with a little arrow to indicate whether this line of data was sent by the client or received from the server. We can use two more named pipes to collect this data, and use sed to transform it, before writing it to the script’s output stream.
This configuration is getting somewhat complicated, so perhaps a visual representation is clearer:
With this design clearly in mind it isn’t too hard to write a reusable script to implement it.
If the script is saved as «tcp-proxy.sh» it can be executed like this:
Closing Remarks
- This configuration works best with text-only line-based protocols. Although it’s possible to replace the sed processes with e.g. hexdump (which prints binary data in a human-readable format), the output of the two processes gets messed up because the script output is still line-buffered.
- An advantage of the above script is that it can be easily customized to format traffic in different ways, or even dynamically alter the netwerk conversation, by inserting tools like grep or sed into the pipeline. For example, we might insert grep -v ^Proxy-Connection: to filter out the non-standard HTTP header that curl sends to the webserver.
- The GNU version of netcat differs slightly from both the original netcat and the FreeBSD port of netcat. Although any implementation could be used in principle, some modifications to the script may be necessary.
01-’13 Facebook Hacker Cup 2013: qualification round problem analysis
01-’12 Facebook Hacker Cup round 1 problem analysis
Comments
By i-chat, Tuesday 12 June 2012 07:41
[Comment edited on Tuesday 12 June 2012 07:42]
By afraca, Tuesday 12 June 2012 09:21
Ongeveer the same hier, maar dan met manpages in plaats van google (pff). Vooral de constructie met het mergen van de output streams is leuk
Dit zijn van die typische dingen waarvan ik enigszins weet dat het kan, maar zelf niet de kennis heb om het aan te pakken. Kan nog wel eens van pas komen, dank.
[Comment edited on Tuesday 12 June 2012 09:22]
By Demo, Tuesday 12 June 2012 11:41
By Soultaker, Tuesday 12 June 2012 20:10
This script helped me debug a scanner failing to email issue I had.
The only issue I can’t get round was it only handled one connection, and needed to be restarted.
Источник
Использование HTTP proxy и SOCKS в Linux
В Linux существует много полезных консольных команд, которые при необходимости хотелось бы запустить через proxy. Некоторые приложения имеют встроенную поддержку proxy, а некоторые нет. Далее описано как пользоваться востребованными утилитами через proxy, даже теми, которые этой поддержки не имеют.
curl: передача данных через proxy
curl имеет полноценную поддержку как HTTP proxy так и SOCKS.
Для тестирования возможно использовать proxy сервера из бесплатных списков (socks — sockslist.net, и HTTP proxy — proxyhttp.net). Проверка IP адреса будет производиться с помощью ресурса check-host.net
Часть параметров curl можно записать в файл
С помощью time и curl также можно замерить время отклика сервера:
Результат будет выглядеть так:
wget: закачка файлов через proxy
wget имеет встроенную поддержку proxy. Недостаток лишь в том, что только поддержку HTTP proxy. Для использования совместно с SOCKS рекомендуется использовать соксификатор dante.
Чтобы все время не указывать —proxy-user и —proxy-password можно их прописать в файл
ssh: доступ к серверам
Для доступа к серверам через ssh и proxy также лучше использовать соксификатор dante.
Соксификатор dante
С помощью socksify можно направить через proxy почти любое приложение, не только консольное.
Чтобы все время не вводить данные о proxy можно создать файл /etc/socks.conf
Пример для SOCKS:
Пример для HTTP proxy с авторизацией:
А также экспортировать переменные SOCKS_USERNAME и SOCKS_PASSWORD, если для SOCKS или HTTP proxy требуется авторизация:
DNS запросы через proxy
Часто требуется чтобы и преобразование имен происходило через proxy. Если использовать dante, то запрос на преобразование имен идет и через proxy, и через именной сервер указанный в /etc/resolv.conf . Понять почему же идет два одинаковых запроса вместо одного не удалось. Поэтому можно предложить два варианта:
1) Закомментировать именные сервера в файле /etc/resolv.conf, чтобы преобразование имен шло только через proxy. Это отразится на всей системе.
2) Изменить /etc/resolv.conf и выставить именные сервера необходимой страны, или просто отличные от серверов провайдера. Например установить сервера Google:
Чтобы данные не были перезаписаны именными серверами провайдера (при переподключении), можно запретить обновление списка именных серверов сетевому менеджеру (NetworkManager/wicd) или DHCP-клиенту (спасибо ergil за корректировку).
Или воспользоваться «грубым» методом — запрещением изменения файла /etc/resolv.conf:
Если есть какие-то дополнения, пожалуйста, напишите, это будет полезно узнать и применить.
Источник
tcp proxy
посоветуйте простой tcp proxy чтобы:
— создавал пул тредов количество которых можно задавать
— создавал очередь свободных тредов
— в идеале мог пробрасывать больше чем один порт
нет, iptables не предлагайте, хочу попробывать именно программу
без понятия что это? я могу и сам написать, но нужно ли изобретать велосипед, ведь наверняка есть готовые?
> без понятия что это?
Прокся под венду.
неужели нет вариантов?
можно налабать за 5минут на ЛЮБОМ языке. И треды тут ну совершенно не в кассу.
кстати, ssh умеет пробрасывать порты в обе стороны. Так что ssh localhost -L/-R
можно налабать за 5минут на ЛЮБОМ языке.
а потом отлаживать год.
Я в свое время развлекался созданием такой программы. Оказалось, что создань надежно работающий кросплатформенный (linux/windows) прокси совсем не просто.
3proxy попробуй, шикарная софтина
И треды тут ну совершенно не в кассу.
А вот с этим совершенно согласен.
Кстати никто не пробовал прикрутить tcp прокси к nginx?
>И треды тут ну совершенно не в кассу.
с чего это вдруг то?
>кстати, ssh умеет пробрасывать порты в обе стороны.
угу и затормозить канал шифрованием
>Оказалось, что создань надежно работающий кросплатформенный (linux/windows) прокси совсем не просто.
нафига вообще писать что либо под windows?
>3proxy попробуй, шикарная софтина
в репозитарии debian нет, спасибо поищу
>А вот с этим совершенно согласен.
вы вообще о чем? о epoll? очереди на каждый сокет придется городить
вы вообще о чем? о epoll? очереди на каждый сокет придется городить
Мне кажется, лучше очереди, чем треды.
Мне кажется, треды имеют смысл только для cpu-bound приложений. Причем тредов в этом случае должно быть не больше, чем физических ядер процессора.
нафига вообще писать что либо под windows?
По моим ощущениям, эта операционная система пока еще занимает около 90% (в нашей стране, наверное, 98%) десктопных компьютеров и 20-30% серверов. Продукт, которых не имеет версии под windows, обречен на пересыхание потока разработчиков. Посмотрите на все хоть сколько-нибудь значимые программы — у них есть версия под windows.
тред по сути и будет очередью для отдельного соединения
>Посмотрите на все хоть сколько-нибудь значимые программы — у них есть версия под windows.
у тех кто продает софт такие мысли естественны, но вам как программисту нафига работа связанная с windows?
Источник
Лучшие прокси серверы Linux
В современных сетях прокси серверы используются достаточно часто. Особенно они полезны на предприятиях, здесь кэширующие прокси серверы могут применяться для снижения нагрузки на сеть, увеличения пропускной способности, экономии трафика и даже для отслеживания действий пользователей и блокировки нежелательных сайтов.
Другая сфера применения прокси серверов — это веб-сайты. Они используются для кэширования сгенерированных страниц, чтобы ускорить загрузку сайтов. В этой статье мы рассмотрим лучшие прокси серверы для Linux, которые вы можете использовать в своих конфигурациях.
1. Squid
Squid — это лучший прокси серевер для Linux с поддержкой таких протоколов, как: HTTP, HTTPS, FTP и многих других. Он позволяет повысить пропускную способность сети и сократить время отклика сайтов путем кэширования ресурсов и страниц. Страницы и файлы, которые запрашиваются часто могут быть использованы повторно. Вы можете настроить кэширование как в оперативную память, так и на жесткий диск, если нужно кэшировать много данных при медленном интернете.
Кроме того, в Squid есть очень широкие возможности контроля доступа к сетевым ресурсам. Вы можете блокировать не только банальные запросы к доменам или загрузку файлов определенных форматов, но и доступ к сети в определенное время, работу протоколов и портов, а также многое другое. Squid поддерживает не только операционную систему Linux, но и Windows. Изначально программа могла работать только в Linux, но затем была портирована и для Windows. Мы уже рассматривали настройку Squid в Ubuntu в одной из предыдущих статей.
2. Privoxy
Это ещё один кэширующий прокси сервер Linux, который устанавливается на стороне клиента. Поддерживаются все основные веб-протоколы. Но он направлен больше не на кэширование контента, а на фильтрацию и защиту конфиденциальности пользователей. С помощью него вы можете изменять интернет-страницы, вырезать рекламу, управлять cookies, ограничивать доступ к некоторым веб-сайтам, а также удалять любой нежелательный контент, управлять отправляемыми заголовками браузера.
В отличие от Squid программа настраивается через веб-интерфейс, и надо сказать, что достаточно удобный. Хотя в некоторых пунктах можно запутаться. При включенном прокси его настройка будет доступна по адресу config.privoxy.org. Кроме веб-интерфейса, можно использовать конфигурационный файл, но он намного сложнее.
3. Polipo
Небольшой, но быстрый кэширующий прокси сервер с открытым исходным кодом, поддерживающий протокол HTTP и DNS. Polipo можно использовать для фильтрации рекламы, повышения приватности или ускорения работы веб-сайтов с помощью кэширования страниц. Также как и Privoxy он рассчитан больше на обеспечение приватности. Настройка программы выполняется через веб-интерфейс, но кроме него, есть несколько графических оболочек, для интерактивного взаимодействия с программой. Поддерживается как Linux, так и Windows.
4. TinyProxy
TinyProxy — это очень простой и легкий прокси сервер с открытым исходным кодом для операционных систем Unix. Он разработан, чтобы быть маленьким и очень быстрым и поддерживает протоколы HTTP и HTTPS. Несмотря на легковесность этот прокси сервер linux поддерживает все необходимые функции, такие как удаленный доступ с помощью веб-интерфейса, фильтрация доступа к ресурсам, фильтрация на основе URL и другое.
5. 3Proxy
Это простой, универсальный прокси сервер, рассчитанный больше на контроль доступа к ресурсам. Поддерживаются протоколы работы HTTP, HTTPS, FTP и SOCKS причём для каждого протокола можно настроить и запустить отдельный сервис. Для контроля доступа можно использовать ACL списки. Доступ к прокси можно ограничивать по паролю. Для мониторинга активности пользователей можно использовать лог файл.
6. Gate.js
Gate.js — это что-то новое и очень интересное. Это полнофункциональный кэширующий прокси сервер, написанный на JavaScript с использованием Node.js. Он написан с нуля и призван заменить Squid и Nginx. Он позволяет кэшировать контент, облегчая работу веб-серверам, а также ускоряя загрузку сайтов на стороне клиента. Его главная особенность в масштабируемости, поскольку программа написана на интерпретируемом языке, она может быть легко дополнена.
7. Varnish Cache
В отличие от вышеперечисленных программ, этот прокси сервер рассчитан больше для работы на стороне сервера. Он предназначен для ускорения веб-сайтов. Его современная архитектура дает ему значительную производительность. Varnish Cache хранит веб-страницы в памяти сервера, чтобы программа веб-сервера Apache или Nginx не генерировала ее еще раз. Веб-сервер только обновляет страницы при изменении содержимого. Получение содержимого из памяти выполняется намного быстрее чем полная генерация.
8. Nginx
Все знают Nginx как отличный веб-сервер, рассчитанный на работу под большой нагрузкой. Но кроме этого, он может использоваться в качестве прокси сервера. Nginx не умеет кэшировать или фильтровать содержимое страниц. Но его задача принимать запросы от клиентов на сервере, передача их другим программам, а затем возврат ответа клиенту. Nginx выгодно использовать, потому что эта программа оптимизирована для максимальной производительности и может принимать до 10 000 запросов от пользователей одновременно.
Выводы
В этой статье мы рассмотрели лучшие прокси серверы Linux, возможно, это далеко не все программы, которые стоило бы добавить в этот список. Какие прокси серверы вы используете в своих системах? Какие считаете лучшими? Напишите в комментариях!
Источник