Настройка связки 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, а уже из этого файла при перезагрузке сервера будут автоматически запускаться эти правила.
Похожие посты:
Настройка встроенного фаервола
1. Как с помощью встроенного фаервола закрыть для всего доступ, а потом открыть сетевой доступ только для конкретного приложения?
2. С помощью чего можно отслеживать сетевые атаки: подмену MAC, сканирование портов и тд. и т.п.?
Iskatel_znaniy
New member
1. Как с помощью встроенного фаервола закрыть для всего доступ, а потом открыть сетевой доступ только для конкретного приложения?
2. С помощью чего можно отслеживать сетевые атаки: подмену MAC, сканирование портов и тд. и т.п.?
Например можно открыть доступ вот такой командой sudo ufw allow from 192.168.0.2 to any port 22 для конкретного ip адреса для конкретного порта. Нужно просто узнать номер порта Вашего приложения и свой ip адрес. Вместо порта можно наверное указать и приложение. Потом в gufw в правилах посмотреть что получилось. Открытые порты можно смотреть, например, с помощью графической программы Zenmap. Есть так же команда netstat -ltupn А вообще вопрос интересный и надеюсь кто нибудь что нибудь подскажет еще интересное. Так же в fly-admin-dm нужно снять галочку с «Разрешить удаленные сессии». Можно так же с помощью программы Ksystemlog просматривать журналы, например, журнал авторизации. Так же можно смотреть историю команд history , посещения lastlog и время пребывания пользователя last имя пользователя . В gufw можно входящие запретить а исходящие разрешить. Просто сделать профиль «Дом». Так же с помощью, например, программки lynis посмотреть уязвимости в системе.
Вложения
oko
New member
*в сторону*
Алекс Юстасу.
to Yustas
netfilter (и его обертки-интерпретаторы в виде UFW и iptables) в AstraLinux вообще не умеет в приложения, ибо он не «брандмауэр». Зато умеет в L4/L5-протоколы, IP- и MAC-адреса и слегка в L7-уровень. Достаточно ли будет этого для вашего случая — не мне решать, ага.
Что до атак, то приведенные вами приколы решаются в зависимости от контекста. Тут бы следует подтянуть тезаурус на предмет «компьютерных атак» вообще и тех же IDS (СОВ) Snort/Surricata, которые можно поставить на AstraLinux в частности.
Yustas
New member
Юстас — Алексу
*Пить будешь?*
Нашёл вариант с iptables + создание группы.
Насчёт атак хотелось бы проще.
Yustas
New member
oko
New member
to Yustas
AstraLinux CommonEdition — устаревшая ветка, доступная для домашнего пользования. Special Edition — собственно, основной (платный и сертифицированный) продукт. Но в обеих ветках одна и та же GUI-утилита UFW для встроенного межсетевого экрана netfilter.
Как раз Snort/Surricata (не входят в состав ALCE/ALSE по дефолту) и предназначены для обнаружения вторжений (атак) на базе сигнатурного анализа трафика.
А что есть «создание группы в iptables»? Собственные цепочки фильтрации/обработки/трансляции? И что все-таки понималось под целевой задачей?
Yustas
New member
Целевая задача:
Найти замену Outpost Firewall.
Более подробно:
1. Закрыть досутуп для всех приложений.
2. Открыть досутуп только для необходимых.
3. Закрыть все порты.
4. Запретиь пинг и сканирование портов.
5. Сделаться невидимым в сети.
6. При попытке MITM, подмены DNS, и т.д. и т.п. получать уведомление.
iptables -P OUTPUT -j DROP
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -m owner —gid-owner internet -j ACCEPT
iptables -A OUTPUT -m state —state ESTABLISHED,RELATED -j ACCEPT
iptalbes -A OUTPUT -p tcp -j REJECT —reject-with tcp-reset
sg internet-c firefox
oko
New member
to Yustas
1. Для приложений не получится. Повторюсь, netfilter (подсистема фильтрации в составе ядра Linux) и его командные интерпретаторы (iptables) или GUI-интерфейсы (UFW) не оперируют запущенными программами/приложениями. Раньше в iptables был параметр -m owner —pid-owner PID, где PID — номер процесса (потока), назначаемый каждому запущенному приложению (просмотр через ps ax | grep имя_приложения). Но позже его убрали, посчитав избыточным. Плюс, это порождало бы проблемы при отлавливании PID для комплексных приложений (тот же firefox создает дополнительный процесс для каждой открытой вкладки браузера).
2. Можно использовать вашу схему с группами или аналогичную схему с фейк-юзерами как тут (конец поста). Но у меня на Linux Mint это не заработало, в ALSE тоже. Беда (отказ в доступе) в запуске графических приложений (которым нужен доступ к X-Server) из-под фейк-юзера, когда X-сессия запущена моим штатным пользователем. С группами проблема примерно аналогичная. Возможно, в ALCE разграничений меньше, поэтому там схема с группами сработает — не проверял, ибо не пользуюсь.
3. Не делайте «OUTPUT -m state —state ESTABLISHED,RELATED» — это поддержка «сессии» (по умолчанию, netfilter сессии не поддерживает). Грубо говоря, если добавлено такое правило, то на каждый разрешенный входящий (цепочка filter — INPUT) пакет netfilter будет автоматически добавлять разрешение исходящего (цепочка filter — OUTPUT) трафика. И, если у вас не сервер с работающим приложением, доступ к которому нужен извне, то вам такое (ESTABLISHED,RELATED) не нужно.
4. Отбивка «-j REJECT —reject-with tcp-reset» не вяжется с желанием «невидимости». Потому что при любой опции REJECT netfilter будет отправлять адресату уведомление о блокированном пакете в рамках выбранного протокола. И в цепочке OUTPUT (исходящие от вашей машины) это тем более смысла не имеет. В наше неспокойное время куда проще делать тупо «-j DROP«. Опять-таки, если у вас не сервер, доступный извне и стремящийся уведомить удаленных пользователей о своей принципиальной доступности, но неправильном трафике, который они к нему шлют.
5. С MiTM и подменой DNS средствами netfilter вы почти ничего не сделаете. Можно, конечно, контролировать целостность и состояние каждого пакета, логировать их, натравливать на лог какое-либо средство высокоуровневого анализа, выявлять аномалии по меткам приходящих ответов (например, искажения TTL и других полей L2, L3, L4 уровней), но. MiTM тем и отличается, что при пассивном методе (перехват и анализ трафика) узнать о нем на стороне источника (ваша машина) фактически невозможно. Или мы говорим о другом MiTM (например, подмена SSL-сертификата провайдером или кем-то еще)?. Вариантов слишком много и, что печально, защититься от них полностью столь примитивными инструментами как netfilter/iptables не получится.
ЗЫ Outpost Firewall был когда-то хорош. Но от MiTM на канале, от перехвата и манипуляции с DNS (или внедрения ложного DNS-сервера на канале) и т.п. он тоже не защищал ни разу.
Astra linux firewall настройка
Источник: proglib.io Важным аспектом при работе с любой операционной системой является обеспечение безопасности. Astra Linux – российский дистрибутив Linux, изначально разработанный с учетом высоких требований к безопасности. В этой статье мы рассмотрим процесс установки Astra Linux, а также настройку SELinux и Firewall для максимальной защиты.
Установка Astra Linux
Для начала нам потребуется установить Astra Linux. После скачивания образа системы, его можно записать на загрузочный USB-накопитель с помощью команды dd:
sudo dd if=AstraLinux.iso of=/dev/sdx bs=4M && sync
В этой команде if обозначает путь к образу Astra Linux, а of указывает на ваш USB-накопитель.
Настройка SELinux
После установки Astra Linux, следующим шагом будет настройка SELinux. SELinux – это модуль безопасности для ядра Linux, который позволяет управлять правами доступа к различным ресурсам.
Во-первых, убедитесь, что SELinux включен и работает в принудительном режиме, выполнив следующую команду:
Если SELinux выключен или работает в пермиссивном режиме, вам необходимо изменить его на принудительный режим, отредактировав файл /etc/selinux/config.
sudo nano /etc/selinux/config
Измените параметр SELINUX= на enforcing.
Настройка Firewall
Следующим шагом в обеспечении безопасности является настройка firewall. В Astra Linux используется Netfilter, основной firewall Linux, управляемый с помощью утилиты iptables.
Следующая команда позволит вам открыть порт 22 для SSH:
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
Это позволит принимать входящие соединения на порт 22.
Следующая команда заблокирует все входящие соединения, которые не были инициированы и не относятся к уже установленным соединениям:
sudo iptables -P INPUT DROP
Это обеспечивает высокий уровень защиты, ограничивая доступ к системе.
В заключении, Astra Linux предлагает мощные инструменты для обеспечения безопасности. Через надлежащую настройку SELinux и firewall можно обеспечить высокий уровень защиты для вашей системы.