Изучение 26 методов анализа больших данных: часть 1
Изучение 26 методов анализа больших данных: часть 1
VPS-серверы часто становятся объектами нападок. Распространенный тип атаки обнаруживается в системных журналах как сотни несанкционированных попыток входа по ssh. Настройка брандмауэра очень полезна, но сама по себе может неадекватно контролировать попытки взлома.
В этом руководстве показано, как создать расширенный барьер проникновения для FreeBSD с помощью двух программ: ipfw
брандмауэра и sshguard
. SSHGuard - это небольшая дополнительная программа, которая отслеживает системные журналы на предмет «оскорбительных» записей. Когда нарушители пытаются получить доступ, sshguard
дает указание ipfw
заблокировать трафик, исходящий с IP-адреса нарушителя. Правонарушителя тогда фактически закрывают.
Как только вы поймете, как работают эти программы, управлять защитой сервера довольно просто. Хотя это руководство посвящено настройке FreeBSD, его части относятся к другим программным обеспечением ОС и брандмауэров.
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". Файл правил подробно описан ниже.
sshguard
поставляется в нескольких вариантах для использования с различными брандмауэрами. Используйте pkg
утилиту для загрузки и установки sshguard-ipfw
:
[user@vultr ~]$ sudo pkg install sshguard-ipfw
В большинстве случаев это все, что нужно сделать. Соответствующая переменная автоматически вставляется /etc/rc.conf
для запуска при загрузке:
sshguard_enable="YES"
Стандартные настройки обычно работают хорошо. Если необходимы разные значения, на sshguard
странице руководства вы найдете подробную информацию о параметрах:
# 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
Самое сложное - это создание набора правил брандмауэра. ipfw
Можно использовать предоставленный /etc/rc.firewall
сценарий, но его необходимо изменить, чтобы он соответствовал SSHGuard, а также различным рабочим сценариям. Ряд веб-страниц и руководство по FreeBSD содержат полезную информацию об этом. Тем не менее, написание файла правил не так сложно, кроме того, пользовательский набор правил может быть легче понять и изменить при необходимости.
Важной особенностью ipfw
правил является то, что первое совпадение выигрывает, что означает, что порядок правил важен. В ipfw
каждом правиле есть команда, а файл правил - исполняемый скрипт оболочки. Это позволяет изменить набор правил, изменив правила и запустив файл правил в виде сценария оболочки:
[user@vultr /usr/local/etc]$ sudo ./IPFW.rules
Как правило, файл правил определяет переменную для ipfw
команды, затем очищает текущие правила, выпускает общие правила, затем переходит к заданию правил «out», а затем правил «in». Страница справочника 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
Системные потребности различаются, и различные варианты портов для блокировки или разблокировки отражаются в наборе правил. После завершения набора правил сохраните файл /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
в списке не будет никаких адресов, но со временем он может стать довольно длинным. Одним из вариантов является создание отдельных правил блокировки для адресов с несколькими записями в таблице, а затем удаление их из черного списка.
Рекомендуется периодически проверять журналы, чтобы убедиться, что вторжения контролируются. В общем /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 и безопасностью проекта.
Изучение 26 методов анализа больших данных: часть 1
Многие из вас знают Switch, который выйдет в марте 2017 года, и его новые функции. Для тех, кто не знает, мы подготовили список функций, которые делают «Switch» обязательным гаджетом.
Вы ждете, когда технологические гиганты выполнят свои обещания? проверить, что осталось недоставленным.
Прочтите блог, чтобы узнать о различных уровнях архитектуры больших данных и их функциях самым простым способом.
Прочтите это, чтобы узнать, как искусственный интеллект становится популярным среди небольших компаний и как он увеличивает вероятность их роста и дает преимущество перед конкурентами.
CAPTCHA стало довольно сложно решать пользователям за последние несколько лет. Сможет ли он оставаться эффективным в обнаружении спама и ботов в ближайшем будущем?
По мере того, как наука развивается быстрыми темпами, принимая на себя большую часть наших усилий, также возрастает риск подвергнуться необъяснимой сингулярности. Прочтите, что может значить для нас необычность.
Что такое телемедицина, дистанционное здравоохранение и их влияние на будущее поколение? Это хорошее место или нет в ситуации пандемии? Прочтите блог, чтобы узнать мнение!
Возможно, вы слышали, что хакеры зарабатывают много денег, но задумывались ли вы когда-нибудь о том, как они зарабатывают такие деньги? Давайте обсудим.
Недавно Apple выпустила macOS Catalina 10.15.4, дополнительное обновление для исправления проблем, но похоже, что это обновление вызывает больше проблем, приводящих к поломке компьютеров Mac. Прочтите эту статью, чтобы узнать больше