петък, 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 или с празния ред. Една команда се пише на един ред. ;-) надявам се да е ясно.

5 коментара:

  1. Еее, яко! Като си спомням колко те трових докат го инсталираме тоя скуид... Ся ако ми се наложи, сам ще се пробвам :mrgreen:

    ОтговорИзтриване
  2. Като стана дума за програми да добавя и LightSquid. Много е яка. Анализира access лога на проскито и извежда информацията в уеб интерфейс. Адреса е http://lightsquid.sourceforge.net/ На сайта има и демо, за да видите за какво става въпрос. Могат да се задават групи според IP-тата, които го ползват, да кажеш кои IP-та да се листват в списъка и кои не и много други.
    Тишо, мерси за SquidClamav, ще го пробвам!

    ОтговорИзтриване
  3. Добавих още малко към самата тема по въпроса за transparent на Squid. След доста търсене в интернет се оказа, че има информация на доста места, но важи за версията преди 2.6 и за Squid 2.6 не работи.

    ОтговорИзтриване
  4. Ами при мен варви ето така.

    iptables -A PREROUTING -t nat -s 10.1.0.0/24 -p tcp --dport 80 \
    -j REDIRECT --to-port 3128

    ОтговорИзтриване
  5. Мерси Тишо! Това е верния вариант. Сега Всичко става само с един ред и не е нужно да "дебъгвам" апачето. Освен това "подробното" описание в моя вариант има и друг недостатък. Ако локалната мрежа влиза в сървъра на eth0 е добре, но в момента в който пусна VPN-а и той направи bridge между eth0 - интерфейса на локалната и VPN интерфейса tap0 създава нов интерфей br0, който става входен за локалната мрежа към сървъра, та се налага да описвам и него. Мерси!

    ОтговорИзтриване