ddos и exim

Обсуждаем сайт и форум.

Модератор: f0s

Аватара пользователя
buryanov
ст. сержант
Сообщения: 311
Зарегистрирован: 2008-04-29 13:41:48
Откуда: Харьков
Контактная информация:

ddos и exim

Непрочитанное сообщение buryanov » 2009-09-26 19:12:17

Hi All
В пятницу друг попросил о помощи, его почтовик подвергся ddos атаке. У меня были написаны скрипты, но у меня не настолько большая нагрузка, чтобы можно было их испытывать по нормальному, да и времени тоже не было. Навеяло на их написание, точнее дописание обсуждение Защита exim от DDoS. А тут какраз и повод появился.

Теперь по порядку:
Ддосили smtp, imap не юзается, точнее юзается imaps, а его, почемуто, не ддосят

1) в конфиге exim создаём макрос

Код: Выделить всё

MYSQL_IPFW     =       INSERT INTO `ipfw` (`ip`, `date`, `type`, `coun`,`email`) VALUES \
                               ('$sender_host_address', now(), '$acl_m18', '1', '$sender_address')
в acl добавляем при проверках

Код: Выделить всё

        set acl_m18     = HELO1
        set acl_m19     = ${lookup mysql{MYSQL_IPFW}}
или
        set acl_m18     = DomainRBL
        set acl_m19     = ${lookup mysql{MYSQL_IPFW}}
или
        set acl_m18     = EmailRBL
        set acl_m19     = ${lookup mysql{MYSQL_IPFW}}
или
        set acl_m18     = DNSRBL
        set acl_m19   = ${lookup mysql{MYSQL_IPFW}}
или
        set acl_m18     = UnUser
        set acl_m19   = ${lookup mysql{MYSQL_IPFW}}
в зависимости от места применения

Создаём таблицу для занесения статистики:

Код: Выделить всё

CREATE TABLE ipfw(
  ip CHAR (15) NOT NULL,
  `date` CHAR (19) NOT NULL,
  type CHAR (9) NOT NULL,
  coun INT (8) NOT NULL,
  email VARCHAR (64) DEFAULT NULL,
  INDEX `date` USING BTREE (`date` (13)),
  INDEX ip USING BTREE (ip),
  INDEX type USING BTREE (type)
)
ENGINE = MYISAM
CHARACTER SET latin1
COLLATE latin1_swedish_ci;
Создаём таблици для анализа и занесения результатов

Код: Выделить всё

CREATE TABLE ddos_analis(
  ip CHAR (15),
  type CHAR (9) DEFAULT NULL,
  date_in CHAR (19) DEFAULT NULL,
  date_last CHAR (19) DEFAULT NULL,
  date_exp CHAR (19) DEFAULT NULL,
  coun INT (8) UNSIGNED DEFAULT NULL,
  PRIMARY KEY (ip),
  UNIQUE INDEX ip_type USING BTREE (ip, type)
)
ENGINE = MYISAM
CHARACTER SET koi8r
COLLATE koi8r_general_ci;

Код: Выделить всё

CREATE TABLE ddos_exp(
  ip CHAR (15) NOT NULL,
  date_delete CHAR (19) DEFAULT NULL,
  active CHAR (1) DEFAULT '0',
  UNIQUE INDEX ip USING BTREE (ip)
)
ENGINE = MYISAM
CHARACTER SET koi8r
COLLATE koi8r_general_ci;
Теперь создаём логику, которая и будет почти всё делать

Код: Выделить всё

--
-- Описание для триггера ddos_analis1
--
CREATE
TRIGGER ddos_analis1
AFTER INSERT
ON ipfw
FOR EACH ROW
BEGIN
  SET @coun = new.coun + 1;
  SET @ip = new.ip;
  SET @type = new.type;
  SET @date_in = new.`date`;
  SET @date_last = new.`date`;
  SET @date_exp = NOW() + INTERVAL 5 MINUTE;
 
  INSERT
  INTO exim_db.ddos_analis (ip, type, date_in, date_last, date_exp, coun)
  VALUES (@ip, @type, @date_in, @date_last, @date_exp, 1)
  ON DUPLICATE KEY
  UPDATE
    exim_db.ddos_analis.coun = exim_db.ddos_analis.coun + 1,
    exim_db.ddos_analis.date_last = @date_last,
    exim_db.ddos_analis.date_exp = @date_exp;

  INSERT IGNORE
  INTO exim_db.ddos_exp (ip, date_delete)
  SELECT
    ip, date_exp + INTERVAL 10 MINUTE
  FROM
    exim_db.ddos_analis
  WHERE
    coun > 10;

  DELETE
  FROM
    exim_db.ddos_analis
  WHERE
    LEFT(date_exp, 16) < NOW();
  DELETE
  FROM
    exim_db.ddos_analis
  WHERE
    ip LIKE '10.4.%' OR ip LIKE '192.168.%';
END
Создаём скрипт на маршрутизатире add_ipfw.sh:

Код: Выделить всё

#!/usr/local/bin/bash

/usr/local/bin/mysql --host=10.4.250.3 --password='xхх' --user=exim_db exim_db --execute=' \

update exim_db.ddos_exp \
    set active = 2 \
  WHERE \
    LEFT(date_delete, 16) < NOW() and active = 1; \

SELECT "ipfw table 125 add " asdf, ip FROM exim_db.ddos_exp \
    WHERE \
      active = 0; \

SELECT "ipfw table 125 delete " asdf, ip FROM exim_db.ddos_exp \
    WHERE \
      active = 2; \

UPDATE exim_db.ddos_exp \
    SET active = 1 where active = 0; \

delete FROM exim_db.ddos_exp \
  WHERE \
    LEFT(date_delete, 16) < NOW() and active = 2;'| grep -v asdf>/tmp/exim_ipfw_add_table_blacklist.sh

. /tmp/exim_ipfw_add_table_blacklist.sh

rm  /tmp/exim_ipfw_add_table_blacklist.sh
В настройках exim и mysql колличество коннектов увеличиваем по максимуму, сколько потянет сервер, чтобы хоть както поддерживать работоспособность. C2D8500 с 8G Ram справлялся с 10 000, неособо напрягаясь.
ЗЫ в cat /etc/crontab добавляем:

Код: Выделить всё

*       *       *       *       *       root    /scripts/exim/add_ipfw.sh
В фаер добавляем:

Код: Выделить всё

#deny mail
${fwcmd} add 56 deny log ip from table\(125\) to any 25 via ${ifwan}
Для увеличения производительности, можно таблици ddos_analis и ddos_exp сделать Memory.
Дмитрий.
buryanov*ukr.net
icq# 118639660; skype: buryanov

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
zingel
beastie
Сообщения: 6204
Зарегистрирован: 2007-10-30 3:56:49
Откуда: Moscow
Контактная информация:

Re: ddos и exim

Непрочитанное сообщение zingel » 2009-09-27 14:13:29

перенёс сюда
Z301171463546 - можно пожертвовать мне денег

Аватара пользователя
FenX
ст. прапорщик
Сообщения: 513
Зарегистрирован: 2008-04-23 17:46:53
Откуда: Moscow
Контактная информация:

Re: ddos и exim

Непрочитанное сообщение FenX » 2009-09-27 20:17:39

может лучше не сюда, а в mta ?

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35454
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: ddos и exim

Непрочитанное сообщение Alex Keda » 2009-09-27 20:34:52

а это намёк тредстартеру - мол статью напиши =)
Убей их всех! Бог потом рассортирует...

Аватара пользователя
zingel
beastie
Сообщения: 6204
Зарегистрирован: 2007-10-30 3:56:49
Откуда: Moscow
Контактная информация:

Re: ddos и exim

Непрочитанное сообщение zingel » 2009-09-27 20:46:35

ну вообще да, намёк причем толстый, я тоже бы написал правда хотел забахать статью сначала но потом подумал что скрипт будет ценнее (автоматическоя поднятие нескольких хостов Mta + frontend + backend + backup)

http://zingel.dubki.ru/text/unix/ezjail.txt
Z301171463546 - можно пожертвовать мне денег

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35454
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: ddos и exim

Непрочитанное сообщение Alex Keda » 2009-09-27 20:49:47

и пожелание
1. скрипты пишите на шелле - у многих баша отродясь нету и не бцдет на серверах (и я с ними солидарен)
2. системный кронтаб юзать не надо.
у рута свой есть. в него и надо вносить задания.
Убей их всех! Бог потом рассортирует...

Аватара пользователя
zingel
beastie
Сообщения: 6204
Зарегистрирован: 2007-10-30 3:56:49
Откуда: Moscow
Контактная информация:

Re: ddos и exim

Непрочитанное сообщение zingel » 2009-09-27 20:53:02

на перле, нах мне шелл....но вообще перл тоже не у всех есть, да пожалуй на csh
Z301171463546 - можно пожертвовать мне денег

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35454
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: ddos и exim

Непрочитанное сообщение Alex Keda » 2009-09-27 20:54:11

не. тут на шелле красиво всё будет.
а перл - сам напилишь =)
Убей их всех! Бог потом рассортирует...

Аватара пользователя
zingel
beastie
Сообщения: 6204
Зарегистрирован: 2007-10-30 3:56:49
Откуда: Moscow
Контактная информация:

Re: ddos и exim

Непрочитанное сообщение zingel » 2009-09-27 20:55:51

ну если на то пошло то на сях надо но это изврат, а хотя, ладно буду пописывать
Z301171463546 - можно пожертвовать мне денег

Аватара пользователя
FenX
ст. прапорщик
Сообщения: 513
Зарегистрирован: 2008-04-23 17:46:53
Откуда: Moscow
Контактная информация:

Re: ddos и exim

Непрочитанное сообщение FenX » 2009-09-27 21:01:39

ну перл у меня везде стоит, т.к. много чего его юзает.
а вот баша у меня не было и не будет))
мне и tcsh хватает) хотя скрипты все пишу на обычном шелле)

Аватара пользователя
buryanov
ст. сержант
Сообщения: 311
Зарегистрирован: 2008-04-29 13:41:48
Откуда: Харьков
Контактная информация:

Re: ddos и exim

Непрочитанное сообщение buryanov » 2009-09-28 16:54:20

сделал наброску, разкритикуйте
Perl, shell - какая разница, всем(почти) занимается MySQL
Дмитрий.
buryanov*ukr.net
icq# 118639660; skype: buryanov

Аватара пользователя
thefree
лейтенант
Сообщения: 980
Зарегистрирован: 2008-12-29 9:23:19
Откуда: Весёлая Страна

Re: ddos и exim

Непрочитанное сообщение thefree » 2009-09-28 21:32:30

cvsup думаю можно заменить на csup
Не судите меня строго, Я не волшебник, а только учусь!
http://planetbsd.ru - RSS-агрегатор *BSD по Рунету

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35454
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: ddos и exim

Непрочитанное сообщение Alex Keda » 2009-09-28 21:41:08

средняя колока - она должна быть небольше 610 пикселов. поэтому внутри тегов

Код: Выделить всё

 пеерносы надо руками расставлять.
и ещё хак есть - для кода где sql можно юзать [code=mysql]
Убей их всех! Бог потом рассортирует...

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35454
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: ddos и exim

Непрочитанное сообщение Alex Keda » 2009-09-28 21:42:05

В root cron добавляем его ваполнение.
Данный метод основан и использует тавлици и скрипт из первой части статьи.
синтаксис
Убей их всех! Бог потом рассортирует...

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35454
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: ddos и exim

Непрочитанное сообщение Alex Keda » 2009-09-28 21:42:25

разкоментирутся
Убей их всех! Бог потом рассортирует...

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35454
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: ddos и exim

Непрочитанное сообщение Alex Keda » 2009-09-28 21:44:52

какраз
Убей их всех! Бог потом рассортирует...

Аватара пользователя
buryanov
ст. сержант
Сообщения: 311
Зарегистрирован: 2008-04-29 13:41:48
Откуда: Харьков
Контактная информация:

Re: ddos и exim

Непрочитанное сообщение buryanov » 2009-09-29 0:18:54

Проверку над ошибками сделал, ширину тоже подогнал.

Код: Выделить всё

Раздел	 (Если не знаете номера раздела, свяжитесь с администратором)
Какой номер раздела указать?
Дмитрий.
buryanov*ukr.net
icq# 118639660; skype: buryanov

Аватара пользователя
FenX
ст. прапорщик
Сообщения: 513
Зарегистрирован: 2008-04-23 17:46:53
Откуда: Moscow
Контактная информация:

Re: ddos и exim

Непрочитанное сообщение FenX » 2009-09-29 0:35:22

Код: Выделить всё

#  8 - статьи -—> FreeBSD
# 9 - статьи -—> FreeBSD --> настройка
# 10 - статьи -—> FreeBSD --> подсчёт траффика
# 11 - статьи -—> FreeBSD --> программы
# 12 - статьи -—> Очумелые Ручки
# 13 - статьи -—> FreeBSD --> Почтовые системы
# 14 - Downloads
# 15 - downloads -—> boot disks
# 16 - downloads -—> boot disks -—> WinNT
# 17 - downloads -—> boot disks -—> DOS & Win9x
# 18 - Главная --> Авторы
# 19 - статьи -—> Очумелые Ручки -—> Компьютерные
# 20 - статьи -—> Очумелые Ручки -—> не компы
# 21 - downloads -—> WinProgramm
# 22 - главная -—> История сайта
# 23 - статьи -—> Очумелые Ручки -—> Околокомпьютерные
# 24 - документация -—> RFC
# 25 - документация -—> Программирование
# 26 - downloads -—> boot disks -—> Other DOS`s
# 27 - статьи -—> FreeBSD -—> Шелезяки
# 28 - статьи -—> FreeBSD -—> Мелочи
# 29 - статьи -—> FreeBSD -—> Файловая система
# 30 - статьи -—> FreeBSD -—> WWW
# 31 - главная -—> Статистика
# 32 - статьи -—> FreeBSD -—> Security
# 33 - главная -—> Архив
# 34 - документация —-> EXIM
# 35 - downloads -—> boot disks -—> other_boot
# 36 - статьи --> FreeBSD --> system
# 37 - документация —-> FreeBSD
# 38 - документация —-> ldap
# 39 - статьи -—> FreeBSD -—> игры
# 40 - статьи --> FreeBSD --> X
# 41 - статьи --> FreeBSD --> programming
# 42 - документация --> FreeBSD --> mpd
# 43 - документация --> man
# 44 - главная --> карта сайта
# 45 - главная --> поисковые слова
# 46 - документация --> security
# 47 - главная --> персональные настройки
# 48 - статьи --> OpenBSD
# 49 - статьи --> OpenBSD --> Демоны
# 50 - статьи --> OpenBSD --> Web и OpenBSD
# 51 - статьи --> OpenBSD --> Packet Filter
# 52 - статьи --> OpenBSD --> Настройка системы OpenBSD
# 53 - статьи --> OpenBSD --> Файловая система в OpenBSD
# 54 - главная --> Реклама
# 55 - статьи --> системный администратор
# 56 - статьи --> Cisco
думаеЦо что ей самое место под номером 13 )))

Аватара пользователя
buryanov
ст. сержант
Сообщения: 311
Зарегистрирован: 2008-04-29 13:41:48
Откуда: Харьков
Контактная информация:

Re: ddos и exim

Непрочитанное сообщение buryanov » 2009-09-29 9:47:59

думаеЦо что ей самое место под номером 13 )))
спасибо
Дмитрий.
buryanov*ukr.net
icq# 118639660; skype: buryanov

Garison
рядовой
Сообщения: 28
Зарегистрирован: 2007-06-14 22:15:26

Re: ddos и exim

Непрочитанное сообщение Garison » 2010-09-22 12:28:54

Вот этот скрипт коряво заносит IP таблицу фаера, бывает пропускает IP при заносе в таблицу

Код: Выделить всё

#!/usr/local/bin/bash

/usr/local/bin/mysql --host=10.4.250.3 --password='xхх' --user=exim_db exim_db --execute=' \

update exim_db.ddos_exp \
    set active = 2 \
  WHERE \
    LEFT(date_delete, 16) < NOW() and active = 1; \

SELECT "ipfw table 125 add " asdf, ip FROM exim_db.ddos_exp \
    WHERE \
      active = 0; \

SELECT "ipfw table 125 delete " asdf, ip FROM exim_db.ddos_exp \
    WHERE \
      active = 2; \

UPDATE exim_db.ddos_exp \
    SET active = 1 where active = 0; \

delete FROM exim_db.ddos_exp \
  WHERE \
    LEFT(date_delete, 16) < NOW() and active = 2;'| grep -v asdf>/tmp/exim_ipfw_add_table_blacklist.sh

. /tmp/exim_ipfw_add_table_blacklist.sh

rm  /tmp/exim_ipfw_add_table_blacklist.sh

Аватара пользователя
manefesto
Группенфюррер
Сообщения: 6934
Зарегистрирован: 2007-07-20 8:27:30
Откуда: Пермь
Контактная информация:

Re: ddos и exim

Непрочитанное сообщение manefesto » 2010-09-22 14:46:46

а в чем тонкий смысл использовать в этом скрипте баш ?
я такой яростный шо аж пиздеЦ
Изображение

Garison
рядовой
Сообщения: 28
Зарегистрирован: 2007-06-14 22:15:26

Re: ddos и exim

Непрочитанное сообщение Garison » 2010-09-23 8:14:37

manefesto писал(а):а в чем тонкий смысл использовать в этом скрипте баш ?
Самый умный, да? скрипт прекрасно работает и от #!/bin/sh, но косяки начинаются когда его в крон засунешь, пропускает IP блядеров, а при ручном запуске все ок

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35454
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: ddos и exim

Непрочитанное сообщение Alex Keda » 2010-09-23 9:40:56

Убей их всех! Бог потом рассортирует...

Garison
рядовой
Сообщения: 28
Зарегистрирован: 2007-06-14 22:15:26

Re: ddos и exim

Непрочитанное сообщение Garison » 2010-09-23 11:17:13

проблема решена нужно писать полные пути к ipfw

Код: Выделить всё

SELECT "/sbin/ipfw table 125 add " asdf, ip FROM exim_db.ddos_exp \
    WHERE \
      active = 0; \
а так не надо

Код: Выделить всё

SELECT "ipfw table 125 add " asdf, ip FROM exim_db.ddos_exp \
    WHERE \
      active = 0; \

Аватара пользователя
schizoid
подполковник
Сообщения: 3228
Зарегистрирован: 2007-03-03 17:32:31
Откуда: Украина, Чернигов
Контактная информация:

Re: ddos и exim

Непрочитанное сообщение schizoid » 2010-09-23 11:34:59

или $PATH в скрипте описать...
ядерный взрыв...смертельно красиво...жаль, что не вечно...