Заголовок

В общем случае, существуют два варианта:

  1. вариант, если вы провайдер интернета, то используя BGP blackhole community можно пододвинуть черную дыру в которую будет сливаться незапрошенный трафик как можно ближе к атакующим.
  2. вариант, если вы пользователь и, например, атакован Ваш сервер то можно только постараться облегчить последствия атаки. Все все приемы доступные пользователю направлены на снижение эффективности DDoS-атак, ставящих своей целью израсходовать ресурсы машины. От флуда, забивающего канал мусором, защититься практически невозможно.

Итак минимум:
Добавляем в файл /etc/sysctl.conf

# Защита от спуфинга
net.ipv4.conf.default.rp_filter = 1
# Проверять TCP-соединение каждую минуту.
net.ipv4.tcp_keepalive_time = 60
# Повторить пробу через десять секунд
net.ipv4.tcp_keepalive_intvl = 10
# Количество проверок перед закрытием соединения
net.ipv4.tcp_keepalive_probes = 5

Дальше определяем сети от куда приходит атака:
Например так:
netstat -na | grep «:80 » | grep SYN_RCVD
или так:
netstat -na | grep «:80 » | sort | uniq -c | sort -nr | less

Однозначно идентифицировать так DDoS-атаку нельзя, можно лишь подтвердить свои догадки о наличии таковой, если один адрес повторяется в списке слишком много раз (это может так же говорить о посетителях, сидящих за NAT'ом). Или слишком много адресов которые например только открывают tcp соединение и больше ничего не делают.

Дополнительным подтверждением будет анализ пакетов с помощью tcpdump:

tcpdump -n -i eth0 -s 0 -w output.txt dst port 80 and host IP-сервера

Показателем служит большой поток однообразных (и не содержащих полезной информации) пакетов от разных IP, направленных на один порт/сервис.

Ну и наконец: iptables -A INPUT -s xxx.xxx.xxx.xxx -p tcp –destination-port http -j DROP

Кроме того, следует обратиться к провайдеру/хостеру (с приложенными к сообщению логами web-сервера, ядра, брандмауэра и списком выявленных тобой IP-адресов) для решения данной проблемы более эффективными средствами.