Главная » 2011 » Март » 15

Интернет шлюз на Ubuntu

Тэги: Internet, Ubuntu Категория: Linux
15.03.2011
Комментариев: 22| Просмотров: 154049
Linux: Интернет шлюз на Ubuntu | showmehow.ru


Вот уже некоторое время я активно использую для работы в качестве серверной ОС дистрибутив Ubuntu Server. Описывать причины выбора я не буду, попробую только представить на ваш суд небольшое руководство написанное мной для собственного пользования. Руководство позволяет создать на базе Ubuntu Server - интернет шлюз для организации коллективного доступа в интернет сети компьютеров используя одно соединение с интернет. При этом весь HTTP траффик проверяется антивирусом на стороне шлюза, затем кэшируется, так же кэшируются DNS запросы клиентов, ограничивается доступ клиентов в сеть, адреса клиентам выдаются автоматически с помощью DHCP сервера. Одним словом минимальный набор функций для интернет-шлюза сети небольшого офиса или домашней сети.

Рекомендации перед установкой

  1. Рекомендую использовать для серверов только дистрибутивы Ubuntu Server длительной поддержки LTS (Long Term Support). Кроме того, что обновления и поддержка этих версий дистрибутивов длится 5 лет, по опыту они ещё и более стабильны по сравнению с обычными дистрибутивами.
  2. Перед установкой на «самосборное» железо рекомендую провести тщательную проверку оборудования: проверить жёсткий диск с помощью MHDD, память с помощью Memtest86+ и т.п., установить последние обновления микропрограмм BIOS, контроллеров IDE\SATA и т.п.
  3. Рекомендуемые системные требования к оборудованию: Процессор P4 и выше, память 512 мб, HDD не менее 20 GB.

Установка сервера

Разметка Диска

  1. /boot ext2 nodev,noatime 200 Mb
  2. swap размер ОЗУ*2
  3. / ext4 defaults 3 Gb
  4. /usr ext4 defaults 2 gb
  5. /tmp ext4 nodev,nosuid, 2 Gb
  6. /home ext4 nodev,nosuid, 1 Gb
  7. /var ext4 nodev,nosuid всё оставшееся пространство

Установка ПО

  • На этапе установки поставить только openssh

Настройка сервера

Значения некоторых параметров описываемой системы, которые вы должны\можете заменить на свои во время установки и настройки интернет-шлюза:

  • Внутренняя сеть которая находится за шлюзом здесь и далее по тексту - 192.168.1.0 с маской 24 бита (255.255.255.0)

  • Внутренний интерфейс шлюза (смотрит во внутреннюю сеть) - eth0

  • Внешний интефейс шлюза (смотрит в публичную сеть, например Интернет) - eth1 (в вашем случае это может быть Ethernet интерфейс с другим порядковым номером, например eth1, или ppp интерфейс, например ppp0 подключаемы по PPPoE)

Настройка сети

Настройка интерфейсов

Настройка интерфейсов производится путём редактирования файла /etc/network/interfaces, пример:

 #внутренний
 auto eth0
 iface eth0 inet static
 address 192.168.1.1
 netmask 255.255.255.0
 network 192.168.1.0 #необязательный параметр
 broadcast 192.168.1.255 #необязательный параметр
 #необязательный параметр статический маршрут, который прописывается при подъёме интерфейса
 #up route add -net 192.168.0.0/16 gw 192.168.87.1 eth0 
 #up route add -net 10.0.0.0/8 gw 192.168.87.1 eth0
 dns-nameservers 192.168.1.1 #необязательный параметр днс-сервера
 dns-search tesell.ru #необязательный параметр домен поиска

 # внешний
 auto eth1
 iface eth1 inet static
 address 2.2.2.2
 netmask 255.255.255.252 # маска 30
 network 2.2.2.0
 broadcast 2.2.2.3
 gateway 2.2.2.1

