The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Покритикуйте сервер!"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Открытые системы на сервере (Разное / FreeBSD)
Изначальное сообщение [ Отслеживать ]

"Покритикуйте сервер!"  +/
Сообщение от ikarus (ok) on 15-Ноя-10, 08:49 
Первый раз в первый класс. Вообщем мой первый bsd-сервер. Уверен что многое не оптимально или вообще не правильно, прошу совета.
Задачи следующие:
1.Организация доступа в интернет для порядка 50 юзеров.
2.Организация эл.почтового обмена для них же, естественно и с внешним миром тоже.
3.Подключение двух провайдеров с равной балансировкой и резервированием.
4.Ну и соответственно обеспечение безопасности всего этого и того что за ним в сети.

Что имеем:
Celeron 1100MHz, sdram dimm (avail memory = 511270912 (487 MB)),
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/ad0s1a    520M    325M    153M    68%    /
devfs          1.0k    1.0k      0B   100%    /dev
/dev/ad0s1e    520M     27k    478M     0%    /tmp
/dev/ad0s1f     77G    2.6G     68G     4%    /usr
/dev/ad0s1d    1.2G    390M    727M    35%    /var
райдов нету

Что делаю:
freebsd7.3+pf+(squid+c_icap+squidguard)+(exim4+courier_imap+spamassassin+xams+mysql)+clamav ну и плюс конечно apache22, dnsmasq и ftpd.

машина тестовая !!!

pf.conf (делал по принципу "всех выпускать, никого кроме почты не впускать" :) пока так надо)
-------------------------------------------------------
ext_if1="rl0" #внешний интерфейс 1го прова
ext_if2="rl2"   #внешний интерфейс 2го прова
ext_gw1="192.168.1.8"   #шлюз 1го прова
ext_gw2="192.168.1.8"   #шлюз 2го прова
int_if="rl1"  #локальный интерфейс
localnet="172.16.1.0/24"   #локальная сеть

den_host="172.16.1.2" #моё

#пропустить проверку на петле
set skip on lo0

#включить логи на интерфейсах
set loginterface rl0
set loginterface rl1
set loginterface rl2

#нормализация трафа
scrub in all
scrub out all

#ограничение полосы #пока не работает
#altq on $int_if cbq bandwidth 8.0Mb queue { std std2 }

#очередь #пока не работает !!!!
#queue std bandwidth 50% cbq{ecn}
#queue std2 bandwidth 50% cbq{ecn}

#используем ftp-proxy для доступа к фтп серверам в инете
nat-anchor "ftp-proxy/*"

#используем ftp-proxy для доступа к фтп серверам в инете
rdr-anchor "ftp-proxy/*"

#редирект для сквида
rdr on $int_if proto tcp from $localnet to any port 80 -> $int_if port 3128

#натим внешние интерфейсы
nat on $ext_if1 from $int_if:network to any -> ($ext_if1)
nat on $ext_if2 from $int_if:network to any -> ($ext_if2)

#редирект на ftp-proxy
rdr pass on $int_if proto tcp from $den_host to any port {ftp,ftp-data} -> 127.0.0.1 port 8021

block all #блок всего по-умолчанию

antispoof quick for { lo0 $int_if }

#используем frp-proxy для доступа к фтп серверам в инет
anchor "ftp-proxy/*"

#пропускаем все исходящие пакеты на внутреннем инт.
pass out log on $int_if from any to $localnet

#разрешаем доступ к ssh для меня
pass in quick log on $int_if proto tcp from $den_host to $int_if port ssh

#запрещаем доступ к ssh для остальных
block in quick log on $int_if proto tcp from $localnet to $int_if port ssh

#доступ к почтальону из инета
pass in quick log on $ext_if1 proto tcp from any to $ext_if1 port smtp

#пропускаем все!!! пакеты для шлюза из локали
pass in quick log on $int_if from $localnet to $int_if

