30 окт. 2009 г.

Настройка PPTP во Vyatta

В этой заметке мы рассмотрим настройку Vyatta в качестве сервера доступа по протоколу PPTP. Еще раз отметим, что PPTP-клиентом она в исходном виде быть не умеет, только сервером.

Теоретическая часть

Протокол PPTP (Point-to-Point Tunneling Protocol) широко применяется для организации удаленного доступа. Для многих пользователей он стал фактически синонимом VPN (Virtual Private Network). Не в последнюю очередь этому способствует встроенный в Microsoft Windows клиент. Для начала посмотрим, что в нем хорошо, а что не слишком, и сделаем вывод, в каких случаях стоит его применять.

Преимущества

  1. Простота настройки
  2. Аутентификация по имени пользователя и паролю — их можно запомнить
  3. Встроенный в Windows и многие офисные сетевые устройства клиент

Недостатки

  1. Слабое шифрование
  2. Отсутствие аутентификации по ключам и сертификатам
  3. Отсутствие клиента в промышленных сетевых устройствах

Последний пункт не так прост, как можно подумать. В некоторых версиях Cisco IOS он все таки есть в качестве недокументированной возможности, а на Vyatta его можно поставить отдельно. Но это все же не совсем то, что стоит использовать.

Вывод

После этого списка преимуществ и недостатков мы может сделать вывод о том, в каких случаях стоит применять PPTP. Он хорошо пригоден для удаленного доступа к сети с компьютеров конечных пользователей, но непригоден для построения туннелей между маршрутизаторами, или для соединений с высокой защищенностью.

Исходя из этого наша схема сети будет выглядеть так:

Практическая часть

Теперь, когда мы решили, для каких задач можно применить PPTP, перейдем к настройке нашего сервера доступа. Мы рассмотрим два варианта аутентификации пользователей: сначала локальную, а потом на RADIUS-сервере. Как обычно заходим под пользователем с правами администратора (например, vyatta), входим в режим конфигурации (configure) и вводим примерно следующее:

# Назначаем адрес интерфейсу, если еще не назначен
set interfaces ethernet eth0 address 10.91.19.250/24
# Переходим к редактированию настроек PPTP-сервера 
edit vpn pptp remote-access 
# Устанавливаем локальную аутентификацию. При ней список пользователей хранится на самом сервере
set authentication mode local 
# Назначаем первый адрес диапазона, из которого клиентам будут выдаватся адреса
set client-ip-pool start 10.91.19.180
# И последний адрес
set client-ip-pool stop 10.91.19.195
# Первый сервер имен нашей сети.
set dns-servers server-1 10.91.19.5
# И второй сервер имен
set dns-servers server-2 10.91.19.7
# Создаем тестового пользователя
set authentication local-users username testuser password testpassword
# Применяем изменения
commit
# На этом все, процесс PPTP-сервера успешно запустился

Теперь можно настраивать соединение и проверять, туннель должен подняться. В Windows можно просто принять параметры по умолчанию, для пользователей UNIX нужно указать, что используется протокол аутентификации MS CHAPv2, алгоритм шифрования MPPE и не используется никакое сжатие. Вариантов настройки у бэкэнда, который использует Vyatta (pptpd) гораздо больше, но через ее интерфейс они недоступны.

Аутентификация на RADIUS-сервере

На vpn-концентраторах с большим числом пользователей локальную аутентификацию, конечно, никто не использует. Для этого обычно используется протокол RADIUS (Remote Authentication in Dial-In User Service), который позволяет еще и сбор информации для биллинга, хранение учетных записей в базе данных и еще много чего.

Настройка самого RADIUS-сервера чтобы с него была какая-то реальная польза это тема для отдельной статьи. Поэтому здесь мы рассмотрим только настройку Vyatta в качестве клиента. Отличаться будет только узел конфигурации authentication. Нужно лишь немного изменить предыдущую конфигурацию.

 # Удаляем то, что касается локальной аутентификации
 delete authentication mode local 
 delete authentication local-users username testuser 
 # Устанавливаем аутентификацию в RADIUS
 set authentication mode radius 
 # Указываем сервер
 set authentication radius-server 10.91.19.5
 # Указываем пароль для доступа клиента к серверу, в терминах RADIUS он называется secret
 set authentication radius-server 10.91.19.5 key verylongpassword
 # Применяем изменения
 commit

