Пример настройки сетевой подсистемы Ubuntu Server

    Общий рейтинг статьи: 0 (проголосовало 0 )
    Опубликовано:  [просмотров 342]


    Рассмотрим несколько специфичных моментов настройки сетевой подсистемы Ubuntu Server. Я не претендую на истину в первой инстанции но именно такой подход является довольно устоявшейся и хорошо зарекомендовавшей себя практикой.

    Пример схемы настройки сетевой подсистемы Ubuntu Server

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

    Для перенастройки сетевой подсистемы Ubuntu linux в режим работы мост необходимо установить пакет для работы с сетевыми мостами командой:

    # aptitude install bridge-utils

    Конфигурация сетевой подсистемы находится в конфигурационном файле /etc/network/interfaces. Типовой файл имеет вид:

    auto lo
    iface lo inet loopback

    auto eth0
    iface eth0 inet static
    address 93.170.131.195
    netmask 255.255.252.0
    network 93.170.128.0
    broadcast 93.170.131.255
    gateway 93.170.128.1
    dns-nameservers 8.8.8.8

    Нам потребуется перенастроить сетевые интерфейс таким образом, чтобы интерфейсу eth0 не было назначено сетевого адреса, а сетевые настройки в свою очередь назначим виртуальному интерфейсу lxc-bridge (сетевой мост) членом которого сделаем реальный интерфейс. Звучит сложновато, но на деле в конфигурацию потребуется внести не так много изменений:

    auto lo
    iface lo inet loopback

    auto lxc-bridge
    iface lxc-bridge inet static
    address 93.170.131.195
    netmask 255.255.252.0
    network 93.170.128.0
    broadcast 93.170.131.255
    gateway 93.170.128.1
    dns-nameservers 8.8.8.8
    bridge_ports eth0
    bridge_fd 9
    bridge_hello 2
    bridge_maxage 12
    bridge_stp off

    Сетевой интерфейс eth0 настраивается автоматически и в дополнительной настройке не нуждается, необходимо только указать его в параметре bridge_ports.

    В большинстве случаев Ubuntu Server выполняет функции маршрутизатора, а функционал маршрутизации пакетов по умолчанию отключен. Для временного включения функционала маршрутизации пакетов выполните команду:

    # echo 1 > /proc/sys/net/ipv4/ip_forward

    Для активации форвардинга пакетов на постоянной основе модифицируйте файл /etc/sysctl.conf, раскомментировав или добавив следующий параметр:

    net.ipv4.ip_forward=1

    Обратите внимание, что если вы не используете протокол IPv6 (например провайдер не предоставляет вам поддержку пула адресов IPv6), то лучше отключите его поддержку изменив следующие параметры в файле /etc/sysctl.conf:

    net.ipv6.conf.all.disable_ipv6 = 1
    net.ipv6.conf.default.disable_ipv6 = 1
    net.ipv6.conf.lo.disable_ipv6 = 1

    Дополнительно можно полностью отключить поддержку IPv6 добавив запрет использования IPv6 на этапе загрузки, для чего в файле /etc/default/grub измените параметр GRUB_CMDLINE_LINUX_DEFAULT:

    GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1"

    После внесения изменений выполните обновление загрузчика GRUB командой:

    # update-grub

    Для применения изменений потребуется перезагрузка. Если вы все выполнили правильно, то в результате выполнения команды ifconfig вы больше не увидите сведений связанных с протоколом IPv6:

    # ifconfig eth0
    eth0 Link encap:Ethernet HWaddr 00:50:56:08:74:59
    UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
    RX packets:8943 errors:0 dropped:0 overruns:0 frame:0
    TX packets:431 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:1000
    RX bytes:599053 (599.0 KB) TX bytes:43383 (43.3 KB)

    Напоследок приведем пример того как мы реализуем применение правил Firewall (iptables) при загрузке сервера. Существует несколько штатных решений таких как сервис iptables (/etc/init.d/iptables) и UFW (Uncomplicated Firewall) эти решения достаточно хорошо описаны, но на мой взгляд являются недостаточно гибкими, я в свою очередь предпочитаю старый добрый файл с описаниями правил iptables, который в минимальном варианте выглядит следующим образом (/etc/firewall.sh):

    #!/bin/sh
    #########################
    # Настройки интерфейсов #
    ########################
    IF_MAIN_BRIDGE="bridge-2-lan"
    IPT="/sbin/iptables"

    ####################
    # Правила iptables #
    ####################

    # Удаляем все старые правила
    $IPT -F
    $IPT -X
    $IPT -t nat -F
    $IPT -t nat -X
    $IPT -t mangle -F
    $IPT -t mangle -X

    # Настраиваем политики по умолчанию
    $IPT -P OUTPUT ACCEPT
    $IPT -P INPUT DROP
    $IPT -P FORWARD DROP

    # Разрешаем все операции с loopback интерфейса
    $IPT -A INPUT -i lo -j ACCEPT
    $IPT -A FORWARD -o lo -j ACCEPT

    # Поддерживаем уже установленные соединения
    $IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    $IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

    # Разрешаем доступ по SSH (все интерфейсы)
    $IPT -A INPUT -p tcp --dport 22 -j ACCEPT

    После добавления дополнительных правил просто запустите файл заново и таблицы правил Firewall будут очищены и заново построены. В случае использования файла с правилами некоторые системные администраторы помещают его на запуск в файл /etc/rc.local, что не совсем правильно, так как правила применяются по окончании запуска всех служб, а не на этапе настройке сетевого интерфейса.

    Для применения правил на этапе настройки сетевого интерфейса добавьте параметр post-up в файл конфигурирования сетевых интерфейсов /etc/network/interfaces:

    auto eth0
    iface eth0 inet dhcp
    post-up /etc/firewall.sh


    Обсуждение статьи

    Ваш комментарий: