Повишаване на сигурността за 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прави много неща, както показва неговата man страница, но възможности като 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"

Настройките по подразбиране обикновено работят добре. Ако са необходими различни стойности, sshguardman страницата дава подробна информация за параметрите:

# 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 Manual имат полезна информация за това. Въпреки това, писането на файл с правила не е толкова трудно, освен това персонализираният набор от правила може да бъде по-лесен за разбиране и промяна, когато е необходимо.

Важна характеристика на ipfwправилата е, че първият мач печели, което означава, че редът на правилата е важен. В ipfw, всяко правило е команда, а файлът с правила е изпълним шел скрипт. Това позволява наборът от правила да бъде променен чрез промяна на правилата, след това стартиране на файла с правила като скрипт на обвивката, който е:

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

Обикновено файл с правила ще дефинира променлива за ipfwкомандата, след това ще изчисти текущите правила, ще издаде общи правила, след което ще продължи да задава "изходящи" правила, последвани от "входящи" правила. Страницата с ръководство за 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 е публичен

Как да инсталирате Pagekit 1.0 CMS на FreeBSD 11 FAMP VPS

Как да инсталирате Pagekit 1.0 CMS на 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 база данни от световна класа, която често се използва в по-новите уеб приложения. Той осигурява заявки с висока производителност, разделяне и репликация

Как да инсталирате Monica на FreeBSD 12

Как да инсталирате Monica на FreeBSD 12

Използване на различна система? Monica е система за управление на лични взаимоотношения с отворен код. Мислете за него като за CRM (популярен инструмент, използван от търговските екипи в th

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 е мощна и гъвкава, безплатна и с отворен код Headless Content Management System (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

Възходът на машините: Реални приложения на AI

Възходът на машините: Реални приложения на AI

Изкуственият интелект не е в бъдещето, тук е точно в настоящето. В този блог Прочетете как приложенията за изкуствен интелект са повлияли на различни сектори.

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 машини. Прочетете тази статия, за да научите повече