Ich habe ein paar Websites (wie z.B. auch in so gut wie allen Fällen den phpMyadmin) per .htaccess abgesichert, so dass man nur von bestimmten IP-Adressen aus darauf zugreifen kann.
Beispiel:
deny from all
Allow from 198.141.12.11
Allow from 198.141.12.12
Das funktioniert für den Zugriff vom Firmennetzwerk aus recht gut, von zu Hause aus allerdings nur für einen Tag, da sich bei mir zu Hause die IP täglich ändert und ich somit immer erst die .htaccess-Datei ändern muss, um zugreifen zu können.
Deshalb habe ich mir ein Skript geschrieben, welches in sämtlichen .htaccess-Dateien meine IP-Adresse aktualisiert.
Eigentlich habe ich zwei Skripte geschrieben:
Eines, das bei bestimmten Webseiten eine neue .htaccess-Datei hochlädt (weil der Inhalt dort nicht sehr komplex ist) und ein weiteres Skript, das in die bestehende .htaccess-Datei meine aktuelle IP-Adresse einfügt bzw aktualisiert.
Skript 1: Frische .htaccess generieren und per sftp hochladen
Verwende ich für Seiten, wo nur der deny-Part mit nen paar festen IP-Adressen und meiner dynamischen IP-Adresse vorkommt.Ich verwende zu Hause einen dynDNS-Dienst, so dass ich meine eigene IP über einen Ping an hereami.apfelz.ned herausfinden kann.
my $ping = `ping -c 1 hereami.apfelz.ned`;
if ($ping =~ m/hereami\.apfelz\.ned \((\d+\.\d+\.\d+\.\d+)\)/) {
my $ip = $1;
# .htaccess erstellen
# Mit zwei vorgegebenen IP-Adressen und meiner dynamischen
open(my $fh, '>', "/tmp/.htaccess") or die "Could not open file '$filename' $!";
print $fh <<"EOT";
Order Deny,Allow
Deny from all
Allow from $ip
Allow from 198.141.12.11
Allow from 198.141.12.12
EOT
close $fh;
# Per sftp/scp auf zwei verschiedene Webserver laden
`sshpass -p "sftppasswort1" scp /tmp/.htaccess sftpuser1\@webserver1.com:/var/www/html/phpMyAdmin/`;
`sshpass -p "sftppasswort2" scp /tmp/.htaccess sftpuser2\@webserver2.com:/var/www/html/intern/`;
# sftp-Version (siehe Artikelende)
#`echo 'put /tmp/.htaccess /var/www/html/phpMyAdmin/.htaccess' | sshpass -p "sftppasswort1" sftp sftpuser1\@webserver1.com`;
#`echo 'put /tmp/.htaccess /var/www/html/intern/.htaccess' | sshpass -p "sftppasswort2" sftp sftpuser2\@webserver2.com`;
}
Skript 2: .htaccess auf Webserver aktualisieren
Bei .htaccess-Dateien wo noch ein bisschen mehr drinnen steht und vor allem auch auf jeder Website etwas anderes, ersetze ich nur meine aktuelle IP.Dafür muss aber in der Datei eine Zeile stehen, die ich identifizieren kann und nach der ich dann meine aktuelle IP-Adresse einfüge.
Mein Skript geht davon aus, dass es in der .htaccess eine Zeile mit dem Inhalt # NEXT_LINE_IS_MY_IP gibt. Die nächste Zeile wird dann entfernt und mit meiner aktuellen IP ersetzt.
deny from all
Allow from 198.141.12.11
Allow from 198.141.12.12
# NEXT_LINE_IS_MY_IP
allow from 88.60.212.13
# Rest der .htaccess
#...
Ich verwende zu Hause einen dynDNS-Dienst, so dass ich meine eigene IP über einen Ping an hereami.apfelz.ned herausfinden kann.
my $ping = `ping -c 1 hereami.apfelz.ned`;
if ($ping =~ m/hereami\.apfelz\.ned \((\d+\.\d+\.\d+\.\d+)\)/) {
my $ip = $1;
# Aktuelle .htaccess von zwei verschiedenen Webservern herunterladen
`sshpass -p "sftppasswort1" scp sftpuser1\@webserver1.com:/var/www/html/intern/.htaccess /tmp/.htaccess1.bak`;
`sshpass -p "sftppasswort2" scp sftpuser2\@webserver2.com:/var/www/html/phpMyAdmin/.htaccess /tmp/.htaccess2.bak`;
# sftp-Version (siehe Artikelende)
#`sshpass -p "sftppasswort1" sftp sftpuser1\@webserver1.com:/var/www/html/intern/.htaccess /tmp/.htaccess1.bak`;
#`sshpass -p "sftppasswort2" sftp sftpuser2\@webserver2.com:/var/www/html/phpMyAdmin/.htaccess /tmp/.htaccess2.bak`;
# Zeile nach '# NEXT_LINE_IS_MY_IP' jeweils ändern
# und wieder auf den jeweiligen Webserver hochladen
if (-e '/tmp/.htaccess1.bak') {
`sed -e '/# NEXT_LINE_IS_MY_IP/ {' -e 'n; s/.*/allow from $ip/' -e '}' /tmp/.htaccess1.bak > /tmp/.htaccess1`;
`sshpass -p "sftppasswort1" scp /tmp/.htaccess1 sftpuser1\@webserver1.com:/var/www/html/intern/.htaccess`;
# sftp-Version (siehe Artikelende)
#`echo 'put /tmp/.htaccess1 /var/www/html/intern/.htaccess' | sshpass -p "sftppasswort1" sftp sftpuser1\@webserver1.com`;
`rm /tmp/.htaccess1`;
}
if (-e '/tmp/.htaccess2.bak') {
`sed -e '/# NEXT_LINE_IS_MY_IP/ {' -e 'n; s/.*/allow from $ip/' -e '}' /tmp/.htaccess2.bak > /tmp/.htaccess2`;
`sshpass -p "sftppasswort2" scp /tmp/.htaccess2 sftpuser2\@webserver2.com:/var/www/html/phpMyAdmin/.htaccess`;
# sftp-Version (siehe Artikelende)
#`echo 'put /tmp/.htaccess2 /var/www/html/phpMyAdmin/.htaccess' | sshpass -p "sftppasswort2" sftp sftpuser2\@webserver2.com`;
`rm /tmp/.htaccess2`;
}
}
scp kann nicht verwendet werden
Unter umständen bekommt man eine Fehlermeldung
Allowed commands: sftp
Die sftp-Version ohne scp habe ich in den beiden Skripten auskommentiert hinzugefügt.
Erstellt am: 25.01.2023 | .Kommentieren |