Разделение доступа в интернет из локальной сети
socks5 & squid
Около года назад у нас появился интернет и вместе с ним проблема – как делить? Собственно проблема в том, что все машины многопользовательские, а, как следствие, ограничить доступ на основании IP адреса невозможно.
Теперь, год спустя, обнаружились 2 наиболее практичных способа. Мы используем первый, но у вас есть возможность выбирать ;)
Способ первый (IMHO более правильный) заключается в использовании socks5 сервера и клиента.
При этом получаем отличный firewall с возможностью проксить как TCP так и UDP плюс полный контроль над работой пользователей в интернет. Настраиваем следующим образом:
- Идем на www.socks.nec.com и берем там socks5 сервер (на данный момент это socks5-v1.0r8) и socks5tools – скрипт для анализа лог-файлов сервера.
- Конфигурируем socks5 сервер. Запустите ./configure – значения по умолчанию вполне разумны, хотя я посоветовал бы сменить syslog facility. По умолчанию socks использует LOG_DAEMON, и как следствие файл /var/log/messages будет забит сообщениями socks. Во избежание этого запустите ./configure --with-syslog-facility=LOG_LOCAL0 и добавьте строчки
"local0.* /var/adm/socks5" и
"*.=info;*.=notice;local0.none /var/log/messages"
в /etc/syslog.conf.
Дальше стандартно – make; make install.
Если все нормально, создаем файл конфигурации /etc/socks5.conf следующего содержания:[root@val /etc]# cat socks5.conf
# A Socks5 Config file for a dual homed server
#
# Описание роутинга
# route hostmask portmask interface
route 195.9.ххх. - eth0
#Описание аутентификации - в данном случае требуем со всех логин/пароль
#auth source-host source-port auth-metod
auth - - u
#permit и deny. В данном случае человек с правильным логином/паролем может идти куда #угодно ;) подробней - man socks5.conf
#permit auth cmd src-host dest-host src-port dest-port [user-list]
permit u - - - - - -
#Не делать reverse lookup в DNS - процесс заметно ускоряется
set SOCKS5_NOREVERSEMAP
#Записывать номера портов вместо имен сервисов. Тоже для ускорения
set SOCKS5_NOSERVICENAME
#Не рассылать ident запросы клиентам
set SOCKS5_NOIDENT
# Максимальное число детей socks5 - пусть будет больше, зато всем хватит
set SOCKS5_MAXCHILD 128Все, теперь создаем /etc/socks5.passwd формат прост – в каждой строчке имя и пароль, разделенные пробелом.
[root@ksaa /etc]# cat socks5.passwd
user password
lamer lamepasswordС сервером все, правим стартовые скрипты для автозапуска после ребута.
- Теперь клиент. Выбор не особо богат.
- SocksCap от Nec - www.socks.nec.com Неплохой клиент под windows3.1, 95, NT. Под NT немного глючит, что раздражает.
- AutoSocks от Aventail - www.aventail.com мне понравился больше всех. Отлично работает под всеми видами форточек. Недостаток один - дают только триальную версию на 1 месяц. Но ведь это-же не проблема, не так-ли? ;))
- Hummingbird's SOCKS Client от Hummingbird Бесплатный, хорошо работающий, но чертовски неудобный. ;)
Способ второй:
Squid - кэширующий прокси сервер. Также позволяет авторизоваться по логину/паролю, но проксит только HTTP,FTP, и Gopher. Также начиная с версии 2.0 включает поддежку ARP acl , т.е. возможность разрешить доступ только станциям с опреденными MAC адресами сетевых адаптеров. Возможность интересная, но не всех устраивающая. IMHO практичней и универсальней использовать username/password аусентификацию. Прикручивается следующим образом:
Запустите ./configure -DUSE_PROXY_AUTH=1, или просто раскоментируйте строчку USE_PROXY_AUTH в Makefile.
Скажите make ; make install . Затем подправьте все необходимое в squid.conf и добавьте туда строчку
proxy_auth /usr/local/squid/etc/passwd
passwd - файл с криптаваными паролями ( crypt() ), такого-же формата как и в Appache.