Если внешний интерфейс pppoe то настраивается с помощью мастера pppoeconf (отвечаем на все вопросы, не забываем указать чтобы интерфейс поднимался во время загрузки)

Настройка файервола

Первым делом после подключения сервера к Интернет необходимо включить межсетевой экран (фаервол, firewall)

  1. Перед включением файервола нужно оставить себе доступ по SSH, для дальнейшей настройки сервера. Следующая команда откроет порт SSH для всех:

    $ sudo ufw allow 22/tcp

    Однако лучше оставить порт открытым только для внутренней сети:

    $ sudo ufw allow proto tcp from 192.168.1.0/24 to 192.168.1.1 port 22

     

  2. Включим политику блокировать всё остальное

    $ sudo ufw default deny

     

  3. Включаем в файерволе форвардинг пакетов - необходимо, чтобы наш шлюз мог пересылать пакеты из внутренней сети в интернет и обратно. Для этого отредактируем файл /etc/default/ufw

    DEFAULT_FORWARD_POLICY="ACCEPT"

     

  4. в /etc/sysctl.conf раскомментируем строчку net.ipv4.ip_forward=1 аналогично для ip6 net.ipv6.conf.default.forwarding=1 (при необходимости) после чего необходимо выполнить команду:

    $ sudo sysctl -p
    

    Этот параметр так же можно изменить в файле /etc/ufw/sysctl.conf, он применится при включении UFW. В последнем случае синтаксис немного отличается (вместо точек слэши) net/ipv4/ip_forwarding. Включенная настройка в /etc/ufw/sysctl.conf перекрывает настройки заданные в /etc/sysctl.conf.

  5. Включаем NAT для этого добавляем в файл /etc/ufw/before.rules сразу после заголовочного комментария

    # Табица NAT
    *nat
    :PREROUTING ACCEPT [0:0]
    :POSTROUTING ACCEPT [0:0]
    #Очистка
    -F PREROUTING
    -F POSTROUTING
    # включаем трансляцию из сети 192.168.1.0 через интерфейс подключенный к интернету (eth1)
    -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j MASQUERADE
    # NAT клиентов различных IM сетей, ICQ, Jabber, Mail.Ru
    -A POSTROUTING -p tcp -m tcp -m multiport -s 192.168.1.0/255.255.255.0 -o eth1 -j MASQUERADE --dports 5190,5222,5223,2041,2042
    
    # перенаправление. все http запросы на порт прокси (прозрачный прокси)
    #-A PREROUTING -s 192.168.1.0/24 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
    
    # don't delete the 'COMMIT' line or these nat table rules won't be processed
    COMMIT

     

  6. перезапускаем файервол

    $ sudo ufw disable && sudo ufw enable

     

  7. Добавим разрешение для внутренней сети:

    $ sudo ufw allow from 192.168.1.0/24

    Для более тонкой настройки безопасности рекомендуется ограничить так же доступ из внутренней сети только к необходимым портам.

Ставим havp+clamav

  1. Устанавливаем антивирусный прокси havp и антивирус clamav

    $ sudo apt get install clamav havp

     

  2. обновляем бд антивируса

    $ sudo freshclam

     

  3. Для проверки устанавливаем в браузере адрес прокси порт 8080

  4. Привязываем havp ко всем интерфейсам, для этого в конфиге /etc/havp/havp.config BIND_ADDRES закоментируем. Перезапускаем havp

    $ sudo /etc/init.d/havp restart 

    Проверяем работоспособность http://www.eicar.org/anti_virus_test_file.htm пытаемся скачать тестовые файлы на что должны получить предупреждение.

  5. После успешной проверки отключаем привязку havp ко всем интерфейсам, оставив его только на интерфейсе-заглушке (loopback) ищем в конфиге BIND_ADDRESS раскомментируем и ставим значение 127.0.0.1

