О том, как защитить SHH c помощью Fail2ban

В сети нашел интересный инструмент для защиты SHH от взлома, который называется Fail2ban. Часто бывает, что кто-то настойчиво долбится по стандартному порту (у SHH — это 22 порт), перебирая пароли и пытаясь получить доступ к серверу. Конечно, можно перевесить стандартный порт на что-то экзотическое, к примеру, на 2341-й порт. Но, как показывает практика, и это не спасает от брутфорса, т.к. с помощью сканеров можно легко найти нужный порт для атаки. Без сомнения, защита SSH — одна из самых важных задач, т.к. если злоумышленник завладеет доступом к нему — то пиши пропало!

Кстати, как вариант, можно ограничить спиcок IP-адресов, которым разрешен доступ к SSH. Если администратором являетесь только вы, и у вас статичный IP — то это хороший вариант. Но часто бывает, что IP динамический, что зайти к себе на сервер через SSH нужно с соседа или с другой точки доступа и т.д.

И так, что же из себя представляет Fail2ban? В его задачи, по мимо защиты SHH, входит также и защита FTP, SMTP, Apache и др. Как работает? Демон Fail2ban находит постоянно повторяющиеся неудачные попытки с одного и того же IP-адреса или хоста, после чего дальнейшие попытки залогиниться с этого IP-адреса/хоста блокируются с помощью правила iptables.

Устанавливается пакет Fail2ban в ОС Debian очень легко, так как есть в стандартных репозиториях:

apt-get install fail2ban

По-умолчанию,  Fail2ban настроен на защиту SSH, но можно применить правила и для других сервисов. Для этого необходимо произвести изменения в файле конфигруации:

/etc/fail2ban/jail.conf

В опции destemail меняем дефолтный e-mail на свой, если хотим получать на почту уведомления о попытке атаки на ваш сервер. По мимо SSH, как уже отмечалось выше, можно применить правила защиты и для других сервисов. Для этого достаточно найти соответствующую секцию с названием сервиса и отредактировать параметры исходя из собственных предпочтений. Ниже я привожу пояснения к доступным параметрам:

  • ignoreip — это разделенный пробелами список ip-адресов, которые не могут быть блокированы fail2ban. Сюда можно занести свою локальную машину или комьютер, с которого будут проводится эксперименты над системой.
  • bantime — время в секунда, на которое блокируется хост. По-умолчанию равно 600 секундам, т.е. 10 минутам.
  • maxretry — максимальное число ошибочных попыток доступа к сервису, прежде чем хост будет заблокирован fail2ban.
  • filter — имя соответствующего файла-фильтра в /etc/fail2ban/filter.d, без конечного .conf
  • action — имя соответствующего файла-реакции на срабатывание фильтра в /etc/fail2ban/action.d
  • logpath — файл логов, мониторинг которого осуществляет fail2ban, для проверки попыток атак.
  • enabled — правило может принимать значение true или false (включено или выключено).

После того, как все изменения в конфигурационный файл будут произведены, необходимо произвести перезапуск демона:

/etc/init.d/fail2ban restart

Если необходимо проанализировать логи, которые ведет Fail2ban, то можно выполнить следующее:

cat /var/log/fail2ban.log

Если кто-то уже заблокирован, то в логах вы увидите примерно следующее:

2011-01-25 12:00:39,531 fail2ban.actions: WARNING [ssh] Ban 81.9.5.200

2011-01-25 12:07:43,326 fail2ban.actions: WARNING [ssh] Unban 81.9.5.200

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

iptables -L

Проверка конфигурации:

fail2ban-client -d

Рекомендую также прочитать руководство по использованию Fail2ban, которое доступно на официальном сайте.

Логирование в Fail2ban

Про эмуляцию компьютерных сетей

Получил от преподавателя задание по «Научно-педагогической практике», которое сформулировано следующим образом: «Провести имитационный эксперимент по реализации алгоритмов маршрутизации в корпоративной информационной сети». Каким местом это относится к педагогической практике — без понятия. Тут стоит отметить, опять же, видение наших ВУЗов на образование. На кафедре, на вопрос, что из себя должна представлять научно-педагогическая практика, ответили, что мы (студенты-магистранты) должны вести занятия у других студентов, набираясь, тем самым, опыта в педагогике. Однако, кафедре не интересно такими вещами заниматься, поэтому они поставили практику на январь, когда и преподавать-то не у кого, ведь все же сдают сессию, а потом еще две недели каникул. В итоге, имеем совсем не относящееся к практике задание. Ну да ладно…

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

