Підвищення безпеки для FreeBSD за допомогою IPFW і SSHGuard

Підвищення безпеки для FreeBSD за допомогою IPFW і SSHGuard

Сервери VPS часто стають мішенню зловмисників. Поширений тип атаки відображається в системних журналах у вигляді сотень несанкціонованих спроб входу через ssh. Налаштування брандмауера дуже корисно, але само по собі може не контролювати руйнівні спроби вторгнення.

У цьому підручнику показано, як створити розширений бар’єр вторгнення для FreeBSD за допомогою двох програм, ipfwбрандмауера та sshguard. SSHGuard — це невелика додаткова програма, яка відстежує системні журнали на наявність «зловживаючих» записів. Коли правопорушники намагаються отримати доступ, sshguardінструкція ipfwблокувати трафік, що надходить з IP-адреси порушника. Тоді правопорушника фактично закривають.

Коли ви зрозумієте, як працюють ці програми, керувати захистом сервера досить просто. Хоча цей посібник зосереджено на налаштуванні FreeBSD, його частини застосовуються до інших ОС і програмного забезпечення брандмауера.

Крок 1. Налаштування IPFW

FreeBSD надає 3 брандмауери в GENERICядрі за замовчуванням ( ) ipfw, pf, і ipfilter. Кожен з них має переваги та шанувальники, але ipfwє рідним програмним забезпеченням брандмауера FBSD і досить простим у використанні для наших цілей. Варто зазначити, що він ipfwвиконує багато речей, як показує його сторінка керівництва , однак такі можливості, як NAT, формування трафіку тощо, не потрібні для типової ситуації VPS. На щастя, основні функції брандмауера легко відповідають нашим вимогам.

Щоб запустити брандмауер під час завантаження, додайте наступне до /etc/rc.conf:

firewall_enable="YES"
firewall_script="/usr/local/etc/IPFW.rules"
firewall_logging="YES"

Доступна serviceкоманда для запуску/зупинки брандмауера вручну:

[user@vultr ~]$ sudo service ipfw start

Природно, ipfwне буде робити нічого, доки не додасть правила, часто з файлу, у цьому прикладі, розташованому за адресою /usr/local/etc/IPFW.rules. Фактично, файл правил може розташовуватися де завгодно або мати будь-яку назву, якщо він відповідає параметру «firewall_script». Файл правил детально описано нижче.

Крок 2. Встановіть та налаштуйте SSHGuard

sshguardпредставлений у кількох варіантах для використання з різними брандмауерами. Використовуйте pkgутиліту для отримання та встановлення sshguard-ipfw:

[user@vultr ~]$ sudo pkg install sshguard-ipfw

У більшості випадків це все, що потрібно зробити. Відповідна змінна автоматично вставляється /etc/rc.confдля запуску під час завантаження:

sshguard_enable="YES"

Значення за замовчуванням зазвичай працюють добре. Якщо потрібні інші значення, sshguardсторінка man надає детальну інформацію про параметри:

# sshguard--program defaults, so don't need to be in rc.conf unless assigning different value
# sshguard_pidfile="/var/run/sshguard.pid"
# sshguard_watch_logs="/var/log/auth.log:/var/log/mail"
# sshguard_blacklist="40:/var/db/sshguard/blacklist.db"
# sshguard_safety_thresh="40"
# sshguard_pardon_min_interval="420"
# sshguard_prescribe_interval="1200"

Ви можете почати sshguardзі звичайного serviceвиклику:

[user@vultr ~]$ sudo service sshguard start

Крок 3. Створіть сценарій правил

Найважче створити набір правил брандмауера. ipfwможе використовувати наданий /etc/rc.firewallсценарій, але його потрібно змінити, щоб пристосувати SSHGuard, а також різні сценарії роботи. Кілька веб-сторінок і посібник з FreeBSD містять корисну інформацію про це. Однак написати файл правил не так вже й складно, крім того, користувацький набір правил легше зрозуміти та змінити, коли це необхідно.

