Разделение доступа в интернет из локальной сети.
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.