Все ip-адреса и пароли указаны просто для примера, вам нужно будет вставить вместо них свои.


Полный текст сообщения

27 окт. 2009 г.

Различия интерфейсов командной строки Cisco и Vyatta

В этой статье мы сравним интерфейсы командной строки Cisco IOS и Vyatta. Учитывая, что с устройствами Cisco большинство сетевых администраторов сталкивались, это может быть полезным при использовании Vyatta.

Все описанное ниже касается Vyatta Community Edition 5.0.2. Соответствия не всегда являются точными, потому как она и IOS устроены все таки по-разному, но общий смысл они передают.

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

Именование интерфейсов

Cisco Vyatta
Ethernet, FastEthernet, GigabitEthernet eth
atm adsl
Serial wan
Dialer pppoe
Vlan <iface><number>.<vlan id>
Tunnel tun

Основное

Cisco Vyatta
enable Отсутствует
configure terminal configure
exit exit
write memory save

Интерфейсы

Cisco Vyatta
interface <type> <number> set interfaces <type> <name>
ip address set address
mac-address set hw-id (set mac)
shutdown, no shutdown set disable, delete disable

Маршрутизация

Cisco Vyatta
no ip routing, ip routing set system ip disable-forwarding, delete system ip disable forwarding
ip route <address> <netmask> <gateway> set protocols static route <address>/<prefix-length> next-hop <gateway>
ip route <address> <netmask> <interface> set protocols static interface-route <address>/<prefix-length> next-hop-interface <interface>
router [ospf|bgp|rip] set protocols [ospf|bgp|rip]

Прочее

Cisco Vyatta
ip nat ... set service nat ...
ip dhcp ... set service dhcp ...
username ... set system login ...

Полный текст сообщения

23 окт. 2009 г.

Графические интерфейсы промышленных сетевых устройств

Сегодня я изложу свою точку зрения на то, нужны ли промышленным сетевым устройствам графические интерфейсы. Под промышленным в данном случае понимается то, что в английском именуют «enterprise», то есть ориентированные на достаточно крупные предприятия.

Сегодня почти все устройства этого уровня снабжены одновременно интерфейсом командной строки, и графическим интерфейсом, обычно это веб-интерфейс. Однако польза от их графического интерфейса у меня вызывает большие сомнения. Почему так?

Польза для специалиста

Что он может дать специалисту? Как правило, ничего. В большинстве случаев он является точным отражением системы команд, и если ее знаешь, то никакой разницы уже нет. Кроме того, за счет ограниченности аппаратных ресурсов, веб-интерфейс еще и работает гораздо медленнее текстового. Поэтому почти никто из специалистов им не пользуется, все руководства описывают настройку с использованием текстового интерфейса, и экзамены при сертификации сдаются на нем же.

Причем там всегда есть возможность получить список доступных команд и справку по ним. Автор при своей первой встрече с Catalyst 2950 воспользовался этой возможностью и вполне успешно провел базовую настройку без всякого руководства, а уже потом спокойно разбирался с более сложными функциями.

Польза для неспециалиста

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

Даже если устройство имеет некий адрес по умолчанию, нужно его узнать и настроить соответствующим образом компьютер. В итоге «просто включить и работать» не получится в любом случае. К этому можно добавить то, что у ряда устройств веб-интерфейс по умолчанию тоже отключен, и включать его придеться опять же из командной строки.

Предположим, что пользователь все таки зашел в веб-интерфейс. Ну сможет он настроить адреса на интерфейсах, шлюз по умолчанию, может быть что-то еще. Но чтобы настроить те функции, ради которых серьезные устройства и покупают, все равно нужно быть специалистом. Если не знать, для чего нужны все эти VLAN, STP или IPsec и как они работают, воспользоваться ими не получится, какой бы интерфейс не использовался для их настройки.

А ставить промышленное устройство ради простейших функций это пустая трата денег и «стрельба из пушки по воробьям». В заключение можно сказать и то, что при использовании текстового интерфейса вполне можно посмотреть на написанный знакомым гуру набор команд и вставить его в консоль, а графический не позволит и этого.

Ну и напоследок, чтобы не быть голословным, приведу снимки экранов интерфейса трех подвернувшихся под руку устройств. Желающие могут распечатать их, показать знакомым пользователям и спросить, понимают ли они, что на них изображено.