Важливою особливістю ipfwправил є те, що перший матч перемагає, а це означає, що порядок правил важливий. У ipfwкожне правило є командою, а файл правила є виконуваним сценарієм оболонки. Це дозволяє змінювати набір правил, змінюючи правила, а потім запускаючи файл правил як сценарій оболонки:

[user@vultr /usr/local/etc]$ sudo ./IPFW.rules

Як правило, файл правил визначає змінну для ipfwкоманди, потім очищає поточні правила, видає загальні правила, а потім переходить до встановлення правил «out», а потім «вхідних». Сторінка посібника ipfw та інші ресурси містять велику кількість інформації про структуру правил і параметрів, яких, м’яко кажучи, багато.

Оскільки версія FreeBSD sshguard була оновлена ​​до версії 1.6.2, метод вставки правил блокування для порушників змінився. Тепер адреси правопорушників зберігаються в таблиці ipfw (точніше таблиця 22), а не вставляються в правила вище 55000, як раніше.

На щастя, налаштувати файл правил для використання таблиці досить просто. Це просто питання розміщення правила таблиці в потрібному місці та використання правильного синтаксису під час написання правила.

Знайшовши sshguardправопорушника, він поміщає адресу порушника до свого чорного списку, а також вставляє адресу в ipfwтаблицю, щоб «запустити» заборону доступу. Це правило досягне таких цілей:

01000 deny ip from table\(22\) to any

У цьому випадку все одно необхідно встановити правила, що дозволяють вхідні послуги вище 01000. Наприклад, припустимо, що адреса 10.20.30.40є злочинцем у таблиці 22, і ми маємо таке правило ipfw:

56420 allow tcp from any to me dst-port 22 in via $vif

Оскільки ipfwзустріч правити 01000 перед тим правилом 56420 , 10.20.30.40буде заблоковано . Правило «дозволити 22 увійти» взагалі ніколи не побачить цього. Якби правило дозволу мало "звичайний" номер, наприклад 00420 , поганий трафік буде пропущений і ніколи не заблокований (оскільки 00420 менше 01000 і "перемагає перший матч").

Приємною особливістю оновленої версії є те, що тепер, коли sshguard запускається, всі адреси з чорного списку додаються до таблиці та доступні для блокування вхідних правопорушників без затримки. Чорний список накопичується і зберігається між сеансами.

На цьому етапі, ймовірно, доцільно показати повний ipfwнабір правил, змінений для sshguard. Коментарі мають полегшити дотримання логіки правила:

#!/bin/sh

# ipfw config/rules
# from FBSD Handbook, rc.firewall, et. al.

# Flush all rules before we begin.
ipfw -q -f flush

# Set rules command prefix
cmd="ipfw -q add "

vif="vtnet0"

# allow all for localhost
$cmd 00010 allow ip from any to any via lo0

# checks stateful rules.  If marked as "keep-state" the packet has
# already passed through filters and is "OK" without futher
# rule matching
$cmd 00101 check-state

# allow DNS out
$cmd 00110 allow tcp from me to any dst-port 53 out via $vif setup keep-state
$cmd 00111 allow udp from me to any dst-port 53 out via $vif keep-state

# allow dhclient connection out (port numbers are important)
$cmd 00120 allow udp from me 68 to any dst-port 67 out via $vif keep-state

# allow HTTP HTTPS replies
$cmd 00200 allow tcp from any to any dst-port 80 out via $vif setup keep-state
$cmd 00220 allow tcp from any to any dst-port 443 out via $vif setup keep-state

# allow outbound mail
$cmd 00230 allow tcp from any to any dst-port 25 out via $vif setup keep-state
$cmd 00231 allow tcp from any to any dst-port 465 out via $vif setup keep-state
$cmd 00232 allow tcp from any to any dst-port 587 out via $vif setup keep-state

# allow icmp re: ping, et. al. 
# comment this out to disable ping, et.al.
$cmd 00250 allow icmp from any to any out via $vif keep-state

