Автоматизируем запуск
После того, как мы благополучно убедились, что все работает, можно настроить автоматическое применение настроек беспроводной карты.
Настроим автоматическую загрузку модуля карты при старте системы:
Код:
# echo "ath_pci" >>/etc/modules.autoload.d/kernel-2.6
Настроим автоматическое создание виртуального интерфейса при загрузке модуля:
Код:
# echo “options ath_pci autocreate=ap” >>/etc/modules.d/ath_pci
Параметры для утилиты iwconfig укажем в файле /etc/conf.d/wireless со следующим содержимым:
Код:
modules_ath0=( "iwconfig" )
ifconfig_ath0=( "192.168.2.1 netmask 255.255.255.0 broadcast 192.168.2.255" ) essid_ath0="superspot"
channel_ath0="13"
key_super_spot="1111-1111-1111-11"
Создадим скрипт для запуска сетевого подключения:
Код:
# ln -s /etc/init.d/net.lo /etc/init.d/net.ath0
И добавим его в список скриптов, запускаемых при старте системы:
Код:
# rc-update add net.ath0 default
Теперь при перезагрузке системы наша точка доступа будет запускаться автоматически.
Настраиваем дополнительные программы
На данный момент клиенты нашего беспроводного сегмента могут работать друг с другом и с сервисами, имеющимися непосредственно на точке доступа. Данная схема обладает рядом недостатков, исправлением которых мы сейчас и займемся. Итак, первым делом предоставим беспроводным клиентам доступ в Интернет посредством NAT. В самом простом случае это можно сделать так:
Код:
# iptables -F
# iptables -t nat -F
# iptables -A FORWARD -i ath0 -s 192.168.2.0/255.255.255.0 -j ACCEPT
# iptables -A FORWARD -i eth1 -d 192.168.1.0/255.255.255.0 -j ACCEPT
# iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
С помощью скриптов Gentoo сохраним созданные правила и настроим автоматический запуск iptables:
Код:
# /etc/init.d/iptables save
# /etc/init.d/iptables start
# rc-update add iptables default
Для распределения IP-адресов в локальной сети, и разрешения DNS-имен интернет-узлов будем использовать пакет dnsmasq. Для его настройки в конфигурационном файле /etc/dnsmasq.conf напишем:
Код:
domain-needed
bigus-priv
Interface = eth0, ath0
Dhcp-range=192.168.2.0,192.168.2.255,1h
Dhcp-host= 11:22:33:44:55:66, 192.168.2.1
Запустим службу и настроим ее автоматический запуск:
Код:
# /etc/init.d/dnsmasq start
# rc-update add default dnsmasq
Мы указали, с каких сетевых интерфейсов служба должна принимать запросы, и разрешили dhcp-серверу выдавать IP-адреса клиентам беспроводной сети. При разрешении DNS-имен dnsmasq будет перенаправлять запросы DNS-серверам, перечисленным в файле /etc/resolv.conf.
Улучшаем безопасность
Ввиду использования WEP приведенный выше пример скорее относится к разряду «как не нужно делать» и имеет право на существование лишь с целью доказательства того, что плата работает. В реальных же системах настоятельно рекомендуется использование WPA в режиме WPAPSK или WPA-EAP. (В качестве альтернативного варианта можно использовать VPN-туннель для шифрации трафика между беспроводными клиентами и сервером.) За реализацию WPA в нашей системе будет отвечать hostapd. Указанный демон был разработан в рамках проекта HostAP, целью которого является создание беспроводных точек доступа на базе карт с чипсетами Intersil Prism. Позднее разработчиками была добавлена поддержка работы с платами на чипсетах Atheros посредством драйверов madwifi. Hostapd поддерживает работу в режимах WPA-PSK, WPA-EAP с возможностью аутентификации как с помощью встроенного сервера, так и с помощью внешнего сервера RADIUS. В нашем примере рассмотрим более сложный в настройке вариант WPA-EAP с аутентификацией по протоколу MSCHAPv2 на внешнем RADIUS-сервере. При реализации будем использовать инфраструктуру открытых ключей (PKI), развернутую согласно инструкциям в [5].
Предварительная подготовка
Особенностью работы hostapd с драйверами madwifi является то, что беспроводное устройство должно входить в состав «виртуального моста» (linux bridging). Учитывая конфигурацию нашего сервера, мы вполне можем сделать «полноценный мост», с помощью которого клиенты проводной и беспроводной сетей будут находиться в одной логической подсети. Однако с точки зрения безопасности такой подход является неправильным – беспроводные клиенты должны иметь минимально необходимый доступ к ресурсам корпоративной локальной сети. Поэтому в нашем примере ограничимся «виртуальным мостом», состоящим только из беспроводного адаптера. Определение правил для iptables, ограничивающих доступ к проводной сети правил, оставим в качестве самостоятельного задания. Итак, для создания моста добавим в файл /etc/conf.d/net следующие строки:
Код:
bridge_br0=( "ath0" )
config_ath0=( "null" )
config_br0=( "192.168.2.1 netmask 255.255.255.0 brd 192.168.2.255" )
А также настроим автоматическое создание интерфейса при старте системы:
Код:
# ln –s /etc/init.d/net.lo /etc/init.d/net.br0
# rc-update add net.br0 default
После старта системы в системе появится новый bridgeинтерфейс с именем br0:
Код:
# ifconfig br0
br0 Link encap:Ethernet HWaddr 00:11:6B:60:28:D6
inet addr:192.168.2.1 Bcast:192.168.2.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:2290 Metric:1
RX packets:508204 errors:0 dropped:0 overruns:0 frame:0
TX packets:665093 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:96361488 (91.8 Mb) TX bytes:713154486 (680.1 Mb)
Как и мы хотели, в состав моста входит лишь устройство ath0:
Код:
# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.00116b6028d6 no ath0
Перейдем к параметрам беспроводного адеаптера. Вместо старых настроек в /etc/conf.d/wireless определим следующее:
Код:
modules_ath0=( "iwconfig" )
essid_ath0="superspot"
channel_ath0="13"
Займемся настройками hostapd. Конфигурационный файл находится в /etc/hostapd/hostaspd.conf. Параметры демона сгруппированы в несколько секций:
n Параметры конфигурации беспроводной платы – в этой секции определяется тип используемого беспроводного адаптера, а также параметры беспроводного соединения (ESSID, MAC security).
n WPA1 (802.1X-2004) – здесь мы можем разрешить использование аутентификации 802.1Х, а также определить параметры EAP.
n Опции для встроенных серверов EAP и RADIUS – по словам разработчиков, эти серверы присутствуют исключительно для тестовых целей, и их использование в реальных системах не рекомендуется. Поэтому в нашем примере эти секции использоваться не будут.
n Параметры WPA2 (WAP/IEEE 802.11i) – здесь можно выбрать режим управления ключами шифрования (PSK или EAP), а также определить алгоритм шифрации трафика (TKIP-RC4, CCMP-AES).
Итак, определим следующие настройки:
Код:
interface=ath0 # интерфейс беспроводного адаптера
bridge=br0 # имя устройства-моста, содержащего беспроводной адаптер
driver=madwifi # тип используемого драйвера
ssid=superspot # идентификатор беспроводной сети
auth_algs=1 # используемый алгоритм аутентификации, 1- open
ieee8021x=1 # аутентификация согласно 802.1X
#RADIUS
own_ip_addr=127.0.0.1 # IP-адрес сервера RADIUS
nas_identifier=superspot
auth_server_addr=127.0.0.1
auth_server_port=1812
auth_server_shared_secret=supersecretpassword
radius_retry_primary_interval=600
#WPA/IEEE 802.11i
wpa=3 # в двоичном представлении – 11, что означает использовать WPA и WPA2
wpa_key_mgmt=WPA-EAP # будем использовать EAP-вариант аутентификации
wpa_pairwise=CCMP # будем использовать AES для шифрования трафика
wpa_group_rekey=600
wpa_strict_rekey=1
wpa_gmk_rekey=86400
rsn_preauth=1
Теперь перейдем к параметрам конфигурации Freeradius.
Файл /etc/raddb/radius.conf. В секции modules{}, раздел mschap{} включим следующие параметры:
use_mppe = yes
require_encryption = yes
require_strong = yes
with_ntdomain_hack = yes
Убедимся, что ниже в этой же секции присутствует макрос для обработки имен в формате домен/логин:
realm ntdomain {
format = prefix
delimiter = "\\"
ignore_default = no
ignore_null = no
}
А также определен файл, в котором будут указываться пароли пользователей:
Код:
files {
usersfile = ${confdir}/users
acctusersfile = ${confdir}/acct_users
preproxy_usersfile = ${confdir}/preproxy_users
}
Секция authorize{} включает в себя следующие модули:
Код:
authorize {
preprocess
mschap
ntdomain
eap
files
}
files {
usersfile = ${confdir}/users
compat = no
}
Файл /etc/raddb/clients.conf:
client 127.0.0.1 {
secret = supersecretpassword
shortname = superspot
nastype = other
}
В файле /etc/raddb/proxy.conf допишем следующие строки:
Код:
realm DEFAULT {
type = radius
authhost = LOCAL
accthost = LOCAL
}
В параметрах конфигурации модуля EAP /etc/raddb/eap.conf определим следующее:
Код:
eap {
default_eap_type = peap
timer_expire = 60
ignore_unknown_eap_types = no
cisco_accounting_username_bug = no
tls {
private_key_password = пароль для доступа к секретному ключю сервера
private_key_file = ${raddbdir}/certs/cert-srv.pem
certificate_file = ${raddbdir}/certs/cert-srv.pem
CA_file = ${raddbdir}/certs/cacert.pem
dh_file = ${raddbdir}/certs/dh
random_file = ${raddbdir}/certs/random
}
peap {
default_eap_type = mschapv2
}
mschapv2 {
}
}
В файле /etc/raddb/users определим имена и пароли для доступа к беспроводной сети:
Код:
user1 User-Password == "password1"
user2 User-Password == "password2"
user3 User-Password == "password3"
Настроим автоматический запуск Freeradius при старте системы:
Код:
# rc-update add radiusd default
Если все было сделано правильно, то после перезагрузки компьютера (или просто запуска соответствующих служб) беспроводные клиенты увидят следующее (см. рис. 6). Беспроводная сеть с поддержкой WPA, при подключении к которой необходимо указать пароль.
Рисунок 6. WPA-сеть
Если же по каким-либо причинам увидеть сеть не удалось, можно воспользоваться режимами отладки:
Код:
# hostapd –Kdddd
# radiusd –X
Enterprise-режим
Немного изменив настройки модуля EAP Freeradius, можно настроить работу в режиме EAP-TLS. Так, чтобы настроить работу анологично описанному в [5], необходимо всего лишь поменять тип пакетов eap в файле eap.conf:
Код:
default_eap_type = tls
и скопировать клиентский сертификат на компьютер пользователя.