Apache Authenticatie op verschillende manieren

In deze tutorial leg ik uit hoe je op verschillende manieren de toegang tot een website beperkt met apache. Dit kan op enkele manieren: ip-gebaseerd, of uit een bestand, of door middel van een database.

Toegang beperken per IP

Er zijn verschillende manieren, de makkelijkste is om het per IP te beperken. Zo kan je bijvoorbeeld de toegang tot je site beperken tot de ip’s van de developers bijvoorbeeld.

Om dit te doen maak je een bestandje in jouw website aan met de naam `.htaccess`. Zet je dit in een bepaalde map, dan word de toegang tot enkel die map beperkt.

Het stukje hieronder laat enkel gebruikers toe met het IP 12.34.56.78. Wil je meer ip’s toegang geven, dan kan je ze er gewoon aan toe voegen, gesplitst met een spatie.

<RequireAll>
Require all denied
Require ip 12.34.56.78
</RequireAll>

Ook het omgekeerde is mogenlijk, bijvoorbeeld een bepaald IP de toegang beperken.

<RequireAll>
Require all granted
Require not ip 78.65.43.21
</RequireAll>

Ook hier kan je gewoon ip’s toevoegen gesplitst met een spatie.

Toegang beperken met een wachtwoord

Eerst moet je een gebruiker & wachtwoord maken. Hiervoor moet je het linux commando `htpasswd` gebruiken

“`s
htpasswd -cB .htpasswd gebruikersnaam
“`

Dit zal je om een wachtwoord vragen en het in het bestand `.htaccess` zetten. om een 2e gebruiker toe te voegen kan je enkel `htpasswd -B .htpasswd gebruiker2` gebruiken, de `-c` vlag maakt namelijk een nieuw bestand aan.

Om dit te doen maak je een bestandje in jouw website aan met de naam `.htaccess`. Zet je dit in een bepaalde map, dan word de toegang tot enkel die map beperkt, je zet er het volgende in:

AuthName "Beveiligd gedeelte" 
AuthUserFile /pad/naar/.htpasswd 
AuthGroupFile /dev/null 
AuthType Basic 
require valid-user

Je moet uiteraard het pad vervangen naar het pad naar het htpasswd bestand.

Als je hierna de site bezoekt zal je gevraagd worden om een gebruikersnaam & wachtwoord in te geven.

 

Alma Linux Beta (RHEL) Installeren

Eind vorig jaar kondigde Centos aan dat ze de focus gingen leggen naar CentOS Steam, een Rolling release die gebruikt word als development branch voor de RedHat Distributie. Hierbij werd ook de ondersteuning voor CentOS 8 verkort, en zal eind dit jaar geen support meer krijgen. Er zijn een aantal alternatieven gekomen, waaronder Alma Linux. Alma Linux word gemaakt door de makers van CloudLinux, en is volledig Open Source. In deze Tutorial leg ik uit hoe je AlmaLinux installeert

Lees verder

Handige SSH Tips

In deze post ga ik enkele handige SSH-tips toelichten.

SSH Port forwarding

Het is mogenlijk om via SSH een poort op de ssh-server door te sturen naar een poort op jouw locale machine. Dit kan bijvoorbeeld gebruikt worden om door een firewall te komen.

ssh -L 80:voorbeeld.be:80 server.be

Hier maak je verbinding met de server `server.be` en worden alle aanvragen naar jouw eigen toestel (`localhost`) doorgestuurd (door de ssh server `server.be`) naar voorbeeld.be. Het poortnummer kan je naar wens aanpassen, links is de local port, rechts is de poort op voorbeeld.be die je naar de local port wilt doorsturen.

Reverse port forwarding

Met reverse port forwarding doe je eigenlijk hetzelfde als hierboven, maar omgekeerd. De client zet een verbinding op zodat de server aan de poort op de client kan. De syntax is bijna identiek Lees verder

Prettige kerst, Unix Style.

better !pout !cry
better watchout
lpr why
santa claus < north pole >town
cat /etc/passwd > list
ncheck list
ncheck list
cat list | grep naughty >nogiftlist
cat list | grep nice >giftlist
santa claus < north pole >town

who | grep sleeping
who | grep awake
who | egrep 'bad|good'
for (goodness sake) {
be good
}
# by Frank Carey, AT&T Bell labs, 1985.

Printer Friendly CSS

Iets waar moderne websites het lastig mee hebben is om als je de webpagina afdrukt, deze vaak te veel nutteloze informatie afdrukt. Een pagina printer-friendly maken is echter niet zo moeilijk. In deze post leg ik uit hoe je een printer-friendly CSS bestand toevoegd aan je site.