# alllow timeserver out
$cmd 00260 allow tcp from any to any dst-port 37 out via $vif setup keep-state

# allow ntp out
$cmd 00270 allow udp from any to any dst-port 123 out via $vif keep-state

# allow outbound SSH traffic
$cmd 00280 allow tcp from any to any dst-port 22 out via $vif setup keep-state

# otherwise deny outbound packets
# outbound catchall.  
$cmd 00299 deny log ip from any to any out via $vif

# inbound rules
# deny inbound traffic to restricted addresses
$cmd 00300 deny ip from 192.168.0.0/16 to any in via $vif
$cmd 00301 deny ip from 172.16.0.0/12 to any in via $vif
$cmd 00302 deny ip from 10.0.0.0/8 to any in via $vif
$cmd 00303 deny ip from 127.0.0.0/8 to any in via $vif
$cmd 00304 deny ip from 0.0.0.0/8 to any in via $vif
$cmd 00305 deny ip from 169.254.0.0/16 to any in via $vif
$cmd 00306 deny ip from 192.0.2.0/24 to any in via $vif
$cmd 00307 deny ip from 204.152.64.0/23 to any in via $vif
$cmd 00308 deny ip from 224.0.0.0/3 to any in via $vif

# deny inbound packets on these ports
# auth 113, netbios (services) 137/138/139, hosts-nameserver 81 
$cmd 00315 deny tcp from any to any dst-port 113 in via $vif
$cmd 00320 deny tcp from any to any dst-port 137 in via $vif
$cmd 00321 deny tcp from any to any dst-port 138 in via $vif
$cmd 00322 deny tcp from any to any dst-port 139 in via $vif
$cmd 00323 deny tcp from any to any dst-port 81 in via $vif

# deny partial packets
$cmd 00330 deny ip from any to any frag in via $vif
$cmd 00332 deny tcp from any to any established in via $vif

# allowing icmp re: ping, etc.
$cmd 00310 allow icmp from any to any in via $vif

# allowing inbound mail, dhcp, http, https
$cmd 00350 allow udp from any 53 to me in via $vif
$cmd 00360 allow tcp from any 53 to me in via $vif
$cmd 00370 allow udp from any 67 to me dst-port 68 in via $vif keep-state

$cmd 00400 allow tcp from any to me dst-port 80 in via $vif setup limit src-addr 2
$cmd 00410 allow tcp from any to me dst-port 443 in via $vif setup limit src-addr 2

# SSHguard puts offender addresses in table 22. Set up the table rule
# Please note the '\(22\)' syntax, necessary since it's run as shell command
$cmd 01000 deny ip from table\(22\) to any

# allow inbound ssh, mail. PROTECTED SERVICES: numbered ABOVE sshguard blacklist range 
$cmd 56420 allow tcp from any to me dst-port 22 in via $vif setup limit src-addr 2
$cmd 56530 allow tcp from any to any dst-port 25 in via $vif setup keep-state
$cmd 56531 allow tcp from any to any dst-port 465 in via $vif setup keep-state
$cmd 56532 allow tcp from any to any dst-port 587 in via $vif setup keep-state

# deny everything else, and log it
# inbound catchall
$cmd 56599 deny log ip from any to any in via $vif

# ipfw built-in default, don't uncomment
# $cmd 65535 deny ip from any to any

Крок 4. Запуск і тестування

Потреби системи відрізняються, і різні варіанти портів для блокування або розблокування відображаються в наборі правил. Після завершення набору правил збережіть файл у /usr/local/etc/IPFW.rulesта запустіть служби FBSD:

 # service ipfw start
 # service sshguard start

Тепер розширений брандмауер має працювати! Перевірити sshguard:

 [user@vultr ~]$ sudo pgrep -lfa ssh

Якщо sshguardзапущено, відображаються його pid і повний командний рядок:

