Wednesday, November 24th, 2010
А вы знаете, что web-server Apache можно использовать как прокси сервер? Все что нужно – установить модуль mod_proxy.
Apache может быть сконфигурирован как forward proxy и как reverse proxy.
Forward Proxy – это промежуточный сервер, который находится между клиентом и оригинальным сервером. Для того, чтобы получить контент с оригинального сервера, клиент посылает запрос на прокси сервер который в свою очередь шлет запрос на оригинальный сервер и возвращает ответ клиенту. Клиент должен быть специально сконфигурирован для того, чтобы использовать форвард прокси для доступа к другим сайтам.
Как правило, форвард прокси служат для того, чтобы предоставлять интернет доступ клиентам которые находятся за файрволом. Форвард проки так же могут использовать кэширование (mod_cache) чтобы уменьшать интенсивность использования сети. Активировать forward proxy можно следующим образом :
Forward Proxy
ProxyRequests On
ProxyVia On
<Proxy *>
Order deny,allow
Deny from all
Allow from internal.example.com
</Proxy>
Форвард прокси можно активировать используя директиву ProxyRequest. Потому что форвард прокси позволяют клиенту получать доступ к произвольным сайтам, через ваш сервер и скрывать свои реальные данные (ip адрес, например) крайне необходимо, чтоб у вас было все в порядке с безопасностью сервера, и только авторизированные клиенты имели доступ к прокси.
Reverse proxy, наоборот, представляются клиенту как обычный веб-сервер. На стороне клиента не нужно проводить никакого конфигурирования. Клиент делает обычные запросы чтобы получить данные в пространстве имен реверс прокси. Далее реверс прокси решает куда послать этот запрос и возвращает ответ так, как будто ответ был послан самим прокси сервером.
Reverse Proxy
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /foo http://foo.example.com/bar
ProxyPassReverse /foo http://foo.example.com/bar
Реверс прокси используют, например, чтобы предоставлять интернет пользователям доступ к серверу который находится за файрволом. Реверс прокси, так же могут быть использованы чтобы балансировать нагрузку между несколькими back-end серверами, или чтобы предоставлять кэширования для медленного бэк-энд сервера. Ну и реверс прокси может быть использованы для того, чтобы вонзить несколько серверов на одно и то же пространство URL адресов.
Реверс прокси активируют используя директиву ProxyPass или флаг [P] в директиве RewriteRule. Не нужно включать ProxyRequest чтобы сконфигурировать реверс прокси.
В соответствии с модульной архитектурой Apache, mod_proxy так же состоит из модулей :
- mod_proxy: The core module deals with proxy infrastructure and configuration and managing a proxy request.
- mod_proxy_http: This handles fetching documents with HTTP and HTTPS.
- mod_proxy_ftp: This handles fetching documents with FTP.
- mod_proxy_connect: This handles the CONNECT method for secure (SSL) tunneling.
- mod_proxy_ajp: This handles the AJP protocol for Tomcat and similar backend servers.
- mod_proxy_balancer implements clustering and load-balancing over multiple backends.
- mod_cache, mod_disk_cache, mod_mem_cache: These deal with managing a document cache. To enable caching requires mod_cache and one or both of disk_cache and mem_cache.
- mod_proxy_html: This rewrites HTML links into a proxy’s address space.
- mod_xml2enc: This supports internationalisation (i18n) on behalf of mod_proxy_html and other markup-filtering modules. space.
- mod_headers: This modifies HTTP request and response headers.
- mod_deflate: Negotiates compression with clients and backends.
Очень мощная шутка, если использовать её можно конфигурировать сервер или даже сервера для поддержки проектов произвольной сложности. Если вы хотите добавить кэширование – луркайте mod_cache.
Типичная конфигурация выглядит так (файл конфига httpd.conf – найти его можно командой locate httpd.conf):
# слушать порт 6000
Listen 6000
# организуем виртуальный хост
<VirtualHost *:6000>
# определяем кто будет иметь доступ к прокси. в данном случае
# это будет любой пользователь с айпи 192.168.0.*
<IfModule mod_proxy.c>
ProxyRequests On
<Proxy *>
Order deny,allow
Deny from all
Allow from 192.168.0.0/255.255.255.0
</Proxy>
</IfModule>
# включаем форвард прокси
ProxyRequests On
# чтобы писался лог
CustomLog /vsr/log/proxy_log common
</VirtualHost>
Так же можно управлять заголовками (нужен модуль mod_headers), устанавливая значения согласно этой спецификации. Например так можно установить юзер агент и убрать реферер :
RequestHeader set User-Agent "Mozilla/5.0"
RequestHeader unset Referer
а так можно запретить куки :
Header unset Set-Cookie
Исходящие от браузера заголовки устанавливаются директивой RequestHeader.
Заголовки, приходящие клиенту (браузеру), устанавливаются директивой Header.
Более глубокие знания можно получить по адресу :
http://www.devshed.com/c/a/Administration/Using-Apache-As-A-Proxy-Server/
Posted in Proxy, Server | No Comments »
Friday, November 19th, 2010
Как правило, если вы берете VDS или Dedicated сервер, в комплект идет несколько дополнительных IP адресов, обычно 2 или 4, зависит от дата центра. Вы межете без проблем развешивать сайты на разные айпи, управляя записями DNS домена. А как запустить скрипт на не основном ip адресе сервера? Один из вариантов предложил Lorien – использовать прокси сервер – Squid. О том, как установить Squid я писал ранее. Короче говоря часто на одном ипе висит куча скриптов которые дрочат какие-то сервисы время от времени, и чтобы не натыкаться на бан или превышение лимитов API лучше всего распределить нагрузку между доступными ip адресами. Это потребует небольшой модификации скриптов, нужно будет направлять запросы через прокси. “Прозрачно” это можно сделать используя библиотеку socksipy-branch.
Чтобы перенаправлять запросы на другой ип адрес используется следующая хитрая схема : мы направляем запрос на ip:port откуда squid роутит его на айпи используя директиву tcp_outgoing_address.

