Настройка SMTP/POP3/IMAP4 прокси-серверов в Linux


Mark Silinio <silinio(at)mail.ru>
последнее обновление 06/06/06



О чём


Если настала пора заменить ОС Windows2000 с WinGate сомнительного происхождения на Linux, и решение для HTTP-прокси находится довольно легко(чаще всего им становится squid), то по части почтового SMTP/POP3/IMAP4 прокси всё не так просто...


Содержание:


Используется Gentoo Linux, но большая часть изложенного верна для любого дистрибутива


Настройка SMTP прокси smtpproxy

Качаем ebuild, устанавливаем ebuild:

# mkdir -p /usr/portage/net-mail/smtpproxy/files/
# wget http://silinio.webhost.ru/portage/net-mail/smtpproxy/smtpproxy-1.3.3.ebuild \ 
> -O /usr/portage/net-mail/smtpproxy/smtpproxy-1.3.3.ebuild
# ebuild /usr/portage/net-mail/smtpproxy/smtpproxy-1.3.3.ebuild digest
# emerge smtpproxy

Нам также будут нужны daemontools и ucspi-tcp:

# emerge daemontools ucspi-tcp

Создаём директории необходимые для supervise:

# mkdir -p /service/smtpproxy/log

А теперь скрипты запуска.
Сначала для самого сервиса в /service/smtpproxy/run:

#!/bin/sh
exec 2>&1
exec envuidgid nobody softlimit -o20 -d50000 tcpserver -vDRHl0 -b50 -c100 192.168.10.2 25 /usr/bin/smtp.proxy smtp.ourprovider.ru

В данном случае:
192.168.10.2 - это IP-адрес на котором smtpproxy будет ожидать входящие соединения(т.е. внутренняя сеть);
25 - tcp-сокет ожидающий соединения;
smtp.ourprovider.ru - адрес SMTP-сервера на который будет осущевствляться пересылка(т.н. SMTP-Relay, обычно ваш провайдер)

Далее лог-скрип /service/smtpproxy/log/run:

#!/bin/sh
exec setuidgid nobody multilog t ./main '-*' '+* * status: *' =status

В дальнейшем вы сможете смотреть лог-файлы smtpproxy в файлах расположенных в /service/smtpproxy/log/main/
Осталось изменить необходимым образом некоторые права доступа:

# chmod +x /service/smtpproxy/run
# chmod +x /service/smtpproxy/log/run
# chown nobody:nobody /service/smtpproxy/log

Готово, запускаем svscan:

# /etc/init.d/svscan start

Теперь электронная почта отправленная на smtpproxy будет перепрявляться на smtp-relay вашего провайдера.

