Ключевые слова:socks, proxy, patch, win, auth, squid, (найти похожие документы)
From: NKritsky <nkritskyatno_spam.mail.ru>
Newsgroups: email
Date: Mon, 25 Dec 2003 14:31:37 +0000 (UTC)
Subject: Аутентификация клиентов NEC socks5 сервера в NT домене.
Надоело мне в 21-м веке авторизовать клиентов (и, соответственно,
вести учет траффика) по IP.
Штатный socks5 сервер от NEC меня в принципе устраивает. Но вот незадача -
в опциях присутствуют три типа аутентификации клиента - username/pass,
kerberos, anonymous. Причем username/pass кастомизуется только при помощи опции
SOCKS5_PWD_FILE. Ни API для external auth, ни даже поддержки PAM. Всё. Пришлось
поработать руками и (немножко) головой.
Что нам понадобится:
- исходники socks5 - www.google.com
- исходники msnt_auth - маленького хелпера из поставки сквида. Я брал его из
- исходников squid 2.5.STABLE1, просто потому что он уже лежал у меня на диске в
развернутом состоянии.
- текстовый редактор. например vi.
Шаг 1:
патчим ${SOCKS_SRC}/lib/upwd.c
;-------------------------cut begin----------------------------
--- ../lib/upwd.c Wed Dec 10 17:15:08 2003
+++ ../lib/upwd.c.orig Wed Dec 10 15:31:54 2003
@@ -8,8 +8,6 @@
* $Id: upwd.c,v 1.38.4.10 2000/08/15 21:02:25 wlu Exp $
*/
-#define USE_MSNT 1
-
#include "socks5p.h"
#include "buffer.h"
#include "threads.h"
@@ -129,14 +127,6 @@
goto done;
}
-#ifdef USE_MSNT
- if (OpenConfigFile() == 1)
- return 1;
- S5LogUpdate(S5LogDefaultHandle, S5_LOG_DEBUG(10),0,"MSNT:trying to auth user:%s",name);
- if (QueryServers(name,passwd) == 0 ) rval = AUTH_OK ;
- goto done;
-#endif //MSNT
-
#ifdef USE_PASSWD
{
struct passwd *pw = getpwnam(name);
;-------------------------cut end------------------------------
комипилируем msnt_auth
пытаемся скомпилировать socks5
Получаем, естесственно, сообщение об ошибке по поводу функций OpenConfigFile и
QueryServers.
Патчим Makefile:
;-------------------------cut begin----------------------------
--- server/Makefile Sat Dec 27 16:38:27 2003
+++ server/Makefile.orig Sat Dec 27 16:38:17 2003
@@ -14,7 +14,7 @@
exec_prefix = ${prefix}
EXTRA_LDFLAGS =
LDFLAGS = $(EXTRA_LDFLAGS)
-EXTRA_OBJS = /usr/ports/unsupported/squid-2.5.STABLE1/helpers/basic_auth/MSNT/*.o
+EXTRA_OBJS =
SERVER_LIBS =
LIBS = -lcrypt $(SERVER_LIBS)
;-------------------------cut end------------------------------
Подставляем свой путь к объектникам msnt_auth.
Удаляем из каталога с msnt_auth файл msntauth.o
собираем socks5 - все должно собраться. Теперь сокс аутентифицирует юзеров через
домен NT указанный в конфигурации msnt_auth.
Удачи!
Супер!Всё работает, жалко что при этом никак нельзя ограничить по пользователям, то есть пускают всех кто авторизовался, потому что при вызове QueryServers похоже не проверяется allowusers