Точка доступа wi-fi Cisco Aironet 1130
Управляемый коммутатор D-Link DES-2110
Маршрутизатор Vyatta

Полный текст сообщения

20 окт. 2009 г.

Применение атрибутов файлов в Linux

Среди широко применяемых свойств файлов и каталогов находятся владелец и его группа, права доступа и ACL. Но кроме них (по крайней мере в файловых системах ext2 и ext3) существуют атрибуты. Большинство из них предназначено для довольно сомнительных целей или требуют экспериментальных патчей, но есть два достаточно полезных, которые мы здесь и рассмотрим.

Установка атрибутов файлов

Вы можете установить атрибуты с помощью команды chattr. Ее использование выглядит примерно так:
chattr [-R] <-|+|=><список атрибутов>

Ключ -R приводит к рекурсивному изменению для всего каталога, «-», «+» и «=» удаляют, добавляют, или устанавливают единственными перечисленные за ними атрибуты.

Атрибут «i» (immutable) — полный запрет изменений

Этот атрибут позволяет запретить любые изменения файла или каталога. Пользователи не смогут ни изменить содержание, ни перезаписать его, ни удалить, ни создать жесткую ссылку. Может пригодится, для защиты от случайного удаления, например файла с правилами использования или справкой для пользователя, или запрета изменения им собственных настроек.Рассмотрим его в действии.

[baturin@zax /tmp/testdir]$mkdir ./test                    # Создаем каталог
[baturin@zax /tmp/testdir]$touch ./testfile                # Создаем файл  
[baturin@zax /tmp/testdir]$sudo chattr +i ./test           
[baturin@zax /tmp/testdir]$sudo chattr +i ./testfile       # Присваиваем атрибут i
[baturin@zax /tmp/testdir]$ls -al
итого 28
drwxr-xr-x  3 baturin users  4096 Окт 20 08:33 .           # Убеждаемся, что все имеет права
drwxrwxrwt 54 root    root  20480 Окт 20 08:30 ..          # на запись для владельца
drwxr-xr-x  2 baturin users  4096 Окт 20 08:33 test
-rw-r--r--  1 baturin users     0 Окт 20 08:33 testfile    
[baturin@zax /tmp/testdir]$
[baturin@zax /tmp/testdir]$echo "Test" > ./testfile        # Убеждаемся, что мы не можем писать
zsh: Отказано в доступе: ./testfile
[baturin@zax /tmp/testdir]$echo "test" >> ./testfile       # И дописать в конец тоже не можем
zsh: Отказано в доступе: ./testfile
[baturin@zax /tmp/testdir]$rm ./testfile                   # И уж тем более удалить
rm: невозможно удалить `./testfile': Операция не позволяется
[baturin@zax /tmp/testdir]$ln ./testfile ./testlink        # Жесткую ссылку создать не удастся
ln: создание жесткой ссылки `./testlink' => `./testfile': Операция не позволяется
[baturin@zax /tmp/testdir]$                                # Теперь то же с каталогом
[baturin@zax /tmp/testdir]$mkdir ./test/dir
mkdir: невозможно создать каталог `./test/dir': Отказано в доступе
[baturin@zax /tmp/testdir]$rmdir ./test 
rmdir: failed to remove `./test': Операция не позволяется
[baturin@zax /tmp/testdir]$
[baturin@zax /tmp/testdir]$sudo rm ./testfile              # Даже root не сможет ничего сделать
rm: невозможно удалить `./testfile': Операция не позволяется
[baturin@zax /tmp/testdir]$sudo chattr -i ./testfile       # Пока не снимет атрибут
[baturin@zax /tmp/testdir]$sudo rm ./testfile       
 

Атрибут «a» (append only) — разрешение записи только в конец файла

К содержанию файла с эти атрибутом можно будет только добавить что-то в конец, но не перезаписать существеющее. Пригодится, к примеру, для файла с просьбами к системному администратору. Каждый пользователь сможет добавить туда свою, но не сможет повлиять на чужие. Смотрим в действии:

[baturin@zax /tmp/testdir]$touch ./append_only
[baturin@zax /tmp/testdir]$sudo chattr +a ./append_only 
[baturin@zax /tmp/testdir]$echo "test" > ./append_only 
zsh: Операция не позволяется: ./append_only
[baturin@zax /tmp/testdir]$echo "test" >> ./append_only
[baturin@zax /tmp/testdir]$echo "test test" >> ./append_only
[baturin@zax /tmp/testdir]$rm ./append_only 
rm: невозможно удалить `./append_only': Операция не позволяется

