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