Allows you to map requests to different outgoing IP addresses based on the username or source address of the user making the request.
Позволяет вам назначать запрос на другие исходящие IP адреса, основываясь на имени или адресе источника откуда юзер сделал запрос.
Осталось только настроить конфиг Squid’а нужным образом, естественно если ипов больше чем 2а лучше всего потратить 5 минут и написать скрипт который будет генерировать нужную последовательность директив :
# Говорим squid слушать нужные порты
# http_port 20000
# http_port 20001
# Создаём ACL правила
# acl p20000 myport 20000
# acl p20001 myport 20001
# С помощью созданных ACL правил выбираем нужный исходящий IP
# tcp_outgoing_address 78.109.20.226 p20000
# tcp_outgoing_address 78.109.20.227 p20001
Взял отсюда. Немного переделал приблизив скрипт к “боевым” условиям. Список айпи берет из файла ips.txt. Начальный порт задаем в start_port.
Внимание, лучше лишний раз проверить, чтобы на ипах ничего не висело. Делается это с помощью команды : netstat -tulnap
start_port = 2000
ips_list = [ item.strip() for item in open("ips.txt", "r").readlines()]
chunks = ([], [], [])
for num, ip in enumerate(ips_list):
port = start_port + num
chunks[0].append('http_port %d' % port)
chunks[1].append('acl p%d myport %d' % (port, port))
chunks[2].append('tcp_outgoing_address %s p%d' % (ip, port))
for group in chunks:
for line in group:
print line
print
print "-------------------------------\n"
Если кто знает более простой способ welcome в комменты. Я задавал это вопрос на freenode #linux (IRC канал), но практичного решения с ходу никто не предложил. Пока что единственный рабочий вариант предложил Lorien.
Posted in Code, Proxy, Python, Server | No Comments »
Sunday, November 14th, 2010
Зачем? Предположим у вас есть CMS и хочется устроить там искусственную жизнь, естественно самый простой вариант (и самый быстрый) – работать напрямую с базой данных. Но если cms достаточно развитая то возникают сложности, из-за того что одно действие меняет данные в куче разных таблиц. Естественно очень хотелось бы мониторить обращения к базе данных, чтобы потом их повторить. Ну, во-первых нужен линукс – web-разработчик должен работать в линуксе. У меня стоит нечестная Ubuntu – нечестная потому что в окне VirtualBox, впрочем, про это я расскажу позже.
Перехват обращений к базе данных mySQL
Для того чтобы просматривать запросы нужно включить логгирование в конфигурационном файле mysql он находится /etc/mysql/my.cnf нужно раскоментировать следующие 2е строчки :
#
# * Logging and Replication
#
# Both location gets rotated by the cronjob.
# Be aware that this log type is a performance killer.
log = /var/log/mysql/mysql.log
general_log = 1
Далее сделать рестарт mySQL сервера :
sudo /etc/init.d/mysql restart
Все, лог будет писаться в /var/log/mysql/mysql.log Рестарт mySQL сервера только не забудьте сделать.