Заключение

На сегодня пока все, надеюсь, эти сведения окажутся полезными. Можно только добавить, что просмотреть атрибуты файла вы сможете командой lsattr, а в man chattr и в man lsattr найти дополнительные сведения.


Полный текст сообщения

10 окт. 2009 г.

Настройка Vyatta в качестве шлюза небольшого офиса

После некоторого времени затишья я возвращаюсь к вам, уважаемые читатели, с очередной длинной и нечитаемой статьей.

Предыстория

До недавнего времени для построения корпоративных маршрутизаторов, межсетевых экранов и vpn-концентраторов было только два варианта. Либо готовые к использованию, интегрированные проприетарные решения, либо настроенные под конкретную задачу UNIX-системы. При этом готовые решения используют зачастую ни с чем не совместимое аппаратное обеспечение (включая модули расширения вроде сетевых карт или оперативной памяти), закрыты и не поддаются модификации; а при использовании UNIX общего назначения многое нужно делать вручную и настройки разбросаны по многим файлам, в итоге их тяжело сопровождать. Но недавно я обнаружил, что уже существует решение, сочетающее достоинства обоих вариантов: интегрированность и простоту сопровождения с гибкостью и открытостью.

Называется этот проект Vyatta, и меня он очень вдохновил. Поэтому сегодня мы рассмотрим пример настройки этой системы для шлюза небольшой компании с полным его разоблачением подробными комментариями.

Что же она собой представляет? По сути, это специализированный дистрибутив Linux для построения маршрутизаторов и шлюзов. Причем не какой-нибудь, а с единым интерфейсом для настройки и управления всеми входящими в комплект сервисами. То есть, работа с ним происходит примерно так же, как с аппаратными решениями. Система команд напоминает устройства Juniper Networks, но и администраторы Cisco в ней не потеряются.

В числе доступных «из коробки» в версии Vyatta Community 5.0.2 присутствуют:

  1. Поддержка статических маршрутов, BGP, OSPF и RIP;
  2. Файрволл с учетом состояний соединения;
  3. VPN по протоколам IPsec, PPTP и OpenVPN;
  4. Туннели PPPoE, IP-IP и GRE;
  5. Шейпинг и QoS;

и еще довольно много чего. Много чего еще нет, например NetFlow и PPTP-клиента. Их можно поставить вручную, правда и настраивать их придеться руками, доступа через родной интерфейс не будет. Радует то, что проект постоянного развивается, и рано или поздно многое будет встроено. Ну и открытость кода позволяет самому дописать недостающее.

Получаем и устанавливаем дистрибутив

После довольно длинного введения приступим к делу. Загрузить дистрибутив можно с официального сайта. Я ставил с LiveCD, для желающих есть образы для Xen и VMWare. Установка ничего сложного собой не представляет, просто загружаемся, заходим под пользователем vyatta с таким же паролем и набираем команду install-system. Отвечаем на вопросы диалогового интерфейса установки и несколько минут ждем завершения.

Настраиваем систему

В свежеустановленной системе есть два пользователя: root и vyatta. У первого оболочкой поставлен привычный bash, у второго собственная оболочка системы, которая нам и интересна. Удалить этих пользователей не получится. После загрузки заходим под пользователем vyatta с паролем, который вы набрали при установке.

Вы увидите приглашение командной строки вида vyatta@vyatta:~$. Как и во всех приличных сетевых устройствах, по клавише «?» вы можете увидеть список доступных команд. Автодополнение по Tab тоже способно его выдавать. Привычных администраторам устройств Cisco Systems сокращений команд тут нет. Зато есть возможность выполнять обычные команды Linux, хотя их и не показывают в справке. Причем их вполне можно комбинировать с «родными», вроде

show configuration | grep eth0.

Можно посмотреть на нетронутые настройки по умолчанию командой show configuration. Который мы в скором времени безжалостно отредактируем под свои нужды. Сразу можно заметить, что настройки имеют иерархическую структуру.

