Показват се публикациите с етикет squid. Показване на всички публикации
Показват се публикациите с етикет squid. Показване на всички публикации

четвъртък, 18 февруари 2010 г.

Забрана за достъп до web със Squid

Днес ми се наложи да спра достъпа до web на няколко компютъра в мрежата. Оказа се, че има колеги, който ползват чужди компютри за неслужебни цели ;-) Единия си тръгва от работа а другия застъпва Imperia Online.

Решението да има web достъп само в работно време е добавянето на няколко реда в squid.conf

acl no_web_group src 192.168.1.21 192.168.1.44 192.168.1.47
deny_info ERR_WEB_TIME no_web_group
acl web_time time MTWHF 08:00-17:00
http_access allow web_time no_web_group
http_access deny no_web_group



Обяснение ред по ред:
1. Дефинира се група no_web_group на компютрите, които ще се режат.
2. Страница, която да се покаже при възникване на забрана (може и без тоя ред).
3. Дефинира се интервала web_time който в случая е за дните от понеделник до петък от 8:00 до 17:00.
4. Разрешаваме достъп на групата no_web_group до web в интервала web_time.
5. Забраняваме достъпа през цялото останало време.

Дните са: M - понеделник, T - вторник, W - сряда, H - четвъртък, F - петък, A - събота, S - неделя

неделя, 8 март 2009 г.

squid с потребител и парола

Преди време тук бях описал инсталцията на squid. Днес след новата инсталация реших да направя и нещо, за което там не съм писал. Понеже редовно ми се налага да ползвам проксито от различни адреси варианта с добавяне на дадени IP-та не е много удобен. Проблема си решавам като направя възможно ползването на проксито с потребител и парола без IP-то да е разрешено в squid.conf. Накратко това става по следния начин (подробното описание по-долу):

Инсталира се ncsa_auth.
Понеже на мен ми писна, имам си една стара инсталация и от нея само копирам въпросния файл (ncsa_auth).

В squid.conf се добавят следните редове:


auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 12 hours
auth_param basic casesensitive off


Във същия файл в acl секцията се добавят двата реда:

acl ncsa_users proxy_auth REQUIRED
http_access allow ncsa_users


Създава се файла, в който се описват потребителите и паролите:

touch /etc/squid/passwd

Добавят се потребители:

htpasswd -b /etc/squid/passwd USER PASS

Сега малко подробности:

auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd - казва кой метод да използва чрез кой файл и в кой да търси потребителите и паролите. В моя случай папката е /etc/squid/ защото инсталирах squid от SlackBuilds. Ако се инсталира от сорс обикновено папката е /usr/local/squid/

auth_param basic children 5 - колко да е максималния брой на потребителите с парола в един момент

auth_param basic realm Squid proxy-caching web server - това ще го изпише над полетата за потребител и парола, когато потребителя се опита да използва проксито.

auth_param basic credentialsttl 12 hours - колко време да трае една сесия (през колко време да пита за парола)

auth_param basic casesensitive on - дали да е чувствителен към малки и главни букви за потребителя и паролата.

http_access allow ncsa_users - с allow се разрешава на потребителите с пароли да ползват проксито.

петък, 21 септември 2007 г.

Squid

   От доста време имам идея да си събера нещата на едно място, за да са ми под ръка когато ми потрябват. Става дум за особеностите при инсталациите на някои програми под линъкс. NastyWitch иска да напиша и как се инсталира самата ОС но няма да го направя. Линъкси много, всеки се инсталира по различен начин. Аз предпочитам Slackware, а в неговата инсталация няма нищо особено. Буутвам от CD-то. Бухам Enter докато не ми излезе промпта и пиша setup. Прескачам първите няколко стъпки за избор на keymap и добавяне на swap (аз си правя swap-a на файл) и направо отивам на Target, за да избера къде ще инсталирам. Избирам си дяла който искам и го форматирам. Използвам reiserfs файлова система въпреки някой нейни недостатъци, може би е някаква инерция. Нататък инсталацията си е ясна. Зависи с каква цел правя инсталацията. Избирам или интерактивно меню да ми предлага пакетите за инсталиране и аз да слагам и да махам звездички или давам Full за да се инсталират всички пакети. След като попита за втория диск и приключи и с него имаше някакви въпроси за това къде да сложи Lilo, да конфигурира ли мрежата, да си сетна root парола, да си избера конзолен шрифт... за друго не се сещам. Lilo-то го слагам в MBR, за парола си слагам ;-) , конзолния шрифт си остава първия предложен. Май горе-долу с това се изчерпва инсталацията. След рестарт всеки прави каквото иска. Аз си настровам Apacheto, пускам си MySQL-а, оправям си настройките на мрежата и каквото се сетя.
   Вчера ми се наложи да инсталирам един линъкс, и първото нещо, което сложих допълнително беше squid. Това е cache proxy. Освен като нормално прокси функционира и като cache. Кешира информацията преминала през него и по тоя начин пести трафик. Дава възможност чрез него да бъде ограничен достъпа до определени сайтове, файлове (чрез техните разширения) и т.н. Малко се отнесох, нали това щяха да бъдат писаници за инсталирането а не за настройката на някои програми.

