DDoS Protection via API

Um die DDoS Protection einzelner IP-Adressen zu beeinflussen, bieten wir eine einfache HTTP GET API an.

Folgende Optionen stehen zur Verfügung:

  • do → antiddos_change_routing
  • method → dynamic, permanent, dynamic_layer7, dynamic_perm
  • content → IP-Adresse
  • dynamic → Dynamisches Routing (Sensor Mode, DDoS-Filter im Angriffsfall aktiv)
  • permanent → Permanentes Routing (DDoS-Filter durchgehend aktiv)
  • dynamic_layer7 → Nur Layer7 Filter für 30 Minuten aktiv, keine Layer4 Filterung
  • dynamic_perm → Layer4 Filter für 30 Minuten aktiv (Layer7 eingeschlossen sofern dauerhaft aktiv)

Folgende Optionen beschränken sich ausschließlich auf den Aufruf „antiddos_change_layer7_routing“:

  • do → antiddos_change_layer7_routing
  • method → only_on, only_off, on, off
  • content → IP-Adresse
  • only_on → Nur Layer7 permanent aktiv
  • only_off → Nur Layer7 permanent inaktiv
  • on → Layer7 aktiv sofern Layer4 aktiv
  • off → Layer7 inaktiv sofern Layer4 aktiv

Beispielaufruf

Nachfolgender Aufruf aktiviert die permanente ddos protection für die IP 127.0.0.1:

https://api.combahton.net/?user_email=YOUR@MAIL.COM&user_api_key=YOUR-MANAGER_API_KEY&user_contract=YOUR_CONTRACT_ID&do=antiddos_change_routing&method=permanent&content=127.0.0.1

Wir empfehlen für den Aufruf curl, libwww-perl oder wget. Selbstverständlich kann der Aufruf auch über einen Webbrowser erfolgen.

Dynamische Aktivierung - Layer7 Mitigation

Die HTTP(S) Layer7 Mitigation wird standardmäßig nicht automatisiert aktiviert. Zur automatisierten Aktivierung kann man sich mit dem nachfolgenden Script behelfen, welches bei erreichen der Schwellwerte den Layer7 Filter für 30 Minuten via api request aktiviert. Die Schwellwerte müssen ggf. angepasst werden, haben sich jedoch für normal ausgelastete Webserver als perfekt erwiesen.

Das Script ist derzeit nur mit nginx kompatibel. Hierbei wird der nginx status von localhost ausgelesen.

Folgendes Beispiel-Script sollte z.B. im crontab als @reboot job oder daemon via init script ausgeführt werden:

while

### Define the baseurl of nginx_status
baseurl='http://127.0.0.1/nginx_status';

### Define the api url used to send a http get api call
apiurl="https://api.combahton.net/?user_email=YOUR_EMAIL&user_api_key=YOUR_API_KEY&user_contract=YOUR_CONTRACT&do=antiddos_change_routing&method=dynamic_layer7&content=";

serverips='YOUR-SERVER-IP1 YOUR-SERVER-IP2';

### Reading
if [ "$(/usr/bin/curl -s $baseurl |awk '{print $4}' |sed -e '1d;2d;3d')" -gt "15" ]; then
        echo 'Writing proccesses has reached their limit' > /root/layer7.event
        for i in $serverips; do
                /usr/bin/curl -s $apiurl$i
        done
fi

### Writing
if [ "$(/usr/bin/curl -s $baseurl |awk '{print $4}' |sed -e '1d;2d;3d')" -gt "15" ]; then
        echo 'Writing proccesses has reached their limit' > /root/layer7.event
        for i in $serverips; do
                /usr/bin/curl -s $apiurl$i
        done
fi

### Waiting
if [ "$(/usr/bin/curl -s $baseurl |awk '{print $6}' |sed -e '1d;2d;3d')" -gt "90" ]; then
        echo 'Writing proccesses has reached their limit' > /root/layer7.event
        for i in $serverips; do
                /usr/bin/curl -s $apiurl$i
        done
fi

do sleep 1; done