720 /usr/local/sbin/sshguard -b 40:/var/db/sshguard/blacklist.db -l /var/log/auth.log -l /var/log/maillog -a 40 -p 420 -s 1200 -w /usr/local/etc/sshguard.whitelist -i /var/run/sshguard.pid

Це показує набір правил брандмауера зі статистикою та останній раз, коли пакет відповідав правилу:

 [user@vultr ~]$ sudo ipfw -cat list

Через години чи дні адреси правопорушників додаються до чорного списку, а також до таблиці 22. Щоб переглянути всі адреси в таблиці, скористайтеся цією командою:

ipfw table 22 list

Результат друкується як:

10.10.10.118/32 0
10.10.10.72/32 0
...

Як описано вище, підключення з цих адрес заборонено. Звичайно, під час першого запуску sshguardв списку не буде жодної адреси, але з часом він може стати досить довгим. Одним з варіантів є створення окремих правил блокування для адрес із кількома записами в таблиці, а потім видалення їх із чорного списку.

Крок 5. Будьте пильними...

Бажано час від часу перевіряти журнали, щоб переконатися, що вторгнення контролюються. Загалом /var/log/auth.logі /var/log/securityінформативні. Можуть стати очевидними прогалини або помилки в охопленні мережевих послуг. Змінення набору правил брандмауера за потреби є звичайною частиною адміністрування сервера.

У попередніх версіях sshguard, коли /var/db/sshguard/blacklist.dbфайл збільшувався, він міг запобігти sshguardзапуску під час завантаження системи. Видалення або перейменування файлу чорного списку дозволено sshguardпочати. Здається, цю проблему вирішено в останній версії sshguard, тому цей обхідний шлях, ймовірно, більше не потрібен.

Обов’язково внесіть в білий список IP-адресу, з якої ви підключені до сеансу SSH. Якщо ви випадково заблокуєте себе, ви завжди можете підключитися до консолі noVNC на https://my.vultr.com і додати свою IP-адресу в білий список.

Підводячи підсумок, використання комбінації ipfwта sshguardдопомагає підтримувати вашу систему FreeBSD в безпеці та виконувати свою роботу. Зведення до мінімуму нав’язливої ​​мережевої активності має додаткову перевагу: менше «шуму» полегшує відстеження та налаштування роботи системи, сприяючи безпечнішому та краще працюючому серверу.

Ефективний захист системи/сервера FreeBSD не є особливо складним. Хоча для його запуску потрібні скромні зусилля, це окупається значно більшою безпекою VPS та проектом.


Як встановити Tiny Tiny RSS Reader на FreeBSD 11 FAMP VPS

Як встановити Tiny Tiny RSS Reader на FreeBSD 11 FAMP VPS

Використання іншої системи? Tiny Tiny RSS Reader — це безкоштовний зчитувач і агрегатор новин (RSS/Atom) із відкритим вихідним кодом, що розміщується на власному веб-сторінці.

Як встановити Wiki.js на FreeBSD 11

Як встановити Wiki.js на FreeBSD 11

Використання іншої системи? Wiki.js — це безкоштовний сучасний вікі-додаток з відкритим вихідним кодом, побудований на Node.js, MongoDB, Git і Markdown. Вихідний код Wiki.js є публічним

Як встановити CMS Pagekit 1.0 на FreeBSD 11 FAMP VPS

Як встановити CMS Pagekit 1.0 на FreeBSD 11 FAMP VPS

Використання іншої системи? Pagekit 1.0 CMS – це красива, модульна, розширювана та легка, безкоштовна система керування вмістом (CMS) з відкритим вихідним кодом.

Як встановити MODX Revolution на FreeBSD 11 FAMP VPS

Як встановити MODX Revolution на FreeBSD 11 FAMP VPS

Використання іншої системи? MODX Revolution — це швидка, гнучка, масштабована система управління вмістом (CMS) корпоративного рівня з відкритим кодом, написана на PHP. Це я

Налаштування OpenBSD 5.5 64-розрядної

Налаштування OpenBSD 5.5 64-розрядної

