Сервер домашней сети
Не так давно я делился мыслями на тему организации разделения прав доступа пользователей к различным ресурсам маленькой локалки в масштабе типичной советской российской коммуналки. Сегодня я поделюсь готовым решением. Естественно на полноту и правильность не претендую, просто пишу о том как это сделал я. Конструктивная критика, естественно, приветствуется.
И так имеется в наличии:
- Компьютер неизвестной марки, собранный из подручных средств на базе процессора Intel Pentium-III с полгига оперативки тремя сетевыми картами и четыремя разнокалиберными жесткими дисками.
- Доступ в интернет в виде безлимитного ADSL от местного провайдера.
- Несколько человек соседей, желающих заюзать на толпу интернет-канал и обмениваться файлами не таская друг к другу флэшки.
- Человек мало-мальски знакомый с Unix (то есть я), который будет админом создаваемой сети.
Собственно для реализации задуманного ставим на обозначенный выше компьютер FreeBSD 7.1 и начинаем шаманство.
Нам потребуется следующее ПО (все из портов):
- — поскольку у всех Windows будем использовать этот вид расшаривания ресурсов.
- версии 5.2 — VPN-сервер, будем использоваться для раздачи пользователям интернета.
- — сервер, который будет выполнять авторизацию наших пользователей.
- — сервер каталога, в котором мы будем хранить данные о том какому пользователю какие ресурсы доступны.
- — сервер баз данных, в котором будет храниться авторизационная информация пользователей и статистика доступа в интернет.
- - автоматическая настройка сети на клиентских компьютерах.
- — кэширующий DNS-сервер.
Приступим. Сначала, естественно, подготовительные мероприятия.
Настраиваем интернет-канал ADSL-модем настраиваем бриджем, втыкаем в одну из сетевых карт, можно, в принципе, даже IP на интерфейс не вешать, и так сойдет.
Настраиваем соединение с интернет средствами ppp
vi /etc/ppp/ppp.conf
default:
set log Phase tun command
set ifaddr 10.0.0.1/0 10.0.0.2/0
wstream:
disable IPV6CP
disable acfcomp
disable protocomp
disable deflate
disable pred1
disable vjcomp
set device PPPoE:rl0
set authname YOUR_LOGIN
set authkey YOUR_PASSWORD
set dial
set login
add default HISADDR
Включаем поднятие соединения при старте системы.
vi /etc/rc.conf
ppp_enable="YES"
ppp_mode="ddial"
ppp_profile="wstream"
Поднимаем соединение
/etc/rc.d/ppp start
Подключаем какой-нибудь резолвер и идем устанавливать свой DNS-сервер
echo «195.46.96.1» > /etc/resolv.conf
cd /usr/ports/dns/pdnsd
make install clean
Настраиваем наш локальный сервер. Он будет обслуживать локальные адреса, запрашивать адреса снаружи и кэшировать записи для последующего ускорения в разрешении имен.
vi /usr/local/etc/pdnsd.conf
Весь конфиг не привожу, только строчки, которые требуют исправления
global {
...
server_ip = 192.168.0.1
...
}
server {
label = «myisp»
ip = 195. 46.96.1
...
uptest=if
interface=tun0
}
Записи локальной сети прописываем обычным форматом в /etc/hosts, а в конфиг pdnsd пишем вот так
source {
owner=gw.mynet
file="/etc/hosts"
}
Можно и реверсные записи прописать вот так примерно
rr {
name=gw.mynet;
reverse=on;
a=192.168.0.1;
owner=irk-gw.intra;
soa=gw.mynet,root.gw.mynet,42,86400,900,86400,86400;
}
Прописываем в автозапуск, запускаем и устанавливаем наш локальный DNS-сервер в качестве резолвера.
echo 'pdnsd_enable="YES"' >> /etc/rc.conf
/usr/local/etc/rc.d/pdnsd start
echo «192.168.0.1» > /etc/resolv.conf
Подготовительный этап закончен. Начинаем, собственно, конфигурацию и первым делом ставим и настраиваем dhcp. Ну не руками же на каждом компе IPшники прописывать.
cd /usr/ports/net/isc-dhcp30-server
make install clean
Прописываем сеть в конфиге
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.10 192.168.0.250;
option netbios-name-servers 192.168.0.2;
option domain-name-servers 192.168.0.1;
option domain-name «mynet»;
option routers 192.168.0.1;
option broadcast-address 192.168.0.255;
default-lease-time 600;
max-lease-time 7200;
}
Прописываем в rc.conf автозапуск, говорим на каком интерфейсе слушать
dhcpd_enable="YES"
dhcpd_ifaces="rl0"
Ну и запускаем
/usr/local/etc/rc.d/isc-dhcpd start
Теперь организуем файловый сервер на базе Samba. Samba это, к сожалению, такой сервис, который после запуска слушает на всех сетевых интерфейсах, а с какого принимать соединения определяет исходя из опций в конфиге. Учитывая эту его особенность я решил поместить файловый сервер в отдельный . Для комфортного управления Jail'ами в портах FreeBSD есть тулза , это конечно не VDSmanager, но для наших целей вполне подойдет. Ставим
cd /usr/ports/sysutils/ezjail
make install clean
Вешаем на интерфейс смотрящий в локальную сеть еще один IP-адрес и создаем окружение для нашего будущего файлового сервера
ifconfig rl0 alias 192.168.0.2 netmask 255.255.255.255
ezjail-admin update -i
ezjail-admin create samba.mynet 192.168.0.2
cp /etc/resolv.conf /jails/samba.mynet/etc/
Добавляем в /etc/rc.conf
ifconfig_rl0_alias0=""inet 192.168.0.2 netmask 255.255.255.255"
ezjail_enable="YES"
Можно запускать и приступать к настройке. Я для этого запустил в jail'е ssh, дабы комфортно внутри работать.
Ставим самбу, в меню конфигурирования отмечаем LDAP, WINBIND, собираем, ставим.
cd /usr/ports/net/samba3
make install
Для разграничения прав доступа я решил использовать права файловой системы, а поскольку данные о пользователях будут в каталоге LDAP, нужно сделать чтобы система их видела в этом нам поможет nss_ldap.
cd /usr/ports/net/nss_ldap
make install clean
Собственно к жгучему латиноамериканскому танцу мы еще вернемся, а пока настроим OpenLDAP в основной системе.
cd /usr/ports/net/openldap24-server
make install clean
vi /usr/local/etc/openldap/slapd.conf
Конфигурационный файл будет выглядеть примерно так
include /usr/local/etc/openldap/schema/core.schema
include /usr/local/etc/openldap/schema/cosine.schema
include /usr/local/etc/openldap/schema/inetorgperson.schema
include /usr/local/etc/openldap/schema/nis.schema
include /usr/local/etc/openldap/schema/samba.schema
pidfile /var/run/openldap/slapd.pid
argsfile /var/run/openldap/slapd.args
logfile /var/log/openldap/slapd.log
modulepath /usr/local/libexec/openldap
moduleload back_bdb
database bdb
suffix "dc=my,dc=network"
rootdn "cn=Admin,dc=my,dc=network"
rootpw {SSHA}+EM1XBj5BvZiJ3PXVK4YC/sJez1o4ufA
directory /var/db/openldap-data
TLSCertificateFile /usr/local/etc/openldap/ssl/ldap.cert
TLSCertificateKeyFile /usr/local/etc/openldap/ssl/ldap.key
TLSCACertificateFile /usr/local/etc/openldap/ssl/ca.cert
index objectClass eq,pres
index ou,cn,mail,surname,givenname eq,pres,sub
index uidNumber,gidNumber,loginShell eq,pres
index uid,memberUid eq,pres,sub
index nisMapName,nisMapEntry eq,pres,sub
access to attrs=sambaNTPassword by self write by * none
access to attrs=sambaLMPassword by self write by * none
access to attrs=userPassword by self write by * auth
В моем случае slapd будет слушать на локальном сокете и по защищенному протоколу на IP смотрящем в локалку. Вот это {SSHA}+EM1XBj5BvZiJ3PXVK4YC/sJez1o4ufA — зашифрованный пароль администратора каталога, получается командой slappasswd.
Внесем соответствующие исправения в rc.conf.
slapd_enable="YES"
slapd_owner="ldap"
slapd_group="ldap"
slapd_flags="-h 'ldapi://%2fvar%2frun%2fopenldap%2fldapi/ ldaps://192.168.0.1/'"
Теперь надо создать начальную структуру каталога пишем файл примерно такого содержания
dn: dc=mydc=network
objectClass: dcObject
objectClass: organization
dc: my
o: My network
Импортируем его с помощью ldapadd
ldapadd -x -D cn=Admin,dc=my,dc=network -w Пароль /path/to/file
Можно запускать и настраивать в jail'е samba и nss_ldap.
Сначала nss_ldap
vi /usr/local/etc/nss_ldap.conf
base dc=my,dc=network
uri ldaps://192.168.0.1/
rootbinddn cn=Admin,dc=my,dc=network
bind_policy soft
pam_filter objectclass=uid
pam_login_attribute uid
pam_password ssha
nss_base_passwd dc=net,dc=megaded?sub?objectClass=posixAccount
nss_base_shadow dc=net,dc=megaded?sub?objectClass=posixAccount
nss_base_group dc=net,dc=megaded?sub?objectClass=posixGroup
Кроме того нужно вписать пароль администратора нашего LDAP-каталога в файл nss_ldap.secret и поставить на него права 400, дабы этот пароль никто кроме root'а не прочитал и уж тем более не исправил.
Теперь самба. В smb.conf для работы с LDAP нужно добавить
passdb backend = ldapsam:ldaps://192.168.0.1/
ldap ssl = Yes
ldap suffix = dc=net,dc=megaded
ldap admin dn = cn=Admin,dc=my,dc=network
ldap delete dn = no
ldap filter = (&(uid=%u)(objectClass=sambaSamAccount))
Остальные настройки по желанию. Теперь надо прописать в rc.conf запуск сервера, запустить его и связать его с LDAP.
echo 'samba_enable="YES"' >> /etc/rc.conf
/usr/local/etc/rc.d/samba start
smbpasswd -w
Собственно все, переходим к настройке FreeRADIUS. При сборке из портов отмечаем опции LDAP и MYSQL. Установка традиционна, поэтому пропустим ее для ясности. Настраиваем.
Первым делом подключим схему из комплекта FreeRADIUS к OpenLDAP, добавив в slapd.conf вот такую строчку
include /usr/local/etc/openldap/schema/freeradius.schema
В главном конфигурационном файле radiusd.conf нужно в секции конфигурирования модуля ldap вписать
server = «ldapi://%2fvar%2frun%2fopenldap%2fldapi»
basedn = «dc=my,dc=network»
Секцию настройки mschap, находящуюся выше ldap вырезать и вставить после него. В секции authorize активировать сначала ldap, потом sql вот так
ldap
sql
Теперь в sql.conf нужно указать данные для доступа к базе
driver = «rlm_sql_mysql»
server = «localhost»
login = «radius»
password = «SuperPass»
radius_db = «radius»
Создать базу данных.
В clients.conf написать что-то типа этого
client 127.0.0.1 {
secret = SuperPass
shortname = mpd5
}
Последний элемент в нашей конфигурации — VPN-сервер mpd его настройка сложностей из себя не представляет, поэтому позволю себе просто привести рабочий конфиг.
startup:
set user sys Password admin
set console self 127.0.0.1 5005
set console open
default:
load pptp_server
pptp_server:
set ippool add pool1 192.168.5.1 192.168.5.31
create bundle template B
set iface idle 1800
set iface enable tcpmssfix
set ipcp yes vjcomp
set ipcp ranges 10.10.10.1/32 ippool pool1
set ipcp dns 192.168.0.1
set bundle enable compression
set ccp yes mppc
set mppc yes e40
set mppc yes e128
set mppc yes stateless
set bundle yes crypt-reqd
create link template L pptp
set link action bundle B
set link enable multilink
set link yes acfcomp protocomp
set link no pap chap
set link enable chap
set link yes crypt-reqd
set link mtu 1460
set pptp self 192.168.0.1
set link enable incoming
set radius server 127.0.0.1 SuperPass 1812 1813
set radius timeout 10
set auth acct-update 300
set auth enable radius-auth
set auth enable radius-acct
set radius retries 3
Теперь все настроено и запущено. Можно создавать группы и пользователей в LDAP, они будут видны в jail'е с установленной samba. Соответсвенно пользователей с такими же паролями добавляем и в sql-базу.
Собственно в итоге мы получим руление доступом пользователей на запись (на чтение можно всем) к расшареным ресурсам путем добавления/удаления их в соответсвующие группы в каталоге LDAP и управление доступом в интернет путем установки аттрибута dialupAccess в LDAP профиле пользователя.
Из интересного сегодня:
- Ресурс для тех кто любит кино, типа онлайн кинотеатр. База фильмов достаточно большая, поэтому всех желающих прошу смотреть фильмы онлайн. Ну а у кого канал не позволяет можно и скачать для оффлайнового просмотра.



Комментариев нет на запись "Сервер домашней сети"
Ваш комментарий может быть первым :) .
Оставить комментарий