Устанавливаем Squid

  1. Устанавливаем кэширующий прокси сервер Squid

    $ sudo apt-get install squid

     

  2. Перед настройкой на всякий случай делаем резервную компию конфигурации по умолчанию:

    sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.bkp

     

  3. Настраиваем сквид редактируя файл /etc/squid/squid.conf. Ищем и меняем параметр cache_dir на

    cache_dir diskd /var/spool/squid 100 16 256 

    цифра 100 - размер в мегабайтах под кэш, измените её под свои реалии.

  4. Настраиваем на использование havp в качестве верхнего прокси

    cache_peer 127.0.0.1 parent 8080 0 no-query default no-digest no-delay

     

  5. Запрещаем ходить по http в обход антивируса:

    acl Scan_HTTP proto http
    never_direct allow Scan_HTTP

     

Ставим sams

  1. Скачиваем deb пакеты с сайта http://sams.nixdev.net/ sams-web, sams

  2. Устанавливаем необходимые для работы пакеты

    $ sudo apt-get install mysql-server apache2 php5 php5-mysql (во время установки спросит пароль для администратора mysql)

     

  3. Переходим в папку со скачанными deb пакетами sams и устанавливаем:

    $ cd /home/user/downloads/sams/
    $ sudo dpkg -i sams*.deb

     

  4. Создаём БД sams yourpassword следует заменить на свой придуманный или сгенерированный пароль

    mysql -u root -p
    GRANT ALL ON squidctrl.* TO sams@localhost IDENTIFIED BY "yourpassword";
    GRANT ALL ON squidlog.* TO sams@localhost IDENTIFIED BY "yourpassword";

     

  5. Создаём структуру таблиц БД sams

    mysql -u root -p < /usr/share/sams/mysql/sams_db.sql
    mysql -u root -p < /usr/share/sams/mysql/squid_db.sql

     

  6. редактируем файл /etc/sams.conf устанавливаем в следующие переменные данные с прошлого шага:

    MYSQLUSER=sams
    MYSQLPASSWORD=yourpasswd

     

  7. Редактируем /etc/init.d/sams меняем SAMS_ENABLE с «false» на «true»

  8. Запускаем службу SAMS

    $ sudo /etc/init.d/sams start

     

  9. Включаем редиректор sams в настройках сквида:

    url_rewrite_program /usr/bin/samsredir

    или (в более ранних версиях Squid)

    redirect_program /usr/bin/samsredir

     

Настройка SAMS

  1. Вэб-консоль управления SAMS доступна по адресу http://192.168.1.1/sams/ . Если консоль недоступна - первое перезапустить WEB-сервре apache2

    $ sudo /etc/init.d/apache2 restart

    второе проверить доступность порта 80 в настройках фаервола.

  2. Входим с паролем по умолчанию (admin:qwerty) и сразу меняем пароль в веб интерфейсе на что-то менее подбираемое.

  3. Включаем русский язык в разделе Web-interface settings

  4. Включаем в настройках SAMS авторизацию по ip

  5. Добавляем пользователей по IP кликнув по разделу «Пользователи» затем по кнопке с плюсиком в нижней панели.

  6. После добавления всех пользователей необходимо применить настройки к squid. Для этого в дереве выбрать раздел squid, затем в нижней панели нажать кнопку «Реконфигурировать squid»

Без SAMS - полный доступ всей сети

Если вы не хотите прописывать по отдельности каждого пользователя, вам не нужна детальная статистика и возможность ограничения которые предоставляет SAMS то вы можете выдать доступ сразу всей внутренней сети. При этом вы так же можете ограничить доступ тем или иным пользователям используя другие средства, например редиректор sarg или rejik.

  1. Для предоставления доступа всей внутренней сети 192.168.1.0 настройках squid прописать

    acl localnet src 192.168.1.0/24
    http_access allow localnet

     

  2. Перезапустить

    $ sudo squid /etc/init.d/squid restart

     

