Bevezetés
A Traffic Cop egy biztonsági WordPress bővítmény, amely első sorban fejlesztőknek, üzemeltetőknek készült. Az alábbi oldalon a bővítmény - első sorban - technikai dokumentációja található.
Licenc beszerzése és beállítások
A licenc beszerzését és a beállításokat a telepítés előtt kell elvégeznünk.
- Regisztráció a Shop-ban
- Megerősítő linkre kattintás az kapott email-ben
- Bejelentkezés a Shop-ba
- Számlázási profil létrehozása a Shop-ban
- Termék vásárlás a Shop-ban
- Fizetés bankkártyával vagy átutalással
- Licenc kiválasztása a Shop-ban
- Licenc aktiválás WordPress URL (nem a Site Address) beírással a Shop-ba
- Bővítmény letöltése a Shop-ból
- Bővítmény feltöltése és aktiválása WordPress-ben
- Licenc kulcs kimásolás a Shop-ból
- Licenc kulcs beállítás WordPress-ben
Licenc vásárlása
A bővítményt licenc formájában lehet megvásárolni. A vásárlást a Cone Shop felületén lehet megtenni: https://shop.conedevelopment.com/traffic-cop. Regisztráció, bejelentkezés, majd a számlázási adatok megadása után a kívánt oldalszámban lehet licencet vásárolni.
A vásárlást követően a rendszer automatikusan létrehozza a licenc kulcsot, amelyhez előbb aktiválni kell az áruház URL-jét, majd a bővítmény telepítése után meg kell adni a licenckulcsot.
URL/domain aktiválása
A korábban vásárolt licenceket a https://shop.conedevelopment.com/account/licenses linken érjük el.
Egy-egy licencen belül hozzá tudjuk rendelni áruházunk URL-jét a licenc kulcshoz, így a későbbi aktiválás sikeresen megtörtént.
Telepítés
A telepítést a beszerzés és a beállítások elvégzése után tudjuk elvégezni.
WordPress bővítménykezelőn keresztül
A licenc beállítás oldalán a kívánt verziót kiválasztva letölthetjük a bővítményt, amelyet már telepíteni lehet a WordPress példányra.
Letöltés után keressük meg a letöltött .zip fájlt és töltsük fel a kiszemelt WordPress példányra.
- Navigáljunk a Bővítmények / Új hozzáadása menüpontra.
- Kattintsunk felül a címsorban található Bővítmény feltöltése gombra.
- Az újonnan kinyílt szekcióban kattintsunk a fájl kiválasztására, majd tallózzuk be a korábban letöltött fájlt.
- Kattintsunk a Telepítés most gombra.
A feltöltés után kapunk egy képernyőt, ahol láthatjuk, hogy a bővítményt sikeresen telepítettük. Ez csupán egy egyszerű oldal, ahol a telepítés folyamatait tudjuk végigkísérni.
Ahogy ezen a képernyőn láthatod, egyből tudod is aktiválni. Kattints a Bővítmény bekapcsolása gombra és már fut is a Traffic Cop bővítményed.
Ha elmulasztod az aktiválást ezen az oldalon, akkor a Bővítmények / Telepített bővítmények menüpont alatt mindig tudod aktiválni (ki/be kapcsolni, törölni, frissíteni).
Aktiválás után a bővítmény beállításait a Beállítások / Traffic Cop menü alatt találod meg.
Itt tudod hozzárendelni a licenc kulcsot a bővítményhez. Ez fontos lépés, mert érvényesítés nélkül nem működik a bővítmény, illetve frissítéseket sem lehet letölteni a WordPress rendszerén keresztül.
Composer csomagkezelőn keresztül
A Composer egy elterjedt csomagkezelő PHP alkalmazásokhoz. Előfordul, hogy a WordPress példányt és annak függőségeit Composer-rel szeretnénk kezelni.
Az alábbi minta composer.json bemutatja, hogy a conedevelopment/traffic-cop repository-t hogyan szükséges paraméterezni, hogy a megfelelő helyről töltse le a kívánt állományt.
{
"name": "conedevelopment/example-wp-composer",
"description": "Example WordPress with Composer",
"license": "MIT",
"require": {
"php": "^8.3.0",
"conedevelopment/traffic-cop": "^1.0.0",
"roots/wordpress": "^6.6.0"
},
"minimum-stability": "beta",
"config": {
"preferred-install": {
"*": "dist"
},
"allow-plugins": {
"composer/installers": true,
"ffraenz/private-composer-installer": true,
"roots/wordpress-core-installer": true
}
},
"extra": {
"installer-paths": {
"wp-content/mu-plugins/{$name}/": [
"type:wordpress-muplugin"
],
"wp-content/plugins/{$name}/": [
"type:wordpress-plugin"
],
"wp-content/themes/{$name}/": [
"type:wordpress-theme"
]
}
},
"repositories": [
{
"type": "composer",
"url": "https://wpackagist.org"
},
{
"type": "package",
"package": {
"name": "conedevelopment/traffic-cop",
"version": "1.0.0",
"type": "wordpress-plugin",
"dist": {
"type": "zip",
"url": "https://shop.conedevelopment.com/api/packages/{%CONE_LICENSE_KEY}/download?type=composer&version=v{%VERSION}"
},
"require": {
"composer/installers": "^2.3.0",
"ffraenz/private-composer-installer": "^5.0"
}
}
}
]
}
A {%VERSION} változó a version kulcs értékét adja vissza, jelen esetben a 1.0.0-t. A {%CONE_LICENSE_KEY} értékét viszont nem javasolt közvetlenül a composer.json-ban tárolni (főleg ha ez a git-ben is tárolva van), hanem érdemes valamilyen környezeti változóba szervezni. Ez lehet egy .env változó, vagy valamilyen CI (GitHub Actions, GitLab CI, stb.) környezeti változója:
# Nem valós licenc kulcs!
CONE_LICENSE_KEY=eb819bed-ba18-4e60-9d95-d6d6b5d4364c
WAF
A WAF (Web Application Firewall) funkció lényege, hogy a HTTP kéréseket bizonyos szabályok alapján szűrje, és azok a kéréseket amelyek fennakadnak a szűrőn blokkolja, mielőtt terhelést jelentene a szerverre.
Ideális esetben ez a funkció nem a WordPress-en belül van megoldva, de osztott tárhelyek esetén gyakran előfordul, hogy a WAF nem elérhető, így egy alternatív megoldásra van szükség. A bővítmény ezt az alternatívát kínálja.
A működése nagyon egyszerű: egy ~10 éve, folyamatosan frissen tartott IP cím listából dolgozik, amely lista a kártyékony HTTP kéréseket küldő IP címeket tartalmazza. Abban az esetben ha az IP cím szerepel valamelyik tartományban a HTTP kérésre 403-as (Forbidden) HTTP válasz ad a bővítmény, így minimalizálva a terhelést a szerveren.
Beállítások
A WAF beállításai a Beállítások → Traffic Cop → WAF menüpontban található.
Rate Limiter
A Rate Limiter funkció arra hivatott, hogy bizonyos HTTP kéréseket (pl.: Bot kéréseket) egy adott időablakban (pl.: 10 másodperc) limitáljon (pl.: 3 kérés az adott ablakban).
Erre azért van szükség, mert a tartalmat elemző botok (pl.: Google bot, Facebook bot) komoly terhelést képesek kiváltani az adott szerveren nagyon rövid idő alatt. Ez lassítja az oldalt és a minden folyamatot amely rontja a felhasználói élményt, esetenként használhatatlanná teszi a felületet.
Jelenleg három Rate Limiter megoldás közül lehet választani: Transient, Redis és Shmop.
Környezeti beállítások .htaccess segítségével
Amennyiben szeretnénk, úgy a kívánt szabályoknak megfelelő értékeket adhatunk át a Rate Limiternek az .htaccess segítségével. Például:
RewriteCond %{HTTP_USER_AGENT} "^Mozilla.*(Chrome|Firefox|Safari)"
RewriteCond %{HTTP_ACCEPT_LANGUAGE} "^$"
RewriteCond %{HTTP_ACCEPT_ENCODING} "^gzip$"
RewriteCond %{HTTP_CONNECTION} "^keep-alive$"
RewriteCond %{HTTP_REFERER} "."
RewriteRule ^ - [E=RATE_LIMIT_KEY:Chinese-attacker,E=RATE_LIMIT_INTERVAL:10,E=RATE_LIMIT_LIMIT:1]
Fontos, hogy minden esetben a RATE_LIMIT_KEY, a RATE_LIMIT_INTERVAL és a RATE_LIMIT_LIMIT env változókat kell megadni.
Transient Driver
A tranziensek a WordPress core részét képzik. Ezt az opciót előzetes beállítás és konifurálás nélkül használni lehet.
Redis Driver
A Redis egy nyílt forráskódú, in-memory, NoSQL kulcs-érték tároló, amely gyors adatfeldolgozást biztosít. Rugalmassága és gyorsasága miatt olyan esetekben ajánlott, amikor az oldal nagyobb forgalmat bonyolít.
A driver használatának előfeltétele, a redis PHP extension megléte és a megfelelő konfiguráció a wp-config.php fájlban:
// pl.:
define('TRAFFIC_COP_REDIS_CONFIG', [
'host' => '127.0.0.1',
'port' => 6379,
'auth' => 'password', // ['user', 'password']
'database' => 0,
]);
Shmop Driver
A "shmop" (shared memory operation) egy PHP bővítmény, amely lehetővé teszi Unix alapú rendszereken a megosztott memória szegmensek egyszerű kezelését. PHP-ben használható funkciókat biztosít a megosztott memória szegmensek olvasásához, írásához, létrehozásához és törléséhez.
A driver használatának előfeltétele, a shmop megléte.
Beállítások
A Rate Limiter beállíásai a Beállítások → Traffic Cop → Rate Limiter menüpontban található.
Hook index
A bővítmény lehetőséget nyújt arra, hogy filtereken keresztül irányítsuk a működést. A hookok megfelelő használatával akár egészen egyedi megoldásokat is alkalmazhatunk.
traffic-cop_waf_ip (Filter)
Amennyiben egyedi logika alapján szeretnénk feloldani az IP címet, úgy ezt a traffic-waf_ip filterrel megtehetjük:
add_filter('traffic-cop_waf_ip', function (string $ip): string {
return $ip;
});
traffic-cop_waf_blocked (Action)
Amennyiben műveletet szeretnénk elvégezni abban az esetben, amikor a WAF blokkolt egy HTTP kérést, úgy ezt a traffic-cop_waf_blocked action-nel megtehetjük:
add_action('traffic-cop_waf_blocked', function (string $rule, string $value): void {
match ($rule) {
'ip_rule' => handleIpRule($value),
'uri_rule' => handleUriRule($value),
default => null,
};
});
traffic-cop_waf_ip_bypass (Filter)
Amennyiben egy adott IP címet átengedni vagy éppen ellenkezőleg, blokkolni szeretnénk - függetlenül attól, hogy szerepel-e az IP listában - úgy ezt a traffic-cop_waf_ip_bypass filterrel megtehetjük:
add_filter('traffic-cop_waf_ip_bypass', function (?bool $pass, string $ip): ?bool {
return match (true) {
in_array($ip, $enabled) => true,
in_array($ip, $blocked) => false,
default => $pass,
};
}, 10, 2);
traffic-cop_rate_limiter_key (Filter)
Amennyiben módosítani szeretnénk a Rate Limiter kulcsát (tehát azt az értéket ami alapján megkülönböztetjük az egyes HTTP kéréseket), úgy ezt a traffic-cop_rate_limiter_key filterrel megtehetjük:
add_filter('traffic-cop_rate_limiter_key', function (string $key): string {
return $_SERVER['REMOTE_ADDR'];
});
traffic-cop_rate_limiter_limit (Filter)
Amennyiben módosítani szeretnénk az adott kulcsra vonatkoztó limitet az adott intervallumban, úgy ezt a traffic-cop_rate_limiter_limit filterrel megtehetjük:
add_filter('traffic-cop_rate_limiter_limit', function (int $limit): int {
return match (true) {
isBot() => 1,
default => $limit,
};
});
traffic-cop_rate_limiter_interval (Filter)
Amennyiben módosítani szeretnénk az intervallumot, úgy ezt a traffic-cop_rate_limiter_interval filterrel megtehetjük:
add_filter('traffic-cop_rate_limiter_interval', function (int $interval): int {
return match (true) {
isBot() => 10,
default => $interval,
};
});
traffic-cop_should_be_rate_limited (Filter)
Amennyiben egyedi logikával irányítani szeretnénk, hogy mely kérések esetén lépjen életbe a rate limit, úgy ezt a traffic-cop_rate_limited filterrel megtehetjük:
add_filter('traffic-cop_rate_limited', function (bool $limited): bool {
return match (true) {
isBot() => true,
default => false,
};
});
traffic-cop_rate_limit_hit (Action)
Amennyiben műveletet szeretnénk elvégezni abban az esetben, ha a Rate Limiter lefutott, úgy ezt a traffic-cop_rate_limit_hit action-nel megtehetjük:
add_action('traffic-cop_rate_limit_hit', function (string $ip): void {
//
});
traffic-cop_rate_limit_blocked (Action)
Amennyiben műveletet szeretnénk elvégezni abban az esetben, ha a Rate Limiter elérte a limitet és blokkolta a kérést, úgy ezt a traffic-cop_rate_limit_blocked action-nel megtehetjük:
add_action('traffic-cop_rate_limit_blocked', function (string $ip): void {
//
});