Добро пожаловать на форум, Гость!
Войдите или зарегистрируйтесь!
Имя пользователя:   Пароль:  
Запомнить меня 




Начать новую тему Ответить на тему   [ Сообщений: 2 ] 
Автор Сообщение
СообщениеДобавлено: 01 ноя 2011, 15:54 
Бородатый сис
Аватар пользователя
Статус: Не в сети

GeoIP: Kyrgyzstan

Сообщений: 2898
Откуда: Из серверной
Зарегистрирован: 03 мар 2010, 15:12
Благодарил (а): 19 раз.
Поблагодарили: 121 раз.
ОС: RHEL 6.7
Иногда возникает необходимость поднимать почтарь для очень большого количества ящиков, и стандартные средства тут уж как ни печально вряд-ли могут удовлетворить ваши потребности. Вот и меня постигла та же участь.

Что у меня есть:
    1. фаерволл (FreeBSD 7.4)
    2. 2 сервака за ним (RHEL 6.1)
    3. SAN под хранилищем всего юзерского файла (можно также юзать nfs, DRBD, fuse-sshfs)
    4. руки средней кривости
    5. мозги слегка побитые плесенью

Постараемся выжать из этого что-либо. ))))

Часть 1 - SMTP



В качестве smtp-сервера я выбрал Exim - имхо он полегче, пошустрее да и при больших нагрузках не проседает. Если кому-либо критично юзать postfix - это ваше право, но в этом случае можно пропустить эту часть и много чего из последующих. Если же кто-то решится поднять smtp на sendmail... сочувствую в общем. Данные о пользователях и пр. будем хранить в MySQL (конечно не самый лучший выбор по сравнению с PostgreSQL, но что остается делать если все "крутые" кодеры кроме него и MSSQL ничего более не знают?). MySQL у нас крутится пока на одном из хостов, этот хост также резольвится скажем как mysql.myhost.kg, MySQL прослушивает все интерфейсы на стандартном порту. Домены у нас myhost.kg и mail.myhost.kg.

Итак, ставим все что нам нужно.
Код:
yum install mysql-server mysql-client clamav clamd exim exim-mysql

для полного счастья удаляем postfix
Код:
yum remove postfix


Предположим что хранилище у нас смонтировано в /srv/data/mail на обоих серверах.
Переносим туда все с чем exim будет работать

Код:
export EXIM=/srv/data/mail
mkdir $EXIM/etc
mv /etc/exim/exim.conf $EXIM/etc
mkdir $EXIM/var
mkdir $EXIM/var/spool
mv /var/spool/exim $EXIM/var/spool/
mv /var/spool/mail $EXIM/var/spool/
ln -s $EXIM/var/spool/mail /var/spool/mail
ln -s $EXIM/var/spool/exim /var/spool/exim


На втором серваке:
Код:
export EXIM=/srv/data/mail
mkdir $EXIM/etc
rm -f /etc/exim/exim.conf
rm -rf /var/spool/exim
rm -rf /var/spool/mail
ln -s $EXIM/var/spool/mail /var/spool/mail
ln -s $EXIM/var/spool/exim /var/spool/exim


правим конфиг /srv/data/mail/etc/exim.conf