Самата инсталация:
Отивам на http://squid-cache.org и тегля последната версия.
влизам в /usr/src/ и го разгъвам.

tar zxpvf /pyt/do/faila/poslednata_wersiq_na_squid.tar.gz

влизам в директорията която се е създала и стартирам


./configure
make
make install


Ако всичко мине нормално можем да кажем че squid-а е инсталиран.

За да можем да го стартираме трябва да направим няколко неща. Squid се стартира със собствен юзър, за целта ще му създадем такъв, както и група.

groupadd squid
useradd squid -g squid


Когато проксито работи то пише логове (по подразбиране в директория /usr/local/squid/var/). За да може да го прави без проблем трябва да дадем права на новосъздадения потребител squid пише в тази директория:

chown -R squid:squid /usr/local/squid/var

Пак за да може да работи на проксито му трябват и прaва за писане в директорията, където ще кешира файловете (тя се задава от конфигурационния файл, аз ползвам /cache). Понеже тази директория не съществува ние я създаваме и после даваме права на потребител squid да пише в нея

mkdir /cache
chown -R squid:squid /cache


Сега е момента проксито да си създаде директориите за кеша. Прави се с командата:

/usr/local/squid/sbin/squid -z

След това идва и момента да стартираме squid (приемаме, че сте се сдобили с работещ конфигурационен файл).
Като за първи път стартирайте squid с командата:

/usr/local/squid/sbin/squid -NCd10

Тя дава възможност да видите ако нещо не е наред и да поправите грешката. Ако след изпълнение на командата не изпише някаква грешка а реда седи "зает" нямате курсор и не можете да пишете значи всичко е наред. Натиснете Ctrl+C, за да прекъснете стартираната програма и пуснете проксито със стандартната команда за тази цел

/usr/local/squid/sbin/squid

След горната команда конзолата ви просто трябва да мине на нов ред. Предполагам всеки би искал проксито да тръгва със стартирането на машината. За целта аз съм добавил следния ред в /etc/rc.d/rc.local:

/usr/local/squid/sbin/squid >& /dev/null


Допълнение - 25.09.2007

След като сложих Squid-a ми се наложи да го сложа като transparent (прозрачно) прокси. Имах 2 причини за това. Идеята ми е освен да кеширам информация и да контролирам кой какво може и какво не може да отваря. Ползвам опции като забрана за отваряне на определени сайтове или файлове с определени разширения. Ако всичко това се сложи като настройка, но остане възможността потребителя сам да си слага и маха проксито ефекта се губи. За това потърсих начин всеки потребител да преминава през проскито, без значение дали иска или не. Във версията 2.6 на Squid това става много лесно. В squid.conf се записват следните редове:

http_port 3128 transparent
always_direct allow all


Първия ред замества реда http_port 3128 ако вече имате такъв във файла. Това прави порт 3128, на който слуша моя Squid прозрачен. Има още нещо, за да накарате всяка заявка която е изпратена до порт 80 да мине през Squid-a (през 3128) трябва да се изпълнят две команди:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.1.1:3128
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128


eth0 ми е мрежовата карта, към която е закачена локалната мрежа. При така написаните команди има един бъг, понеже имам пуснат уеб сървъв, заради пренасочването на портовете той се ебава. Неговия проблем решавам като всички заявки изпратени към реалното IP на порт 80 не се пренасочват а си заминават към реалното IP на порт 80 с командата:

iptables -I PREROUTING -t nat -d 88.80.xxx.xxx -p tcp --dport 80 -j DNAT --to-destination 88.80.xxx.xxx:80


xxx.xxx по-горе е с цел да не пиша истинско IP и да обърквам някого.

Горните три команди съм ги ръчнал във файла, който се грижи за "интернета" и се стартира при зареждане на машината.

Ако някои има по-добра идея как да стане по-чисто изпълнението с iptables нека да каже, аз скалъпих работата по тоя начин и работи, но си мисля, че има и по-универсален и с по-малко редове.

П.П. За тези който се чудят защо казвам "една команда" а виждат два реда. Проблема е в тесния формат на страниоцата на блога, която не може да побере по-дългите редове и ги разбива. Това което започва с iptables е една команда и свършва с последния символ преди следващото iptables или с празния ред. Една команда се пише на един ред. ;-) надявам се да е ясно.