FrankenPHP (Laravel Octane)
Requirements
Installation & Configuration
1
Install Zen Firewall by Aikido
rpm -Uvh --oldpackage https://github.com/AikidoSec/firewall-php/releases/latest/download/aikido-php-firewall.x86_64.rpmrpm -Uvh --oldpackage https://github.com/AikidoSec/firewall-php/releases/latest/download/aikido-php-firewall.aarch64.rpmcurl -L -O https://github.com/AikidoSec/firewall-php/releases/latest/download/aikido-php-firewall.x86_64.deb
dpkg -i -E ./aikido-php-firewall.x86_64.debcurl -L -O https://github.com/AikidoSec/firewall-php/releases/latest/download/aikido-php-firewall.aarch64.deb
dpkg -i -E ./aikido-php-firewall.aarch64.deb2
Start Zen Firewall in dry / detection-only mode
Via Laravel Sail
ARG AIKIDO_VERSION=1.5.2
RUN curl -L -o /tmp/aikido-php-firewall.deb \
"https://github.com/AikidoSec/firewall-php/releases/download/v${AIKIDO_VERSION}/aikido-php-firewall.$(uname -m).deb"{$CADDY_SERVER_SERVER_NAME} {
route {
php_server {
env AIKIDO_TOKEN "AIK_RUNTIME_...."
env AIKIDO_BLOCK "True"
}
}
}<?php
// ... Octane bootstrap ...
$handleRequest = static function () use ($worker, $frankenPhpClient, $debugMode) {
\aikido\worker_rinit();
// Octane request handling logic
\aikido\worker_rshutdown();
};
while ($requestCount < $maxRequests && frankenphp_handle_request($handleRequest)) {
$requestCount++;
}ls -sf /var/www/html/frankenphp /usr/bin/frankenphp
dpkg -i -E ./aikido-php-firewall.$(uname -m).deb./vendor/bin/sail up --buildVia Docker Image
FROM dunglas/frankenphp:php${PHP_VERSION}-bookworm
ARG AIKIDO_VERSION=1.5.2
RUN apt-get update && apt-get install -y curl \
&& curl -L -o /tmp/aikido-php-firewall.deb \
"https://github.com/AikidoSec/firewall-php/releases/download/v${AIKIDO_VERSION}/aikido-php-firewall.$(uname -m).deb" \
&& dpkg -i /tmp/aikido-php-firewall.deb \
&& rm /tmp/aikido-php-firewall.deb \
&& apt-get clean
COPY . /app
ENTRYPOINT ["php", "artisan", "octane:frankenphp"]{$CADDY_SERVER_SERVER_NAME} {
route {
php_server {
env AIKIDO_TOKEN "AIK_RUNTIME_...."
env AIKIDO_BLOCK "True"
}
}
}<?php
// ... Octane bootstrap ...
$handleRequest = static function () use ($worker, $frankenPhpClient, $debugMode) {
\aikido\worker_rinit();
// Octane request handling logic
\aikido\worker_rshutdown();
};
while ($requestCount < $maxRequests && frankenphp_handle_request($handleRequest)) {
$requestCount++;
}docker run -e AIKIDO_TOKEN="AIK_RUNTIME_..." your-appenv AIKIDO_BLOCK "False"AIKIDO_TOKEN=AIK_RUNTIME_...
AIKIDO_BLOCK=false4
Enable Rate limiting and User blocking
if (extension_loaded('aikido')) {
\aikido\set_user('123', 'John Doe');
$decision = \aikido\should_block_request();
if ($decision->block && $decision->type === 'blocked') {
http_response_code(403);
exit('You are blocked by Zen.');
}
if ($decision->block && $decision->type === 'ratelimited') {
http_response_code(429);
exit('You are rate limited by Zen.');
}
}5
Setup rate limiting in the dashboard



You are rate limited by Aikido firewall. (Your IP: 1.2.3.4)Last updated
Was this helpful?
