Я запускаю SIP-сервер, который прослушивает UDP-порт 5060 и должен принимать аутентифицированные запросы из общедоступного Интернета.
Проблема в том, что иногда его подхватывают люди, сканирующие SIP-серверы для использования, которые затем сидят там весь день, пытаясь подобрать сервер. Я использую достаточно длинные учетные данные, чтобы эта атака никогда не сработала, но это раздражает, потому что использует большую полосу пропускания.
Я попытался настроить fail2ban для чтения журнала Asterisk и запрета IP-адресов, которые делают это с помощью iptables, что не позволяет Asterisk видеть входящие попытки SIP REGISTER после 10 неудачных попыток (что происходит менее чем за секунду со скоростью атак, которые я видя). Однако скрипты, производные от SipVicious, не прекращают сразу же отправку после получения ICMP Destination Host Unreachable - они продолжают забивать соединение пакетами. Время до их остановки настраивается, но, к сожалению, кажется, что злоумышленники, выполняющие такие типы атак грубой силы, обычно устанавливают очень высокий тайм-аут (атаки продолжаются с высокой скоростью в течение нескольких часов после того, как fail2ban не позволил им получить ответ SIP. как только они увидят первоначальное подтверждение SIP-сервера).
Есть ли способ заставить его перестать отправлять пакеты при моем подключении?
Общедоступный скрипт SipVicious, который используют многие из этих злоумышленников, немедленно останавливает атаку, если получает недопустимый ответ SIP без строки From :. Вы можете идентифицировать SipVicious, потому что он устанавливает для своего User-Agent в запросах SIP значение friendly-scanner.
Используя эту технику против реального злоумышленника, я смог немедленно остановить поток пакетов. Вы можете отправить такой пакет с помощью простого скрипта. Например:
cat >UnfriendlyScannerStopper.scala <<END
import java.net._
object UnfriendlyScannerStopper {
def main(args : Array[String]) : Unit = {
if (args.length < 2) {
System.out.println("Usage: FriendlyScannerStopper ipAddr port")
return
}
val udpSocket : DatagramSocket = new DatagramSocket();
val packetContents : String = "SIP/2.0 400 Go Away!!!\r\n\r\n"
udpSocket.send(new DatagramPacket(packetContents.getBytes("utf-8"), packetContents.size,
InetAddress.getByName(args(0)), Integer.parseInt(args(1))))
}
}
END
scala UnfriendlyScannerStopper.scala 188.138.107.179 5102
Вам нужно будет заменить 188.138.107.179 и 5102 на адрес и порт в заголовке Via SIP-пакетов, которые вы отправляете при атаке.
Поговорите со своим вышестоящим провайдером. У меня есть черный список с REST API, в который я могу передавать IP-адреса. Я настроил fail2ban для вызова этого веб-сервиса, и пакеты останавливаются где-то в сети моего провайдера, прежде чем они достигнут моих брандмауэров.
Никто прямо не ответил на ваш вопрос, поэтому: НЕТ
Вы не можете предотвратить отправку пакетов на шлюз вашего периметра. Лучшее, что вы можете сделать, - это остановить их в восходящем направлении (как упоминалось выше) или остановить их на своем брандмауэре.
Fail2ban сработает на основе количества неудачных атак (как вы уже отметили выше), поэтому альтернативой (или комбинацией) является блокировка на основе географического местоположения исходного IP-адреса. Такие продукты как SecAst или некоторые аппаратные брандмауэры могут блокироваться в зависимости от географического местоположения, что еще больше уменьшит количество пакетов, поступающих на ваш сервер (см. www.telium.io).
Вернемся к исходному вопросу: НЕТ
Вы пробовали настроить прокси-сервер SIP?
Если вы этого не сделали, вы можете сделать это, установив Kamaillio или OpenSIPS перед своим «sip-сервером». Эти пакеты представляют собой маршрутизаторы сообщений SIP, которые можно настроить как прокси-сервер SIP.
В OpenSIPS или Kamaillio вы можете добавить строку в свой сценарий маршрутизации, выполнив следующие действия, чтобы решить эту проблему:
если ($ ua = ~ "дружественный сканер") {drop (); }
Теперь я понимаю, что это не останавливает входящие попытки, но гарантирует, что попытки никогда никуда не пойдут, и что «sip-сервер» никогда их не увидит. Даже 500 регистров в секунду не о чем беспокоиться с OpenSIPS или Kamaillio, даже на ОЧЕНЬ скромном оборудовании.
Защита инфраструктуры VoIP - это большая часть того, для чего предназначены OpenSIPS и Kamaillio - они делают это путем проксирования входящих SIP-запросов, их нормализации, отбрасывания некорректных запросов (и тех, которые поступают от пользовательских агентов, которые не имеют дела с вашей сетью), и прокси-аутентификация (РЕГИСТРЫ).
Они также скрывают за собой топологию из Интернета, тем самым повышая уровень безопасности вашего медиасервера (возможно, именно эту функцию ваш «sip-сервер» фактически выполняет за вас)
Если вы используете Asterisk, интеграция OpenSIPS / Kamaillio / SER является обычной практикой при развертывании ITSP операторами связи.
А что касается вашего утверждения о пропускной способности: я был бы немного удивлен, узнав, что эти атаки используют большую пропускную способность; Я полагаю, что "много" - понятие относительное ... Но сколько именно трафика вы видите из этого?
Надеюсь, это поможет. Если вам нужна помощь, я консультант и могу помочь вам настроить это для вашей конкретной среды.
Джереми Д. Уорд, CWNE
PS: Чтобы найти меня, введите в Google следующее: jeremy ward wireless. Мой профиль в LinkedIn - это первый результат.
эти правила iptables у меня работают нормально. Во время таких атак они поддерживают загрузку процессора ниже 2%.
http://txlab.wordpress.com/2013/06/29/protecting-a-vpbx-from-dos-attacks/
В качестве альтернативы посмотрите здесь брандмауэры, связанные с SIP: Межсетевые экраны VoIP
Pfsense и, возможно, другие позволят вам изготовить или купить брандмауэр. Программа бесплатна. Затем вы можете бесплатно загрузить suricata, который является своего рода привратником, который мгновенно сбросит большое количество IP-адресов, связанных с такими вещами, как Sipvicious. Обычно, когда они сканируют ваш IP-адрес, их пакеты сразу же отбрасываются. Если дела пойдут хорошо, они даже не поймут, что по этому адресу есть sip-сервер. В том же брандмауэре есть пакет для установки sip-прокси, так что вы можете делать и то, и другое.