Программы моделирования (эмуляции) компьютерных сетей:

  • Boson Network Designer
  • Boson NetSim for CCNP
  • Cisco Packet Tracer
  • Cisco CCNA Network Simulator
  • Cisco RouterSim CCNA Network Visualizer
  • Dynamips
  • NetCracker
  • Friendly Pinger
  • GNS3

Для себя я выбрал Cisco Packet Tracer, благо, по ней есть много теоретического материала, по которому можно разобраться в том, как в этой программе создавать сети и проводить настройку маршрутизации.

Материалы по теме: ссылка.

Про системы виртуализации

Что может виртуализация:

  • Запуск множества операционных систем одновременно.
  • Гарантированная изоляция ОС друг от друга.
  • Возможность гибкого разделения ресурсов между машинами.

Преимущества виртуализации:

  • Повышение изоляции.
  • Ограничение одной или группы тесно связанных служб собственной виртуальной машиной.
  • Снижение вероятности сбоев от взаимного влияния программ.
  • Безопасность.
  • Распределение задач администрирования — возможность ограничить права каждого администратора только самыми необходимыми.
  • Снижение потенциальных вредных последствий взлома какой-либо из служб.
  • Распределение ресурсов — каждая машина получает столько ресурсов, сколько ей необходимо, но не более того.
  • Приоритезация задач.
  • Выделение память по требованию.
  • Гибкое распределение сетевого трафика между машинами.
  • Распределение дисковых ресурсов.
  • Постоянная доступность.
  • Есть возможность live-миграции машин.
  • Плавный апгрейд критических серверов.
  • Повышение качества администрирования.
  • Возможность выполнения регрессионных тестов.
  • Возможность экспериментирования и исследования.

Принципы и виды виртуализации:

  • Интерпретация и динамическая рекомпиляция — при использовании динамической рекомпиляции программа-эмулятор преобразует фрагменты исполняемой программы в код, который может быть выполнен на другом компьютере, непосредственно во время ее работы. Рекомпилятор имеет меньшую совместимость, чем интерпретатор, но он быстрее.

 

Примеры: Bochs, PearPC, QEMU, Microsoft VirtualPC for MAC.

  • Паравиртуализация и портирование — модификация ядра гостевой ОС выполняется таким образом, что в нее включается новый набор API, через который она может напрямую работать с аппаратурой, не конфликтуя с другими виртуальными машинами. При этом нет необходимости задействовать полноценную ОС в качестве хостового ПО, функции которого в данном случае исполняет специальная система, получившая название гипервизора (hypervisor).
    • Достоинства: отсутствии потребности в хостовой ОС. Виртуальная машина устанавливаются фактически на “голое железо”, а аппаратные ресурсы используются эффективно.
    • Недостатки: сложность реализации подхода и необходимость создания специализированной ОС-гипервизора.

 

Примеры: Xen, UML, lguest, Microsoft Hyper-V, KVM, VMware ESX Server.

  • Виртуализация на уровне ОС — при таком подходе используется одно ядро хостовой ОС для создания независимых параллельно работающих операционных сред. Ядро обеспечивает полную изолированность контейнеров, поэтому программы из разных контейнеров не могут воздействовать друг на друга.
    • Достоинства: высокая эффективность использования аппаратных ресурсов, низкие накладные технические расходы, отличная управляемость, минимизация расходов на приобретение лицензий.
    • Недостатки: реализация только однородных вычислительных сред.

 

Примеры: FreeVPS, iCore Virtual Accounts, Linux-VServer, OpenVZ, Parallels Virtuozzo Containers, Zones, FreeBSD, Jail, sysjail, WPARs, Solaris Containers.

  • Полная виртуализация — при таком подходе используются немодифицированные экземпляры гостевых операционных систем, а для поддержки работы этих ОС служит общий слой эмуляции их исполнения поверх хостовой ОС, в роли которой выступает обычная операционная система.
    • Достоинства: относительная простота реализации, универсальность и надежность решения; все функции управления берет на себя хост-ОС.
    • Недостатки: высокие дополнительные накладные расходы на используемые аппаратные ресурсы, отсутствие учета особенностей гостевых ОС, меньшая, чем нужно, гибкость в использовании аппаратных средств.

 