Включение прозрачного проксирования

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

  1. Чтобы включить прозрачный прокси в конфигурационном файле Squid /etc/squid/squid.conf отредактировать строчку:

    http_port 3128

    заменить на

    http_port 192.168.1.1:3128 transparent

    где 192.168.1.1 - внутренний айпи адрес вашего шлюза

  2. Разкоментировать в конфиге фаервола /etc/ufw/before.rules описанную выше строчку:

    -A PREROUTING -s 192.168.1.0/24 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
    

     

Установка DHCP

Сервер DHCP будет выдавать в автоматическом режиме IP-адреса клиентам в вашей внутренней сети.

  1. Установка DHCP сервера:

    $ sudo apt-get install dhcp3-server

     

  2. Интерфейс в сеть, на которую нужно раздавать адреса уже должен быть настроен и поднят!

  3. Правим файл конфигурации /etc/dhcp3/dhcpd.conf

    option domain-name "tesell.ru"; #домен поиска по умолчанию
    option domain-name-servers 192.168.1.1, 192.168.2.2; #адреса днс-серверов
    subnet 192.168.1.0 netmask 255.255.255.0 {
    range 192.168.1.100 192.168.1.200;
    option routers 192.168.1.1;
    }

     

  4. Перезапустить сервис командой:

    $ sudo /etc/init.d/dhcp3-server restart

     

  5. Просмотреть выданные адреса можно в файле /var/lib/dhcp3/dhcpd.leases

Установка и настройка локального кэширующего DNS-сервера

Локальный кэширующий DNS необходим чтобы ускорить время разрешения IP адресов серверов расположенных в интернет. Запрошенное имя и его ip-адрес на время сохраняются в памяти сервера и на последующий запрос выдаются значительно быстрее.

  1. Установка

    $ sudo apt-get install bind9

     

  2. Редактируем конфигурационный файл /etc/bind/named.conf.options

    acl "corpnets" { 192.168.1.0/24; }; #адрес локальной сети которой разрешены запросы к серверу
    options {
     directory "/var/cache/bind";
     allow-query { "corpnets"; };
     forwarders {
     83.136.112.246; # сервера на которые пересылать запросы
     89.249.117.226;
     };
     auth-nxdomain no; # conform to RFC1035
     listen-on-v6 { any; };
     };
    

     

Заключение

Вы можете скачать это руководство в формате ODF здесь.

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

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

P.S. Приглашаю вас в группу Ubuntu для пользователя на сервисе Subscribe.Ru Ежедневно интересные новости, статьи, советы и видеоуроки о мире Linux вообще и о дистрибутиве Ubuntu в частности.

Полезные ссылки

  1. http://www.iana.org/assignments/protocol-numbers/ - номера протоколов IP

  2. http://www.iana.org/assignments/icmp-parameters - номера icmp сообщений

  3. http://www.iana.org/assignments/port-numbers - номера портов tcp\udp

  4. http://sudouser.com/ustanovka-i-nastrojka-dns-servera-bind9-ubuntu-debian-howto.html - установка bind9 в ubuntu

  5. http://www.t1shopper.com/tools/ - утилиты для тестирования сервера из интернет

  6. мануал по установке HAVP http://www.tux.in.ua/articles/812

  7. Мануал по настройке UFW https://help.ubuntu.com/8.04/serverguide/C/firewall.html

Оцените статью Комментариев: 22

Комментарии к статье Интернет шлюз на Ubuntu

