Настройка шлюза для домашней локальной сети на Ubuntu Linux

Итак наша задача — сделать из компьютера под управлением Debian / Ubuntu (буду писать для Debian) шлюз или программируемый роутер для раздачи интернетов в локальную сеть. Рассмотрен пример с двумя сетевыми картами в раздающем (шлюзовом) ПК.

Если вы не укажите это, а провайдер автоматом вам не транслирует нс-сервера, то вы попросту не сможете ни работать в интернете, не пинговать внешние ресурсы. В общем пробуйте!

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

Итак, машинка доступна во внутренней сети, на самой машинке у нас есть интернет (проверить легко, залогиньтесь на нее по ssh и попингуйте яндекс например). Как нам раздать то интернет в локалку теперь? Проще простого! Воспользуемся специальной псевдо графической утилитой arno firewall.

apt-get install arno-iptables-firewall

P.s. Чтобы в дальнейшем реконфигурировать файрволл для добавления новых портов например, вводим команду: dpkg-reconfigure arno-iptables-firewall

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

На вопросы с DHCP отвечаем да , NAT — включить да, пинговать ли снаружи, как хотите, если будете с внешки лазить в офис / домой то да, в противном случае нет. Далее вас попросят указать, какие порты надо открыть для TCP и UDP подключений (входящего и исходящего траффика). Как правило у каждой программы есть свой порт, который указан в хелпе к ней, а так же имеется набор стандартных портов. 80 / 8080 https, 22 FTP, 21 SSH и так далее. Открывайте порты какие вам нужны. Обращаю ваше внимание еще раз на то, что если какая то программа будет пробовать что-то скачать / закачать через неуказанный тут порт, то у вас ничего не выйдет.

Номера портов разделяются пробелами а диапозоны через двоеточие между цифрами (без пробела). Так же удостоверьтесь что записи портов аналогичны и для UDP и для TCP вкладок, иначе будут казусы в духе того, что информацию программа отправляет, а получить не может — и наоборот.

Далее нас спросят о правилах CIDR и внутренней подсети. У нас внутренняя подсеть это 192.168.0.0/24 (это вписываем туда), эта запись позволит всем компьютерам сети 192.168.х.х получать внешнюю информацию. Вы можете так же отдавать интернет только избранным компьютерам или устройствам с определенным сетевыми адресами, укажите их тут же, строго ограничив адресацию.

А получилось следующее — на компьютере в локальной сети я указал явно адрес и шлюзом выставил наш раздающий компьютер-роутер с адресом 192.168.0.1 , НС-сервера на компьютере клиенте я установил провайдерские и ns-сервера гугла (адрес 8.8.8.8). И вуа-ля, интернет есть на нем.

Однако попробовав приконнектиться к сети с устройством, которое не умело само задавать себе адрес и шлюз, меня ждал облом! Раздачу адресов то мы не настроили. А это уже в следующей статье — сервера.

Дано: 1. Компьютер с двумя сетевыми картами. 2. Дистрибутив Debian или Ubuntu Linux. (я бы всё-таки советовал для сервера Debian) 3. Прямые руки и свежая голова.

Итак, приступаем!
Для начала перво-наперво установим Linux на компьютер, указав при этом все настройки сети. Я рекомендую устанавливать Debian, и в момент запроса у нас выбора необходимых пакетов, установим только основные компоненты системы и openssh-server. Всё, больше для работы шлюза на linux нам ничего не надо. Никаких графических оболочек. Устанавливать будем напрямую, а подключаться потом можно по ssh для управления удалённым сервером, или если не подключены клавиатура, мышь и монитор. Установка Debian на компьютер немногим отличается от установки Ubuntu.

Установив Linux на компьютер мы должны сделать его шлюзом. Для это он должен кое-что уметь.
1. Пропускать сетевые пакеты через себя. (FORWARD)
2. Транслировать сетевые адреса (преобразовать адреса локальной сети в 1 внешний адрес, под которым пользователь будет выходит в сеть). Иными словами шлюз (gateway) пускает через себя пользователей локальной сети под своим адресом. Можете назвать это программным роутером или как вам будет угодно. Служба эта называется NAT (Network Address Translation).

Но обо всём по порядку. Для начала настроим сетевые интерфейсы. Настройки локальной сети берёте у себя, настройки интернет - у провайдера. Если выход в интернет не по ip-авторизации, а через xDSL соединение, то используйте утилиту pppoeconf.