Синтаксис: [ Загрузить ] [ Скрыть ]
  1. primary_hostname = mail.myhost.kg 
  2.  
  3. domainlist local_domains = ${lookup mysql{SELECT domain FROM domains \ 
  4.             WHERE domain='${domain}' AND \ 
  5.             (type='LOCAL' OR type='VIRTUAL')}} 
  6.  
  7. domainlist relay_to_domains = ${lookup mysql{SELECT domain FROM domains \ 
  8.             WHERE domain='${domain}' AND type='RELAY'}} 
  9.  
  10. hostlist spamers = ${lookup mysql{SELECT senders FROM blacklist_host WHERE \ 
  11.             senders='${sender_host_address}'}} 
  12.  
  13. hostlist  relay_from_hosts = localhost : 127.0.0.1 : 192.168.50.0/24 
  14.  
  15. GET_QUOTA=${lookup mysql{SELECT quota FROM users \ 
  16.       WHERE login='${local_part}' AND domain='${domain}'}{${value}M}} 
  17.  
  18. MAILDIR_SIZE=${eval:${sg{${sg{${readfile{/srv/data/mail/var/spool/exim/$domain/$local_part/maildirsize}\ 
  19.            {\n}}}{\N^.+?\n\N}{}}}{\N(?s)\s+-?\d+\n\N}{+}}0+500K} 
  20.  
  21. daemon_smtp_ports = 25 : 465 
  22. tls_on_connect_ports = 465 
  23. tls_advertise_hosts = * 
  24. tls_certificate = /etc/pki/tls/private/exim.pem 
  25. tls_privatekey = /etc/pki/tls/private/exim.pem 
  26.  
  27. log_selector = \ 
  28.     +all_parents \ 
  29.     +lost_incoming_connection \ 
  30.     +received_sender \ 
  31.     +received_recipients \ 
  32.     +smtp_confirmation \ 
  33.     +smtp_syntax_error \ 
  34.     +smtp_connection \ 
  35.     +smtp_protocol_error \ 
  36.     -queue_run 
  37.  
  38. syslog_timestamp = no 
  39.  
  40.  
  41. acl_smtp_rcpt = acl_check_rcpt 
  42. acl_smtp_data = acl_check_data 
  43.  
  44. av_scanner = clamd:/var/run/clamav/clamd.sock 
  45.  
  46. trusted_users = lighttpd 
  47. qualify_domain = myhost.kg 
  48. allow_domain_literals = false 
  49. exim_user = exim 
  50. exim_group = exim 
  51. never_users = bin 
  52. delay_warning = 4h:8h:24h:48h 
  53. return_size_limit = 50k 
  54. host_lookup = * 
  55. rfc1413_hosts = * 
  56. rfc1413_query_timeout = 0s 
  57. smtp_enforce_sync = true 
  58. syslog_duplication = false 
  59. allow_mx_to_ip 
  60. ignore_bounce_errors_after = 2d 
  61. timeout_frozen_after = 2d 
  62. message_size_limit = 200M 
  63. smtp_accept_max = 1000 
  64. smtp_accept_max_per_connection = 50 
  65. smtp_accept_max_per_host = 20 
  66. smtp_connect_backlog = 50 
  67. smtp_accept_queue_per_connection = 30 
  68. remote_max_parallel = 15 
  69. split_spool_directory = true 
  70.  
  71. #Инклюдим файлик кодорый ДОЛЖЕН лежать не на хранилище, ибо у машин все же разные ипы. 
  72. .include /etc/exim/host.conf" 
  73.  
  74. # Подключение к MySQL: хост/база_данных/пользователь/пароль 
  75. hide mysql_servers = mysql.myhost.kg/mail/exim/exim_password 
  76.  
  77. begin acl 
  78.  
  79. acl_check_rcpt: 
  80. deny message   = "Illegal characters are in an address." 
  81.    domains    = +local_domains 
  82.    local_parts  = ^[.] : ^.*[@%!/|] 
  83.  
  84. deny message   = "Illegal characters are in an address." 
  85.    domains    = !+local_domains 
  86.    local_parts  = ^[./|] : ^.*[@%!] : ^.*/\\.\\./ 
  87.  
  88. deny message  = "All email from *.orange.fr - discarded!" 
  89.    condition = ${if match{$sender_helo_name}{.orange.fr}{yes}{no}} 
  90.  
  91. deny message  = "All email from *.mdp2.net - discarded!" 
  92.    condition = ${if match{$sender_helo_name}{.mdp2.net}{yes}{no}} 
  93.  
  94. deny message  = "All email from *.mail.comcast.net - discarded!" 
  95.    condition = ${if match{$sender_helo_name}{.mail.comcast.net}{yes}{no}} 
  96.  
  97. deny message  = "All email from *.libero.it - discarded!" 
  98.    condition = ${if match{$sender_helo_name}{.libero.it}{yes}{no}} 
  99.  
  100. deny message  = "All email from *.ono.com - discarded!" 
  101.    condition = ${if match{$sender_helo_name}{.ono.com}{yes}{no}} 
  102.  
  103. deny message  = "All email from *.wanadoo.fr - discarded!" 
  104.    condition = ${if match{$sender_helo_name}{.wanadoo.fr}{yes}{no}} 
  105.  
  106.  
  107. accept senders=${lookup mysql{SELECT senders FROM whitelist \ 
  108.     WHERE senders='${quote_mysql:$sender_address}' \ 
  109.     OR senders='*@${quote_mysql:$sender_address_domain}' LIMIT 1}} 
  110.  
  111. deny message = "Your address in banlist!" 
  112.     senders=${lookup mysql{SELECT senders FROM blacklist \ 
  113.     WHERE senders='${quote_mysql:$sender_address}' \ 
  114.     OR senders='*@${quote_mysql:$sender_address_domain}' LIMIT 1}} 
  115.  
  116. deny hosts = +spamers 
  117.    message = "Host rejected by spamers list on rbl.ispalternativa.net.ua!" 
  118.  
  119. accept authenticated = * 
  120.  
  121. deny message    = "HELO/EHLO required by SMTP RFC" 
  122.    condition   = ${if eq{$sender_helo_name}{}{yes}{no}} 
  123.  
  124. deny condition   = ${if match{$sender_helo_name}{\N^\d+$\N}{yes}{no}} 
  125.    hosts     = !127.0.0.1:!localhost:* 
  126.    message    = "There can not be only numbers in HELO!" 
  127.  
  128. deny condition   = ${if eq{$sender_address}{}{yes}{no}} 
  129.    hosts     = +relay_from_hosts 
  130.    message    = "Your message have not return address" 
  131.  
  132. deny message  = "The use of IP is forbidden in HELO!" 
  133.    hosts   = *:!+relay_from_hosts 
  134.    condition = ${if eq{$sender_helo_name}\ 
  135.            {$sender_host_address}{true}{false}} 
  136.  
  137.  
  138. deny condition = ${if eq{$sender_helo_name}\ 
  139.            {$interface_address}{yes}{no}} 
  140.    hosts   = !127.0.0.1 : !localhost : * 
  141.    message  = "The use of my IP is forbidden!" 
  142.  
  143. deny message  = "Dynamic hosts is forbidden!" 
  144.    condition = ${if match{$sender_host_name}\ 
  145.            {adsl|dialup|pool|peer|dhcp} {yes}{no}} 
  146.  
  147. deny  message    = rejected because $sender_host_address \ 
  148.     is in a black list at $dnslist_domain\n$dnslist_text 
  149.     hosts     = !+relay_from_hosts 
  150.     !authenticated = * 
  151.     log_message  = found in $dnslist_domain 
  152.     dnslists   = bl.spamcop.net : \ 
  153.             cbl.abuseat.org : \ 
  154.             dnsbl.njabl.org : \ 
  155.             sbl-xbl.spamhaus.org : \ 
  156.             pbl.spamhaus.org 
  157.  
  158.  
  159. drop  message   = Rejected - Sender Verify Failed 
  160.     log_message = Rejected - Sender Verify Failed 
  161.     hosts    = * 
  162.     !verify   = sender/no_details/callout=2m,defer_ok 
  163.     !condition = ${if eq{$sender_verify_failure}{}} 
  164.  
  165.  
  166. accept domains  = +local_domains 
  167.     endpass 
  168.     message  = $acl_verify_message 
  169.     verify   = recipient 
  170.  
  171. accept domains = +relay_to_domains 
  172.     endpass 
  173.     message = "Unrouteable address!" 
  174.     verify  = recipient/callout=30s,defer_ok,use_postmaster 
  175.  
  176.  
  177. accept hosts     = +relay_from_hosts 
  178. accept authenticated = * 
  179. deny  message    = relay not permitted 
  180. accept 
  181.  
  182. acl_check_data: 
  183.  
  184. deny   message = This message contains a virus ($malware_name). 
  185.      demime  = * 
  186.      malware = */defer_ok 
  187. accept 
  188.  
  189.  
  190. begin routers 
  191.  
  192. dnslookup: 
  193.  driver = dnslookup 
  194.  domains = ! +local_domains 
  195.  transport = remote_smtp 
  196.  ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8 
  197.  no_more 
  198.  
  199. system_aliases: 
  200.  driver = redirect 
  201.  allow_fail 
  202.  allow_defer 
  203.  data = ${lookup mysql{SELECT recipients FROM aliases \ 
  204.   WHERE (local_part='${local_part}' AND domain='${domain}') \ 
  205.   OR (local_part='*' AND domain='$domain')ORDER BY local_part='*' \ 
  206.   LIMIT 1}} 
  207.  
  208. userforward: 
  209.  driver = redirect 
  210.  check_local_user=false 
  211.  file = /srv/data/mail/var/spool/exim/$domain/$local_part/forward 
  212.  user = exim 
  213.  group = exim 
  214.  allow_filter 
  215.  no_verify 
  216.  no_expn 
  217.  check_ancestor 
  218.  file_transport = address_file 
  219.  pipe_transport = address_pipe 
  220.  reply_transport = address_reply 
  221.  condition = ${if exists{/srv/data/mail/var/spool/exim/$domain/$local_part/forward}{yes}{no}} 
  222.  
  223. virtual_user_quota_defer: 
  224.  driver     = redirect 
  225.  domains     = +local_domains 
  226.  condition    = ${if and{\ 
  227.           {exists{/srv/data/mail/var/spool/exim/$domain/$local_part}}\ 
  228.           {exists{/srv/data/mail/var/spool/exim/$domain/$local_part/maildirsize}}\ 
  229.           {>{GET_QUOTA}{0}}\ 
  230.           {>={MAILDIR_SIZE}{GET_QUOTA}}\ 
  231.           } } 
  232.  data      = :fail: Over quota! 
  233.  verify_sender = false 
  234.  allow_fail 
  235.  
  236.  
  237. virtual_localuser: 
  238.  driver = accept 
  239.  domains = ${lookup mysql{SELECT domain from domains \ 
  240.        WHERE domain='${domain}'}} 
  241.  local_parts = ${lookup mysql{SELECT login from users \ 
  242.        WHERE login='${local_part}' AND domain='${domain}'}} 
  243.  transport = local_delivery 
  244.  cannot_route_message = Unknown user 
  245.  
  246. begin transports 
  247.  
  248. remote_smtp: 
  249.  driver = smtp 
  250.  
  251.  
  252. local_delivery: 
  253.  driver = appendfile 
  254.  maildir_use_size_file 
  255.  check_string = "" 
  256.  create_directory 
  257.  delivery_date_add 
  258.  directory = ${lookup mysql{SELECT \ 
  259.        LOWER(CONCAT('/srv/data/mail/var/spool/exim/$domain/',login)) FROM users \ 
  260.         WHERE login='${local_part}' AND domain='${domain}';}} 
  261.  directory_mode = 770 
  262.  envelope_to_add 
  263.  group = mail 
  264.  maildir_format 
  265.  maildir_tag = ,S=$message_size 
  266.  message_prefix = "" 
  267.  message_suffix = "" 
  268.  mode = 0660 
  269.  quota = ${lookup mysql{SELECT quota FROM users \ 
  270.      WHERE login='${local_part}' AND domain='${domain}'}{${value}M}} 
  271.  quota_size_regex = S=(\d+)$ 
  272.  quota_warn_threshold = 80% 
  273.  return_path_add 
  274.  
  275. address_pipe: 
  276.   driver = pipe 
  277.   return_output 
  278.  
  279. address_file: 
  280.  driver = appendfile 
  281.  delivery_date_add 
  282.  envelope_to_add 
  283.  return_path_add 
  284.  
  285. address_reply: 
  286.  driver = autoreply 
  287.  
  288. null_transport: 
  289.   driver = appendfile 
  290.   file = /dev/null 
  291.  
  292.  
  293. begin retry 
  294. begin rewrite 
  295. begin authenticators 
  296.  
  297. fixed_login: 
  298. driver = plaintext 
  299. public_name = LOGIN 
  300. server_prompts = Username:: : Password:: 
  301. server_condition = "${if and { \ 
  302.            {!eq{$1}{}} \ 
  303.            {!eq{$2}{}} \ 
  304.            {crypteq{$2}{\\{crypt\\}${lookup mysql{SELECT \ 
  305.            password FROM users \ 
  306.            WHERE login='${local_part:$1}' \ 
  307.            AND domain='${domain:$1}' AND \ 
  308.            smtp_auth='1'}{$value}fail}}} \ 
  309.             } {yes}{no}}" 
  310. server_set_id = $1 
  311.  
  312. fixed_plain: 
  313. driver = plaintext 
  314. public_name = PLAIN 
  315. server_prompts = : 
  316. server_condition = "${if and { \ 
  317.            {!eq{$2}{}} \ 
  318.            {!eq{$3}{}} \ 
  319.            {crypteq{$3}{\\{crypt\\}${lookup mysql{SELECT \ 
  320.            password FROM users \ 
  321.            WHERE login='${local_part:$2}' \ 
  322.            AND domain='${domain:$2}' AND \ 
  323.            smtp_auth='1'}{$value}fail}}} \ 
  324.            } {yes}{no}}" 
  325. server_set_id = $2 


