Я делаю http-сервер в c. Он находится на стадии пре-альфа, но кажется достаточно стабильным, чтобы развернуть его на моем сервере и запустить 4 минимальных веб-сайта. Он работает без сбоев два дня до сегодняшнего утра. Демон не работал и завершился некорректно. Я просмотрел журналы и нашел около 10 строк подряд:
[815259.230706] possible SYN flooding on port 80. Sending cookies.
Тогда больше не будет сообщений, регистрируемых с http-сервера, поэтому я предполагаю, что именно здесь он умер. Я не уверен, какой сигнал он получил, что убил его, поэтому я предполагаю, что это были SIGKILL, SIGSEGV или SIGABRT, потому что они не были пойманы, и SIGKILL все равно не может быть пойман. Я посмотрел SYN-флуд, и это тип DoS-атаки. Я не уверен, был ли сервер действительно атакован или нет, но большинство запросов, которые я получаю в общей сложности для моих 4 веб-сайтов, выполняются не более 1 раза в секунду ... не настолько близко, чтобы быть ложно обвиненным в DoS-атаке.
Мои вопросы:
Насколько вероятно, что это была DoS-атака?
Было бы ядро (linux) убило бы http-сервер из-за этого или оно умерло бы само по себе?
Если ядро убило его, как мне предотвратить это, я не могу заставить его умереть неожиданно?
Если ядро не уничтожило его, была ли смерть, вероятно, вызвана лавинным потоком SYN, и как я могу его отладить, или это, скорее, не связанная с этим ошибка программирования?
Какие меры безопасности следует предпринять для предотвращения возможного SYN-флуда?
РЕДАКТИРОВАТЬ: http-сервер теперь аварийно завершал работу 3 раза с одним и тем же сценарием.
Ядро Linux отправляет файл cookie SYN на удаленный компьютер, который выполняет предполагаемую атаку, но не на ваш веб-сервер.
Ты можешь читать Укрепление стека TCP / IP от атак SYN чтобы узнать больше об атаках SYN-флуда.
Также может быть ты хочешь прочитать это руководство об отладке apache и о применении некоторых идей для отладки вашего собственного сервера.
Запустите netstat и посмотрите, в каком состоянии находятся соединения. Если вы видите много сокетов SYN_RECV, которые просто сидят на месте, скорее всего, вы находитесь под DOS. Если все подключения происходят с одного и того же IP-адреса, исправить это просто.
Также возможно, что ваш сайт стал популярным или его сканирует плохо закодированный поисковый бот, что приводит к большому количеству подключений, и ваш сервер не может с этим справиться. Поиск по запросу «Linux tcp tuning» в вашей любимой поисковой системе найдет множество подсказок / советов / практических рекомендаций по настройке стека tcp вашего сервера.