Всего комментариев: 22
avatar
21 itbuddha96 • 19:03, 19.03.2016
Добрый день
сделал по вашему мануалу
ubuntu 14.04
на сервере инет есть, но через раз както dns перестает работать
на клиенте пинг идет и днс работает, но сайты не открываются
как найти проблему?
avatar
0
22 dkplayer • 13:22, 06.05.2016
по вашему описанию могу дать только общие рекомендации. Проверить работоспособность dns сервера через nslookup, проверить настройки на клиенте и сервере, проверить внешние dns сервера, к которым вы отправляете запросы из bind. Возможно поставить вместо dns серверов провайдера какие-нибудь общественные, например dns сервера яндекса - это добавит защиту от фишинга сайтов.
avatar
20 kerby • 12:02, 09.09.2011
Вроде все сделал по инструкции, но возникла проблема. Не работает инет с включенным редиректом sams. Вылезает страничка HAVP - DNS error. Без редиректа все работает. В чем может быть проблема? Заранее спасибо
avatar
18 gavru • 08:24, 25.08.2011
Есть вариант немного проще http://traffpro.ru позволяет иметь два провайдера и более, резервировать каналы, аварийно переключать при падении одно из них и так далее, много вкусностей по учёту и детализации, встроенный шейпер, файрвол, контроль, и так далее.
avatar
19 dkplayer • 09:39, 25.08.2011
Хорошо когда есть выбор! smile Trafpro хорошее решение, наверное, я не пробовал. Ещё есть IDECO и ещё куча других хороших решений.

Я описал своё, оно прекрасно работает, не без недостатков, но работает. Переключение между двумя провайдерами я решил с помощью простого скрипта, детализации и контроля на этом уровне мне хватает, межсетевой экран вообще встроен в ядро и присутствует в любом дистрибутиве в независимости от наличия traffpro или чего ещё... шейпер можно настроить при желании.

Весь смысл этого мануала - настроить всё самому и руками, используя по максимуму только стандартные открытые и бесплатные средства. SAMS единственная рюшечка для удобного управления пользователями сквида.
avatar
16 ivask • 00:45, 17.07.2011
Спасибо большое за подробную инструкцию. Это как раз то что я искал, так как в сетевом администрировании я ноль. Инструкция как раз для таких как я. Но у меня к Вам вопрос, как использую вашу инструкцию, сделать доступ не всей сети, а только выбранным 12 адресам еще на уровне файервола, так как не все в локалке нашей общаги участвовали в организации этого канала интернета, то хотелось бы к нему не допустить?
avatar
17 dkplayer • 06:30, 18.07.2011
На уровне фаервола это не кошерно, поскольку айпи адрес легко можно поменять. Я бы советовал вам лучше сделать авторизацию по имени и паролю с использованием SAMS. Это легко делается, в поле "Способ аутентификации пользователя:" ставите NCSA. После этого заводите пользователей прямо в SAMS, устанавливайте пароль, применяете настройки. Если же вам необходимо таки ограничить по IP то сделать это можно несколькими способами. Самый простой и удобный с моей точки зрения использовать ufw для настройки фаервола. Вот несколько примеров:
ufw default deny - по умолчанию всё запрещено.
ufw allow from 192.168.0.100 - разрешить доступ айпи 192.168.0.100
ufw allow proto tcp from 192.168.0.100 dest 192.168.0.1 port 3128 - разрешить доступ с ip 192.168.0.100 на порт прокси сервера размещённом на ip 192.168.0.1
avatar
14 DSA • 10:05, 05.07.2011
Большое спасибо за помощь! Еще раз попробовал с начала и оказалось что не создавались файлы .sams в папке /etc/squid...скорее всего из-за того что все это проделовалось на виртуалке..заметил что меняя такие параметры как "регулярные выражения" и т.п. файлы .sams появились через минут 20... а блокировка пользователя по исчерпанию трафика заработало вообще через час с хвостиком...но в итоге все работает замечательно...осталось перенести все на физическую машину..Еще раз, БОЛЬШОЕ СПАСИБО!!!
avatar
15 dkplayer • 10:15, 05.07.2011
Да НеЗаЧто smile
avatar
12 DSA • 18:38, 29.06.2011
Перед тем как менять в самсе копирую чистый(ранее забэкапленный)конф файл сквида...авторизация по ИП маска 255.255.255.255 имя пользователя 1...если разрешаю перенаправление на порт 3128 в фаерволе, то через браузер нельзя зайти ни на страничку самса, ни в интернет...попробовал сделать все с нуля - тоже самое... но сейчас вываливается ошибка , при перезагрузке сквида, "ACL name _sams_ not defined" FATAL: Bungled squid.conf line 3517: delay_access 1 allow _sams_"
avatar
13 dkplayer • 06:30, 30.06.2011
Перед тем как включить перенаправление убедитесь что сквид традиционным способом работает. Т.е. пропишите в самсе ип пользователя, примените изменения (нажать кнопку реконфигурировать squid), затем в браузере пропишите ИП прокси и порт и проверьте работает ли он. Если всё работает то настраиваете squid в режим transparent и включаете перенаправление.
avatar
10 DSA • 18:00, 17.06.2011
В очередной раз обращаюсь к Вам за помощью!:)Установил squid+havp+clamav+dhcp+bind включил прозрачное проксирование, без САМСа все работает...но ведь хочется чтоб было красиво...устанавливаю и начинаю менять в САМСе настройки, переконфигурирую СКВИД и на этом все... странички не грузятся... Возможно есть какая-то очень важная "мелочь" которую нельзя упускать!?
avatar
11 dkplayer • 08:35, 19.06.2011
что конкретно делаете? какие настройки самса меняете? если сначала для проверки с сквиде разрешили доступ всей вашей сети, а потом в самсе добавляете хосты из этой сети то это может стать причиной ошибки, необходимо удалить в сквиде разрешение для сети перед использованием самс. Если "авторизация" в самсе по ИП то учтите что маска должна быть 255.255.255.255 у каждого хоста.
avatar
7 DSA • 09:09, 16.06.2011
Большое спасибо! Действительно не поставил COMMIT :)
avatar
8 dkplayer • 09:15, 16.06.2011
На здоровье! smile
avatar
5 DSA • 18:33, 15.06.2011
после редактирования before.rules вываливается ошибка "Bad argument '*filter' Error occured at line 19" , если вписать НАТ после секции "фильтр" матерится на "Bad argument '*nat'" Подскажите пожите, пожалуйста, в чем может быть проблема?
avatar
6 dkplayer • 07:00, 16.06.2011
Структура следующая:
*nat