В файлик /etc/exim/host.conf пишем:
Код:
smtp_banner = "$primary_hostname ESMTP srv1.myhost.kg" # Внесем ясность
local_interfaces = 127.0.0.1 : 192.168.50.1 #192.168.50.3 соответственно для второй машины


Настраиваем MySQL и создаем базу:
Код:
mysqladmin password <пароль рута>
mysql -uroot -p<пароль рута>
mysql> CREATE DATABASE mail;
mysql> grant all on mail.* to 'exim'@'192.168.50.1' identified by 'exim_password';
mysql> grant all on mail.* to 'exim'@'192.168.50.3' identified by 'exim_password';
mysql> grant all on mail.* to 'exim'@'localhost' identified by 'exim_password';


Выкачиваем файл дампа
Код:
wget http://muff.kiev.ua/files/exim.sql

Открываем его и изменяем кодировку на utf8, ENGINE на InnoDB (так надежнее) и имя домена на свое.
Заливаем измененный дамп в муську:
Код:
 mysql -u exim -pexim_password mail < exim.sql


Структура БД у нас есть. Теперь пора "заполнить" ее необходимыми данными. По очереди внесу по одной записи в каждую из таблиц.
Код:
mysql> use exim;
Reading table information for completion of table and column names
 You can turn off this feature to get a quicker startup with -A