Lees verder

Wat is er nieuw in PHP 8.0

Onlangs is PHP 8.0 uitgekomen. Hier zijn de meest interesante nieuwtjes

Union Types

PHP is een dynamicaly typed programmeertaal, daardoor kan een variabele soms van een ander type zijn. Met union types kan je aanduiden dat een variabele van 1 van de toegestane types is

// Union type example
public function foo(Foo|Bar $var): float|int;

JIT

De JIT is weer aangepast, waardoor PHP nog sneller is.

De Match Expressie

De match expressie is een beetje zoals de `switch` expressie.

// match example
$result = match($input) {
0 => "Hallo"
1,2 => "Wereld" 
}

ext-json standaard

De JSON extentie is nu altijd deel van PHP.

Tiny Perl CMS

Ik heb een klein, basis CMS systeem gemaakt in perl. Voornamelijk om perl uit te testen.

Het is eenorm eenvoudig, het heeft ook geen admin interface, dus zoals het script nu is
moet je pagina’s meteen in de databank aanmaken.

Hieronder zie je de sourcecode.

#!/usr/bin/perl
use warnings;
use strict;
use CGI;
use DBI;

my $driver = "mysql";
my $database = "database_naam";
my $dsn = "DBI:$driver:database=$database";
my $userid = "database_user";
my $password = "database_password";

my $dbh = DBI->connect($dsn, $userid, $password ) or die $DBI::errstr;

my $cgi = CGI->new;
print $cgi->header;

# header
print <<'EOF';
<!DOCTYPE="html">
<html>
<head>
  <title>TinyPerlCMS</title>
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <meta charset="UTF-8" />
</head>
<style>
  body {
    max-width: 800px;
    padding: 1em;
    border: 1px solid black;
    margin: 0 auto;
  }

  img {
    max-width: 100%;
  }
</style>
<body>
EOF

my $p = $cgi->param('p') || '1'; # default id 1, de homepage

my $sth = $dbh->prepare("SELECT content, title
                        FROM pages
                        WHERE id = ? LIMIT 1"); #limit 1, voor de zekerheid
$sth->execute( $p ) or die $DBI::errstr;
if ($sth->rows == 0){
print "<h1>Error 404: Page not found</h1><p>The page you where looking for was not found. <a href='?p=1'>Go to the homepage</a></p>";
} else {
  while (my @row = $sth->fetchrow_array()) {
     my ($content, $title ) = @row;
     print "<h1>$title</h1>\n $content\n";
     if ($p != '1'){ # check als het niet de homepage is, om link naar homepage te tonen
     print '<a href="?p=1">Back</a>' 
     }
  }
}
$sth->finish();

#footer
print <<'EOF';
</body>
</html>
EOF

exit 0;

database structuur:

CREATE TABLE `pages` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(64) NOT NULL, -- grote kan aangepast worden
  `content` varchar(10000) NOT NULL, -- grote kan aangepast worden
  PRIMARY KEY (`id`)
)

Jederu cloud review

Ongeveer een week geleden kondigde een kennis van me aan dat hij een cloud-service ging starten, welke gericht was op hobbyisten. Ik mocht het dan ook al wat eerder uit proberen, dus leek het mij een goed idee om hem wat te steunen met een review.

Containers als vps

Jederu’s cloud service is een dienst die docker-containers als een vps aanbied, dit is zeer gunstig, omdat ze ervoor zorgen dat je snel aan de slag kan met je idee. Ook krijg je enkel de poorten die je nodig hebt, met poort 22 voor ssh er standaard bij. Dit maakt het out-of-the-box wat veiliger (je hoeft geen firewall te installeren), maar heeft wel een nadeel: poorten worden gemapt aan een random poort op de host-server. Hiervoor is er wel een proxy-dienst inbegrepen, waardoor je hier eigenlijk minimale last van ondervind.

De performance

De performance op de kleinste container is beperkt tot 0.25 cpu, en 256mb ram. Dit lijkt weinig, maar is ruim voldoende aangezien het gaat om docker container. Ik ondervond ook geen echte slowdowns bij het installeren van een LAMP stack.

De images.

Op het moment van testen waren er 3 images: Ubuntu 18.04, Debian 10 en een NodeJS image, al is Jens er wel bezig aan images zoals een LAMP server. Op de Ubuntu/Debian images kan je uiteraard installeren wat je wilt.

Conclusie

Als je opzoek bent voor een hobby-servertje, Ideaal voor het hosten van een kleine website of wat software-bots. Ik raad het je zeker aan omdat bijna alle features die door mij en andere gebruikers gevraagd zijn geïmplementeerd worden, of op de planning staan om erin te komen.