Сейчас мы находимся в режиме оператора, о чем нас оповещает «$» в приглашении. Перейти в режим администрирования можно с помощью команды configure. Знак приглашения при этом изменится на «#». Некоторые команды в разных режимах действуют по разному, сравните, например, вывод show interfaces.

Настраиваем сетевые интерфейсы

Прежде всего нам нужно настроить сетевые интерфейсы. В нашем примере физических интерфейсов Ethernet будет два — один смотрит в локальную сеть, второй в Интернет. Названия интерфейсов такие же, как в Linux. Интерфейсы Ethernet будут называться ethX. IP-адрес задаем командой вида:

set interfaces ethernet eth0 address x.x.x.x/y

где x.x.x.x некоторый адрес, y — маска подсети. Теперь посмотрим, как изменились настройки командой show interfaces.

  ethernet eth0 {
     +address x.x.x.x/y
     hw-id xx:xx:xx:xx:xx:xx
 }
 ethernet eth1 {
     hw-id xx:xx:xx:xx:xx:xx
 } 

Командой set interfaces ethernet eth0 description "text" можно установить текстовое описание для интерфейса. Например LAN interface. Обратите внимание на символ «+» перед строкой address. Он значит, что изменения в настройки уже внесены, но еще не применились. Их можно применить командой commit или отменить командой discard. Также нужно учитывать, что commit вносит изменения только в те настройки, которые сейчас загружены в память. Чтобы сохранить их в постоянный файл конфигурации, используйте команду save.

Второй интерфейс у нас будет смотреть в Интернет. Предположим, что провайдер использует для подключения PPPoE. Тогда мы должны написать примерно следующее:

 set interfaces ethernet eth1 pppoe 0
 edit interfaces ethernet eth1 pppoe 0
 set user-id username
 set password some_password
 set default-route auto 

На этом примере мы видим еще одну особенность интерфейса. Каждый узел интерфейса можно редактировать отдельно после команды edit . Вместо edit мы могли использовать серию команд с указанием полного пути, вида set interfaces ethernet eth1 pppoe 0 user-id. Поднятся на верхний уровень вы всегда сможете командой top. Удалить любой из узлов вы можете командой delete, например,

delete interfaces ethernet eth0 address

После применения настроек PPPoE соединение установится автоматически. Также вы можете установить его вручную, перейдя в режим оператора (команда exit) и набрав

connect interface pppoe0

Настраиваем NAT

В нашей сети будут использованы «серые» адреса. Поэтому нам не обойтись без трансляции сетевых адресов, также известной как NAT. Мы настроим доступ в Интернет из локальной сети и доступ из Интернета к серверу нашей компании. Начнем с доступа изнутри сети (обозначим ее x.x.x.z/y).

 set service nat
 edit service nat
 set rule 10 type masquerade
 set rule 10 outbound-interface pppoe0
 set rule 10 source address x.x.x.z/y
 set rule 10 description "Local network to the Internet" 

Теперь пробросим порт 80 (http) на корпоративный сервер. Правило будет выглядеть так:

 set rule 20 type destination
 edit rule 20
 set protocol tcp
 set destination address <адрес внешнего интерфейса (pppoe0)>
 set destination port 80
 set inbound-interface pppoe0
 set inside-address address x.x.x.w
 set inside-address port 80 

Правила NAT обозначаются числами от 1 до 1024, по старым традициям я предпочитаю нумеровать их через десятку (чтобы можно было что-то добавить, не нарушая логическую группировку правил).

Не забудьте применить и сохранить настройки!

Удаленный доступ по SSH

С этим все просто. Для безопасности мы запретим вход под пользователем root и принудительно поставим вторую версию протокола.

 set service ssh
 edit service ssh
 set allow-root false
 set protocol-version 2 

Заключение

Мы получили минимальную конфигурацию, с которой уже можно начать работать. Если у вас уже есть опыт работы с сетью, продолжить вы сможете уже сами. В этом вам поможет официальная документация, которую вы тоже можете загрузить с сайта.

Для тех, кто предпочитает графические интерфейсы, у Vyatta есть веб-интерфейс. По умолчанию он отключен, и вы можете включить его командой

set service https

Ссылки

  1. http://vyatta.com — сайт проекта.
  2. http://vyatta.org — сайт сообщества.

Полный текст сообщения