#правила нат

COMMIT

*filter

# правила filter

COMMIT

Вообще все конфиги рабочие, писал для себя и собрал по ним уже не один шлюз, поэтому просто скопируйте, а затем меняйте значения. Скорее всего вы забыли как раз COMMIT, он важен.
avatar
3 Diman • 20:57, 21.03.2011
Ideco дороговато!
Вот если бы еще прикрутить авторизацию и ограничение трафика(и отключения после перерасхода) было прекрасно!!!
avatar
4 dkplayer • 06:08, 22.03.2011
Описанная выше система позволяет (с помощью SAMS) ограничивать доступ пользователей по IP, ограничивать траффик (пропускная способность, объём скачанного за месяц), а после изучения документации можно так же настроить авторизацию по имени и паролю, ntlm или AD в домене Windows.
avatar
9 dkplayer • 09:16, 16.06.2011
Кстати у IDECO появилась бесплатная для домашнего пользования версия системы, на 5 пользователей. Так что можно поюзать эту мощь...
avatar
1 SergeyS • 09:04, 17.03.2011
А для установки Ideco ICS достаточно нажать "Установить".
Хотя, конечно в отличии от Ubuntu она не бесплатная :)
avatar
2 dkplayer • 09:27, 17.03.2011
Ideco Молодцы! Уважаю! smile В отличие от Ubuntu она сертефицирована ФСТЭК, что в ситуации со 152 ф.з. актуально.
avatar

При полном или частичном копировании материалов сайта, установка ссылки на сайт источник: http://www.showmehow.ru обязательна!