rsync – инкрементный бэкап

Скрипт следует положить в корень того диска или каталога, куда следует делать бэкапы.

$ cat /home/backup.sh

#!/bin/bash
set -o nounset -o errexit
cd $(dirname "$0")
date=$(date --iso-8601=seconds)
test -L latest || ln -s "$date" latest
rsync --delete-excluded --prune-empty-dirs --archive -F --link-dest=../latest "$@" "./$date"
rm latest
ln -s "$date" latest

Запускать с указанием единственного аргумента: каталога с исходными файлами. Например, так.

/home/backup/backup.sh /home/share

Скрипт для вызова создания бэкапа по крону (необязательно, можно задать прямо в кроне):

$ cat /home/user/bin/r-backup_share.sh

#!/bin/sh
/home/backup/backup.sh /home/share

Сам крон (запуск – в 8, 13 и 18 часов ежедневно):

0 8,13,18 * * * /home/user/bin/r-backup_share.sh

После нескольких запусков получается такая структура каталога:

2019-01-05T08:00:00+0200
2019-01-05T13:00:00+0200
2019-01-05T18:00:00+0200
latest -> 2019-01-05T18:00:00+0200

При этом latest указывает на самый последний бэкап.

https://www.alexeykopytko.com/2017/rsync-howto/
http://yakim.org.ua/articles/servers/22-rsync.html
https://habr.com/post/51419/

image_pdfimage_print

Samba – подробное логирование

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

Количество сообщений, записываемых в лог-файлы, для всех VFS модулей может быть задано следующим параметром в секции [global]:

log level = 0 vfs:2

Если планируется сохранять лог-файлы длительное время, может быть полезным указание параметра

max log size = 0

Размер лог-файла задается в килобайтах. При достижении указанного значения файл будет переименован, путем добавления к имени файла расширения .old. Значение 0 отключает проверку размера (в этом случае необходимо самостоятельно позаботиться о размере лог-файла, к примеру, настроив соответсвующим образом logrotate).

Для активации модуля аудита, в секции, которая описывает расшаренный ресурс, добавляется строка

vfs objects = full_audit

В результате данные о доступе к файлам будут записываться в syslog, либо в лог-файл по умолчанию (log.smbd). Здесь же, через пробел, могут быть заданы другие VFS модули.

Можно указать дополнительные параметры модулю full_audit. Префикс, сообщений в лог-файле:

full_audit:prefix = %u|%I

(каждая строка будет начинаться с user|ip_adress)

Какие ошибки должны отображаться в лог-файле:

full_audit:failure = none

(не протоколируем ошибки)

Действия пользователей, которые записываются в лог-файл

full_audit:success = connect disconnect opendir mkdir rmdir closedir open close read pread write pwrite sendfile rename unlink chmod fchmod chown fchown chdir ftruncate lock symlink readlink link mknod realpath

Параметры, позволяющие управлять записью в журналы демоном syslogd:

full_audit:facility = local5
full_audit:priority = notice

Пример, в секции [global]:

# Подробный лог
log level = 0 vfs:2
max log size = 0

vfs objects = full_audit recycle
full_audit:prefix = %u|%I|%S
full_audit:failure = none
full_audit:success = mkdir rmdir open read pread write pwrite sendfile rename unlink lock
full_audit:facility = local5
full_audit:priority = notice
  • full_audit:prefix – %u – имя пользователя, %I – его IP, %S – имя расшареного ресурса (если ресурс один смысла в нем нет)
  • full_audit:success – какие удачные события будут логироваться
  • full_audit:failure – то же самое, что выше, только для ошибок
  • full_audit:facility – категория событий syslog, в которую будут попадать записи
  • full_audit:priority – приоритет записей для syslog. Для самбы будет достаточно приоритета notice, чем ее записи по сути и являются

Чтобы сообщения записывались в заданный файл, нужно добавить в

# vi /etc/rsyslog.conf

