Squid3 2 Factor Authentication, Google Authenticator Pam Module, Freeradius

Squid3 2 Factor Authentication, Google Authenticator Pam Module, Freeradius
Из названия топика ясно что нужно было настроить.
Погуглив наткнулся на готовое решение от
www.wikidsystems.com
Скачал инстаялционыый пакет для Debian, настроил все как описано в доках на офф сайте, но тут наткнулся на инфу что для того что бы использовать связку Radius + OTP нужно купить лицензию. Обратился в поддержку продукта, ответ от них получил такой:
You can buy licenses online:  http://www.wikidsystems.com/purchase
Вообщем забил на их решение, которое кстати работает на java в связке с tomcat и очень грузит систему, на выдаче от команды
#ps uax | grep java
выходило много процессов ,а как известно Java любительница оперативной памяти..
Клиентская часть тоже глючила под мой андроид 4.2.2, хотя в этом не сознался офф сапорт.
Принялся за поиски решения дальше, но гугл толком ничего не выдавал.
Только если вот это на ядре Pfsense + Radius.
http://www.theninjageek.co.za/the-pfsense-walkthrough-part-8-freeradius-and-one-time-passwords/
Но и это не подходило из-за большой суеты с созданием учетки на клиентском Token, это был или mOTP или Potato c морковкой на лого и то идр есть и под Android и I*dev
Да и ставить Pfsense было как то неахотно…
Пришлось придумывать/настраивать связу Raidus + Token + Squid самому.
Давно слышал про Google PAM идентификатор но еще не использовал еще нигде.
Google Authenticator (http://code.google.com/p/google-authenticator/)
По словам очевидцев он отлично работает в связке с Radius для 2х факторовой индентификации причем Бесплатно!!!!!
А Заставить Squid работать с Radius это парочка строк в конфиге…итак перейдем от пустых слов к настройке!
Итак что имеется в наличии:
Это настроенный уже Squid3 с локальной, базовой идентификацией.
Что нам нужно?
Трезвая голова, Прямые руки, скромные знания *Никсов :)
Ставим нужные компонетны!
Главный компонет ситемы это время, если оно будет неправильное то это создаст сбой в авторицации.
Ставим ntp:
apt-get update
apt-get install ntp
Ставим freeradius и нужные ему компоненты, само название уже прияное! :)
apt-get update
apt-get install build-essential libpam0g-dev freeradius git libqrencode3
И кончно важный и халявный для нас Google Authenticator Pam Module Source:
git clone https://code.google.com/p/google-authenticator/
cd google-authenticator/libpam/
make
make install
созаем группу radius-disabled , название говорит само за себя, будет испльзоваться для блокирования логинов путем помещения их в эту группу.
#addgroup radius-disabled
меняем конфиг радиуса
находим тут
#vi /etc/freeradius/radusd.conf
user = freerad
group = freerad
меняем на:
user = root
group = root
#vi /etc/freeradius/users
находим и добавляем и добавляем после этого
#
# Deny access for a group of users.
#
# Note that there is NO ‘Fall-Through’ attribute, so the user will not
# be given any additional resources.
#
DEFAULT         Group == “radius-disabled”, Auth-Type := Reject
Reply-Message = “Your account has been disabled.”
DEFAULT        Auth-Type := PAM
#vi /etc/freeradius/sites-enabled/default
Разкоментируем PAM
#  Pluggable Authentication Modules.
pam
:wq!
В файлик
/etc/pam.d/radiusd
Пишем вот это:
auth requisite pam_google_authenticator.so forward_pass
auth required pam_unix.so use_first_pass
остальное все коментим.
Добавляем юзера, пусть будет test1 и пароль 777
#adduser testuser
После чего заходим на него и генерируем Qrcode
Выглядид это вот так:

qrcode
qrcode

 

 

 

 

 

 

 

 

 

 

 

 

Достаем из кармана телефон, скачаивам с Play Market/App Store Google Authenticator
Он сам попросит поставить QR Reader что бы считать сию прелесть с экрана.
После считки с экрана QR кода получается вот такой код с длительностью жизни 30 сек; можно увеличить до 4 мин.

Screenshot_2013-12-20-00-33-11

 

 

 

 

 

 

 

 

 

 

С радиусом и «говорящим ключем» закончили, переходим к Squid, нужно его заставить идентифицироваться через Radius.
Если у вас squid версии 3 и выще то в нем уже есть готовый плагин squid_radius_auth.
Если же у вас версия постарее, к примеру 2.6, то качаете отсуда
#wget http://www.squid-cache.org/contrib/squid_radius_auth/squid_radius_auth-1.10.tar.gz

#tar xvzf squid_radius_auth-1.10.tar.gz
# cd squid_radius_auth-1.10
# make clean
# make install
cp squid_radius_auth /usr/local/squid/libexec/squid_radius_auth

У меня стоит версия Squid Cache: Version 3.1.20, так что мне это не понадобилось…
Создаем конфигурационный файл:

#vi /etc/squid3/squid_rad_auth.conf
Пишем туда настройки Radius

server 127.0.0.1
secret testing123

Секретное слово тут по умолчанию testing123 его желательно поменять тут:
/etc/freeradius/clients.conf на совое!

И добавляем в конфиг Squid собственно сам уроверь идентификации:
У меня это выглядит так:

#  TAG: auth_param
#Authentication Radius:
auth_param basic program /usr/lib/squid3/squid_radius_auth -f /etc/squid3/squid_rad_auth.conf
auth_param basic children 5
auth_param basic realm servak.net
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off

настройки Squid на усмотрение…у мяня вообще мудрый кофиг со многими ACL. Тут Я это описывать не буду…

Сохраняем и перезагружаем севисы Squid и Freedauis

# /etc/init.d/squid3 restart
# /etc/init.d/freeradius restart

проверяем созданого юзера, делается это через консоль утилитой radtest:

root@servak:~# radtest test1 777124321 localhost 18120 testing123
Sending Access-Request of id 7 to 127.0.0.1 port 1812
User-Name = “test1”
User-Password = “777124321”
NAS-IP-Address = vneshka.ip.addr
NAS-Port = 18120
Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=7, length=20
где test1 это юзер, 777 это пароль а  124321 это ваш меняющийся каждые 30 сек пин; с остальным все ясно ,по крайней мере для тех кто в теме с Radius.
как видите получил ответ Access-Accept, тут вроде все ок, следом прописываем в браузер наш прокси и проверяем на деле!У меня все конечно же заработало :)
Если есть вопросы пишите мне на [email protected]
Спасибо!