У цій статті ви дізнаєтеся, як налаштувати OpenBSD 5.5 (64-розрядна версія) на KVM за допомогою Vultr VPS. Крок 1. Увійдіть в панель керування Vultr. Крок 2. Натисніть РОЗВЕРНУТИ

Як встановити osTicket на FreeBSD 12

Як встановити osTicket на FreeBSD 12

Використання іншої системи? osTicket — це система продажу квитків з відкритим вихідним кодом. Вихідний код osTicket відкрито розміщено на Github. У цьому підручнику

Як встановити Flarum Forum на FreeBSD 12

Як встановити Flarum Forum на FreeBSD 12

Використання іншої системи? Flarum — це безкоштовне програмне забезпечення нового покоління з відкритим вихідним кодом, яке робить онлайн-обговорення веселими. Вихідний код Flarum розміщений o

Як увімкнути TLS 1.3 у Nginx на FreeBSD 12

Як увімкнути TLS 1.3 у Nginx на FreeBSD 12

Використання іншої системи? TLS 1.3 — це версія протоколу безпеки транспортного рівня (TLS), який був опублікований у 2018 році як запропонований стандарт у RFC 8446.

Встановіть WordPress на OpenBSD 6.2

Встановіть WordPress на OpenBSD 6.2

Вступ WordPress є домінуючою системою керування вмістом в Інтернеті. Він забезпечує все, від блогів до складних веб-сайтів із динамічним вмістом

Як встановити Subrion 4.1 CMS на FreeBSD 11 FAMP VPS

Як встановити Subrion 4.1 CMS на FreeBSD 11 FAMP VPS

Використання іншої системи? Subrion 4.1 CMS — це потужна та гнучка система керування вмістом із відкритим кодом (CMS), яка забезпечує інтуїтивно зрозумілий та зрозумілий вміст

Як налаштувати DJBDNS на FreeBSD

Як налаштувати DJBDNS на FreeBSD

Цей підручник покаже вам, як налаштувати службу DNS, яку легко підтримувати, легко налаштовувати і яка, як правило, є більш безпечною, ніж класичний BIN

Як встановити стек Nginx, MySQL та PHP (FEMP) на FreeBSD 12.0

Як встановити стек Nginx, MySQL та PHP (FEMP) на FreeBSD 12.0

Стек FEMP, який можна порівняти зі стеком LEMP в Linux, являє собою набір програмного забезпечення з відкритим вихідним кодом, яке зазвичай встановлюється разом для забезпечення FreeBS

Встановлення MongoDB на FreeBSD 10

Встановлення MongoDB на FreeBSD 10

MongoDB — це база даних NoSQL світового класу, яка часто використовується в нових веб-додатках. Він забезпечує високопродуктивні запити, шардінг та реплікацію

Як встановити Моніку на FreeBSD 12

Як встановити Моніку на FreeBSD 12

