Usar o DROP faz com que ele espere por um tempo limite (o pacote é descartado antes de chegar ao seu aplicativo). Você não manda nada de volta.
Usando o REJECT você envia um pacote RST, dizendo que a porta está fechada.
Usar o DROP é melhor para proteção DoS, já que você não envia nada. Usar o REJECT é um "melhor", já que alguém se conecta a você por engano, sabe que a porta está fechada imediatamente e não precisa esperar por um tempo limite.
Um flood de sincronização é quando alguém envia muitos pacotes syn para iniciar muitas conexões (falsas ou não) e você reserva recursos para cada conexão, enquanto não há usuários reais para usá-los. Como você usa todos os seus recursos, usuários legítimos não podem usar seu serviço.