From: Andrey
Newsgroups: email
Date: Mon, 18 Oct 2005 14:31:37 +0000 (UTC)
Subject: NAT, DNS, SAMBA сервер на FreeBSD для малого офиса 10 - 50 машин
На сегодняшний момент есть огромное количество различных статей по
FreeBSD и по установки полноценного сервера для малого офиса 10-50
рабочих станций, но как правило все они не так уж актуальны т.к.
большинство их написано в 00-03 годах. Имеются определенные претензии
и к авторам, к примеру 90% всех статей по установки mysql полностью
дублируют друг друга и в этом случае абсолютно непонятно, если не
ставиться mysql (просит сокеты) после установки и начинающий
специалист не зная как решить эту проблему обращается к другому
руководству и там возникает та же проблема.
По этой и еще по многим причинам я решил написать серию статей (если
они конечно будут востребованы) по установки полноценного сервера на
FreeBSD 5.4 для малого офиса. Все сервисы которые мы с вами будим
поднимать на одной машине, для примера возьмем P4 -3.0Ghz; 1Gb памяти
и 80Gb HDD. Эту конфигурацию вполне потянет любая компания (ведь это
будет их единственный сервак)
Хочу добавить, что все примеры которые я буду описывать являются
полностью рабочими. Если у вас что-то не получилось, это означает
только то, что вы сами сделали, что-то не так.
Любая критика в мой адрес со стороны уважаемых читателей будет вполне
уместна, т.к. я сам являюсь начинающим специалистам по FreeBSD.
Для нашей (вашей) компании нужны следующие сервисы:
1. NAT
2. DNS
3. Samba (в нашем случае она будет использоваться для базы 1C.
Выглядит экзотично, но крайне действенно)
От вас требуется: иметь FreeBSD 5.. и знать редактор vi или ee
(я лично использую vi он более практичен). У нашего сервака есть 2
сетевые карты , одна смотрит в Интернет (она интеловская) fxp0 c
адресом 81.222.156.16 и другая дешевая (реалтековская) rl0 с адресом
10.10.1.1 она смотрит в локал.
ПОЕХАЛИ:
Ставим NAT (быстро и просто)
Для начала нам нужно добавить в ядро несколько опций
cd /sys/i386/conf -заходим в каталог где лежит конфиг ядра
cp GENERIC CUSTOM - делаем копию нашего нового ядра называя ее CUSTOM
(не в коем образе не нужно пытаться изменять или добавлять новые
параметры в файл GENERIC т.к. это не приведет не к чему хорошему).
Заменяем строку ident GENERIC на ident CUSTOM (не нужно пытаться
что-то удалять из конфига ядра если вы не знаете что именно вы хотите
удалить)
Опускаемся в самый конец большого конфига и добавляем в него строки:
- options IPFIREWALL (включаем поддержку самого firewall'a)
- options IPFIREWALL_VERBOSE (это нужно, что бы наш firewall смог записывать логи)
- options IPFIREWALL_VERBOSE_LIMIT=10 (данная опция ограничивает
попадающие в firewall логи, это крайне полезная опция, она не даст
сгенерироваться большому числу пакетов которое может привести к
переполнению жесткого диска, и вам самим можно будет более точно
оценивать, что происходит, не копаясь в больших логах)
- options IPDIVERT (обязательна для работы NAT)
- options TCP_DROP_SYNFIN (эта опция нам не нужна, но ее включение будет
гарантировать полное отбрасывание таких не хороших TCP пакетов с
одновременно установленными флагами начала и завершения соединения, из
собственной практики я зная, что такие пакеты очень часто любят
использовать хакеры)
- options ICMP_BANDLIM (сильно снижает число генерируемых машиной
сообщений об ошибках TCP/IP, крайне полезная опция в отбивания DOS атак)
После конфигурирования конфига нашего нового ядра сохраняем все
изменения и идем дальше:
cd /usr/src/
make buildkernel KERNCONF=CUSTOM
(если в момент компиляции ядра у вас возникнут ошибки, то в этом
случае вернитесь к файлу CUSTOM и посмотрите правильно ли вы все
написали)
make installkernel KERNCONF=CUSTOM (устанавливаем наше новое ядро)
В принципе обе команды можно объединить в одну
make kernel KERNCONF=CUSTOM
После сборки и установки нового ядра мы рибутимся
shutdown -r now
Теперь когда наше новое ядро собрано и установлено с поддержкой ipfw
(ipfirewall)
можно начинать ставить полноценный NAT.
vi /etc/rc.conf (открываем главный сетевой конфигурационный файл)
ищем в нем строки и задаем соответствующие параметры:
defaultrouter="81.222.156.1" (сюда вписываем адрес шлюза который дал вам ваш оператор)
ifconfig_fxp0="inet 81.222.156.16 netmask 255.255.255.0"
(тут мы пишем ip адрес который дал вам ваш оператор и маску подсети)
ifconfig_rl0="inet 10.10.1.1 netmask 255.255.255.0"
(тут мы пишем адрес нашего будущего шлюза нашей локальной сети и соответственно маску)
ifconfig_fxp0_alias0="inet 192.168.6.165 netmask 255.255.240.0"
(!!! Эту строчку вы можете написать если !!!вам нужно зализать к примеру на
страничку вашей личной статистики она с адресом 192.168.0.1 для этого
вам необходимо получить внутренний адрес и соответственно номер маски,
мы назначаем нашей интеловской сетевухи 2 ip адреса !!!но замечу то,
что NAT работать будет только по одному из этих адресов, мы дальше
разберем этот пример)
gateway_enable="YES" (говорим, что наш сервак будет шлюзом в Интернет)
natd_enable="YES" (включаем NAT)
natd_flags="-a 81.222.156.16" (говорим демону natd, что все пакеты
заворачиваются на адрес который нам выдал наш провайдер)
firewall_enable="YES" (включаем firewall)
firewall_type="/etc/firewall.conf" (говорим firewall'у где будет
лежать конфиг с правилами фильтрации)
Сохраняем все настройки и выходим из rc.conf
Запускаем скрипт который перезагрузит все наши сетевые настройки
(добавлю, что этого не следует делать с удаленной машины к примеру по
ssh или по telnet)
/etc/netstart
На этом все приготовления для запуска нашего NAT сервера почти
закончены, нам осталось только сконфигурировать правила firewall и
можно запускать.
cd /etc
vi firewall.conf (создаем файл firewall.conf и заходим в него)
Пишем там следующее:
add 100 divert natd all from 10.10.1.0/24 to any out recv rl0 xmit fxp0
(данная опция будет маскировать все пакеты из внутренний сети
10.10.1.0/24 на внешний адрес 81.222.156.16)
add 200 divert natd all from not 10.10.1.0/24 to 81.222.156.16 recv fxp0
(это правило будет делать в точности на оборот, что делает первое).
И наконец пишем стандартное:
add 65000 allow all from any to any
Перезагружаемся и пингуем с нашей машины www.ru и с клиентской
www.ru пинг есть ! Значит все работает корректно !
Так же мы можем писать для каждого ip конкретное правило если надо
будет кого-то отрубить:
add 100 divert natd all from 10.10.1.6 to any out recv rl0 xmit fxp0
add 200 divert natd all from not 10.10.1.6 to 81.222.156.16 recv fxp0
и теперь нам только остается закомментировать строку # c которой
начинается правило для конкретного ip.
DNS
Установка dns сервера не сложнее установки ната. Наш DNS сервер
поднимается с целью только для возможно дальнейшего использования его
для нашей будущей почты, ну и использовать свой DNS просто достаточно
хорошее дело (в том числе и для простой экономии трафика), критики на
счет подобного шага могут много чего сказать, но надо понимать, что
минусов от работы обычного форвардящего сервера ноль, т.к. нагрузка на
него минимальная и никак не влияет на работу системы в целом, мы будим
поднимать bind9 который очень хорошо защищен от хакеров, чем его
предшественники !
В этой статье мы рассмотрим только пример поднятия форвордящего DNSа
он не будет обслуживать не одну зону и не будет являться приоритетным.
(Вопрос поднятия dns сервера масштаба предприятия (хостинг - компании)
мы рассмотрим в следующей статье. Т.к. это дело очень серьезное и
требует серьезной подготовки и работы.
(Как смог описал настройку механизма TSIG в DNS (критикуйте!))
Вот тут http://www.opennet.ru/base/net/dns_tsig.txt.html
Пакет bind ставиться по умолчанию в каждой версии FreeBSD.
Для начала нам надо, перейти в каталог:
cd /etc/namedb/
откроем главный конфигурационный файл нашего bind'a
vi /named.conf
(не нужно в нем нечего удалять, если вы хотите
запретить какую-то опцию, то лучше всего просто поставить на начало
строки комментарий вида // этого более чем достаточно, все строки
начинающиеся с # это комментарии их для удобства работы с конфигом
можно удалить, главное пользуясь редактором vi не поудаляйте лишнего.
Теперь приведу пример самого простого файла named.conf (он нам для
наших целей более чем подходит)
zone "example.com" {
type slave;
file "slave/example.com";
};
zone "1.168.192.in-addr.arpa" {
type slave;
file "slave/1.168.192.in-addr.arpa";
masters {
127.0.0.1;
};
};
Давайте в темпе блиц пробежимся по этому конфигу и посмотрим по
порядку, что это все значит:
acl "corpnets" { 10.10.1.0/24; 127.0.0.1; }; -эта опция задается для
того чтобы наш nds сервер знал с каких адресов разрешено посылать на
него запросы, вписываем туда нашу подсеть и локальный адрес dns
сервера.
Эта секция под названием options говорит серверу в каких директориях
расположены файлы bind'a и позволяет настроить в какой то мере
глобальные параметры работы DNS.
Предписание listen-on предназначено на прослушивание определенных
сетевых интерфейсов, в принципе это предписание может выполнять туже
функцию, что и acl "corpnets", но в тоже время она более серьезна и
лучше настраивается, к примеру можно для определенного адреса назначить
определенный порт прослушивания вот пример: listen-on port 5353 {
10.10.1.0/24; }; или для каждого сетевого сетевого интерфейса отдельно
можно назначить отдельно порт, вот пример:
listen-on {10.10.1.2 port 5353; 10.10.1.3 port 1053; };
listen-on-v6 предназначена соответственно для IPv6.
forwarders {
81.222.32.252; 192.168.4.250;
};
Эта опция для нас самая главная в нашем сервере DNS она говорит на
какие именно сервера будет форвардить наш DNS сервер, тут мы указываем
DNS сервера нашего провайдера.
query-source address * port 53; -это предписание говорит нашему
серверу, что он должен работать на 53 порту. Данное предписание
отключено по умолчанию, его включение полезно при работе firewall'a
zone "." {
type hint;
file "named.root";
Оператор zone "." говорит, что наш DNS сервер должен читать адреса
корневых указателей из файла named.root. (Ранее в 4-м bind'e нужно
было ставить указатель in в этом операторе, но теперь оно
проставляется на программном уровне)
Это не шифрованная зона как можно себе представить, а зона для
удаленного администрирования с помощью rndc (я подробно опишу работу с
этой утилитой в следующей статье, замечу, что в стародавние времена
использовался ndc и только сигналы, это были версии более ранние чем
8.2).
zone "example.com" {
type slave;
file "slave/example.com";
};
Стандартное обозначение зоны. Эта строка ставиться по умолчанию, при
инсталляции binda.
zone "1.168.192.in-addr.arpa" {
type slave;
file "slave/1.168.192.in-addr.arpa";
};
И
zone "0.0.127.IN-ADDR.ARPA" {
type master;
file "localhost.rev";
};
А эти зона используется для Loopback -они используется хостом для
перенаправления пакетов самому себе, в нашем случае используется адрес
для loopback-сети 1.168.192 это адрес без последнего октета, это
специально сделано для обратных поисков. Поскольку никто не отвечает
за эту сеть, каждый отвечает за нее самостоятельно. Можно обойтись и
без этой зоны, и DNS сервер будет работать, однако поиск по адресу
127.0.0.1 не даст результатов, по скольку корневой DNS сервер не был
настроен таким образом, чтобы отображать адрес 127.0.0.1 в конкретное
имя. Чтобы избежать сюрпризов, это отображение мы должны обеспечить.
Идем дальше, и создадим несколько файликов для нашего bind'a
cd /usr/namedb
vi db.example.net
Напишем в нем следующее, и разберем, что чего значит:
$TTL 86400
example.net. IN SOA ns.example.net. root.example.net. (
2001220201 ; Порядковый номер
3h ; Обновление через 3 часа
1h ; Повторение попытки через 1 час
1w ; Устаревание через 1 неделю
1h ) ;Отрицательное TTL в 1 час
IN NS ns.example.net.
IN MX root.example.net.
ns IN A 10.10.1.1
sun IN A 10.10.1.1
moon IN A 10.10.1.1
maan IN CNAME moon
TTL -позволяет задавать время жизни для всех записей в файле. DNS
сервер передает указанное значение TTL вместе с ответами на запросы,
что позволяет другим серверам DNS кэшировать полученную информацию на
указанный интервал времени.
SOA запись показывает, что наш DNS сервер является самым надежным
источником информации в пределах этой зоны. Наш DNS сервер является
авторитативным для зоны example.net по причине наличия SOA записи.
Перед SOA есть буквы IN обозначают Internet. Это один из классов
данных, существуют и другие но они менее распространены.
NS Мы добавляем по одной NS записи на каждый DNS сервер, который
является авторитативным для нашей зоны.
MX это строго почтовая запись.
Один файлик мы создали, выходим и сохраняем его, теперь создадим
второй:
в той же директории
vi localhost.rev
$TTL 3600
@ IN SOA gv5.evrazia.com. root.gv5.evrazia.com. (
20040603 ; Serial
1h ; Refresh
1h ; Retry
1w ; Expire
1h ) ; Minimum
IN NS gv5.evrazia.com.
1 IN PTR localhost.evrazia.com.
Вот так он может выглядеть.
Тут появилась такая запись как PTR -она используется для отображение
адресов в имена узлов для сети. Для этого отображения используется RR
записи которые носят название PTR.
Сохраняемся и выходим.
Теперь осталось создать example.com в каталоге slave
cd /etc/namedb/slave/
vi example.com
$TTL 86400
@ IN SOA ns.example.com. admin.example.com. (
2001220200
2h
1h
1w
1h)
IN NS ns.example.com.
100 IN PTR admin1.example.com.
101 IN PTR admin2.example.com.
Сохраняемся и выходим.
Все, что нам осталось теперь сделать, это проверить наш DNS и изменить
resolv.conf
Делаем:
Пишем в командной строке:
dig @127.0.0.1 www.ru
в ответ мы должны получить буквально следующее:
; <<>> DiG 9.3.1 <<>> @127.0.0.1 www.ru
; (1 server found)
; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18557
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
;; QUESTION SECTION:
;www.ru. IN A
;; ANSWER SECTION:
www.ru. 85464 IN A 194.87.0.50
;; AUTHORITY SECTION:
www.ru. 85464 IN NS ns.demos.su.
www.ru. 85464 IN NS ns1.demos.net.
;; ADDITIONAL SECTION:
ns.demos.su. 19313 IN A 194.87.0.9
ns.demos.su. 19313 IN A 194.87.0.8
ns1.demos.net. 20039 IN A 194.58.241.26
;; Query time: 4 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Mon Oct 17 21:11:04 2005
;; MSG SIZE rcvd: 140
Если ответа нет, то в этом случае идем смотреть /etc/namedb/named.conf
Потому что именно в нем может заключаться ошибка. Если вы точно все
сделали правильно, то можно глянуть логи, набрав cat
/var/log/messages и посмотреть что пишет bind.
Если ответ есть то ваш сервер может спокойно обслуживать вашу сетку,
тут проблем не должно быть, нам осталось только настроить саму FreeBSD
на использование вашего DNS'a делаем следующее:
vi /etc/resolv.conf
комментируем # там сервера вашего провайдера и вписываем наш, ну и
пока у вас нет почты и web'a пишем любой домен!
domain example.com
nameserver 127.0.0.1
Все, DNS полностью готов. Вы можете и не создавать зоны example.net и
example.com в этом случае ваш DNS все равно будет работать, я просто
хотел на примере этих зон показать вам, что чего там обозначает.
Samba
Самба является наверное одним из самых простых, но в тоже время и
самых полезным сетевым сервисом. Ведь у нее даже есть свой web
интерфейс, правда им мало кто пользовался, т.к. на него можно попасть
только с локалхоста, а для этого надо ставить GNOME или KDE.
Не много о данном продукте (поклонником которого я являюсь):
Samba -это не коммерческий проект с открытом исходным кодом начатый
Эндрю Триджеллом. Эта система обеспечивает UNIX-машине возможность
воспользоваться всеми преимуществами совместного доступа к файлам
Windows, включая появление машины в списке ресурсов сети, защиту
подключения на основе доменов и регистрации пользователей, и также
поддержку сетевых служб печати. Также в комплект самбы входит ряд
инструментальных средств, которые обеспечивают выполнение многих
административных функций сервера Windows. Огромным плюсом является то,
что после установки портированной реализации файловой системы smbfs,
получается полный набор программного обеспечения, дающий машине с
FreeBSD в сетевой среде Windows те же самые функциональные
возможности, что и настоящей Windows машине.
Уникальность Samb'ы в том, что ее команды посылаются поверх базовых
сетевых протоколов, таких как IPX, NetBEUI, Banyan VINES, DECnet (я
прекрасно понимаю, что скорее всего они не знакомы рядовому
пользователю). Эти протоколы работают на сетевом уровне стека, на том
же уровне, что и IP и поэтому не ограничены только транспортными
протоколами стека TCP/IP. Однако чаще всего в качестве транспортного
протокола SMB используется реализация NetBIOS по верх IP, работающая
с компонентами как TCP, как и UDP. Именно это и обеспечивает самбе
полную интеграцию в сети Windows.
Как правило самба ставиться вместе с системой, но если вы ее при
инсталляции не поставили, то можно через порты
cd /usr/port/net/samba
make all install && clean
вот и все, что нужно сделать, самба готова к работе. Я не буду
особенно углубляться в настройку smb, так-как наша задача, это просто,
добиться того, что виндовое семейство будет видеть расшариную папку в
которой будет валяться db 1С . В принципе теоретически их можно
прикрутить к mysql, но данную операцию я не проделывал.
После того как самба установилась, мы проделываем элементарные
операции
cd /usr/local/etc
cp smb.conf.default smb.conf
vi smb.conf
Я вам для удобства могу посоветовать сразу из конфига все выкинуть, у
нас останется дефалтовы и вписать туда несколько строк:
[global]
workgroup = ваша рабочая группа
server string = Samba Server
hosts allow = 10.10.1.2 10.10.1.3 ip тех кто имеет доступ
load printers = yes разрешает использование принтера (его надо настраивать)
log file = /var/log/log.%m логи
max log size = 50 максимальный объем логов
security = user безопасность на уровне user можно и на domain (но вам это не нужно)
encrypt passwords = yes Шифрование паролей (опция для вас не нужная)
socket options = TCP_NODELAY Очень сильно увеличивает скорость работы
dns proxy = no Эта опция только если вы ставите AD
client code page=866 Поддержка кириллицы
[homes]
comment = Home Directories
browseable = no
writeable = yes
[tmp]
comment = Temporary file space
path = /shared
read only = no
public = yes
В директории [tmp] мы видим строку patch =/shared shared эта папка
которую вы и будете видеть с клиентской машины, можно создать любую в
любом месте и назначить ей соответствующие права, к примеру:
mkdir /usr/local/1C
chmod 777 /usr/local/1C -теперь с этим каталогом можно делать все,
что угодно и доступен он будет только с определенных машин.
939 Прочтений • [NAT, DNS, SAMBA сервер на FreeBSD для малого офиса 10 - 50 машин (freebsd samba nat dns)] [08.05.2012] [Комментариев: 0]