Polar55 biedt ontwikkelaarsvriendelijke webhosting, dus je hebt natuurlijk ook toegang tot de terminal, zowel via SSH als rechtstreeks via cPanel.
De terminal gebruiken kan best intimiderend zijn, en weinig mensen weten hoe ze moeten beginnen. Met AI is het echter een stuk eenvoudiger geworden. Je kunt de opdrachten die AI je geeft naar de terminal kopiëren en vervolgens de uitvoer teruggeven aan de AI. Die kan dan een volgende opdracht voorstellen, afhankelijk van wat je wilt onderzoeken.
In deze handleiding laten we een paar voorbeelden zien van wat je met de terminal kunt doen. Het is wel belangrijk om te benadrukken dat het pas echt efficiënt wordt als je AI zowel je opdrachten laat maken als de uitvoer laat analyseren.
Onderzoek hoog CPU-gebruik en mogelijk botverkeer
Gebruikt je webhostingaccount veel CPU, of is je website traag? Dit kan komen door geautomatiseerde bots of veel herhaalde verzoeken aan je website.
Met cPanel Terminal kun je het verkeer naar je websites onderzoeken. Je vindt Terminal onder Advanced → Terminal in cPanel. De onderstaande opdrachten lezen alleen gegevens en wijzigen niets aan je webhostingaccount.
Vind de actiefste User-Agents
Een User-Agent is de identificatietekst die een browser of bot met een verzoek meestuurt. De volgende opdracht laat zien welke User-Agents in de afgelopen 60 minuten de meeste verzoeken met een HTTP 200-antwoord hebben gedaan:
grep -hE "$(for i in $(seq 0 59); do LC_ALL=C date -d "$i minutes ago" '+%d/%b/%Y:%H:%M'; done | paste -sd'|' -)" \
~/access-logs/* 2>/dev/null \
| awk -F'"' '$3 ~ /^ 200 / {
ua=$6;
if (ua=="") ua="-";
print ua
}' \
| sort | uniq -c | sort -nr | head -100
Voorbeeld van de uitvoer:
1662 Mozilla/5.0 ... Edg/156.0.0.0
810 Mozilla/5.0 ... Chrome/156.0.0.0 Mobile
479 WP Rocket/Preload
96 Mozilla/5.0 ... bingbot/2.0
Het getal links geeft het aantal verzoeken aan. Als één User-Agent duidelijk opvalt, kun je onderzoeken van welke IP-adressen het verkeer afkomstig is.
Let op: Veel verzoeken zijn niet per se verdacht. WP Rocket kan bijvoorbeeld veel verzoeken genereren tijdens het opbouwen van de cache. User-Agents kunnen bovendien worden vervalst. De opdracht toont alleen HTTP 200 en dus bijvoorbeeld geen HTTP 403 of 429.
Vind de IP-adressen achter een bepaalde User-Agent
Kopieer de User-Agent die je wilt onderzoeken en plak deze tussen de aanhalingstekens na UA=. Hier gebruiken we Microsoft Edge als voorbeeld:
UA='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36 Edg/156.0.0.0'
grep -hE "$(for i in $(seq 0 59); do LC_ALL=C date -d "$i minutes ago" '+%d/%b/%Y:%H:%M'; done | paste -sd'|' -)" \
~/access-logs/* 2>/dev/null \
| awk -F'"' -v ua="$UA" '
$3 ~ /^ 200 / && $6 == ua {
split($1,a," ")
print a[1]
}
' \
| sort | uniq -c | sort -nr | head -20
Voorbeeld van de uitvoer:
865 192.0.2.10
591 198.51.100.20
1 203.0.113.30
Hier zie je dat het grootste deel van de verzoeken afkomstig is van twee IP-adressen.
Blokkeer een IP-adres via cPanel
Als je het verkeer hebt onderzocht en vaststelt dat een IP-adres problemen veroorzaakt, kun je het via cPanel blokkeren:
- Log in op cPanel.
- Open Security → IP Blocker.
- Voer het IP-adres in dat je wilt blokkeren.
- Klik op Add.
- Herhaal dit indien nodig voor andere IP-adressen.
Je kunt de blokkering later op dezelfde plek opheffen. Houd er rekening mee dat een IP-adres ook van een legitieme bezoeker of een gedeelde internetverbinding kan zijn.
Ontdek welk domein het meeste verkeer ontvangt
Als je meerdere websites op hetzelfde cPanel-account hebt, kun je onderzoeken welk domein in de afgelopen 60 minuten de meeste verzoeken heeft ontvangen. Dit kan je helpen bepalen welke website je bij een hoge CPU-belasting nader moet onderzoeken.
python3 - <<'PY'
import glob
import json
import os
import re
import subprocess
from collections import Counter
from datetime import datetime, timedelta
now = datetime.now().astimezone()
start = now - timedelta(minutes=60)
counts = Counter()
domains = {}
# Haal de juiste domeinkoppelingen op uit cPanel
try:
result = subprocess.run(
['uapi', '--output=json', 'DomainInfo', 'domains_data'],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
universal_newlines=True,
timeout=15
)
if result.returncode == 0:
response = json.loads(result.stdout)
data = response.get('result', {}).get('data') or {}
for category in ('addon_domains', 'sub_domains'):
for item in data.get(category) or []:
if not isinstance(item, dict):
continue
internal = item.get('servername')
public = item.get('domain')
if internal and public:
domains[internal] = public
main = data.get('main_domain') or {}
if isinstance(main, dict):
internal = main.get('servername')
public = main.get('domain')
if internal and public:
domains[internal] = public
except (OSError, ValueError, subprocess.TimeoutExpired):
pass
# Doorloop de toegangslogboeken voor de afgelopen 60 minuten
seen = set()
for path in glob.glob(os.path.expanduser('~/access-logs/*')):
try:
if not os.path.isfile(path):
continue
stat = os.stat(path)
identity = (stat.st_dev, stat.st_ino)
# Voorkom dat hetzelfde bestand via meerdere harde koppelingen wordt gelezen
if identity in seen:
continue
seen.add(identity)
name = os.path.basename(path)
name = re.sub(r'-ssl_log$', '', name)
# Toon de juiste domeinnaam uit cPanel
domain = domains.get(name, name)
with open(path, errors='replace') as logfile:
for line in logfile:
match = re.search(r'\[([^\]]+)\]', line)
if not match:
continue
try:
timestamp = datetime.strptime(
match.group(1),
'%d/%b/%Y:%H:%M:%S %z'
)
except ValueError:
continue
if start <= timestamp <= now:
counts[domain] += 1
except OSError:
continue
print('VERZOEKEN PER DOMEIN – AFGELOPEN 60 MINUTEN')
print()
for domain, count in counts.most_common():
print('{:8} {}'.format(count, domain))
PY
Voorbeeld van de uitvoer:
VERZOEKEN PER DOMEIN – AFGELOPEN 60 MINUTEN
4821 website-a.nl
936 website-b.nl
124 website-c.nl
In dit voorbeeld ontvangt website-a.nl veel meer verkeer dan de andere websites.
Veel verzoeken betekenen echter niet noodzakelijk een hoog CPU-gebruik. Eén zwaar WordPress-verzoek kan de server meer belasten dan veel verzoeken die vanuit de cache worden afgehandeld. De cijfers geven daarom een indicatie en zijn geen directe meting van het CPU-gebruik.
Controleer het schijfgebruik en vind de grootste bestanden
Raakt de schijfruimte van je webhostingaccount op? Met Terminal kun je de grootste bestanden op je account vinden. Dat is vooral handig om oude back-ups, grote logbestanden en andere bestanden op te sporen die misschien niet meer nodig zijn.
Vind de 20 grootste bestanden
find ~ -type f -printf '%s %p\n' 2>/dev/null \
| sort -nr | head -20 \
| awk '{printf "%.1f MB %s\n", $1/1048576, $2}'
Voorbeeld van de uitvoer:
1850.4 MB /home/user/backups/backup-old.zip
724.2 MB /home/user/public_html/wp-content/backup.zip
312.8 MB /home/user/public_html/error_log
Heb geduld: Het kan enkele minuten duren voordat de opdracht is voltooid, vooral als je account veel bestanden bevat.
Deze opdracht helpt je mogelijkheden te vinden om ruimte vrij te maken op je webhostingaccount. Er wordt niets verwijderd.
Belangrijk: Verwijder nooit bestanden als je niet weet waarvoor ze worden gebruikt. Bekijk ze eventueel eerst in Bestandsbeheer van cPanel voordat je iets verwijdert.