Сканирование логинов/паролей вашего Астериска
Хочу себя просканировать, посмотреть на дыры. Где скачать бесплатную на нашел. Где взять, кто знает?
_________________
Asterisk 1.4.30 @ Ubuntu 9.04 + Cisco MC3810 + NEC NEAX 2000IPS + Polycom IP Phones
устанавливаем iptales и fail2ban дальше настраиваем:
/etc/fail2ban/filter.d/asterisk.conf
| Код: |
| # Fail2Ban configuration file # # # $Revision: 250 $ # [INCLUDES] # Read common prefixes. If any customizations available -- read them from # common.local #before = common.conf [Definition] #_daemon = asterisk # Option: failregex # Notes.: regex to match the password failures messages in the logfile. The # host must be matched by a group named "host". The tag "" can # be used for standard IP/hostname matching and is only an alias for # (?:::f{4,6}:)?(?P\S+) # Values: TEXT # failregex = NOTICE.* .*: Registration from '.*' failed for '' - Wrong password NOTICE.* .*: Registration from '.*' failed for '' - No matching peer found NOTICE.* .*: Registration from '.*' failed for '' - Username/auth name mismatch NOTICE.* .*: Registration from '.*' failed for '' - Device does not match ACL NOTICE.* .*: Registration from '.*' failed for '' - Peer is not supposed to register NOTICE.* .*: Registration from '.*' failed for '' - ACL error (permit/deny) NOTICE.* failed to authenticate as '.*'$ NOTICE.* .*: No registration for peer '.*' \(from \) NOTICE.* .*: Host failed MD5 authentication for '.*' (.*) NOTICE.* .*: Failed to authenticate user .*@.* # Option: ignoreregex # Notes.: regex to ignore. If this regex matches, the line is ignored. # Values: TEXT # ignoreregex = |
в /etc/fail2ban/jail.conf добавляем:
| Код: |
| [asterisk-iptables] enabled = true filter = asterisk action = iptables-allports[name=ASTERISK, protocol=all] sendmail-whois[name=ASTERISK, dest=root, sender=fail2ban@example.org] logpath = /var/log/asterisk/messages maxretry = 5 bantime = 259200 |
в файле /etc/asterisk/logger.conf
| Код: |
| [general] dateformat=%F %T [logfiles] messages => notice,warning,error |
после этих действий
/etc/init.d/fail2ban restart
asterisk -r
asterisk*CLI> logger reload
asterisk*CLI> quit
И спим спокойно
ЗЫ Категорически рекомендую выполнить эти действия, особенно если сервер с астериском смотрит в мир. У меня в день по 3-5 IP адресов в бан лист попадает.
Вот только если подскажите как для данного случая iptable настроить было бы вообще крутяк.
Я ставл эту прогу, ssh она банит, а вот паролей я сколько хочешь софтфоном подбирал и ничего не банило меня. Я так понял, что iptable настроить надо чтобы подбор паролей банило, но это это не так просто оказалось. Если кто подскажет что там делать с iptable было бы совсем хорошо.
Какой версии у Вас Астериск?
Специально настраивать iptables для fail2ban не нужно, просто устанавливаете и всё.
1.6 в продакшн не использовал, а на 1.8 настройки /etc/fail2ban/filter.d/asterisk.conf такие:
| Код: |
| [INCLUDES] [Definition] failregex = Registration from '.*' failed for '(:[0-9]{1,5})?' - Wrong password Registration from '.*' failed for '(:[0-9]{1,5})?' - No matching peer found Registration from '.*' failed for '(:[0-9]{1,5})?' - Device does not match ACL Registration from '.*' failed for '(:[0-9]{1,5})?' - Username/auth name mismatch Registration from '.*' failed for '(:[0-9]{1,5})?' - Peer is not supposed to register NOTICE.* failed to authenticate as '.*'$ NOTICE.* .*: No registration for peer '.*' (from ) NOTICE.* .*: Host failed MD5 authentication for '.*' (.*) NOTICE.* .*: Failed to authenticate user .*@.* VERBOSE.* logger.c: -- .*IP/-.* Playing 'ss-noservice' (language '.*') ignoreregex = |
и всё прекрасно банится.
Added after 10 minutes:
Ещё можно в контекст [default] extentions.conf добавить:
| Код: |
| exten => _X.,1,System(echo '${CHANNEL}' >> /var/log/asterisk/hackers.log) |
Создать скрипт vim /home/asterisk/hackers.sh
| Код: |
| #!/bin/bash cat /var/log/asterisk/hackers.log | awk -v FS="[/-]+" "/^SIP\/[0-9.]+-[0-9a-zA-z]+/ {print \$2; }" | sort -u | awk "/[0-9.]+/ { str=\"iptables -A INPUT -s \" \$1 \" -j DROP\"; system(str); }" sleep 1 rm /var/log/asterisk/hackers.log touch /var/log/asterisk/hackers.log |
и пускать его по крону каждую минуту:
| Код: |
| 0-59 * * * * root /home/asterisk/hackers.sh |
Там есть Шаг 6. Запуск. # /etc/init.d/iptables start . Если оставить iptable то файла /etc/init.d/iptables не будет. его надо делать самому. Ну и наверное что то туда вписать надо будем. Я честно говоря в этом деле новичок, поэтому что писать не знаю. Да наверное не только я один тут такой лох. Так что будем безмерно благодарны за помощь в настройке iptable.
2. Освойте iptables и его реализацию в дебиане или в том дистрибутиве, что вы пользуте. Долго, муторно, но того стоит.
_________________
Asterisk 1.4.30 @ Ubuntu 9.04 + Cisco MC3810 + NEC NEAX 2000IPS + Polycom IP Phones
_________________
Asterisk 1.4.30 @ Ubuntu 9.04 + Cisco MC3810 + NEC NEAX 2000IPS + Polycom IP Phones
| Цитата: |
| Описанный выше способ подходит для версии 1.4 |
у меня на 1.6 прекрасно работает
| Цитата: |
| Если кто подскажет что там делать с iptable было бы совсем хорошо. |
да ничего дополнительно не настраивал для iptables
проверить функциональность можно так:
# iptables-save
| Код: |
| # Generated by iptables-save v1.3.5 on Sat Jul 23 10:11:08 2011 *filter :INPUT ACCEPT [1171038:267748973] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [797168:178561167] :fail2ban-ASTERISK - [0:0] :fail2ban-SSH - [0:0] -A INPUT -p tcp -m tcp --dport 22 -j fail2ban-SSH -A INPUT -j fail2ban-ASTERISK -A fail2ban-ASTERISK -j RETURN -A fail2ban-SSH -j RETURN COMMIT # Completed on Sat Jul 23 10:11:08 2011 |
тут видим созданные цепочки:
:fail2ban-ASTERISK - [0:0]
и
:fail2ban-SSH - [0:0]
если бы был забаненный ip то он бы фигурировал в правилах... просто что бы не загромождать лишними правилами iptables, fail2ban банит не перманетно, а на определенное время указанное в конфигах для каждого сервиса.
[asterisk-iptables]
enabled = true
filter = asterisk
action = iptables-allports[name=ASTERISK, protocol=all]
sendmail-whois[name=ASTERISK, dest=root, sender=fail2ban@example.org]
logpath = /var/log/asterisk/messages
maxretry = 5
bantime = 259200
| lv333 писал(а): |
| ЗЫ Категорически рекомендую выполнить эти действия, особенно если сервер с астериском смотрит в мир. У меня в день по 3-5 IP адресов в бан лист попадает. |
По моему, если * выставлена а мир, то в большинстве случаев он смотрит только на определенных провайдеров. Вот коммуникацию с ними и надо ограничить в iptables. А попытки соединения со всех остальных адресов - режектить с ответом host-unreachable. Если, конечно tarpit не настроить. С ним еще веселее будет.
Мое мнение такое - разрешать доступ к казенному астериску надо только с очень ограниченного круга IP-адресов. Если это невозможно (есть юзеря на динамике, на серых адресах домашних сетей), то поднимать VPN между ними и астериском. Ну и правило - всё, что не разрешено явно - запрещено.
| Цитата: |
| По моему, если * выставлена а мир, то в большинстве случаев он смотрит только на определенных провайдеров. Вот коммуникацию с ними и надо ограничить в iptables. А попытки соединения со всех остальных адресов - режектить с ответом host-unreachable. Если, конечно tarpit не настроить. С ним еще веселее будет. Мое мнение такое - разрешать доступ к казенному астериску надо только с очень ограниченного круга IP-адресов. Если это невозможно (есть юзеря на динамике, на серых адресах домашних сетей), то поднимать VPN между ними и астериском. Ну и правило - всё, что не разрешено явно - запрещено. |
Да, я не спорю к к дополнению iptables можно в самом астериске в пирах прописывать пермит IP делается так
[permit-from](!)
deny=0.0.0.0/0.0.0.0
permit=xxx.xxx.xxx.xxx
;или по сети
permit=ххх.ххх.ххх.0/24
дальше в пире например:
[100](permit-from)
;тут настройка самого пира
Но иногда стоит задача разрешить авторизацию с любого IP, причем без использования VPN.
| Код: |
| *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT DROP [0:0] -A INPUT -s 10.158.x.x -i eth1 -p udp -m udp --dport 5060 -j ACCEPT //SIP сигнализация до провайдера -A INPUT -s 10.158.x.x -i eth1 -p udp -m udp --dport 10000:20000 -j ACCEPT //RTP-трафик до провайдера -A INPUT -s 192.168.0.0/255.255.254.0 -i eth0 -p udp -m udp --dport 5060 -j ACCEPT //SIP сигнализация до внутренней сетки -A INPUT -s 10.0.0.0/255.255.255.0 -i eth0 -p udp -m udp --dport 5060 -j ACCEPT //SIP сигнализация до второй внутренней сетки -A INPUT -s 192.168.0.0/255.255.254.0 -i eth0 -p udp -m udp --dport 10000:20000 -j ACCEPT //RTP трафик до внутренней сетки -A INPUT -s 10.0.0.0/255.255.255.0 -i eth0 -p udp -m udp --dport 10000:20000 -j ACCEPT //RTP трафик до второй внутренней сетки -A INPUT -s 192.168.0.0/255.255.254.0 -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT //Даём веб-доступ -A INPUT -s 192.168.0.0/255.255.254.0 -i eth0 -p tcp -m tcp --dport 443 -j ACCEPT //Защищённый веб-доступ -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT //Разрешаем все уже установленные соединения -A INPUT -s 192.168.0.0/255.255.254.0 -p icmp -m icmp --icmp-type 8 -j ACCEPT //Разрешаем пинг из внутренней сетки -A INPUT -s 10.0.0.0/255.255.255.0 -i eth0 -p udp -m udp --dport 123 -j ACCEPT //Астериск так же сервер времени для айпишных телефонов -A INPUT -s 192.168.1.х -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT //Разрешаем ssh только для одного айпишника -A INPUT -d 127.0.0.1 -j ACCEPT //Разрешаем "внутреннее" общение -A OUTPUT -d 172.16.2.11 -p tcp -m tcp --dport 8025 -j ACCEPT //разрешаем работать с почтой с внутреннего корпоративного сервака -A OUTPUT -p udp -m udp --sport 123 -j ACCEPT //разрешаем ntp-подключения -A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT //веб -A OUTPUT -p tcp -m tcp --dport 8080 -j ACCEPT //веб -A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT //веб -A OUTPUT -p tcp -m tcp --dport 21 -j ACCEPT //фтп -A OUTPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT //разрешаем пинговать кого хотим -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT //все установленные и зависимые соединения - ок -A OUTPUT -p tcp -m tcp --dport 22 -j ACCEPT //разрешаем ssh с астериска -A OUTPUT -s 127.0.0.1 -j ACCEPT //разрешаем "внутреннее" общение COMMIT |
Комменты перед использованием тереть.