- Настройка связки iptables и dnsmasq на Astra Linux «Смоленск»
- Похожие посты:
- Межсетевой экран ufw и модули iptables, поддерживающие работу с классификационными метками
- Установка модулей iptables, поддерживающих работу с классификационными метками
- Использование модулей iptables, поддерживающих работу с классификационными метками
- Использование ufw для работы с классификационными метками
- Настройка сети в Astra Linux «Смоленск»
- Похожие посты:
Настройка связки iptables и dnsmasq на Astra Linux «Смоленск»
Краткое руководство по настройке роутера в связке iptables + dnsmasq, а также проброс портов по IP-адресам машин в локальной сети на примере Astra Linux «Смоленск» 1.7.1. Также подойдёт для «Воронежа» и других редакций.
Исходные данные
Имеем на машине 2 сетевых интерфейса:
- eth0 — для внешней сети 192.168.1.0/24
- eth1 — для внутренней сети 192.168.100.0/24
Также у нас есть шлюз во внешней сети. Это маршрутизатор с IP-адресом 192.168.1.1
Наша задача — настроить доступ в Интернет для внутренней сети.
Открываем файл /etc/sysctl.conf
и раскомментировать строчку
Теперь создадим правила iptables. Для этого создадим каталог /etc/firewall/ и файл /etc/firewall/iptables.sh
# mkdir /etc/firewall/ # touch /etc/firewall/iptables.sh
# nano /etc/firewall/iptables.sh
и в нём пропишем такой скрипт:
#!/bin/sh iptables -F iptables -t nat -A POSTROUTING -o eth+ -j MASQUERADE iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -t filter -A INPUT -p icmp -j ACCEPT iptables -t filter -A INPUT -i lo -j ACCEPT iptables -t filter -A INPUT -i eth+ -j ACCEPT iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -t filter -A FORWARD -p icmp -j ACCEPT iptables -t filter -A FORWARD -i lo -j ACCEPT iptables -t filter -A FORWARD -i eth+ -j ACCEPT iptables -t filter -A FORWARD -o eth+ -j ACCEPT iptables -t filter -A INPUT -j REJECT --reject-with icmp-host-prohibited iptables -t filter -A FORWARD -j REJECT --reject-with icmp-host-prohibited iptables-save > /etc/network/iptables
# chmod u+x /etc/firewall/iptables.sh
Теперь откроем файл /etc/network/interfaces
# nano /etc/network/interfaces
и в самом конце пропишем строчку:
Также создадим файл /etc/network/iptables
Теперь вернёмся к файлу /etc/firewall/iptables.sh — запускаем скрипт
Правила файрволла активируются и пропишутся в /etc/network/iptables. В дальнейшем, при перезагрузке системы, система будет тянуть правила из него.
После установки система сама запустит службу dnsmasq и добавит её в автозагрузку. Это можно проверить командой:
Loaded: loaded Active: active (running)
После этого открываем файл /etc/dnsmasq.conf
и в нём пропишем такой конфиг:
domain-needed bogus-priv interface=eth1 resolv-file=/etc/resolv.conf dhcp-range=192.168.100.131,192.168.100.180,24h cache-size=150
Перезапускаем службу dnsmasq
# systemctl restart dnsmasq
Теперь роутер должен работать и машины в сети получать ip-адреса и dns.
При необходимости в пробросе портов по IP-адресам для доступа из внешней сети нужно снова открыть скрипт /etc/firewall/iptables.sh
# nano /etc/firewall/iptables.sh
iptables -t nat -A POSTROUTING -o eth+ -j MASQUERADE
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 1234 -j DNAT --to-destination 192.168.100.111:1234 iptables -t nat -A PREROUTING -i eth0 -p udp --dport 5678 -j DNAT --to-destination 192.168.100.112:5678
iptables -t filter -A INPUT -i eth+ -j ACCEPT
iptables -t filter -A INPUT -p tcp -m state --state NEW -m tcp --dport 1234 -j ACCEPT iptables -t filter -A INPUT -p tcp -m state --state NEW -m udp --dport 5678 -j ACCEPT
- 1234 и 5678 — номера портов
- tcp и udp — протоколы
- 192.168.100.111 и 192.168.100.112 — ip-адреса машин в локальной (внутренней) сети
Затем снова запускаем скрипт /etc/firewall/iptables.sh
чтобы изменения вступили в силу.
Новые правила заново перечитаются и запишутся в файл /etc/network/iptables, а уже из этого файла при перезагрузке сервера будут автоматически запускаться эти правила.
Похожие посты:
Межсетевой экран ufw и модули iptables, поддерживающие работу с классификационными метками
При настройках ОС, принятых по умолчанию, изменения в правилах iptables не сохраняются после перезагрузки.
Порядок действий по обеспечению восстановления правил см. Сохранение и восстановление правил iptables
- Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7)
- Astra Linux Special Edition РУСБ.10152-02 (очередное обновление 4.7)
- Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)
- с установленным оперативным обновлением БЮЛЛЕТЕНЬ № 20200327SE16 (оперативное обновление 5)
- Astra Linux Special Edition РУСБ.10015-16 исп. 1
с установленным оперативным обновлением Бюллетень № 20201007SE16
Установка модулей iptables, поддерживающих работу с классификационными метками
В состав Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)с установленным оперативным обновлением БЮЛЛЕТЕНЬ № 20200327SE16 (оперативное обновление 5) включёны пакеты iptables, поддерживающие работу с классификационными метками. Работа с классификационными метками реализована с помощью дополнительного модуля тестирования astralabel, обеспечивающего тестирование значений мандатных атрибутов с помощью опций «–maclev», «–maccat» (подробности см. ниже).
- iptables-astralabel-generic — для использования с ядром generic;
- iptables-astralabel-hardened — для использования с ядром hardened;
- iptables-astralabel-common — общие для generic и hardened модули;
Для эффективного использования этих пакетов в межсетевой экран ufw также включена поддержка работы с классификационными метками.
По умолчанию при установке ОС эти пакеты не устанавливаются. Установка пакетов для загруженной версии ядра может быть выполнена с помощью графического менеджера пакетов (см. Графический менеджер пакетов synaptic) или из командной строки командой:
# для ядра generic
sudo apt install iptables-astralabel-common iptables-astralabel-`uname -r`
# для ядра hardened
sudo apt install iptables-astralabel-common iptables-astralabel-`uname -r`
При необходимости версии generic и hardened могут быть установлены одновременно. Набор вариантов пакетов в дистрибутиве конкретного обновления ОС соответствует набору доступных ядер. Проверить полный список доступных вариантов пакетов можно командой:
Использование модулей iptables, поддерживающих работу с классификационными метками
Модули iptables-astralabel поддерживают стандартный синтаксис командной строки, используемый в iptables, и предоставляют следующие дополнительные опции для контроля мандатных атрибутов сетевых пакетов:
Применение правила к пакетам, имеющим указанный иерархический уровень конфиденциальности.
Допускается задание двух значений уровня через символ «:», тогда правило будет применяться к пакетам, имеющих уровень конфиденциальности в указанном диапазоне включительно.
Не принимать пакеты с иерархическими уровнями конфиденциальности от 1 до 3-х:
sudo iptables -A INPUT -m astralabel —maclev 1:3 -j DROP
Значение фильтра, задаваемого опцией maclev, может быть инверсировано с помощью модификатора «!».
Не пропускать исходящие пакеты, имеющие иерархический уровень конфиденциальности не равный нулю:
sudo iptables -A OUTPUT -m astralabel ! —maclev 0 -j DROP
Такое правило будет пропускать исходящие пакеты, имеющие нулевой иерархический уровень конфиденциальности и ненулевые неиерархические категории конфиденциальности.
Применение правила к пакетам, имеющим указанные неиерархические категории конфиденциальности.
Задание диапазонов и инверсирование не поддерживаются.
В одном правиле может быть указано несколько опций maccat, и тогда правило будет применяться только к пакетам, у которых установлены одновременно все указанные категории (биты).
Не пропускать исходящие пакеты с установленными одновременно битами категорий 1 и 2:
sudo iptables -A OUTPUT -m astralabel —maccat 1 —maccat 2 -j DROP
Опции maclev и maccat могут применяться одновременно в одном правиле.
Результирующий фильтр будет представлять собой объединение фильтров, заданных этими опциями.
Не принимать пакеты с установленными битами категорий 1 и 2 и уровнем конфиденциальности 3:
sudo iptables -A INPUT -m astralabel —maclev 3 —maccat 1 —maccat 2 -j DROP
Если не указаны никакие опции для фильтрации пакетов то правило применяется ко всем пакетам, имеющим ненулевую классификационную метку. Т.е. правило
запретит все исходящие пакеты, имеющие ненулевую классификационную метку (т.е. имеющие ненулевой уровень конфиденциальности и/или ненулевые категории конфиденциальности).
Использование ufw для работы с классификационными метками
Для управления сетевыми соединениями с учетом классификационных меток в межсетевой экран ufw добавлены опции maclev и maccat, по действию аналогичные соответствующим опциям iptables. Для того, чтобы эти опции работали, в системе должен быть установлен пакет iptables-astralabel-common и один из пакетов iptables-astralabel-generic или iptables-astralabel-hardened, соответствующий используемому ядру.
Примеры использования приведены ниже. В примерах используется протокол HTTP (TCP-порт 80):
-A OUTPUT -p tcp —dport 80 -m astralabel —maccat 3 -j DROP
Приведенные примеры работают с исходящим трафиком (указано направление out). Правила для входящего трафика создаются аналогично, только направление указывается не out, а in.
Возможность инверсии правил и возможность одновременного указания нескольких категорий в одном правиле текущей реализацией ufw не поддерживаются.
Настройка сети в Astra Linux «Смоленск»
Краткое руководство по настройке сетевого интерфейса и доступа по протоколу SSH, а также установке необходимых сетевых утилит в консольной версии ОС специального назначения Astra Linux Special Edition «Смоленск» версий 1.6 и 1.7.1
Для развёртывания серверов в консольной версии данной ОС в первую очередь необходимо настроить сетевой интерфейс. Для этого при входе в консоль необходимо выставить Integrity Level (уровень целостности) 63. В версии 1.6 он устанавливается принудительно, а в версии 1.7.1 его можно отключить, но в целях безопасности разработчики не рекомендуют его отключать.
Открываем файл /etc/network/interfaces
# sudo nano /etc/network/interfaces
и в конце файла дописываем параметры сети, например:
# Ethernet network interface auto eth0 iface eth0 inet static address 192.168.1.35 netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.1.255 gateway 192.168.1.1
Затем создадим файл /etc/resolv.conf
и прописываем адреса DNS-серверов, например:
После этого запускаем сетевой интерфейс eth0
Проверяем, применились ли изменения
и пропингуем что-нибудь, например yandex.ru
Если всё прописано правильно, то в консоли должны отображаться ответы.
Что касается сетевых утилит, то в версии 1.7.1 они устанавливаются автоматически. В версии 1.6 их можно выбрать при установке, отметив чекбокс на пункте Средства работы в сети
Если по каким-то причинам они не были установлены, тогда вставляем установочный диск или монтируем ISO-образ установочного диска в /mnt/cdrom/
# mount /home/user/iso/smolensk_image.iso /mnt/cdrom
и устанавливаем пакет net-tools
# sudo apt install net-tools
После установки пакета нам будут доступны различные сетевые утилиты, такие как ifconfig, netstat и другие.
Для использования утилит для работы с DNS типа nslookup и host устанавливаем пакет dnsutils
# sudo apt install dnsutils
Также, если по каким-либо не были установлены Средства удалённого доступа SSH, необходимо установить соответствующие пакеты
# sudo apt install openssh-server openssh-client ssh
В версии 1.6 пакет ssh необходимо установить в любом случае
Проверяем состояние запуска службы
Если она активна, значит всё установилось правильно. Теперь к машине можно подключаться с помощью ssh-клиентов.
Далее нам необходимо включить файрволл UFW. Для этого проверим статус запуска
Он должен показать статус inactive.
Для разрешения подключения по SSH включаем соответствующее правило
Теперь файрволл должен запуститься и загружаться вместе с системой.
Проверяем. Для этого перезагрузим систему. В версии 1.7.1 скомандуем
а в версии 1.6 запускаем команду
и ждём минуту, когда система начнёт перезагружаться.
После перезагрузки всё должно нормально работать.