четверг, 5 октября 2023 г.

Ubuntu настройка в качестве Маршрутизатора (DHCP,DNS,NAT,Iptables) статика и dhcp + vlan

 



Конфиги без вланов просто статикой и с vlanами:

1) Net

sudo nano /etc/netplan/**** (имя интерфейса)

Если просто статика то:

# This is the network config written by 'subiquity'
network:
  ethernets:
    enp0s3:
      dhcp4: true
    enp0s8:
      addresses:
      - 192.168.99.1/24
      nameservers:
        addresses: []
        search: []
  version: 2

Дополнение: 
Если нужно добавить вланы примерно такой конфиг для двух вланов 100 и 200 со статикой на внешнею сетевую enx28ee520513a4.
Вланы идут в ТРАНКЕ!

network:
   ethernets:
       enp8s0:
           dhcp4: true
       enx28ee520513a4: {}
   version: 2
   vlans:
       enx.100:
           id: 100
           link: enx28ee520513a4
           addresses: [192.168.100.2/24]
       enx.200:
           id: 200
           link: enx28ee520513a4
           addresses: [192.168.200.2/24]



2) DHCP

sudo apt install isc-dhcp-server

/etc/dhcp/dhcpd.conf


default-lease-time 600;
max-lease-time 7200;

##первый диапазон для vlan 100
subnet 192.168.100.0 netmask 255.255.255.0 {
       range 192.168.100.150 192.168.100.200;
       option domain-name-servers 192.168.100.1;
       option routers 192.168.100.1;
}

##второй диапазон для vlan 200
subnet 192.168.200.0 netmask 255.255.255.0 {
       range 192.168.200.150 192.168.200.200;
       option domain-name-servers 192.168.200.1;
       option routers 192.168.200.1;
}


=====

/etc/default/isc-dhcp-server 
                                                                             
# Defaults for isc-dhcp-server (sourced by /etc/init.d/isc-dhcp-server)

# Path to dhcpd's config file (default: /etc/dhcp/dhcpd.conf).
DHCPDv4_CONF=/etc/dhcp/dhcpd.conf
#DHCPDv6_CONF=/etc/dhcp/dhcpd6.conf

# Path to dhcpd's PID file (default: /var/run/dhcpd.pid).
DHCPDv4_PID=/var/run/dhcpd.pid
#DHCPDv6_PID=/var/run/dhcpd6.pid

# Additional options to start dhcpd with.
#       Don't use options -cf or -pf here; use DHCPD_CONF/ DHCPD_PID instead
#OPTIONS=""

# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
#       Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACESv4="enp0s8" (если в vlan то указываем имя влана например enx.100) если несколько вланов то просто перечисляем так: 
INTERFACESv4="enx.100 enx.200"
INTERFACESv6=""

====

Посмотреть выданные ip адреса:

sudo nano /var/lib/dhcp/dhcpd.leases

3) DNS

sudo apt install bind9

/etc/bind/named.conf.options

acl testLan {
        192.168.100.0/24;
        192.168.200.0/24;
        localhost;
};

options {
        directory "/var/cache/bind";

        forwarders {
                1.1.1.1;
                8.8.4.4;
        };

        recursion yes;
        allow-query { testLan; };

        dnssec-validation auto;
        listen-on-v6 { any; };
};

4)NAT

sudo iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE

enp0s3 //интерфейс который смотрит в интернет

sudo nano /etc/sysctl.d/99-sysctl.conf

Раскоментировать 
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

Затем: 

sudo sysctl -p

Решение проблемы с русской кодировкой в Wine

Нужно лишь добавить аргумент перед запуском приложения:

env LC_ALL=ru_RU.CP1251 

Например: 
env LC_ALL=ru_RU.CP1251 wine start.exe -ob "PostgreSQL Ansi" -hb 111.111.111.111 -pb 5432 -db megabil -u exec -w pepperexec "c:\work\bs\billi.exe" 

Настройка iptables в Linux

 iptables — это утилита командной строки, используемая для управления встроенным брандмауэром netfilter, доступным в ядре Linux, начиная с версии 2.4. Брандмауэр — это приложение, на котором происходит фильтрация сетевого трафика на основе заданных администратором правил. Обеспечить безопасность сервера или инфраструктуры, означает обеспечить отказоустойчивость и стабильность работы ваших серверов и приложений, что крайне чувствительно для бизнеса или персональных проектов.

В глобальной сети огромное количество угроз — боты, периодически прощупывают стандартные точки входа в системы, хулиганы, любопытные, взломщики — люди, целенаправленно пытающиеся получить несанкционированный доступ к информационным системам. Задача iptables — исключить либо хотя бы минимизировать негативное воздействие со стороны разного рода правонарушителей.


Установка iptables

В образах CentOS 8 64-bit и CentOS 8 Stream 64-bit iptables отсутствует, поскольку разработчики отказались от него в пользу более нового пакета — nftables. Его поддержка на уровне ядра доступна с версии 3.13. Если существует необходимость использовать именно iptables, требуется выполнить следующий порядок действий:

yum install iptables-services

Включение сервиса в автозагрузку:

systemctl enable iptables

Запуск сервиса:

systemctl start iptables

Межсетевой экран готов к использованию.

Синтаксис iptables

Сетевой экран iptables очень гибок в настройке и имеет огромное количество разнообразных ключей и опций. Общий вид управляющей команды:

iptables таблица команда цепочка критерии действие

Рассмотрим каждый элемент в отдельности.

Пакет

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

Цепочки

Существует 5 видов цепочек:

  • PREROUTING — предназначена для первичной обработки входящих пакетов, адресованных как непосредственно серверу, так и другим узлам сети. Сюда попадает абсолютно весь входящий трафик для дальнейшего анализа.
  • INPUT — для входящих пакетов, отправленных непосредственно этому серверу.
  • FORWARD — для проходящих пакетов, не адресованных этому компьютеру, предназначены для передачи следующему узлу, в случае, если сервер выполняет роль маршрутизатора.
  • OUTPUT — для пакетов, отправленных с этого сервера.
  • POSTROUTING — здесь оказываются пакеты, предназначенные для передачи на другие узлы сети.

Также есть возможность создавать и удалять собственные цепочки, в большинстве случаев, в этом нет необходимости. Названия цепочек пишут заглавными буквами.

Таблицы

В netfilter существуют 5 типов таблиц, каждая из них имеет свое назначение.

Таблица raw

Содержит цепочки PREROUTING и OUTPUT, здесь производятся манипуляции с пакетами до задействования механизма определения состояний.

Таблица mangle

Предназначена для модификации заголовков сетевых пакетов, таких параметров как ToS (Type of Service), TTL (Time To Live), MARK. Содержит все существующие пять цепочек.

Таблица nat

Используется для трансляции сетевых адресов, т.е. подмены адреса получателя/отправителя, применяется, если сервер используется в качестве маршрутизатора. Содержит цепочки PREROUTINGOUTPUTPOSTROUTING.

Таблица filter

Основная таблица, служит для фильтрации пакетов, именно здесь происходит принятие решений о разрешении или запрете дальнейшего движения пакета в системе. Используется по умолчанию, если явно не указано имя другой таблицы. Содержит цепочки INPUTFORWARD и OUTPUT.

Таблица security

Используется для взаимодействия с внешними системами безопасности, в частности с SELinux и AppArmor. Содержит цепочки INPUTOUTPUT и FORWARD.

Имена таблиц принято писать строчными буквами.

Действия

Правилами задается поведение для iptables, каким образом поступить с тем или иным пакетом при попадании под заданные критерии. Решения, которые принимает брандмауэр, называют действиями, самые распространенные из них:

  • ACCEPT — разрешить дальнейшее прохождение пакета по системе;
  • DROP — выбросить пакет без уведомления отправителя;
  • REJECT — отказать в прохождении пакета с уведомлением отправителя, такой способ может привести к дополнительным затратам ресурсов процессора, поэтому, в большинстве случаев рекомендуется использовать DROP;
  • LOG — зафиксировать информацию о пакете в файле системного журнала;
  • MARK — позволяет помечать определенные пакеты, например для маршрутизации, данная метка перестает существовать, как только пакет покинет брандмауэр;
  • CONNMARK — то же самое, что и MARK, только для соединений;
  • QUEUE — отправляет пакет в очередь приложению для дальнейшего взаимодействия;
  • RETURN — прекращение движения пакета по текущей цепочке и возврат в предыдущую цепочку. Если текущая цепочка единственная — к пакету будет применено действие по умолчанию;
  • REDIRECT — перенаправляет пакет на указанный порт, в пределах этого же узла, применяется для реализации «прозрачного» прокси;
  • DNAT — подменяет адрес получателя в заголовке IP-пакета, основное применение — предоставление доступа к сервисам снаружи, находящимся внутри сети;
  • SNAT — служит для преобразования сетевых адресов, применимо, когда за сервером находятся машины, которым необходимо предоставить доступ в Интернет, при этом от провайдера имеется статический IP-адрес;
  • MASQUERADE — то же, что и SNAT, но главное отличие в том, что может использоваться, когда провайдер предоставляет динамический адрес, создаёт дополнительную нагрузку на систему по сравнению с SNAT;
  • TOS — позволяет управлять битами в одноименном поле заголовка IP-пакета;
  • ULOG — более продвинутый вариант записи информации, может писать как в обычный текстовый файл, так и в базу данных;
  • TTL — используется для изменения значения поля одноименного заголовка IP-пакета, устанавливает время жизни пакета.

Основные команды iptables

Как посмотреть список правил iptables

iptables --line-numbers -L -v -n

Ключ —line-numbers нумерует строки, -L выводит список правил всех цепочек, -v отвечает за детализацию вывода, -n выводит IP-адреса и номера портов в числовом формате.

Как удалить правило в iptables:

В первую очередь необходимо определить номер правила, которое требуется удалить, выводим список действующих правил командой:

iptables --line-numbers -L -v -n

Предположим, требуется удалить правило 4 в цепочке INPUT:

iptables -D INPUT 4

Как сохранить правила iptables

Утилита iptables, как и маршрутизаторы Cisco, не сохраняет правила, если это явно не указать и после перезагрузки возвращается в предыдущее состояние. Установим пакет:

apt install iptables-persistent

В процессе установки на оба вопроса ответить Yes. Сохранить текущие правила:

service netfilter-persistent save

Система при следующей загрузке использует последние сохраненные правила.

Как восстановить правила

В процессе настройки брандмауэра, по разным причинам, возникает необходимость вернуться к заведомо рабочим, испытанным правилам. Сервис netfilter-persistent сохраняет их в файле /etc/iptables/rules.v4, если не успели сохранить активные правила, значит в файле предыдущая версия, восстанавливаем:

iptables-restore < /etc/iptables/rules.v4


Примеры настройки iptables

В данном разделе рассмотрим задачи, с которыми придется столкнуться, работая с iptables.

Как заблокировать IP-адрес в iptables

Допустим, необходимо заблокировать компьютер с IP-адресом 172.10.10.1, тогда правило будет выглядеть следующим образом:

iptables -A INPUT -s 172.10.10.1 -j DROP

Как разрешить IP-адрес в iptables

Необходимо разрешить весь трафик к серверу для клиента с IP-адресом 192.168.111.1:

iptables -A INPUT -s 192.168.111.1 -j ACCEPT

Как открыть порт в iptables

Предположим, что политика по умолчанию — блокировать все, что явно не разрешено. Откроем порты веб-сервера для обеспечения работы HTTP протокола — порт 80, и поддержки HTTPS протокола совместно с SSL — порт 443. Также для доступа к серверу по SSH откроем порт 22. Эту задачу можно решить как минимум двумя способами: создать однострочное правило, либо прописать правила по каждому из портов, рассмотрим оба. В одну строку:

iptables -A INPUT -p tcp -m multiport --dports 22,80,443 -j ACCEPT

При использовании расширения multiport, всегда необходимо использовать критерий -p tcp или -p udp, таким образом, одной строкой можно указать до 15 разных портов через запятую. Важно не путать критерии —-dport и —-dports. Первый из них используется для указания одного порта, второй сразу для нескольких, аналогично с —sport и —sports.

Вариант многострочной записи — для каждого порта свое правило:

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

Управление службами systemctl

 В этой статье нас интересуют только модули, которые имеют суффикс .service, то есть службы. 

Благодаря утилите systemctl список сервисов легко получить:

systemctl list-units --type=service

Для работы с большинством служб мы можем не использовать суффикс .service, потому что диспетчер systemd сам понимает, что вы хотите работать именно со службой, когда не указываете специфический юнит.

Запуск и остановка служб

Чтобы запустить службу используйте команду start. Например, для запуска apache2 выполним:

sudo systemctl start apache2.sevice

или 

sudo systemctl start apache2

Для установки службы нужно использовать команду stop. На примере apache2:

sudo systemctl stop apache2.service

Перезапуск и перезагрузка

Для того, чтобы перезапустить службу, используйте команду restart. Например, мы внесли изменения в конфигурацию веб-сервера и теперь нам нужно перезапустить apache2, нужно выполнить:

sudo systemctl restart apache2.service

Некоторые приложения поддерживают перезагрузку файлов конфигурации без перезапуска всей службы. В таком случае вы можете использовать команду reload. Например, если вы работаете c nginx в качестве веб-сервера, после изменения конфигурационных файлов можно выполнить reload:

sudo systemctl reload nginx.service

Но если вы не уверены, умеет ли служба перезагружать конфигурацию, воспользуйтесь командой reload-or-restart. В таком случае systemd перезагрузит конфигурацию или всю службу:

sudo systemctl reload-or-restart apache2.service

Включение и отключение

Основное предназначение диспетчера systemd — запускать службы при загрузке системы. Но все команды, перечисленные выше, относились к работе только во время текущего сеанса. 

Чтобы включить автозагрузку приложения, воспользуйтесь командой enable. После этого systemd создаст символическую ссылку из служебного файла — /etc/systemd/system — в место, где диспетчер ищет приложения для автозапуска.

sudo systemctl enable apache2.service 

Чтобы отключить автозапуск, используйте disable. При этом символическая ссылка будет удалена.

sudo systemctl disable apache2.service

Обратите внимание, что ни включение, ни отключение автозагрузки приложения не повлияют на работу службы в текущем сеансе.

Проверка статуса

Чтобы проверить статус службы в системе, нужно использовать команду status

Например, команда sudo systemctl status apache2.service отобразит статус, процессы в иерархии контрольных групп и фрагмент журнала.

Этого достаточно для того, чтобы проверить, корректно ли работает служба и устранить проблемы, если они возникают. 

Помимо развёрнутого отчёта о статусе службы диспетчер systemd также предоставляет методы для проверки конкретных статусов. Это позволяет обернуть множество проверок в скрипты и проще работать с результатом.

  • is-active. Проверяет, активен ли модуль. Возвращает active или inactive.
  • is-enabled. Проверяет, включена ли автозагрузка службы. Возвращает enabled или disabled.
  • is-failed. Проверяет, находится ли юнит в работе. Возвращает active, если всё работает корректно, failed — если ошибка. При этом вы можете получить также unknown или inactive, если служба была остановлена вручную.