Предисловие
Я решил сравнить нагрузку на систему при DoS атаке методом CONNECT на различные SMTP сервера.
Для эксперементов я взял postfix, sendmail, exim4 и smtpx.
smtpx - это мой проект SMTP сервера, предназначенного для обработки больших объемов данных.
DoS CONNECT
Суть атаки в следующем: Атакующий открывает соединения с сервером и не посылая никаких данных "забывает" о соединении.
Моя атака была в 1 поток, длительность атаки - 10 000 успешных соединений.
Площадка для тестирования
2 машины - сервер и клиент, между ними канал Ethernet 1 Гб/с
Сервер - виртуальная машина Linux CentOS 5.5 i386, 256МБ RAM, 1 CPU 2,6 Гб
Клиент идентичен
На сервер были установлены postfix, exim4, smtpx и sendmail. Единственное изменение конфигов - замена tcp-адреса 127.0.0.1:25 на 192.168.2.227 - адрес машины в локалке.
Программы поочередно включались и испытывались.
Скрипт для атаки написан на python
POSTFIX
время на обработку 10 000 коннектов: 0m45.557s, образовалось еще 7 процессов smtpd помимо master при этом процессор был загружен до 30%.
SENDMAIL
время на обработку 10 000 коннектов: 10m40.115s, загрузка процессора не превышала 1%, но при параллельном соединении на smtp порт приходиться ждать примерно 70-100ms
EXIM
время обработки 10 000 соединений: 1m7.163s, загрузка процессора на пике достигла 10%.
SMTPX
время обработки 10 000 соединений: 0m44.462s, загрузка процессора на пице была 8,7%
Выводы
Я пришел к выводу, что написал наилучший обработчик соединений для smtp сервера.
Скрипт для DoS (python):
PHP:
#!/usr/bin/python.
import socket
import time
HOST = '192.168.2.227'
PORT = 25
for i in range(1,10000):
time.sleep(0.001)
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.close()
if (i%200)==0:
print i.
print