Представим, что у нас есть 2 настроенных сетевых интерфейса. Это локальный (eth0) и внешний (eth1). Интернет на шлюзе есть, яндекс пингуется, гугл туда же. Практически последняя задача - заставить наш шлюз на Linux пускать всех в инет через себя. Вот здесь хочу отметить, что на linux есть свой файрволл, и называется он iptables. По умолчанию iptables работает таким образом - "К себе никого не пущу, кроме как по тем соединениям, что были инициированы мной!" Но так не пойдёт) Поэтому настраиваем iptables:

Поехали:
1. Создаем файл с именем firewall.sh в папке /etc/init.d/

# touch /etc/init.d/firewall.sh

2. Даём права на запуск

# chmod 755 /etc/init.d/firewall.sh

3. Добавляем наш скрипт в автозагрузку. На всякий случай:)

# update-rc.d firewall.sh defaults

4. Ну и, собственно, редактируем наш скрипт.

# nano /etc/init.d/firewall.sh

Дадим ядру понять, что это реально.sh скрипт

# !/bin/sh (вот здесь прямо так вместе с символом # и пишем внутри! Это тот тип комментария, который нужен ядру)

Включим форвардинг в линукс.

echo 1 > /proc/sys/net/ipv4/ip_forward (1 - вкл, 0- выкл:))

Сбросим все настройки входящих, исходящих и форварда. Это поможет нам избавится от "неправильных" правил iptables, набранных в консоли. Просто запустим скрипт, и правила обновятся:

iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD

Политика по умолчанию - форвард разрешён:

iptables -P FORWARD ACCEPT

Добавим новое правило постмаршрутизации в сетевую таблицу "nat". Логика правила такая: С источника "локальная сеть" исходящие пакеты через внешний интерфейс должны "натиться" (передваться как один внешний), но мы будем маскарадить. Маскарад (MASQURADE) даёт возможность корректной работы с динамическим внешним ip адресом. iptables -A (новое правило) POSTROUTING (постмаршрутизации) -t (таблицы...) nat (...NAT) -s (source - с источника) 192.168.1.0/24 (всей локальной сети) -o (output - через исходящий...) eth1 (...интерфейс eth1) -j (job -работа (что делать?)) MASQUERADE (маскарадить). Т.е. получается такое правило iptables:

iptables -A POSTROUTING -t nat -s 192.168.1.0/24 -o eth1 -j MASQUERADE

Собственно всё. Можно ещё добавить в конец скрипта что-то вроде оповещения, которое будет говорить о том, что скрипт сработал:

echo firewall rules accepted
Сохраняем и закрываем. (Если редактировали через nano, как в этой статье, то жмём ctrl+o (сохранить) ctrl+x (закрыть)).
Теперь запустим наш скрипт

/etc/init.d/firewall.sh

Увидели сообщение "firewall rules accepted"? Никаких ошибок не было? Поздравляю! Шлюз на linux готов! Теперь все компьютеры из вашей локальной сети смогут ходить в интернет, правда совсем без каких либо ограничений. И да, если в вашей сети нет DNS сервера, то в настройках клиента нужно указать DNS сервера провайдера или например, DNS сервер Google ;) (адрес легко запомнить - 8.8.8.8)

iptables -A FORWARD -p igmp -i eth0 -o eth1 -j ACCEPT
iptables -I INPUT -d 224.0.0.0/4 -j ACCEPT
iptables -I FORWARD -d 224.0.0.0/4 -j ACCEPT
route add -net 224.0.0.0 netmask 240.0.0.0 eth0
iptables -t filter -A INPUT -d 224.0.0.0/240.0.0.0 -i eth0 -j ACCEPT
iptables -t filter -A INPUT -s 224.0.0.0/240.0.0.0 -i eth0 -j ACCEPT
iptables -t filter -A FORWARD -d 224.0.0.0/240.0.0.0 -j ACCEPT
iptables -t filter -A FORWARD -s 224.0.0.0/240.0.0.0 -j ACCEPT
iptables -t mangle -A PREROUTING -d 224.0.0.0/240.0.0.0 -p udp -j TTL --ttl-inc 1

Средствами ОС Linux легко раздать интернет в локальную сеть, как по проводным сетям, так и по wi-fi. В настоящее время появилось много роутеров, которые способны выполнить такую задачу.

Но у них тоже есть недостатки - некоторые без причин регулярно подвисают, требуя перезагрузки, у других функционал настроек доступа ограничен. Так что если есть желание полностью контролировать раздачу интернета в локальную сеть, лучшим вариантом будет настроить интернет шлюз на Linux.

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

Настройка интернет шлюза на Linux

Раздача интернета производится в Linux с помощью файрволлов. Их несколько видов, но основным, который постоянно развивается, дополняется новыми функциями, и в тоже время прост в настройке, является iptables .

В iptables раздать интернет можно с помощью трансляции сетевых адресов - NAT, а сам метод называется IP маскарадинг. Но кроме самой настройки правил iptables нужно загрузить модули ядра, отвечающие за трансляцию сетевых адресов (по умолчанию они отключены).

Самый простой способ - это сохранение настроек iptables и загрузки модулей ядра в конфигурационный файл. Затем только останется настроить его выполнение при каждом запуске компьютера. И естественно, на компьютере должны быть установлены две сетевые карты - с одной получают интернет, а другая будет раздавать интернет в локальную сеть. Или одна, если доступ в интернет организован c юсб-модема.

Вот пример, надо учесть, что в этом случае iptables установлен, но не настроен.

Процесс самой настройки интернет шлюза
Открываем консоль с правами администратора, создаем файл командой:

Touche /etc/nat.sh
Открываем в знакомом редакторе, здесь пример для nano:

Nano -w /etc/nat.sh
И вписываем в него строки

#!/bin/bash
Объявим переменные, пути для нужных исполняемых файлов и обозначения сетевых интерфейсов:

IPT=/sbin/iptables MDB=/sbin/modprobe
eth0 будем считать тот интерфейс, по которому интернет приходит на компьютер, а eth1 подключен к локальной сети, куда будет раздавать трафик интернет шлюз на Linux:

EX="eth0" INT="eth1"
Подгружаем нужные для NAT модули ядра:

$MDB ip_tables $MDB ip_conntrack $MDB ip_conntrack_ftp $MDB ip_conntrack_irc $MDB iptable_nat $MDB ip_nat_ftp $MDB ip_nat_irc
Разрешаем форвардинг пакетов:

Echo "1" > /proc/sys/net/ipv4/ip_forward echo "1" > /proc/sys/net/ipv4/ip_dynaddr
Сбрасываем все настройки iptables:

$IPT -P INPUT ACCEPT $IPT -F INPUT $IPT -P OUTPUT ACCEPT $IPT -F OUTPUT
В iptables правила настраиваются так - сначала запрещаются все соединения, а затем создаются правила, которые разрешают то или иное соединение

Устанавливаем блокировку на все цепочки:

$IPT -P INPUT DROP $IPT -P FORWARD DROP $IPT -P OUTPUT ACCEPT
далее пойдут разрешающие правила:

Сначала общие, не раздающие интернет, а разрешающие прохождение пакетов из внешнего интерфейса:

$IPT -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT $IPT-A INPUT -i lo -j ACCEPT $IPT -A INPUT -m conntrack --ctstate INVALID -j DROP $IPT -A INPUT -p tcp -m multiport --dports 21,22,1024:6800 -j ACCEPT $IPT -A INPUT - multiport --dports 21,80,8080,443,3306,8000,411,22,27015,26016 -j ACCEPT
А вот на каких правилах будет основан интернет шлюз на Linux - разрешаем форвардинг пакетов c внешнего соединения в локальную сеть:

$IPT -A FORWARD -i $EX -o $INT -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -A FORWARD -i $ EX -o $ INT -j ACCEPT
Включаем трансляцию адресов:

$ IPT -t nat -A POSTROUTING -o $EX -j MASQUERADE
Теперь сохраняем файл, делаем его исполняемым, chmod +x /etc/nat.sh, добавляем строчку sh /etc/nat.sh в файл rc.local до строки exit 0. Перезагружаемся и проверяем, есть ли интернет в локальной сети.

Это самый простой способ, можно организовывать контроль доступа, как компьютеров, так и сайтов c нежелательным контентом, ведение мониторинга соединений, но для этого лучше использовать интернет шлюз на Linux c прокси-сервером , например SQUID.

0. Задача

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

В начале было решено поставить на одном компе с двумя сетевыми картами Ubuntu и с помощью IPTables перенаправить трафик на прокси-сервер Squid, а для удобного управления прикрутить к нему веб-интерфейс SAMS. Однако после продолжительного гугления и разговоров со знакомыми решение было измененно, и в качестве дистрибутива был выбран ClarkConnect 4.3 . Его преимущества заключаются в том, что в нем уже есть все необходимое для поднятия сервера (WEB, FTP, Mail, прокси-сервера, сервера доступа, файл-сервера и пр) для малой и средней организации.

1. Установка

Скачать Clarkconnect Community можно . Дистрибутив распространяется в виде образа iso для последующего создания установочного диска. Пока записывается диск проверим соответствие выбранного компьютера минимальным системным требованиям (CPU 500Mhz, 512RAM, HDD 1Gb). Для начала установки загрузимся с созданного CD. Установка происходит в текстовом режиме, в виде диалога и в целом очень напоминает RedHat Linux. Среди языков есть русский, при выборе которого вы получите русифицированную инсталляцию, консоль и немного web-интерфейса(пока только Current status).
Основные моменты: выбор режим работы сервера Standalone (Изолированный) или Gateway (Шлюз) и разбивка диска с последующим выбором сервисов. При использовании режима Gateway необходимо использовать как минимум два сетевых адаптера. В этом режиме обеспечивается общий доступ в интернет, с контролем входящих и исходящих соединений.
При разбивке дисков следует внимательно отнестись к автоматическому режиму - вся информация на них будет уничтожена. Возможен ручной режим при помощи Disk Druid. Выбор сервисов зависит от того, какие функции вы хотите возложить на сервер.
После копирования файлов и перезагрузки вы можете локально войти в систему под учетной записью root используя приглашение ввести пароль. Здесь можно настроить сетевые интерфейсы и изменить роль сервера (Standalone/Gateway). Также присутствует анализатор трафика и естественно консоль.
Для настройки сервера предусмотрен web-интерфейс. Он доступен по умолчанию только на внутреннем интерфейсе (если есть необходимость входа с внешнего интерфейса потребуется в Firewall Incoming открыть 81 порт). Для входа наберите в адресной строке браузера https://(ip-адрес вашего сервера):81. При первом входе используйте логин root с паролем заданным во время установки, а в дальнейшем рекомендуется создать профиль с правами администратора и пользоваться им.

2.Первичная настройка

После входа в web-интерфейс перейдите в меню Reports, пункт Current Status — вы попадете в общие сведения об установленной системе. Здесь можно увидеть аппаратную конфигурацию вашего сервера, время работы с момента последней перезагрузки и информацию о файловых системах и точках монтирования. На статус использования памяти равный 99% не стоит реагировать её увеличением, все равно она будет использована вся без исключения. Так-же присутствует статус сетевых интерфейсов и объем трафика прошедшей через них.
Первое ваше действие после установки будет заключаться в регистрации системы на сайте (бесплатно) и загрузки необходимых обновлений. Идем на сайт www.clarkconnect.com, далее во вкладку Login и выбираем пункт Create account. После получения логина и пароля используем их при регистрации в web-интерфейсе зайдя в меню Services, пункт Register System. После завершения регистрации переходим к пунктам Critical Updates и Recommended Updates. Выбираем все обновления и устанавливаем их. В разделе Software Modules можно посмотреть и установить дополнительные модули.

3.Настойка модулей.

После обновления системы переходим в меню System во вкладку Running Services. На этой странице мы можем видеть состояния сервисов и управлять их запуском, а по ссылке Configure переходить к страницам их конфигурирования. В web-интерфейсе реализованы лишь базовые функции их настроек, которых достаточно для обеспечения начального функционирования. Для желающих осуществить более полноценное управление сервисами есть командная строка доступная по SSH.
Не забудьте воспользоваться меню Account Manager для создания администраторского и пользовательских профилей и групп. Помните,что например в web-почту https://(ip-адрес вашего сервера):83 невозможно авторизоваться под учетной записью root.

4.Общий доступ в Интернет.
Если при установке Clarkconnect вы выбрали роль сервера Gateway. то для обеспечения общего доступа в интернет все базовые настройки уже присутствуют.
Firewall уже настроен для блокирования запросов по всем портам за исключением порта 1875 требуемым для взаимодействия с www.clarkconnect.com. Исходящие соединения разрешены все. Управление модулем Firewall достаточно простое и не вызовет трудностей.
При помощи Network Tools вы можете увидеть активные соединения, таблицу маршрутизации и статистику протоколов.
Также доступно перенаправленные портов и выделение пользователям/ip-адресам/портам полосы пропускания с приоритетом использования. Например, если в вашей сети работает телефонный сервер Asterisk то его ip-адресу или порту (sip-5060) можно установить высший приоритет. Или наоборот пользователю использующему Emule можно ограничить полосу до 64kbit/sec и установить низший приоритет. Все это легко настраивается в меню Network, пункт Bandwidth.
Для экономии трафика и его учета воспользуйтесь модулем Proxy Server. При включении прозрачного прокси-сервера вы сможете просматривать статистику по пользователям/ ip-адресам/именам компьютеров в меню Report пункт Proxy Report.
Для распознавания/блокирования атак используется модуль Intrusion Detection/Prevention. Всем распознаваемым атакам присваивается код атаки, обозначение которого можно посмотреть нажав на него. IP-адреса с которых обнаружены атаки блокируются на 24 часа.
Ознакомиться со статистикой работы всех систем сервера можно в меню Report, пункт Statistics(графическое представление). Лог файлы там-же в пункте Logs.