Використання іншої системи? Monica — це відкрита система управління особистими відносинами. Подумайте про це як про CRM (популярний інструмент, який використовується відділами продажів у м

OpenBSD як рішення для електронної комерції з PrestaShop і Apache

OpenBSD як рішення для електронної комерції з PrestaShop і Apache

Вступ У цьому підручнику демонструється OpenBSD як рішення для електронної комерції з використанням PrestaShop і Apache. Apache потрібен, оскільки PrestaShop має складну UR

Встановлення Fork CMS на FreeBSD 12

Встановлення Fork CMS на FreeBSD 12

Використання іншої системи? Fork — це CMS з відкритим кодом, написана на PHP. Вихідний код Forks розміщено на GitHub. Цей посібник покаже вам, як встановити Fork CM

Як встановити Directus 6.4 CMS на FreeBSD 11 FAMP VPS

Як встановити Directus 6.4 CMS на FreeBSD 11 FAMP VPS

Використання іншої системи? Directus 6.4 CMS — це потужна та гнучка, безкоштовна система керування вмістом без голови (CMS) з відкритим вихідним кодом, яка надає розробнику

Підвищення безпеки для FreeBSD за допомогою IPFW і SSHGuard

Підвищення безпеки для FreeBSD за допомогою IPFW і SSHGuard

Сервери VPS часто стають мішенню зловмисників. Поширений тип атаки відображається в системних журналах у вигляді сотень несанкціонованих спроб входу через ssh. Налаштовуючи

Налаштуйте httpd в OpenBSD

Налаштуйте httpd в OpenBSD

Вступ OpenBSD 5.6 представив новий демон під назвою httpd, який підтримує CGI (через FastCGI) і TLS. Для встановлення нового http не потрібно додатково працювати

Налаштуйте iRedMail на FreeBSD 10

Налаштуйте iRedMail на FreeBSD 10

Цей підручник покаже вам, як встановити групове програмне забезпечення iRedMail на нову інсталяцію FreeBSD 10. Ви повинні використовувати сервер з принаймні одним гігабайтом o

Повстання машин: застосування ШІ в реальному світі

Повстання машин: застосування ШІ в реальному світі

Штучний інтелект не в майбутньому, він тут прямо в сьогоденні У цьому блозі Прочитайте, як програми штучного інтелекту вплинули на різні сектори.

DDOS-атаки: короткий огляд

DDOS-атаки: короткий огляд

Ви також стали жертвою DDOS-атак і спантеличені методами запобігання? Прочитайте цю статтю, щоб вирішити свої запитання.

Ви коли-небудь замислювалися, як хакери заробляють гроші?

Ви коли-небудь замислювалися, як хакери заробляють гроші?

Можливо, ви чули, що хакери заробляють багато грошей, але чи замислювалися ви коли-небудь, як вони заробляють такі гроші? давайте обговоримо.

Революційні винаходи від Google, які полегшать ваше життя.

Революційні винаходи від Google, які полегшать ваше життя.

Ви хочете побачити революційні винаходи Google і як ці винаходи змінили життя кожної людини сьогодні? Тоді читайте в блозі, щоб побачити винаходи Google.

Friday Essential: Що сталося з автомобілями, керованими штучним інтелектом?

Friday Essential: Що сталося з автомобілями, керованими штучним інтелектом?

Концепція самокерованих автомобілів, щоб вирушати в дороги за допомогою штучного інтелекту, є мрією, яку ми давно мріємо. Але, незважаючи на кілька обіцянок, їх ніде не видно. Прочитайте цей блог, щоб дізнатися більше…

Технологічна сингулярність: віддалене майбутнє людської цивілізації?

Технологічна сингулярність: віддалене майбутнє людської цивілізації?

Оскільки наука розвивається швидкими темпами, бере на себе багато наших зусиль, ризики піддати себе незрозумілій Сингулярності також зростає. Читайте, що може означати для нас сингулярність.

Еволюція зберігання даних – інфографіка

Еволюція зберігання даних – інфографіка

Методи зберігання даних можуть розвиватися з моменту народження Даних. Цей блог висвітлює еволюцію зберігання даних на основі інфографіки.

Функціональні можливості шарів еталонної архітектури великих даних

Функціональні можливості шарів еталонної архітектури великих даних

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

6 дивовижних переваг використання пристроїв розумного дому в нашому житті

6 дивовижних переваг використання пристроїв розумного дому в нашому житті

У цьому цифровому світі пристрої розумного дому стали важливою частиною життя. Ось кілька дивовижних переваг пристроїв розумного дому щодо того, як вони роблять наше життя гідним життя та спрощують його.

Оновлення доповнення macOS Catalina 10.15.4 спричиняє більше проблем, ніж вирішує

Оновлення доповнення macOS Catalina 10.15.4 спричиняє більше проблем, ніж вирішує

Нещодавно Apple випустила додаткове оновлення macOS Catalina 10.15.4, щоб виправити проблеми, але схоже, що оновлення викликає більше проблем, що призводять до блокування комп’ютерів Mac. Прочитайте цю статтю, щоб дізнатися більше