Database changed
  mysql> INSERT INTO `mail`.`aliases` (`local_part`, `domain`, `recipients`) VALUES ('root', 'myhost.kg', 'raven@myhost.kg');
Query OK, 1 row affected (0.00 sec)

 mysql> INSERT INTO `mail`.`blacklist` (`senders`, `when_added`) VALUES ('helenaVIP@mail.ru', CURDATE());
Query OK, 1 row affected (0.00 sec)

 mysql> INSERT INTO `mail`.`blacklist_host` (`senders`, `when_add`) VALUES ('12.134.36.100', CURDATE());
Query OK, 1 row affected (0.01 sec)

 mysql> INSERT INTO `mail`.`domains` (`domain`, `type`) VALUES ('myhost.kg', 'LOCAL');
Query OK, 1 row affected (0.00 sec)

 mysql> INSERT INTO `mail`.`users` (`login`, `name`, `password`, `uid`, `gid`, `domain`,  `quota`, `status`, `smtp_auth`) VALUES ('raven', 'Raven. System administrator', ENCRYPT('password-here'), '26', '6', 'myhost.kg', '150', '1', '1');
Query OK, 1 row affected (0.00 sec)

 mysql> INSERT INTO `mail`.`users` (`login`, `name`, `password`, `uid`, `gid`, `domain`,  `quota`, `status`, `smtp_auth`) VALUES ('test', 'Test User', ENCRYPT('password-here'), '27', '6', 'myhost.kg', '150', '1', '1');