#балансировка каналов
pass in route-to { ($ext_if1 $ext_gw1), ($ext_if2 $ext_gw2) } round-robin from $localnet to any

#основные выпускающие правила
pass out log on $ext_if1 proto tcp from any to any flags S/SA modulate state
pass out log on $ext_if1 proto {udp, icmp} from any to any
pass out log on $ext_if2 proto tcp from any to any flags S/SA modulate state
pass out log on $ext_if2 proto {udp, icmp} from any to any

#маршрутизация пакетов "откуда пришел туда и выходи" ...нужно? нет?
pass out on $ext_if1 route-to ($ext_if2 $ext_gw2) from $ext_if2 to any
pass out on $ext_if2 route-to ($ext_if1 $ext_gw1) from $ext_if1 to any
--------------------------------------------------------

далее для контроля над веб-трафиком делаем squid, так как провов двое, то делаю три копии squida, один основной и два парента:

squid.conf (основной)
-------------------------------------------------------
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
acl localnet src 172.16.1.0/24  # RFC1918 possible internal network
acl den src 172.16.1.2

http_access allow manager localhost
http_access allow localnet
http_access allow localhost
http_access deny all

http_port 3128 intercept

hierarchy_stoplist cgi-bin ?

coredump_dir /usr/local/squid/cache

refresh_pattern ^ftp:         &n... 1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern .               0       20%     4320

delay_pools 2
delay_class 1 1
#2mbit
delay_class 1 1
delay_parameters 1 250000/250000
delay_access 1 allow den
delay_access 1 deny all
#на всех остальных
delay_class 2 1
delay_parameters 2 750000/750000
delay_access 2 allow localnet
delay_access 2 allow localhost
delay_access 2 deny all

cache_mem 128 MB
maximum_object_size 10024 KB
cache_dir ufs /usr/local/squid/cache 2048 16 256
cache_store_log /usr/local/squid/logs/store.log
cache_access_log /usr/local/squid/logs/access.log
cache_log /usr/local/squid/logs/cache.log
pid_filename /usr/local/squid/squid.pid
logformat squid %tl.%03tu %6tr %>a %Ss/%03>Hs %<st %rm %ru %un %Sh/%<A %mt
logfile_rotate 10
visible_hostname pavlik.sp

#паренты
cache_peer localhost     parent 3127 3129 round-robin no-query
cache_peer 127.0.0.1    parent 3130 3131 round-robin no-query
never_direct allow all

#icap ...не хочет работать зараза
#icap_enable on
#icap_preview_enable on
#icap_preview_size 128
#icap_persistent_connections on
#icap_send_client_ip on
#icap_service service_av_req reqmod_precache 0 icap://localhost:1344/srv_clamav
#icap_service service_av_res respmod_precache 1 icap://localhost:1344/srv_clamav
#adaptation_service_set class_av_req service_av_req
#adaptation_service_set class_av_res service_av_res
#adaptation_access class_av_req allow localhost
#adaptation_access class_av_res allow localhost

#squidguard
url_rewrite_program /usr/local/bin/squidGuard -c /usr/local/etc/squid/squidGuard.conf
url_rewrite_children 5

cache_effective_user squid
cache_effective_group squid
shutdown_lifetime 5 seconds
--------------------------------------

парент 1:

squidt.conf
-----------------------------------------

acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
acl localnet src 172.16.1.0/24  # RFC1918 possible internal network

http_access allow manager localhost
http_access allow localnet
http_access allow localhost
http_access deny all

http_port 127.0.0.1:3127
icp_port 3129

hierarchy_stoplist cgi-bin ?

cache_dir ufs /usr/local/squidt/cache 1024 16 256
cache_access_log /usr/local/squidt/logs/access.log
cache_log /usr/local/squidt/logs/cache.log

coredump_dir /usr/local/squidt/cache

pid_filename /usr/local/squidt/squidt.pid

tcp_outgoing_address 192.168.1.205

refresh_pattern ^ftp:         &n... 1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern .               0       20%     4320

cache_mem 64 MB
maximum_object_size 5012 KB

logformat squid %tl.03tu %6tr %>a %Ss/%03>Hs %<st %rm %ru %un %Sh/%<A %mt
logfile_rotate 10

shutdown_lifetime 5 seconds
visible_hostname pavlik.sp
--------------------------------------------

аналогично парент 2:

squidh.conf
---------------------------------------------
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
acl localnet src 172.16.1.0/24  # RFC1918 possible internal network

http_access allow manager localhost
http_access allow localnet
http_access allow localhost
http_access deny all

http_port 127.0.0.1:3130
icp_port 3131

hierarchy_stoplist cgi-bin ?

cache_dir ufs /usr/local/squidh/cache 1024 16 256
cache_access_log /usr/local/squidh/logs/access.log
cache_log /usr/local/squidh/logs/cache.log
cache_store_log /usr/local/squidh/logs/store.log

coredump_dir /usr/local/squidh/cache

pid_filename /usr/local/squidh/squidh.pid

tcp_outgoing_address 192.168.1.200

refresh_pattern ^ftp:         &n... 1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern .               0       20%     4320

cache_mem  64 MB
maximum_object_size 50012 KB
logformat squid %tl.03tu %6tr %>a %Ss/%03>Hs %<st %rm %ru %un %Sh/%<A %mt
logfile_rotate 10
shutdown_lifetime 5 seconds
visible_hostname pavlik.sp
------------------------------------------------

По этой связке (pf+squid`ы) веб-трафик (пока только 80й порт) заворачивается на squid и весь остальной трафик просто пропускается наружу, и все это (глядя tcpdump`ом) примерно поровну делется по двум внешним каналам ну и там еще контент фильтруется сквидгвардом и по идее еще на вирусятину должно проверятся, но пока не работает (поэтому закоментарил сicap), но и бог с ним об этом отдельно потом как нибудь. Остается только вопрос по резервированию каналов, т.е. при данном конфиге, если один из каналов падает, то падает всё, яндексогугливание ничего путного не подсказало, кроме как сделать скрипт который тупо по результатам пинга переконфигурит pf и сквида, вот что получилось:

мой первый сомастоятельный скрипт, сильно не пинайте :)
-----------
#!/bin/sh
#
# Проверка каналов на доступность
#
test_host=www.ru
tc_iface=192.168.1.205
hn_iface=192.168.1.200
#Пингуем каналы
/sbin/ping -c 1 -S $tc_iface $test_host > /dev/null 2>&1
tc=$?
/sbin/ping -c 1 -S $hn_iface $test_host > /dev/null 2>&1
hn=$?
#
#Если какой то из каналов не доступен, то отключаем его использование путем подмены #конфигов сквида и PF  и делаем метку об отключении канала, если доступны оба - грузим #основные конфиги сквида PF и делаем об этом метку и логируем кое что, заодно проверяем #запущены ли сквиды.
#
if [ ! -f /usr/local/squid/squid.pid ]; then
service squid start \
&& echo `date -v-1d` " Squid is down! Starting Squid..." >> /usr/local/squid/logs/chanels.state
else
if [ $tc != 0 ]; then
    if [ ! -f /tmp/teleconnect_down.squid ]; then
        pfctl -f /etc/pf_hn.conf \
        && service squid stop \
        && squid -f /usr/local/etc/squid/squid_tc_down.conf \
        && rm /tmp/*.squid \
        && touch /tmp/teleconnect_down.squid \
        && echo `date -v-1d` " Teleconnect is down" >> /usr/local/squid/logs/chanels.state
    fi
    else
    if [ $hn != 0 ]; then
        if [ ! -f /tmp/homenet_down.squid ]; then
                pfctl -f /etc/pf_tc.conf \
                && service squid stop \
                && squid -f /usr/local/etc/squid/squid_hn_down.conf \
                && rm /tmp/*.squid \
                && touch /tmp/homenet_down.squid \
                && echo `date -v-1d` " HomeNet is down" >> /usr/local/squid/logs/chanels.state
        fi
        else
            if [ $hn = 0 ]; then
                if [ $tc = 0 ]; then
                    if [ ! -f /tmp/all_chanels_active.squid ]; then
                    pfctl -f /etc/pf.conf \
                    && service squid stop \
                    && service squid start \
                    && rm /tmp/*.squid \
                    && touch /tmp/all_chanels_active.squid \
                    && echo `date -v-1d` " Now all chanels are avalable" >> /usr/local/squid/logs/chanels.state
                    fi
                fi
            fi
    fi
fi
fi
-----------------------------------------
сначала я написал этот скрипт только для сквида, т.е. не трогая pf, отрабатывало все корректно, потом когда добавил еще и подмену конфигов pf то начались какие то проблемы с резолвом, но я склонен полагать что это из за того что машина пока тестовая и как уже можно было заметить то два интерфейса (которые роль внешних играют) находятся в одной подсети и с одним шлюзом, что не совсем корректно, вообщем оставил пока этот вопрос до момента ввода сервера в реальную работу.

Далее про почту, тут все делал по статье - http://www.opennet.me/base/net/exim_xams_setup.txt.html и все работает вроде адекватно, правда долго маялся с the bat, который очень любит cram-md5, аутентификатор для него в конфиг я добавил, exim успешно об этом объвлял, но бат категорически отказывался проходит авторизацию, короче проблема оказалась в том что xams согласно своим макросам пароли созданных юзеров в мускуль вносил в шифрованном виде, вообщем оно конечно хорошо, но cram-md5 пароли нужны были в открытом виде, в макросах xams я отключил шифрование и пароли стали кластся в открытом виде, однако я думаю лучше совсем отказаться от md5 например в пользу ssl/tls чем держать базу с открытыми паролями.

Вообщем в оставшихся проблемах у нас:
-Не работает проверка веб-контента через c_icap и кстати пробовал еще и squidclamav, та же песня
-не работает altq в pf, тут я хотел по-ровну поделить канал на всех, но честно признаться глубоко с этим не разбирался :)

Приведенные мной конфиги ну почти в полной мере решают поставленные задачи :) Но хотелось бы услышать советы бывалых админов по поводу конфигов, в частности стабильности и отказоустойчивости ну и конечно же безопасности всей этой моей котовасии :) при указанных нагрузках, т.е. имеем примерно 50 пользователей почти у каждого есть skype и многие пользуют торренты ну и почта конечно же, примерный объем трафика порядка 50ГБ в месяц.

Заранне спасибо за работу.

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Покритикуйте сервер!"  +/
Сообщение от Pahanivo (ok) on 15-Ноя-10, 08:59 
думаешь это хоть кому-то интересно?
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Покритикуйте сервер!"  +/
Сообщение от ikarus (ok) on 15-Ноя-10, 09:32 
> думаешь это хоть кому-то интересно?

помочь близкому? думал что да...

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Покритикуйте сервер!"  +/
Сообщение от Pahanivo (ok) on 15-Ноя-10, 10:05 
> помочь близкому? думал что да...

есть проблемы - выкладывай отдельно
а то букав вного, а толку практически нет

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Покритикуйте сервер!"  +/
Сообщение от ikarus (ok) on 15-Ноя-10, 10:13 
>> помочь близкому? думал что да...
> есть проблемы - выкладывай отдельно
> а то букав вного, а толку практически нет

Дело в том что я пытаюсь проблемы предотвратить, разве в этом нет толку? Тут всего лишь три конфига, один скрипт и один "чайник" :) Возможно кто нибудь увидит в них явные ошибки, и ткнет носом.

з.ы. про днк не надо :)

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "Покритикуйте сервер!"  +/
Сообщение от h on 15-Ноя-10, 10:38 
> носом.

я б /var увеличил ...


Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "Покритикуйте сервер!"  +/
Сообщение от ikarus (ok) on 15-Ноя-10, 10:51 
>> носом.
> я б /var увеличил ...

а чем лучше изменять размер раздела? без потери инфы и вообще без краха или проще линки на др. разделы сделать?

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

11. "Покритикуйте сервер!"  +/
Сообщение от Аноним (??) on 16-Ноя-10, 05:08 
>>> носом.
>> я б /var увеличил ...
> а чем лучше изменять размер раздела? без потери инфы и вообще без
> краха или проще линки на др. разделы сделать?

лучше и надежнее переразбиванием по новому.
и не вижу описание swap-а.

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

10. "Покритикуйте сервер!"  +/
Сообщение от Аноним (??) on 16-Ноя-10, 05:06 
>> носом.
> я б /var увеличил ...

И не только вар, корень хотя бы до 3Г, /tmp до 1Г
Монтировать разделы лучше через glaabel, а не напрямую.

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

7. "Покритикуйте сервер!"  +/
Сообщение от tonys (ok) on 15-Ноя-10, 12:51 
>>> помочь близкому? думал что да...
>> есть проблемы - выкладывай отдельно
>> а то букав вного, а толку практически нет
> Дело в том что я пытаюсь проблемы предотвратить, разве в этом нет
> толку? Тут всего лишь три конфига, один скрипт и один "чайник"
> :) Возможно кто нибудь увидит в них явные ошибки, и ткнет
> носом.
> з.ы. про днк не надо :)

Извини, но если бы ты пытался предотвратить проблемы, то ДО начала всего обрисовал бы задачи, нагрузку и попросил бы совета как и на чем это лучше сделать. А сейчас ты уже не совет просишь, а решение как из наср-го тобой сотворить конфетку. Уж извини за прямоту.

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

9. "Покритикуйте сервер!"  +1 +/
Сообщение от ikarus (ok) on 15-Ноя-10, 14:12 
>[оверквотинг удален]
>> Дело в том что я пытаюсь проблемы предотвратить, разве в этом нет
>> толку? Тут всего лишь три конфига, один скрипт и один "чайник"
>> :) Возможно кто нибудь увидит в них явные ошибки, и ткнет
>> носом.
>> з.ы. про днк не надо :)
> Извини, но если бы ты пытался предотвратить проблемы, то ДО начала всего
> обрисовал бы задачи, нагрузку и попросил бы совета как и на
> чем это лучше сделать. А сейчас ты уже не совет просишь,
> а решение как из наср-го тобой сотворить конфетку. Уж извини за
> прямоту.

Я вроде обрисовал задачи, и нагрузку...
Хочешь сказать что если бы я пришел сюда и сказал что мне нужен супер-сервер, вы бы все так и кинулись с добрыми советами, да вы бы меня тут как бы только не обозвали. И как ты изволил выразится "наср-ое" мной не с потолка взято и не плод больного воображения, а из манов и статей, и не за два дня я все это своял, а каждую отдельную задачу старался обмусолить так что бы мне снилось потом. Я мляха-муха днем и ночью над этим трясся как над дитём, на форумы только в крайнем случае выходил, когда уже руки опускались (можешь посмотреть мои соседние темы, в которых кстати я в итоге сам до решения доходил). А когда в итоге я сделал что то работоспособное, какое то решение, и лишь попросил совета (может просто кто то сразу заметит какую то классическую ошибку или дырку в безопасности или просто глупость) что в итоге получил ??? Кем ты меня вообще тут пытаешься выставить?

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

12. "Покритикуйте сервер!"  +/
Сообщение от Аноним (??) on 16-Ноя-10, 05:10 
Выдохни, никто тебя оскарблять не собирался, но и разбираться в куче писанины - мало кому интересно.
Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

8. "Покритикуйте сервер!"  –1 +/
Сообщение от исчо_адын_аноним on 15-Ноя-10, 13:30 
>й bsd-сервер.

Закапывайте

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру