LinuxForum.Fans
Тема

Привязка IP адреса к маку

Автор: dim_s 41 сообщений 23181 просмотров
#114997

В общем имеется сервер на платформе freeBSD 8.0!
Сервер выполняет функцию роутера + на нём ещё висит verlihub и прочие атрибутики сети,
нужные современным студентам) Сервак стоит в общежитии и организует сеть на 2 общежития!
На сервере 3 интерфейса:
Первые 2 интерфейса em0 192.168.132(3).0/24
em1 192.168.130(1).0/24
А вот 3-й em2 192.168.129.2/24 идёт на роутер cisco, расположенный в университете,
и вот собственно управление университета заставляет сделать жёсткое привязку к мак адресу
клиента уникального IP адреса, тем самым исключить проникновение в сеть левых компьютеров!
В сети около 700 пользователей! И вот на каждый мак адрес нужно повесить IP адрес!
На сервере стоит dhcpd-server и раздаёт IP адреса, сроком на 4 месяца в рандомном порядке,
т.е. если даже поставить статический IP адрес, можно будет спокойно пользоваться всеми услугами сети!
Народ! Расскажите плз, начну я в конфиге dhcpd сервера писать маки и присваивать им IP
адреса, а вот как отключить раздачу IP адресов тем, которых нету в этом конфиге,
т.е. чтобы dhcpd сервер читал только эти маки??
Чтобы , когда кто-нибудь поставит стат. IP он не мог ничем пользоваться?
Где-то слышал что нужно добавлять правила в файерволл ipfw, но я особо толком
им пользоваться не умею, перелопатил много мануалов, был на офсайте фри, но ничего
толком и не узнал!
Расскажите плз!!

#115110

задача не слишком сложная...
если не ошибаюсь(полгода фри не видел), то у ipfw есть параметр для мак адреса.
Тоесть если использовать ipfw+tables будет выглядеть примерно так:

ipfw add allow ip from mac table(1) to any
ipfw table(1) add aa:bb:cc:dd:11:22

не помешает костыле-скрипт который выдернет мак и соответствующий ему ип и всунет в таблицы фаервола. если необходимо открыть сеть только для соответствующих маков+ипов то следующая конструкция:

ipfw add 1000 skipto 2000 all from table(1) to any
ipfw table(1) add 192.168.0.0
ipfw add 1010 deny all from not table(1) to any
ipfw add 2000 allow all from any mac table(2) to any

повторюсь: фри не видел полгода, в синтаксисе могу ошибаться.

#115219

Начал писать вот так вот :


host myhost1
{
hardware ethernet 00:00:00:00:00:00;
fixed-address 192.168.1.2;
}

Но не в конфиге самого dhcpd сервера, а в
файлике, с именем "filter" в моей дом. папке,
вот только как к нему сделать обращение
дхцп и файерволла, т.е. строго привязать
ему видеть только из этого файлика маки
и выдавать на маки закреплённые ip адреса.

#118525
dim_s написал:
Но не в конфиге самого dhcpd сервера, а в
файлике, с именем "filter" в моей дом. папке,
вот только как к нему сделать обращение
дхцп и файерволла

в /usr/local/etc/dhcpd.conf добавить строчку:
include /home/username/file_host // где /home/username - путь к файлу. file_host файл содержащий запись вида:

dim_s написал:
host myhost1
{
hardware ethernet 00:00:00:00:00:00;
fixed-address 192.168.1.2;
}

По поводу ipfw используйте table, пример вам привили уже выше, кстати, значения table так же можно указывать в файле.

text

...
ipfw table 1 add /etc/ip_host
...

По поводу dhcp что бы он раздавал только тем кто в файле file_host, ЕМНИП закоментируй строчку вида: range 10.5.5.26 10.5.5.30;

#153296

с дхцп разобрался, сделал привязку в отдельном файле.
но вот с ipfw непонятно, ввожу правила все эти , выкидывает везде ошибки...

#153412

Какие правила вводите? В какой функции скрипта? Согласно Вашему скрипту, добавлять правила надо в ф-ию enable_our_network() перед разрешающими правилами. Правилам можно присвоить один и тот же номер, если нет желания ломать нумерацию правил.

#153493



По поводу dhcp что бы он раздавал только тем кто в файле file_host, ЕМНИП закоментируй строчку вида: range 10.5.5.26 10.5.5.30;

Можно и через параметр в дхцп : deny unknown-clients;

А по поводу правил пишу в скрипт:
ipfw add 05025 allow ip from mac table(1) to any
ipfw table 1 add /etc/ip_host

хотя понимаю, что неправильно делаю, не знаю какая последовательность...
с настройкой файервола у меня проблемы))))
и как сделать обращение ipfw к стороннему файлу, например к /home/user/mac_ipfw ?

#154012

Итак, у Вас есть некоторый файл (пусть это будет /home/dim_s/filter)сопоставляения мак-адресов IP-адресам для dhcpd. Вытащим из него мак-адреса в файл /etc/ip_host
[console]
grep 'hardware ethernet' /home/dim_s/filter|awk '{ print$3 }'|sed -e 's/;//' > /etc/ip_host
[/console]

#154015

Вытащил из /home/dimon/mac_dhcpd:

text
grep 'hardware ethernet' /home/dimon/mac_dhcpd | awk '{ print$3 }' | sed -e 's/;//' > /home/dimon/mac_ipfw 

В итоге, пока у меня только 5 закреплённых маков, т.к. идёт автоматическая раздача IP:

text
00:22:64:51:a1:51
00:21:91:f4:33:88
00:23:8B:1B:63:29
00:21:91:06:5e:27
1C:BD:B9:46:DC:00

После этого что следует писать в скрипт файерволла?