Query OK, 1 row affected (0.00 sec)

 mysql> INSERT INTO `mail`.`whitelist` (`senders`) VALUES ('admin@sysadmins.el.kg');
Query OK, 1 row affected (0.00 sec)


Перенесем сертификат (он должен быть идентичным для обоих серверов):
Код:
scp /etc/pki/tls/private/exim.pem root@192.168.50.1:/etc/pki/tls/private/
root@192.168.50.1's password:
exim.pem                                                                                                                                                                           100% 1704     1.7KB/s   00:00


Стартуем демоны на обоих серверах. Если что-либо не так - смотрите логи в /var/log/exim
Код:
service clamd start
service exim start
chkconfig exim on
chkconfig clamd on


Проверим работу smtp на обоих серверах:
Код:
 telnet localhost 25
Trying 127.0.0.1...                   
Connected to localhost.               
Escape character is '^]'.             
220 mail.myhost.kg ESMTP srv1.myhost.kg       
ehlo mail.myhost.kg                 
250-mail.myhost.kg Hello mail.myhost.kg [127.0.0.1]
250-SIZE 209715200                                     
250-PIPELINING                                         
250-AUTH LOGIN PLAIN                                   
250-STARTTLS                                           
250 HELP                                               
mail from: root@myhost.kg                           
250 OK                                                 
rcpt to: test@myhost.kg                             
250 Accepted                                           
data                                                   
354 Enter message, ending with "." on a line by itself
raven send test message                               
.                                                     
250 OK id=1RL9wZ-0004CM-10                             
quit                                                   
221 mail.myhost.kg closing connection               
Connection closed by foreign host.


