У меня на сервере крутится pptp и openvpn. Юзеры подключаются и некоторые из них (о ужас!) злоупотребляют отсылкой почты. :(Мне захотелось отследить сей факт и как-то автоматизировать процесс.
Я добавил такую строчку в файл файрвола:
-A FORWARD -p tcp -m tcp --dport 25 -j LOG --log-prefix "MAIL:"
-A FORWARD -i tap1 -p udp -m udp -j LOG --log-prefix "MAIL:" --log-level 7В логах стала появляться информация, но у pptp есть в строчках соответствие ip - порт, а для openvpn этого соответствия нет и порт не указан. :(
Вот пример лога для опенвпн:
Jun 10 17:09:46 kernel: [1117557.992079] MAILIN=tap1 OUT=eth0 SRC=192.168.10.4 DST=x.x.x.x LEN=67 TOS=0x00 PREC=0x00 TTL=127 ID=43253 PROTO=UDP SPT=1710 DPT=53 LEN=47
Подождите, пока "отпустит", а потом напишите всё заново, если вопрос останется.
> Подождите, пока "отпустит", а потом напишите всё заново, если вопрос останется.Что отпустит?
Я что-то криво написал? :)> Подождите, пока "отпустит", а потом напишите всё заново, если вопрос останется.
> У меня на сервере крутится pptp и openvpn. Юзеры подключаются и некоторые
> из них (о ужас!) злоупотребляют отсылкой почты. :(
> Мне захотелось отследить сей факт и как-то автоматизировать процесс.
> Я добавил такую строчку в файл файрвола:
> -A FORWARD -p tcp -m tcp --dport 25 -j LOG --log-prefix "MAIL:"интересно что потом из этих заголовков пакета вы хотите выудить?
> -A FORWARD -i tap1 -p udp -m udp -j LOG --log-prefix "MAIL:"
> --log-level 7а это к чему? заголовки пакета от dns запроса , как привели ниже, будите рассматривать?
> В логах стала появляться информация, но у pptp есть в строчках соответствие
> ip - порт, а для openvpn этого соответствия нет и порт
> не указан. :(
> Вот пример лога для опенвпн:
> Jun 10 17:09:46 kernel: [1117557.992079] MAILIN=tap1 OUT=eth0 SRC=192.168.10.4 DST=x.x.x.x
> LEN=67 TOS=0x00 PREC=0x00 TTL=127 ID=43253 PROTO=UDP SPT=1710 DPT=53 LEN=47
>[оверквотинг удален]
>> -A FORWARD -i tap1 -p udp -m udp -j LOG --log-prefix "MAIL:"
>> --log-level 7
> а это к чему? заголовки пакета от dns запроса , как привели
> ниже, будите рассматривать?
>> В логах стала появляться информация, но у pptp есть в строчках соответствие
>> ip - порт, а для openvpn этого соответствия нет и порт
>> не указан. :(
>> Вот пример лога для опенвпн:
>> Jun 10 17:09:46 kernel: [1117557.992079] MAILIN=tap1 OUT=eth0 SRC=192.168.10.4 DST=x.x.x.x
>> LEN=67 TOS=0x00 PREC=0x00 TTL=127 ID=43253 PROTO=UDP SPT=1710 DPT=53 LEN=47Меня отпустило :) Все понял!
На кой черт Вам логгировать ВСЕ пакеты по 25 порту? Задача какая? Блокировать (и логгировать) спам? Теперь включаем мозг. Что происходит при массовой рассылке спама? Куча обращения к ДНС-серверу с запросом MX-записей! Вот отсюда и танцуем!
Вот пример цепочки, которую надо выстроить:
1. iptables -A INPUT -p udp -m udp --dport 53 -m state --state NEW -m string --hex-string "|000f0001|" --algo kmp --to 65535 -m recent --set --name MXFLOOD --rsource
2. iptables -A INPUT -p udp -m udp --dport 53 -m state --state NEW -m string --hex-string "|000f0001|" --algo kmp --to 65535 -m recent --update --seconds 60 --hitcount 10 --rttl --name MXFLOOD --rsource -j LOG --log-prefix "Many MX requests from IP:"
3. iptables -A INPUT -p udp -m udp --dport 53 -m state --state NEW -m string --hex-string "|000f0001|" --algo kmp --to 65535 -m recent --update --seconds 20 --hitcount 10 --rttl --name MXFLOOD --rsource -j DROP
Это я привел ПРИМЕР. Адаптируйте его под свою сетевую логику. Пример реально работающий - это у меня на DNS-сервере крутится - позволяет каждый день, глядя на отчет logwatch, сдавать ТП злостных спамеров. К цифрам тоже отнеситесь творчески.
А к каким цифрам нужно отнестись творчески?>[оверквотинг удален]
> recent --update --seconds 60 --hitcount 10 --rttl --name MXFLOOD --rsource -j
> LOG --log-prefix "Many MX requests from IP:"
> 3. iptables -A INPUT -p udp -m udp --dport 53 -m state
> --state NEW -m string --hex-string "|000f0001|" --algo kmp --to 65535 -m
> recent --update --seconds 20 --hitcount 10 --rttl --name MXFLOOD --rsource -j
> DROP
> Это я привел ПРИМЕР. Адаптируйте его под свою сетевую логику. Пример реально
> работающий - это у меня на DNS-сервере крутится - позволяет каждый
> день, глядя на отчет logwatch, сдавать ТП злостных спамеров. К цифрам
> тоже отнеситесь творчески.
> А к каким цифрам нужно отнестись творчески?Ну, по видимому претендентов 2. :)
1. Временной интервал --seconds
2. Количество попаданий в этот интервал --hitcount.
Как видите - у меня дропается, при 10 вызовах за 20 секунд (с одного ИП, естественно). В логи попадает - при 10 попаданиях за минуту. Я в первый раз когда это правило включил - нарвался на 2 дня на идиотов-юриков, которые делали что-то типа массовой ОФИЦИАЛЬНОЙ рассылки по листу рассылки. Вони было - выше крыши. :) Поэтому я чуть "загрубил" срабатывание. Согласитесь, что нормальный пользователь вряд ли будет генерить 10 MX-запросов за 20 секунд. :) 10 - за 60 - возможно, но уже вызывает подозрение.
>[оверквотинг удален]
> 1. Временной интервал --seconds
> 2. Количество попаданий в этот интервал --hitcount.
> Как видите - у меня дропается, при 10 вызовах за 20 секунд
> (с одного ИП, естественно). В логи попадает - при 10 попаданиях
> за минуту. Я в первый раз когда это правило включил -
> нарвался на 2 дня на идиотов-юриков, которые делали что-то типа массовой
> ОФИЦИАЛЬНОЙ рассылки по листу рассылки. Вони было - выше крыши. :)
> Поэтому я чуть "загрубил" срабатывание. Согласитесь, что нормальный пользователь вряд
> ли будет генерить 10 MX-запросов за 20 секунд. :) 10 -
> за 60 - возможно, но уже вызывает подозрение.Интересно :) Попробую!
Спасибо огромное!
>[оверквотинг удален]
> recent --update --seconds 60 --hitcount 10 --rttl --name MXFLOOD --rsource -j
> LOG --log-prefix "Many MX requests from IP:"
> 3. iptables -A INPUT -p udp -m udp --dport 53 -m state
> --state NEW -m string --hex-string "|000f0001|" --algo kmp --to 65535 -m
> recent --update --seconds 20 --hitcount 10 --rttl --name MXFLOOD --rsource -j
> DROP
> Это я привел ПРИМЕР. Адаптируйте его под свою сетевую логику. Пример реально
> работающий - это у меня на DNS-сервере крутится - позволяет каждый
> день, глядя на отчет logwatch, сдавать ТП злостных спамеров. К цифрам
> тоже отнеситесь творчески.1. iptables -A INPUT -p udp -m udp --dport 53 -m state --state NEW -m string --hex-string "|000f0001|" --algo kmp --to 65535 -m recent --set --name MXFLOOD --rsource
2. iptables -A INPUT -p udp -m udp --dport 53 -m state --state NEW -m string --hex-string "|000f0001|" --algo kmp --to 65535 -m recent --update --seconds 60 --hitcount 10 --rttl --name MXFLOOD --rsource -j LOG --log-prefix "Many MX requests from IP:"
3. iptables -A INPUT -p udp -m udp --dport 53 -m state --state NEW -m string --hex-string "|000f0001|" --algo kmp --to 65535 -m recent --update --seconds 20 --hitcount 10 --rttl --name MXFLOOD --rsource -j DROPЭта вещь уже крутится на сервере и работает на отлично. Я вот подумал, что можно ее несколько переделать, чтобы юзеру запретить досить чей-либо веб-сервер.
Что-то вроде такого:iptables -A INPUT -p udp -m udp --dport 80 -m state --state NEW -m recent --set --name WWW --rsource
iptables -A INPUT -p udp -m udp --dport 80 -m state --state NEW -m recent --update --seconds 20 --hitcount 10 --rttl --name WWW --rsource -j DROPНо это совершенно никак не заработало :(
>[оверквотинг удален]
> recent --update --seconds 60 --hitcount 10 --rttl --name MXFLOOD --rsource -j
> LOG --log-prefix "Many MX requests from IP:"
> 3. iptables -A INPUT -p udp -m udp --dport 53 -m state
> --state NEW -m string --hex-string "|000f0001|" --algo kmp --to 65535 -m
> recent --update --seconds 20 --hitcount 10 --rttl --name MXFLOOD --rsource -j
> DROP
> Это я привел ПРИМЕР. Адаптируйте его под свою сетевую логику. Пример реально
> работающий - это у меня на DNS-сервере крутится - позволяет каждый
> день, глядя на отчет logwatch, сдавать ТП злостных спамеров. К цифрам
> тоже отнеситесь творчески.Недавно попробовал данный способ и решил протестировать. Поставили в (3) срабатывание на 2 обращения за 60 секунд и стали слать письма. Послали 5 писем - и все письма прошли без проблем. :(
Может есть какая-то ошибка?