Apache IP restriction mit DynDNS
Oft ist man in seinen Gedanken gefangen, so wie ich. So dachte ich immer nur in RequireAll und so weiter. Der Trick ist aber, es über eine RewriteCond zu lösen.
Während des Aufbaus eines Blogs sollte dieser lediglich für den Blogger sichtbar sein. Der Blogger bekommt aber nur eine Dynamische IP von seinem Provider. Das heißt, die IP wechselt immer wieder. In den Module „mod_authz_core“ und „mod_authz_host“ für Apache 2.4.10 konnte ich für den Authorization Containers keine performante Möglichkeit finden auf DynDNS zu prüfen.
Apache Conf
# Block all and white list only DynDns IP's
RewriteEngine On
RewriteMap iplist txt:/usr/local/etc/whitelist_dyndns.txt
RewriteCond %{REMOTE_ADDR} ^(.*)$
RewriteCond ${iplist:%1|black} ^black$ [NC]
RewriteRule (.*) - [F]
/usr/local/etc/whitelist_dyndns.txt
In „whitelist_dyndns.txt“ werden die IP’s aufgeführt, welche auf die Website zugreifen dürfen. Wichtig ist hier, dass es sich um eine Key / Value paar handelt, das heißt der Dummy Wert „-“ muss hinter der IP angegeben werden.
# Beware of mod_rewrite will parses this for a key/value pairs.
# Don't forget the dummy value "-" at the end of the row.
127.0.0.1 -
# IP of your server
192.168.2.3 -
# below is the DynDNSIP (this comment need to be placed here, because this is the hook for the update script)
10.156.2.3 -
/usr/local/lc_apache_scripts/write_dyndns_ip_to_file.sh
Das Shell-Script „write_dyndns_ip_to_file.sh“ fragt die IP bei dem DynDNS Provider ab und schreibt diese in „whitelist_dyndns.txt“. Hier muss darauf geachtet werden, dass das Schlüsselwort „DynDNSIP“ aus der Kommentarzeile in „whitelist_dyndns.txt“ angegeben ist.
#!/bin/bash
LIST='/usr/local/etc/whitelist_dyndns.txt'
MYHOST=$(resolveip --silent myDynDNS.domain.com)
sed '/myhost/{n;d}' $LIST > $LIST.tmp
sed "s/.*myhost.*/&\n$DynDNSIP -/" $LIST.tmp > $LIST
/bin/rm $LIST.tmp
cron
Jetzt nur noch einen Eintrag in die Cron geschrieben und schon hat man eine IP Restriction auf Basis eines DynDNS Records.
# Request DynDNS IP for whitelisting Apache IP restriction
*/15 * * * * /usr/local/lc_apache_scripts/write_dyndns_ip_to_file.sh > /dev/null