## SAMBA
local5.notice -/var/log/samba/audit.log
  • mkdir – создание директории;
  • rmdir – удаление директории;
  • open – в какую папку заходили или открывали файл;
  • close – с какой папки вышли или закрыли файл;
  • read, pread – чтение(открытие) файла;
  • write,pwrite – запись (изменение) файла/папки;
  • rename – переименование файла/папки;
  • unlink – удаление.

В логах, будут в зависимости от действий такие записи:

Создание файла

Jan 5 13:57:29 sdata smbd_audit: lera|192.168.113.11|open|ok|w|Новый текстовый документ.txt

Создание директории

Jan 5 13:58:03 sdata smbd_audit: lera|192.168.113.11|mkdir|ok|Новая папка

Открытие директории

Jan 5 13:58:03 sdata smbd_audit: lera|192.168.113.11|open|ok|r|Новая папка

Открытие файла

Jan 5 13:59:32 sdata smbd_audit: lera|192.168.113.11|open|ok|r|Новый текстовый документ.txt

Сохранение файла

Jan 5 14:00:05 sdata smbd_audit: lera|192.168.113.11|open|ok|w|Новый текстовый документ.txt

Копирование файла на сетовой диск

Jan 5 13:54:52 sdata smbd_audit: lera|192.168.113.11|open|ok|w|200628876x7vPywJ5wrJsY5NUCXC_NVkHQbMrzQlv.pdf

Удаление файла

Jan 5 13:55:07 sdata smbd_audit: lera|192.168.113.11|unlink|ok|200628876x7vPywJ5wrJsY5NUCXC_NVkHQbMrzQlv.pdf

Удаление директории

Jan 5 14:00:58 sdata smbd_audit: lera|192.168.113.11|rmdir|ok|Новая папка

Прцесс копирование на диск каталога “stat” с файлами

Jan 5 14:01:56 sdata smbd_audit: lera|192.168.113.11|mkdir|ok|stat
Jan 5 14:01:56 sdata smbd_audit: lera|192.168.113.11|open|ok|r|stat
Jan 5 14:01:56 sdata smbd_audit: lera|192.168.113.11|open|ok|w|stat/proxystat.l
Jan 5 14:01:56 sdata smbd_audit: lera|192.168.113.11|open|ok|w|stat/sborka.sh
Jan 5 14:01:56 sdata smbd_audit: lera|192.168.113.11|open|ok|w|stat/traflogans.l
Jan 5 14:01:56 sdata smbd_audit: lera|192.168.113.11|open|ok|w|stat/z.pl

Настроим ротацию логов, для этого отредактируем /etc/logrotate.d/samba

