MYCSS

Показ дописів із міткою pf. Показати всі дописи
Показ дописів із міткою pf. Показати всі дописи

2023-03-30

nginx як проксі для серверів pop3, imap. Додаткова авторизація через ssl client, та блокування у fail2ban.

Задача

Є задача підключити nginx як ssl proxy для служб електронної пошти, з перевіркою авторизації у nginx. Використання nginx дозволить використати сучасні ssl сертифікати, у випадку коли поштові сервіси не можуть це зробити за певних умов. Наприклад коли необхідна додаткова перевірка авторизації через сертифікати ssl клієнта

Додаткова авторизація через SSL client certificate.

Для підтримки авторизації через SSL client certificate сторона сервера посилає додатковий запит клієнту на те що очікує від нього особистого сертифікату. Запит описує чи має бути відновіть від клієнта з особистим сертифікатом клієнту обов'язковим чи за бажанням. Надалі клієнт надсилає, а сервер перевіряє отриманий особистий сертифікат клієнту чи був він виданий певним центром сертифікації (CA) та чи він не був відкликаний, або не слив термін придатності. На цьому перевірка закінчена, будь який дійсний сертифікат виданий центром сертифікації (CA) буде прийнятним для сервера.

2021-05-16

Нотатка для себе. Hosting, Multple ISP, pf routing

Нотатка є віртуальна машина з FreeBSD v13, та двома інтерфейсами для vtnet0 (ISP1) так vtnet1 (ISP2).

Роль сервера - хостинг. Але ISP2 має швидкість 10Gbit/s, тому треба певні сайти віддавати через ISP1, інші через ISP2 з метою оптимізації.

rc.conf

#ISP1

ifconfig_vtnet0="inet 10.110.6.6  netmask 255.255.255.0"
defaultrouter="10.110.6.1"

ifconfig_vtnet0_ipv6="inet6 2105:1c00:7:1::6 prefixlen 64"
ipv6_defaultrouter="2105:1c00:7:1::1" #ISP2 ifconfig_vtnet1="inet 10.220.6.97 netmask 255.255.255.0"
ifconfig_vtnet1_ipv6="inet6 2001:10:10:10::97 prefixlen 64"

За замовчуванням трафік іде через vtnet0 (ISP1).
Для організації відповіді для запиту з інтерфейсу vtnet1 не через шлюз vtnet0, а через шлюз vtnet1 створено  правило для firewall pf.

pf.conf

ext_if1 = vtnet0
ext_gw1 = 10.110.6.1

ext_if2 = "vtnet1"
ext_gw2 = "10.220.6.1"
ext_gw2v6 = "2001:10:10:10::1"

#ipv4 reply-to
pass in on $ext_if2 reply-to ($ext_if2 $ext_gw2) inet from any to $ext_if2

#ipv6 reply-to pass in reply-to ($ext_if2 $ext_gw2v6) inet6 from !$ext_if2:network to $ext_if2. pass out route-to ($ext_if2 $ext_gw2v6) inet6 from $ext_if2 to !$ext_if2:network

2019-11-08

pfsense синхронізація pf таблиці snort2c на інший firewall

Є фаєрвол pfsense (192.168.0.2) з встановленим пакунком snort.
Snort аналізує проток даних що приходить від мережевого інтерфейсу котрий під'єднаний до mirror port мережевого комутатора HP 2920.
Програма Snort аналізує мережевий потік що йде від ISP. На основі правил, отриманих за підписками, snort блокує IP адреси заносячи їх до відповідної таблиці фаєрволу pf - 'snort2c'.
Так як для аналізу мережевого потоку використовується не основний фаєрвол, а інший сервер, то за таблицею 'snort2c' нічого реально не блокується.
Фаєрвол pfsense запущено у віртуальній машині сервера PROXMOX у приватній підмережі 192.168.0.0/24.
Діаграма підключень

Для реального блокування IP адрес (ipv4, ipv6), необхідно передати інформацію про заблоковані IP адреси на інший сервер з FreeBSD (192.168.0.1) додаючи адреси до локальної таблиці 'snort2c' фаєрволу pf, і також зупиняючи усі з'єднання що існували з цими IP адресами.

2017-11-25

Нотатка. pfsense, перевірка таблиці pf коли пакунок pfBlockerNG не оновився

Використовуючи pfsense, я налаштував пакунок pfBlockerNG, для обмеження підключень до певних сервісів тільки з відомих країн.
Одного разу виявив що підключення стали заблоковані. Після аналізу з'ясував, що сервер перезавантажився і доступ не було надано так як таблиці доступу (IP_COUNTRY_ALLOWED_NG) були пусті, а оновлення у мене налаштовано один раз на добу.
Використання таблиці IP_COUNTRY_ALLOWED_NG у правилах 

Тому щоб подібне не повторювалося додав скрипт (check_ng_tables.sh) котрий перевіряє кількість записів у таблиці, в  випадку коли їх кількість менше чи критичне значення я форсую оновлення таблиць pfBlockerNG, і сповіщаю про це електронною поштою адміністратора.

/root/scripts/check_ng_tables.sh
#!/bin/sh

cntlines=$(/sbin/pfctl -t IP_COUNTRY_ALLOWED_NG -T show | wc -l)
if [ $cntlines -le 100 ]
then
    echo "count of pf table IP_COUNTRY_ALLOWED_NG is ($cntlines) less than 100, try reload pfblockerng.php"|/usr/local/bin/php /usr/local/bin/mail.php -s'[gw] IP_COUNTRY_ALLOWED_NG' postmaster@yourdomain.com
    /usr/local/bin/php /usr/local/www/pfblockerng/pfblockerng.php cron >> /var/log/pfblockerng/pfblockerng.log 2>&1
fi

Потім додав перевірку за розкладом кожні 5 хвилин.
Додав перевірку таблиці за розкладом cron

2017-11-20

Нотатка з керування PF firewall через pfctrl


https://gist.github.com/tracphil/4353170
# basic pfctl control
# ==
# Related: http://www.OpenBSD.org
# Last update: Tue Dec 28, 2004
# ==
# Note:
# this document is only provided as a basic overview
# for some common pfctl commands and is by no means
# a replacement for the pfctl and pf manual pages.

#### General PFCTL Commands ####
# pfctl -d disable packet-filtering
# pfctl -e enable packet-filtering
# pfctl -q run quiet
# pfctl -v -v run even more verbose

2014-02-25

PF firewall log alarm

Завдання.
Заносимо до таблиці pf  <attackers> значення адрес хто мав спроби підключитися до NTP служби у внутрішній мережі.
І таким чином блокуємо повний доступ до сервера і локальної мережі цим адресам.
Додатково використаний порт Simple Log Watcher

Коли забув ти рідну мову, біднієш духом ти щодня...
When you forgot your native language you would become a poor at spirit every day ...

Д.Білоус / D.Bilous
Рабів до раю не пускають. Будь вільним!

ipv6 ready