Примеры: VMware Workstation, VMware Server, Parallels Desktop, Parallels Server, Microsoft VirtualPC, Microsoft Virtual Server, Microsoft Hyper-V, QEMU с модулем kqemu, KVM, Virtual Iron.

  • Слой совместимости

 

Примеры: Cygwin, Wine.

Материалы по теме: ссылка.

О том, как защитить изображения от хотлинка

Если есть необходимость защитить свои изображения от хотлинка (hotlink), то одним из способов является внесение в файл .htaccess следующего правила:

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(. \.)?site\.ru/ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .*\.(jpe?g|gif|bmp|png)$ /images/blank.jpg [L
]

где /images/blank.jpg — это то изображение, которое будет отдаваться при запросе наших картинок с чужих серверов. Тем самым мы экономим траффик и ресурсы нашего сервера!

А вот хороший инструмент для проверки защиты сайта от хотлинка.

Про корневые серверы DNS

Когда мы вводим в строку браузера имя сайта, куда хотим попасть, то имя преобразовывается в IP-адрес, по которому уже идет непосредственное обращение к серверу, на котором располагается запрашиваемый сайт. Преобразованием «имя -> IP-адрес» занимается DNS-сервер. Типов DNS-сервер существует много, есть локальные, перенаправляющие, регистрирующие и др. Но самыми главными являются корневые сервера DNS, которые содержат информацию о доменах верхнего уровня. Основные корневые серверы DNS обозначаются латинскими буквами от A до М. Данные серверы управляются различными организациями, действующими по согласованию с ICANN (Internet Corporation for Assigned Names and Numbers).

Фактически существует 13 корневых серверов DNS, т.к. в DNS-ответ может быть помещено всего 13 серверов. Однако, на самом деле, за этими 13 «виртуальными» серверами стоят куда большее число серверов, называемые «зеркалами».

На сайте root-servers.org приведена таблица, где можно посмотреть список из 13 записей от A до М с названием оператора, места расположения серверов и IP-адресов.

Стоит отметить, что если что-то случится с этими DNS-серверами, то можно будет смело говорить о полной жопе Интернету. Однако, навряд ли что-то может случится со всеми серверами сразу, если только не какой-нибудь апокалипсис снизайдет на Землю. Но тогда, я уверен, нам уже явно будет не до Интернета.

Расположение корневых серверов DNS и их зеркала

О том, как можно обойти DHCP

У меня в наличии дома имеется три устройства, которые используют WiFi — это ноутбук, телефон и iPad. Так же есть стационарный компьютер, который тоже имеет доступ в Интернет. Все эти четыре агрегата подключаются к моему неплохому маршрутизатору ASUS WL-520GU. В связи с тем, что устройств стало очень много, встал вопрос о том, чтобы как-то статично определить для всех них IP-адреса. Дело в том, что стационарный компьютер я использую исключительно для просмотра фильмов и игр. Для некоторых игр открыты порты, чтобы они нормально работали в онлайне. Порты открываются в настройках маршрутизатора, указывая порт и IP-адрес устройства, для которого эти порты открываются. Но т.к. у меня не всегда устройства подключаются к маршрутизатору в определенной последовательности, то бывает, что стационарный компьютер получает от DHCP-сервера другой IP, в порты, естественно, для него закрыты. В итоге, нормально не поиграешь…

Поэтому пришлось моим устройствам присвоить вручную IP-адреса в обход DHCP. На деле это оказалось сделать очень легко. В панели управления маршрутизатором уже подготовлены опции для вручного обхода DHCP. Туда лишь необходимо вписать MAC-адрес устройства и желаемый IP, который будет ему присваиваться при подключении к маршрутизатору. Теперь у меня каждое устройство уникально и постоянно идентифицировано, и я могу не переживать о том, что подключаясь к сети, мой стационарный компьютер получит «не тот» IP, для которого не открыты порты.

Наглядный пример, как настроить обход DHCP