/var/log/samba/* {
   daily
   notifempty
   olddir /var/log/samba/old
   missingok
   sharedscripts
   copytruncate
   rotate 90
   compress
}

Хранить логи за последние 90 дней, ротацию делать раз в день.

image_pdfimage_print

samba – сетевая корзина

После того как в конце года сотрудник по ошибке грохнул директорию с отчетами на сетевом диске я озаботился созданием корзины на шарах, для таких случаев.

Создаем директорию для корзины и меняем права:

# mkdir -p /home/.trash
# chgrp sambagroup .trash
# chmod a+w .trash
# ls -al
...
drwxrwxrwx. 2 root sambagroup 6 Дек 30 22:18 .trash
...

В vi /etc/samba/smb.conf в секции [global] дописываем:

## recycled
recylce:excludedir = tmp, temp, cache
recycle:exclude = *.iso, *.tmp, *.temp, ?~$*, ~$*, *.TMP, ~*
recycle:versions = Yes
recycle:touch = Yes
recycle:touch_mtime = Yes
recycle:keeptree = Yes
recycle:repository = /home/.trash/%U
# В секцию vfs дописываем:
vfs objects = full_audit recycle

бегло по параметрам:

  • recylce:excludedir – список исключения директорий, файлы из которых не будут попадать в корзину
  • recycle:exclude – список исключений для файлов. В данном случае указан в виде масок некоторых расширений.
  • recycle:versions – параметр отвечает за версионность удаленных файлов, если их имена совпадают. В таком случае к удаленном файлу в начале имени будет добавляться Copy #N of.
  • recycle:touch – параметр отвечает за то, будет ли указана дата изменения файла на время удаления файла, либо останется оригинальное значение файла.
  • recycle:keeptree – сохранять или нет дерево каталогов для удаленных файлов.
  • recycle:repository – указываем директорию, где будут храниться удаленные файлы. Она может располагаться где угодно. Если параметр не указан, используется значение по-умолчанию — .recycle в корне сетевого диска. %U – при установке этого параметра к каталогу корзины, все удаленные файлы будут храниться в директориях, с именами пользователей, которые их удалили, что довольно удобно.

В этом случае корзина будет одна для всех шар но не видима для пользователей samba.

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

vfs objects = recycle

Если у вас и аудит настроен для каждой шары отдельно, то не забудьте указать и этот модуль:

vfs objects = recycle full_audit

Для применения изменений необходимо перезапустить самбу.

Если вынести в шару – то она будет доступна пользователям (но тогда будет видно кто и, что удаляет). Что бы избежать этого стоит скрыть с глаз корзину добавив в [global]

# по умолчанию все файлы, начинающиеся с точки будут иметь атрибут "скрытый"
hide dot files = yes

а так же настроить права доступа к ней на уровне шары. И/или по ip ограничить доступ оставив только для системного администратора или избранных пользователей.

Не забывем о SELinux, пропишем для корзины:

# semanage fcontext -a -t samba_share_t "/home/.trash(/.*)?"
# restorecon -Rv /home/.trash/

Проверяем:

# ls -aZl
drwxrwxrwx. 4 unconfined_u:object_r:samba_share_t:s0 root sambagroup 31 Янв 4 18:05 .trash

Периодическая очистка корзины от файлов старше 30 дней:

/usr/bin/find /home/.trash/ -type f -mtime +30 -exec rm -rf {} \;

Добавляем в cron на ежедневное исполнение:

#Clean trash
0 3 * * * root /home/svm/bin/trash-clean.sh
image_pdfimage_print

Screen

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

Устанавливаем

#  yum install screen

запускаем:

# screen

после запускаем установку софта, например cpanel:

# cd /home 
# wget -N http://httpupdate.cpanel.net/latest
# sh latest

Давим Ctrl+a+d

на экране появится

[detached]

проверим список наших скринов:

# screen -ls
There is a screen on:
22570.pts-2.server (Detached)
1 Socket in /var/run/screen/S-root.

при желании можно подключиться и проверить что творится в консоли

# screen -r 22570.pts-2.server

Таким образом, можем не переживать что у нас отвалится инет во время установки cpanel

Для того чтобы узнать другие комбинации клавиш работающие/полезные в screen наберите в окне

  • screen Ctrl+A затем «?»

Выделю несколько полезных комбинаций:

  • Ctrl+A затем «c» — создать окно
  • screen Ctrl+A затем «p» — переключиться к предыдущему окну
  • screen Ctrl+A затем «n» — переключиться к следующему окну
  • screen Ctrl+A затем «d» — отключиться от screen оставив сеансы работающими
  • Ctrl+D — выйти из всех сеансов screen
  • Ctrl+A затем «H» — записывать в журнал

Работа с несколькими скринами

Eсли вам нужно запустить лишь одну программу – вышеописанного более чем достаточно, но в случае если таких программ несколько – скринам нужно будет раздать имена, чтобы screen знала, к какому именно свернутому скрину вы хотите вернуться. Имя создаваемого скрина задается с помощью ключа -S:
screen -S rtor rtorrent
Cверните скрин с rtorrent’ом и запустите еще что-нибудь, к примеру nano:
screen -S nano nano
Этот скрин также сверните. Теперь можно вернуться к любому из двух скринов аналогично вышеописанному, только с указанием имени скрина, который вы хотите развернуть, например:
screen -r nano
Список запущенных скринов можно посмотреть с помощью:
screen -list

или

screen -ls
Возможно также вернуться к уже развернутому в ином терминале скрину:
screen -x nano

Запуск скрина в свернутом виде

Программу можно запустить сразу в свернутом скрине. Это полезно в случае с автозапуском, или когда вы знаете, что программа сама все сделает (установит соединение и продолжит закачку/раздачу в нашем примере с rtorrent), и смотреть там не на что. Делается все опять же просто. Команда на запуск будет такой:
screen -dmS rtor rtorrent
Ключ -d укажет, что скрин нужно свернуть, а ключ -m – что его нужно для начала создать. Процесс «усложняется» по той причине, что ключ -d по умолчанию используется для сворачивания ранее запущенного скрина, развернутого на другой консоли или в соседней вкладке, с той целью, чтобы развернуть его в текущем месте (ибо если одна и та же программа управляется из двух мест – это может и к конфузу привести). Таким образом нужная программа запустится сразу в фоне, а screen лишь выведет сообщение о том, что программа запущена, и скрин свернут.
image_pdfimage_print

Top

 

# top -m io -o total

last pid: 65531; load averages: 0.31, 0.32, 0.27 up 121+09:04:11 07:44:31
66 processes: 1 running, 65 sleeping
CPU: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle
Mem: 249M Active, 5362M Inact, 485M Laundry, 1316M Wired, 772M Buf, 364M Free
Swap: 8192M Total, 58M Used, 8133M Free

PID USERNAME VCSW IVCSW READ WRITE FAULT TOTAL PERCENT COMMAND
286 root 0 0 0 0 0 0 0.00% devd
65529 postfix 0 0 0 0 0 0 0.00% smtpd
65528 dovecot 0 0 0 0 0 0 0.00% dict
65526 postfix 0 0 0 0 0 0 0.00% smtp
65525 postfix 0 0 0 0 0 0 0.00% cleanup
65490 svm 2 0 0 0 0 0 0.00% top
65486 svm 0 0 0 0 0 0 0.00% tcsh
65485 svm 4 0 0 0 0 0 0.00% sshd
65483 root 0 0 0 0 0 0 0.00% sshd
65476 root 0 0 0 0 0 0 0.00% auth

image_pdfimage_print

SELinux

setroubleshoot-server

Для облегчения поиска и решения проблем касающихся SELinux, нужно установить пакет setroubleshoot-server:

# yum install -y setroubleshoot-server

Теперь узнать варианты решения можно по команде:

# sealert -a /var/log/audit/audit.log

и следуя подсказкам. Для ускорения поиска можно обнулить audit.log:

# cd /var/log/audit/ && sort audit.log > audit.log
# tail /var/log/messages

и для конкретного события:

# sealer -l UUID

Для всех событий:

# sealert -a /var/log/audit/audit.log
image_pdfimage_print

iptables – теория

Netfilter


схема работы netfilter

Сетевые пакеты поступают в сетевой интерфейс, настроенный на стек TCP/IP и после некоторых простых проверок ядром (например, контрольная сумма) проходят последовательность цепочек (chain) (обозначены пунктиром). Пакет обязательно проходит первоначальную цепочку PREROUTING. После цепочки PREROUTING, в соответствии с таблицей маршрутизации, проверяется кому принадлежит пакет и, в зависимости от назначения пакета, определяется куда он дальше попадет (в какую цепочку). Если пакет НЕ адресован (в TCP пакете поле адрес получателя – НЕ локальная система) локальной системе, то он направляется в цепочку FORWARD, если пакет адресован локальной системе, то направляется в цепочку INPUT и после прохождения INPUT отдается локальным демонам/процессам. После обработки локальной программой, при необходимости формируется ответ. Ответный пакет пакет отправляемый локальной системой в соответствии с правилами маршрутизации направляется на соответствующий маршрут (хост из локальной сети или адрес маршрутизатора) и направляется в цепочку OUTPUT. После цепочки OUTPUT (или FORWARD, если пакет был проходящий) пакет снова сверяется с правилами маршрутизации и отправляется в цепочку POSTROUTING. Может возникнуть резонный вопрос: почему несколько раз пакет проходит через таблицу маршрутизации? (об этом – ниже).

Каждая цепочка, которую проходит пакет состоит из набора таблиц (table) (обозначены овалами). Таблицы в разных цепочках имеют одинаковое наименование, но тем не менее никак между собой не связаны. Например таблица nat в цепочке PREROUTING никак не связана с таблицей nat в цепочке POSTROUTING. Каждая таблица состоит из упорядоченного набора (списка) правил. Каждое правило содержит условие, которому должен соответствовать проходящий пакет и действия к пакету, подходящему данному условию.

Проходя через серию цепочек пакет последовательно проходит каждую таблицу (в указанном на иллюстрации порядке) и в каждой таблице последовательно сверяется с каждым правилом (точнее сказать – с каждым набором условий/критериев в правиле), и если пакет соответствует какому-либо критерию, то выполняется заданное действие над пакетом. При этом, в каждой таблице (кроме пользовательских) существует заданная по-умолчанию политика. Данная политика определяет действие над пакетом, в случае, если пакет не соответствует ни одному из правил в таблице. Чаще всего – это действие ACCEPT, чтобы принять пакет и передать в следующую таблицу или DROP – чтобы отбросить пакет. В случае, если пакет не был отброшен, он завершает свое путешествие по ядру системы и отправляется в сетевую карту сетевой интерфейс, которая подходит по правилам маршрутизации.

Компоненты

  • xtables
    iptables
    ip6tables
    arp_tables
  • nf_conntrack
  • ebtables

Utils

  • iptables/ip6tables/ip(6)tables-(save|restore)
  • ipset
  • ebtables
  • arptables
  • firewalld

В основном фильтрация L3-L4 уровней

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

Каждое правило состоит из

  • критерий срабатывания
  • действие
    Каждое правило имеет счетчик срабатываний.

raw – изначальная обработка, до conntrack
mangle – модификация заголовков и маркировка пакетов
nat – трансляция адресов
filter – фильтры
security – работа с SELinux

min запросов в http пакете – 6. SYN –> ACK, ACK-SYN –>, SYN-ACK

Критерии срабатывания L3

-i/–in-interface Входящий интерфейс
-o/–out-interface Исходящий интерфейс
-s/–source Адрес источника
-d/–destination Адрес назначения
-p/–protocol IP-Протокол (tcp, udp, icmp…)
-f/–fragment Является ли фрагментом (2+ в серии)

Критерии срабатывания L4

TCP/UDP
–sport port[:port] порт или диапазон портов
–dport port[:port] порт или диапазон портов

TCP
–tcp-flags mask flags (SYN,ACK,RST,FIN SYN) Флаги TCP
–syn взведен SYN

ICMP
–icmp-type тип icmp-пакета

Действия

ACCEPT – Принять пакет
DROP – Отбросить пакет
REJECT – Отбросить и сообщить источнику icmp-сообщением
RETURN – Вернуться в вішестоящюю цепочку или применить правило поумолчанию
LOG
chain_name – Перейти в цепочку chain_name
DNAT – Destination NAT
SNAT – Source NAT
MASQUARADE – Source NAT для динамически конфигурируемых интерфейсов
SET – Добавление/Удаление адреса в ipset

Дополнительные модули срабатывания

conntrack/state – критерии срабатывания основанные на состоянии соединения
multiport – критерий срабатывания, позволяющий указать список портов, а не диапазон
iprange – критерий срабатывания, который позволяет указать ip-range вместо cidr-префикса
mark/connmark – основан на маркировке пакета/соединения
set – критерий основанный на ipset
u32 – гибкий критерий, позволяющий работать напрямую с заголовками пакетов и отдельными битами

conntract

Подсистема отслеживания состояний соединений. Базово соединения имеют состояния:
NEW – новое соединение. Отбираются пакеты устанавливающие соединения.
ESTABLISHED – установленное соединение. Отбираются пакеты не !syn/syn+ack, !rst/fin, которые относятся к уже отслеживаемым соединениям
RELATED – относятся к другому, уже установленному соединению (passive ftp, icmp-messages)
INVALID – пакеты принадлежность которых к отслеживаемым соединения установить не удалось

Подсистема очень удобна при невысокой нагрузке. При высокой же требует настройки, иначе может приводить к потере пакетов или связности в целом из-за переполнения таблицы conntrack или слишком большого ее размера.

В HL рекомендуется отключать, так как просмотр таблиц добавляет время к обработке пакета повышая latency приложения.

В этой системе, размер таблицы поумолчанию, 15тыс соединений:

# sysctl -a | grep conntrack
net.nf_conntrack_max = 15624

Посмотреть отслеживаемые соединения:

# cat /proc/net/nf_conntrack
ipv4 2 tcp 6 431986 ESTABLISHED src=192.168.1.1 dst=192.168.1.126 sport=50838 dport=179 src=192.168.1.126 dst=192.168.1.1 sport=179 dport=50838 [ASSURED] mark=0 secctx=system_u:object_r:unlabeled_t:s0 zone=0 use=2
ipv4 2 tcp 6 429361 ESTABLISHED src=192.168.113.1 dst=192.168.1.64 sport=58442 dport=22 src=192.168.1.64 dst=192.168.113.1 sport=22 dport=58442 [ASSURED] mark=0 secctx=system_u:object_r:unlabeled_t:s0 zone=0 use=2
ipv4 2 tcp 6 431999 ESTABLISHED src=192.168.113.1 dst=192.168.113.63 sport=38272 dport=22 src=192.168.113.63 dst=192.168.113.1 sport=22 dport=38272 [ASSURED] mark=0 secctx=system_u:object_r:unlabeled_t:s0 zone=0 use=2
ipv4 2 tcp 6 429362 ESTABLISHED src=192.168.113.1 dst=192.168.1.126 sport=53900 dport=22 src=192.168.1.126 dst=192.168.113.1 sport=22 dport=53900 [ASSURED] mark=0 secctx=system_u:object_r:unlabeled_t:s0 zone=0 use=2
ipv4 2 udp 17 20 src=192.168.1.64 dst=195.78.244.34 sport=60897 dport=123 src=195.78.244.34 dst=192.168.113.63 sport=123 dport=60897 mark=0 secctx=system_u:object_r:unlabeled_t:s0 zone=0 use=2
ipv4 2 udp 17 1 src=192.168.113.11 dst=192.168.113.255 sport=64768 dport=1947 [UNREPLIED] src=192.168.113.255 dst=192.168.113.11 sport=1947 dport=64768 mark=0 secctx=system_u:object_r:unlabeled_t:s0 zone=0 use=2
ipv4 2 tcp 6 431998 ESTABLISHED src=192.168.1.64 dst=192.168.1.1 sport=58718 dport=179 src=192.168.1.1 dst=192.168.1.64 sport=179 dport=58718 [ASSURED] mark=0 secctx=system_u:object_r:unlabeled_t:s0 zone=0 use=2

Таблицы

  • raw – изначальная обработка, до contrack
  • mangle – модификация заголовков и марктровка пакетов
  • nat – трансляция адресов
  • filter – фильтры
  • security – работа с SELinux

Цепочки

  • PREROUTING – до принятия решения о маршрутизации
  • POSTROUTING – после принятия решения о маршрутизации
  • OUTPUT – пакеты сгенерированы локальными приложениями
  • INPUT – пакеты предназначены локальной системе
  • FORWARD – пакеты проходящие через систему

1. Таблица raw

Предназначена для базовой обработки пакетов до conntrack, в частности для управления conntrack в отношении некоторых пакетов

Цепочки:

  • PREROUTING
  • OUTPUT

Действия:

  • NOTRACK – отключить conntrack для пакетов попадающих в правило
  • CT – настроить работу с модулем conntrack, включает NOTRACK через –notrack
  • DROP – отбросить пакет

DDOS трафик фильтровать лучше в raw, так как эта таблица ближе всего к сетевому интрефейсу.

2. Таблица mangle

Предназначена для маркировки и классификации пакетов, модификации заголовков (tos, mss, ttl)

Цепочки:

  • PREROUTING
  • INPUT
  • FORWARD
  • OUTPUT
  • POSTROUTING

Действия:

  • TTL – установить ttl
  • MARK/CONNMARK – установить метку (fwmark) пакета/соединения
  • CLASSIFY – классифицировать пакет для обработки в шейпере
  • TCPMSS – установить TCP Maximum Segment Size (если не работает PMTU disco)

3. Таблица nat

Предназначена для манипуляций с адресами источника/назначения

Цепочки:

  • PREROUTING
  • INPUT
  • OUTPUT
  • POSTROUTING

Действия:

  • SNAT/MASQUERADE – Source NAT
  • DNAT – Destination NAT
  • REDIRECT – подмена dst_ip:dst_port на свои собственные (частный случай DNAT)

DNAT – transparent ptroxy

4. Таблица filter

Основная таблица где происходит фильтрация пакетов

Цепочки:

  • INPUT
  • FORWARD
  • OUTPUT

Действия:

  • ACCEPT
  • REJECT
  • DROP

5. Таблица securuty

Предназначена для работы совместнос SELinux

Цепочки:

  • INPUT
  • FORWARD
  • OUTPUT

Действия:

  • SECMARK/CONNSECMARK – установить SELinux context для пакета/соединения

Еще наглядные схемы работы:

image_pdfimage_print

BGP

Схема сети:
Net-R0 enp0s8 192.168.1.1 enp0s3 192.168.113.63
Net-R1 enp0s8 192.168.44.1 enp0s3 192.168.1.64
Net-R2 enp0s8 192.168.44.1 enp0s3 192.168.1.126
enp0s8 – dummy0 interface

На всех Net-R* поднят BGP, Net-R1-2 – поднят http, bind.

# yum install quagga
# systemctl enable zebra
# systemctl start zebra
# systemctl start bgpd
# systemctl enable bgpd

Watchquagga – это дополнение к quagga. Мониторит доступность указаных демонов quagga, и в случае, если демон не отвечает – перезапускает его.

cp /usr/share/doc/quagga-*/bgpd.conf.sample /etc/quagga/bgpd.conf
vtysh
show running-config

If this returns a string with or including “router bgp 7675”, delete it by executing:

configure terminal
no router bgp 7675
router bgp 65500
no auto-summary
no synchronization
neighbor 192.168.1.64 remote-as 65500
neighbor 192.168.1.64 description "Net-R1"
network 192.168.44.0 mask 255.255.255.0
do write

Для всех маршрутизаторов повторяем:

Net-R1# conf t
Net-R1(config)# router bgp 65500
Net-R1(config-router)# neighbor 192.168.1.1 remote-as 65500
Net-R1(config-router)# end
Net-R2# conf t
Net-R2(config)# router bgp 65500
Net-R2(config-router)# redistribute connected
Net-R2(config-router)# end
Net-R1# conf t
Net-R1(config)# router bgp 65500
Net-R1(config-router)# redistribute connected
Net-R1(config-router)# end

Ищем строку и оставляем нужный протокол:

[root@Net-R1 sysconfig] # cd /etc/sysconfig
[root@Net-R1 sysconfig] # vi quagga
#Uncomment and edit this line to reflect the daemons you are actually using:
#WATCH_DAEMONS="zebra bgpd ospfd ospf6d ripd ripngd"
WATCH_DAEMONS="zebra bgpd"

Права на файлы на все Net-R*:

[root@Net-R2 quagga] # ll
итого 16
-rw-------. 1 quagga quagga 326 Дек 15 02:53 bgpd.conf
-rw-r-----. 1 quagga quagga 566 Дек 11 14:47 bgpd.conf.sav
-rw-r-----. 1 quagga quaggavt 0 Дек 11 14:46 vtysh.conf
-rw-------. 1 quagga quagga 389 Дек 15 02:53 zebra.conf
-rw-------. 1 quagga quagga 389 Дек 15 02:52 zebra.conf.sav
# systemctl start bgpd
# systemctl start bgpd

# ps -ax | grep bgpd
657 ? Ss 0:02 /usr/sbin/bgpd -d -A 127.0.0.1 -f /etc/quagga/bgpd.conf
2975 pts/0 S+ 0:00 grep --color=auto bgpd
[root@Net-R0 sysconfig]  # while true; do echo -n $(date)\:\ ; curl --connect-timeout 1 http://192.168.44.1; sleep .1; done
image_pdfimage_print