#154017

Далее в Вашем rc.firewall создаём ещё функцию, пусть это будет mac_filter

text

mac_filter () {
     ${ipfw} table 2 flush
     cat /home/dimon/mac_ipfw | while read mac; do
     ${ipfw} table 2 add ether $mac
     done
     ${ipfw} add 4000 deny all from not 'table(2)' to any layer2
}

И добавляем её в правила

text

start_firewall() {

${ipfw} -f flush setup_loopback setup_default dhcp_enable mac_filter enable_our_network setup_no_hostel3_to_hostel4 enable_host4_for_net3 counter_strike } start_firewall

Пришлось перерыть кучу литературы, потому как самому поэкспериментрировать негде, так что костыли будем собирать вместе. :)

#154019

Почему-то всё-равно разрешается доступ к серверу...
Вот мои правила в ipfw через ipfw show:

text
04000      0         0 deny ip from not table(2) to any layer2
04080      0         0 allow ip from 192.168.132.0/23 to 192.168.130.1
04090      0         0 allow ip from 192.168.130.1 to 192.168.132.0/23
04100     23      1076 allow udp from any to any dst-port 27015-27025 in
04200      0         0 allow udp from any to any dst-port 27015-27025 out
04300      0         0 allow udp from any 27015-27025 to any in
04400      0         0 allow udp from any 27015-27025 to any out
05000    196     21622 allow ip from any to any via lo0
05001      0         0 deny ip from any to 127.0.0.0/8
05002      0         0 deny ip from 127.0.0.0/8 to any
05010      0         0 allow udp from any 67 to 192.168.130.1 in via em1
05011      0         0 allow udp from 192.168.130.1 68 to any out via em1
05012      0         0 allow udp from any 67 to 192.168.132.1 in via em0
05013      0         0 allow udp from 192.168.132.1 68 to any out via em0
05020     63      5418 deny ip from 192.168.130.0/23 to 192.168.132.0/23
05021     84      8499 deny ip from 192.168.132.0/23 to 192.168.130.0/23
05030 434264  62011592 allow ip from 192.168.130.0/23 to any
05031 504056 122702692 allow ip from 192.168.132.0/23 to any
05032 935528 786553205 allow ip from 217.21.42.0/24 to any
05033 147900 159936978 allow ip from 172.31.1.0/24 to any
05034   5825    347097 allow ip from 192.168.129.0/30 to any
65535   5255    344109 allow ip from any to any

В нём же правила читаются снизу-вверх??

#154028

правила читаются снизу-вверх??
Сверху вниз.
Суть токова: dhcpd раздаёт фиксированные IP-адреса по мак-адресам 5 машинам в сети. Если какой-нибудь кульхацкер захочет подключиться к Вашей сети, IP-адреса он не получит. И даже если он пропишет своей машине статический IP-адрес, доступа он всё равно не получит, поскольку доступ открыт только 5 машинам, указанным в конфиге dhcp.
#154031

IP-адреса не раздаются, но если прописать статически - есть доступ к сети...
Ведь доступ к сети закрывает файерволл..

Может нужно перемещать скрипт после enable_our_network ???

#154234

Попробуйте изменить функцию mac_filter следующим образом

text

mac_filter () {
     ${ipfw} table 2 flush
     grep 'hardware ethernet' /home/dim_s/filter|awk '{ print$3 }'|sed -e 's/;//' | while read mac; do
     ${ipfw} table 2 add ether $mac
     done
     ${ipfw} add 4000 deny all from any to any mac any not 'table(2)' layer2
}
#154386

.

#155513

Правило

text

${ipfw} add 4000 deny all from any to any mac any not 'table(2)' layer2

при перезагрузке не добавилось, и при ручном вводе в ipfw выбивает ошибку:

text
> ipfw add 4000 deny all from any to any mac any not 'table(2)' layer2
ipfw: Incorrect MAC address

может нужно пересобрать ядро, с другими функциями?


нашёл в нете подобную тему, напишите плз, что мне оттуда нужно..
http://forum.lissyara.su/viewtopic.php?f=8&t=12247&start=0

#155752

Продолжаем извращаться.

text

mac_filter () {
     ${ipfw} add 4000 deny from any to any mac any not { `grep 'hardware ethernet' /home/dim_s/filter|awk '{ print$3 }' |  tr ";\n" ","` }
}
#155763

Закинул в скрипт

text

mac_filter () {
     ${ipfw} add 4000 deny from any to any mac any not { `grep 'hardware ethernet' /home/dim_s/filter|awk '{ print$3 }' |  tr ";\n" ","` }
}

Перезагрузил, в итоге ничего в ipfw show с правилом 4000 он не добавляет,
при ручном вводе выкидывает ошибку именно на mac:

text
ipfw: Incorrect MAC address
#155767

в конец правила добавьте еще mac-type ipv4

#155870

В общем, вот что я получаю при добавлении правил:

text
> ipfw add 4000 deny from any to any mac any not { `grep 'hardware ethernet' /home/dimon/mac_dhcpd|awk '{ print$3 }' |  tr ";\n" ","` }
ipfw: unrecognised option [-1] from

> ipfw add 4000 deny from any to any mac any not mac-type ipv4 { `grep 'hardware ethernet' /home/dimon/mac_dhcpd|awk '{ print$3 }' | tr ";\n" ","` } ipfw: unrecognised option [-1] from

> ipfw add 4000 deny from any to any mac any not { `grep 'hardware ethernet' /home/dimon/mac_dhcpd|awk '{ print$3 }' | tr ";\n" ","` mac-type ipv4} ipfw: unrecognised option [-1] from

Войдите или зарегистрируйтесь, чтобы ответить.