У многих наверняка возник вопрос, зачем всё это нужно, если можно просто настроить NAT к провайдеру? Одна из причин это низкоскоростные линии,- если до провайдера используется модемное соединение, то возникнут проблемы с пересылкой больших писем(связано с различным значением MTU для соединения по локальной сети и соединения по модему с провайдером), другая причина связана с IP-адресами(в правилах NAT'а) которые могут смениться, а также с тем что если в качестве smtp-relay используется сервер хостинг-провайдера, то по одному dns-имени могут находиться несколько почтовых серверов(выбираемых при dns-запросе по round-robin принципу).

Настройка POP3 прокси pop3proxy

Всё похоже:

Качаем ebuild, устанавливаем ebuild:

# mkdir -p /usr/portage/net-mail/pop3proxy/files/
# wget http://silinio.webhost.ru/portage/net-mail/pop3proxy/pop3proxy-1.3.0-r1.ebuild \ 
> -O /usr/portage/net-mail/pop3proxy/pop3proxy-1.3.0-r1.ebuild
# ebuild /usr/portage/net-mail/pop3proxy/pop3proxy-1.3.0-r1.ebuild digest
# emerge pop3proxy

Нам также будут нужны daemontools, ucspi-tcp и ещё пригодится ClamAV:

# emerge daemontools ucspi-tcp clamav

Создаём директории необходимые для supervise:

# mkdir -p /service/pop3proxy/log

А теперь скрипты запуска.
Сначала для самого сервиса в /service/pop3proxy/run:

#!/bin/sh
exec 2>&1
exec envuidgid nobody softlimit -o20 -d50000 tcpserver -vDRHl0 -b50 -c100 192.168.10.5 110 /usr/bin/pop3.proxy -u clamav -z -c '#' -e

В данном случае:
192.168.10.2 - это IP-адрес на котором pop3proxy будет ожидать входящие соединения(т.е. внутренняя сеть);
110 - tcp-сокет ожидающий соединения;
-u clamav - указывает pop3proxy работать под пользователем clamav, что необходимо для нормальной работы с антивирусом ClamAV;
-z - включает проверку входящей почты антивирусом ClamAV;
-c '#' - указывает на то что символ # будет использоваться в качестве разделителя имени пользователя и имени удалённого pop3 сервера(см. ниже);
-e - позволяет пользоватлям указать удалённый pop3 сервер после символа #,- в противном случае необходимо указать удалённый pop3 сервер в качестве аргумента;

Далее лог-скрип /service/pop3proxy/log/run:

#!/bin/sh
exec setuidgid nobody multilog t ./main '-*' '+* * status: *' =status

В дальнейшем вы сможете смотреть лог-файлы smtpproxy в файлах расположенных в /service/pop3proxy/log/main/
Осталось изменить необходимым образом некоторые права доступа:

# chmod +x /service/pop3proxy/run
# chmod +x /service/pop3proxy/log/run
# chown nobody:nobody /service/pop3proxy/log

Для проверки входящей почты на вирусы настроим ClamAV,- отредактируйте необходимым образом файл /etc/freshclam.conf и /etc/clamd.conf, убедившись что в последнем присутствуют слудующие строки(и закомментирована строка LocalSocket):

TCPSocket 3310
TCPAddr 127.0.0.1

затем, измените следующим образом файл /etc/conf.d/clamd:

START_CLAMD=yes
START_FRESHCLAM=yes

таким образом активируется запуск демона clamd скриптом в init.d

Запускаем ClamAV:

# /etc/init.d/clamd start

Теперь всё, запускаем svscan:

# /etc/init.d/svscan start


В настройках почтового клиента необходимо ввести адрес нашего прокси в поле pop3 сервера, а логин ввести в виде ИМЯ_ПОЛЬЗОВАТЕЛЯ#ИМЯ_POP3_СЕРВЕРА, например username#pop.mail.ru,- подобным образом происходит взаимодействие и с POP3-прокси WinGate'а.

Настройка POP3/IMAP4 прокси perdition

В отличие от двух предыдущих программ, perdition входит в состав дерева портежей Gentoo Linux и значительно проще устанавливается и настраивается.

Устанавливаем:

# emerge perdition

Настроим perdition для работы в качестве IMAP4-прокси,- для начала правим общие параметры в /etc/perdition/perdition.conf:

bind_address 192.168.10.5
client_server_specification
domain_delimiter \#

Тут:
bind_address 192.168.10.5 - это IP-адрес на котором pop3proxy будет ожидать входящие соединения(т.е. внутренняя сеть);
client_server_specification - возможность выбора удалённого сервера клиентом (посредством указания оного после символа '#');
-c '#' - указывает на то что символ # будет использоваться в качестве разделителя имени пользователя и имени удалённого сервера;

Настраиваем то, какие протоколы будем проксировать в файле /etc/conf.d/perdition:

POP3=no
IMAP4=yes

- остальные параметры оставляем как есть.

Пускаем:

# /etc/init.d/perdition start


Как и с POP3-прокси, удалённый IMAP4-сервер указывается после символа '#' следующего после имени пользователя.

Как видите ничего сложного, используя связку squid+smtpproxy+pop3proxy/perdition возможно быстро заменить несложно настроенный WinGate сервер без необходимости переконфигурирования клиентов


<- Назад
Valid HTML 4.01! Valid CSS!