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

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

Вот уже некоторое время я активно использую для работы в качестве серверной ОС дистрибутив 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 (отвечаем на все вопросы, не забываем указать чтобы интерфейс поднимался во время загрузки)

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

Первым делом после подключения сервера к Интернет необходимо включить межсетевой экран (фаервол, 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

    Подпишись на наш канал в Telegram или VK - первым узнавай о бесплатных вебинарах и курсах, а так же скидках на платное обучение.

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

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

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

Squid позволяет кэшировать http трафик из интернет, что сделает ваш интернет шлюз на Ubuntu более производительным,  а так же снизит нагрузку на интернет-канал и сэкономит трафик. Это по-прежнему актуально во многих регионах России не смотря на доступность безлимитных тарифов.

  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 раньше позволял управлять доступом к веб-сайтам посредствам управления acl squid, ныне проект заброшен, поэтому можете пропустить пункты про sams и настроить ваш интернет шлюз на Ubuntu без ограничений.

Ставим 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

Настройка 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 "example.com"; #домен поиска по умолчанию
    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; };
     };

     

Заключение

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

Онлайн образование
Добавить комментарий

Нажимая на кнопку "Отправить комментарий", я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.