Можно наблюдать в это в реальном времени в окне терминала :
tail -f /var/log/mysql/mysql.log
Posted in Code, Notes, Server | 1 Comment »
Friday, May 21st, 2010
Самое время установить FTP сервер. Комрады рекомендуют – vsftpd. Eго используют на таких серьезных сайтах, как : ftp.redhat.com, ftp.suse.com, ftp.debian.org, ftp.gnu.org, ftp.gnome.org, ftp.kde.org, т.е. фтп с высокой загрузкой. для которых не менее важна надежность.
Внимание!!! FTP сервер может быть уже установлен (проверьте это попробовав зайти на ftp://youserverIP).
У меня отлично поставился через yum (если версия linux у вас 64 битная, то рекомендую для начала проверить наличие 64 битной весии yum search vsftpd) :
yum install vsftpd
[root@server/]# yum install vsftpd
...... [cut]
Downloading Packages:
(1/1): vsftpd-2.0.6-6.fc9.x86_64.rpm | 143 kB 00:00
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing: vsftpd ######################### [1/1]
Installed: vsftpd.x86_64 0:2.0.6-6.fc9
Complete!
Из кусочка лога видно, что поставилась нужная 64 битная версия, yum сработал как надо.
Теперь для тех лузеров у кого не получилось установить из репозитария с помощью yum’а. Ниггер, как ты правильно понял тебя ждут суровые испытания
скопировать нужную версию тут. Качаем последний архив .tar.gz в папку например root/install :
[root@server install]# wget ftp://vsftpd.beasts.org/users/cevans/vsftpd-2.0.7.tar.gz
C помощью mc распаковываем его. Заходим в папку куда распаковали и втыкаем маунал в файле install. Ну а что? Установка с исходников дело неинтеллигентное. Для RedHat/Fedora систем есть rpm, нужно только погуглить и поставить vsftpd из rpm точно таким же образом как например webmin. Думаю если поискать, то можно найти и rpm для CentOS’а.
Я оптимистично полагаю, что все же yum сработал и vsftpd установился без проблем. Теперь нужно сконфигурировать и запустить.
/etc/vsftpd/ – в этой папке находятся файлы конфигурации (это можно посмотреть набрав команду whereis vsftpd)
Делаем следующее :
Создаем папку для фтп – /var/ftpwww/
Через webmin создаем юзера – ftpwww (system->Users and Groups), задаем ему папку (/var/ftpwww), shell – /sbin/nologin и пароль.
Теперь нужно поправить файл конфига – vsftpd.conf (находится в /etc/vsftpd/vsftpd.conf)
# Example config file /etc/vsftpd/vsftpd.conf
#
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=YES
#
# Uncomment this to allow local users to log in.
local_enable=YES
#
# Uncomment this to enable any form of FTP write command.
write_enable=YES
#
# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
local_umask=022
#
# Uncomment this to allow the anonymous FTP user to upload files. This only
# has an effect if the above global write enable is activated. Also, you will
# obviously need to create a directory writable by the FTP user.
#anon_upload_enable=YES
#
# Uncomment this if you want the anonymous FTP user to be able to create
# new directories.
#anon_mkdir_write_enable=YES
#
# Activate directory messages - messages given to remote users when they
# go into a certain directory.
dirmessage_enable=YES
#
# Activate logging of uploads/downloads.
xferlog_enable=YES
#
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES
#
# If you want, you can arrange for uploaded anonymous files to be owned by
# a different user. Note! Using "root" for uploaded files is not
# recommended!
#chown_uploads=YES
#chown_username=whoever
#
# You may override where the log file goes if you like. The default is shown
# below.
#xferlog_file=/var/log/vsftpd.log
#
# If you want, you can have your log file in standard ftpd xferlog format.
# Note that the default log file location is /var/log/xferlog in this case.
xferlog_std_format=YES
#
# You may change the default value for timing out an idle session.
#idle_session_timeout=600
#
# You may change the default value for timing out a data connection.
#data_connection_timeout=120
#
# It is recommended that you define on your system a unique user which the
# ftp server can use as a totally isolated and unprivileged user.
#nopriv_user=ftpsecure
#
# Enable this and the server will recognise asynchronous ABOR requests. Not
# recommended for security (the code is non-trivial). Not enabling it,
# however, may confuse older FTP clients.
#async_abor_enable=YES
#
# By default the server will pretend to allow ASCII mode but in fact ignore
# the request. Turn on the below options to have the server actually do ASCII
# mangling on files when in ASCII mode.
# Beware that on some FTP servers, ASCII support allows a denial of service
# attack (DoS) via the command "SIZE /big/file" in ASCII mode. vsftpd
# predicted this attack and has always been safe, reporting the size of the
# raw file.
# ASCII mangling is a horrible feature of the protocol.
#ascii_upload_enable=YES
#ascii_download_enable=YES
#
# You may fully customise the login banner string:
#ftpd_banner=Welcome to blah FTP service.
#
# You may specify a file of disallowed anonymous e-mail addresses. Apparently
# useful for combatting certain DoS attacks.
#deny_email_enable=YES
# (default follows)
#banned_email_file=/etc/vsftpd/banned_emails
#
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list
#
# You may activate the "-R" option to the builtin ls. This is disabled by
# default to avoid remote users being able to cause excessive I/O on large
# sites. However, some broken FTP clients such as "ncftp" and "mirror" assume
# the presence of the "-R" option, so there is a strong case for enabling it.
#ls_recurse_enable=YES
#
# When "listen" directive is enabled, vsftpd runs in standalone mode and
# listens on IPv4 sockets. This directive cannot be used in conjunction
# with the listen_ipv6 directive.
listen=YES
#
# This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6
# sockets, you must run two copies of vsftpd whith two configuration files.
# Make sure, that one of the listen options is commented !!
#listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
Это пример конфига для vsftpd. Обратите внимание, что вот эти строчки нужно раскомментировать.
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list
затем создать файл chroot_list – и туда записать юзера ftpwww, это необходимо для того, чтобы запретить юзеру ходить дальше назначенной папки.
+ закомментировать anonymous_enable=YES, на всякий случай, нам же не нужно чтобы на фтп сервер коннектились разные анонимусы =)
Вот и все! Осталось только перезапустить vsftpd :
/etc/init.d/vsftpd restart
Теперь можно соединятся с сервером используя FAR или Total Commander. Настраиваем подключение через свой фтп менеджер :
Server – IP вашего сервера, ну и логин/пасс – юзера которого вы создали через вебмин.
Posted in Server | No Comments »
Sunday, April 25th, 2010
Многие конечно же имеют свой сервер для белых проектов или других более темных вещей, но как известно за удобную панель управления вроде CPanel или DirectAdmin’а нужно доплачивать деньги, кажется не так много, но сервера сейчас дешевые поэтому эти 10-20$ дают ощутимую прибавку к конечной стоимости. К этому стоит еще добавить глючность и наличие дыр в этих самых панелях, благодаря которым умные парни с хак-форумов могут получить доступ туда, куда не нужно. Вариант второй : иногда бывает, что берут безабузный сервер для апостера, и тратить лишние деньги за не нужную панель – грех. К счастью это linux, и тут есть масса бесплатных вариантов, об одном из них расскажу подробнее. Итак :
Установка панели управления сервером – Webmin.
Может отличаться для разных версий Linux’а.
Для начала нужно скачать webmin из репозитария :
yum install webmin
затем проверьте все ли прошло нормально
whereis webmin
если не получилось (у меня на CentOS не получилось, хз в чем дело) то после выполнения команды yum install webmin будет что-то вроде этого :
[root@server etc]# yum install webmin
Setting up Install Process
Setting up repositories
...
...
Excluding Packages in global exclude list
Finished
Parsing package install arguments
No Match for argument: webmin
Nothing to do
что может ввести в заблуждение, вроде что-то качается и даже что-то пишет, на самом деле это yum стягивает список продуктов, а вебмина нету в репозитарии.
Если не судьба поставить на автопилоте, то придется скачивать самому. Для этого идем сюда – http://www.webmin.com/download.html и качаем дистрибутив для своей системы. Для меня подошел этот http://prdownloads.sourceforge.net/webadmin/webmin-1.430-1.noarch.rpm.
Качаем нужный командой wget :
wget http://prdownloads.sourceforge.net/webadmin/webmin-1.430-1.noarch.rpm
wget копирует файл в текущую дерикторию. Люди рекомендуют сохранять такие файлы в /root – например /root/installs . Инсталлируем :
rpm -i webmin-1.430-1.noarch.rpm
далее все происходит на автомате. Скорее всего выведет complete.
Теперь нужно зайти и залогинится. Логинимся так yourserverip:10000 Но тут возможны варианты, в конце инсталяции rpm написал, что теперь могу логиниться со своим рут паролем, однако может быть так что пароль будет пустым (этот вариант вполне возможен если сразу ставить из репозитария). Если пароль пустой, то естественно нужно его сменить в интерфейсе Webmin’а.
Posted in Server | No Comments »