Все ОК - идем пить пиво :)


Я не злопамятный, я просто часто ковыряю логи
Изображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 01 ноя 2011, 18:09 
Бородатый сис
Аватар пользователя
Статус: Не в сети

GeoIP: Kyrgyzstan

Сообщений: 2898
Откуда: Из серверной
Зарегистрирован: 03 мар 2010, 15:12
Благодарил (а): 19 раз.
Поблагодарили: 121 раз.
ОС: RHEL 6.7

Часть 2 - Балансировщик


Много было вариаций на тему как же настроить балансировку запросов между 2 серваками... пока решил просто (на шлюзе):

Скачиваем и собираем программку Balance
Код:
fetch http://www.inlab.de/balance-3.54.tar.gz
tar -xvz balance-3.54.tar.gz
cd balance-3.54
make


И запускаем ее с параметрами:
Код:
./balance -b <белый_ип> smtp 192.168.50.3 192.168.50.1


Проверяем:
Код:
telnet mail.myhost.kg 25
Trying 127.0.0.1...                   
Connected to localhost.               
Escape character is '^]'.             
220 mail.myhost.kg ESMTP srv3.myhost.kg       
ehlo mail.myhost.kg                 
250-mail.myhost.kg Hello mail.myhost.kg [ип]
250-SIZE 209715200                                     
250-PIPELINING                                         
250-AUTH LOGIN PLAIN                                   
250-STARTTLS                                           
250 HELP                                               
mail from: root@myhost.kg                           
250 OK                                                 
rcpt to: test@myhost.kg                             
250 Accepted                                           
data                                                   
354 Enter message, ending with "." on a line by itself
raven send test message                               
.                                                     
250 OK id=1RL9wZ-0004CM-10                             
quit                                                   
221 mail.myhost.kg closing connection               
Connection closed by foreign host.


Копируем бинарник куда следует
Код:
cp balance /usr/local/bin


Поскольку вручную все это дело запускать каждый раз в лом пишем скрипт для автозапуска:
Синтаксис: [ Загрузить ] [ Скрыть ]
Используется подсветка синтаксиса bash
#!/bin/sh                                                                                                                            

# PROVIDE: balance
# REQUIRE: DAEMON
# KEYWORD: shutdown

#######
#
# Add the following lines to /etc/rc.conf to enable balance:
#
# balance_enable (bool):        default: "NO"
#                               Set to "YES" to enable balance
# balance_ip (str):        default: 127.0.0.1
#                               Set IP address to bind
# balance_ip (str):         default: smtp
#                               Set port to bind balance
# balance_back (str):         default: 192.168.50.1 192.168.50.3
#                               Set balance backends
# balance_flags (str):          default: Autogenerated using pidfile and config options
#                               Set to override with your own options
#

. /etc/rc.subr

name="balance"
rcvar=`set_rcvar`
command="/usr/local/bin/balance"

# Load Configs/Set Defaults
load_rc_config $name
: ${balance_enable:="NO"}
: ${balance_ip="192.168.50.33"}
: ${balance_port="pop3"}
: ${balance_back="192.168.50.1 192.168.50.3"}
: ${balance_flags="-b ${balance_ip} ${balance_port} ${balance_nodes}"}


run_rc_command "
$1"
Обработано за 0.013 секунд, используется GeSHi 1.0.8.4


Закидываем его в /usr/local/etc/rc.d и прописываем в /etc/rc.conf
Код:
balance_enable="YES"
balance_ip="<белый ип>"
balance_port="smtp"
balance_nodes="192.168.50.1 192.168.50.3"


Все ОК - снова пьем пиво *NYAM*


Я не злопамятный, я просто часто ковыряю логи
Изображение


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
   Похожие темы   Автор   Ответов   Просмотров   Последнее сообщение 
Перенесенная ^_^

в форуме Linux

root

3

38

02 мар 2010, 16:15

Gen1us2k Перейти к последнему сообщению

Перенесенная Документация по Gentoo

в форуме Linux

Gen1us2k

0

4

05 мар 2010, 18:54

Gen1us2k Перейти к последнему сообщению



Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Собрано Raven. Русская поддержка phpBB
phpBB SEO