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

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

Тэги: Internet, Ubuntu Категория: Linux
15.03.2011
Комментариев: 0| Просмотров: 157630
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

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

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