Neglector Tweet. Un petit script PHP pour supprimer tweets vieux de Twitter
Il automatise le processus de suppression Neglector Tweet tweets vieux de votre compte Twitter. Fondamentalement, il fournit à "expirer" fonctionnalité pour vos tweets. Il est utile pour les personnes qui veulent utiliser Twitter, mais ne veulent pas d'une histoire de leurs tweets pour rester en ligne pendant des décennies.
HISTOIRE: 20 novembre 2011 | Version 0.1 Publication initiale. Tweets Supprime 28 décembre 2011 | Version 0.2 Petites corrections de bugs. Maintenant retweets supprime ainsi. BUGS CONNUS: - Ne fonctionne pas si vous Tweet plus de 1000 tweets dans les délais que vous prévoyez de garder tweets. Idem pour retweets (100 permis). Ce sont des lacunes de l'API de Twitter GET J'utilise ATM. Peut-être que je vais résoudre ce problème avec la prochaine version
Tweet Neglector utilise l'API de Twitter pour supprimer tous vos tweets qui ont été posté avant un nombre donné de jours à partir de maintenant. De cette façon, vous pouvez configurer le script pour supprimer tous les tweets qui sont plus d'une semaine ou un mois par exemple. Le script doit être lancé automatiquement à partir d'une tâche cron ou un autre mécanisme d'automatisation sur une base régulière.
Ce script ne peut pas vous protéger contre des archives Tweet externes. Donc, il ne sait pas si les tweets supprimés sont archivés par Twitter tranquillement (je parie qu'ils sont). Alors (comme toujours) pense avant tweeting.
Tweet Neglector utilise PHP comme langage de script et les faisceaux de la bibliothèque à partir de Twitter OAuth Matt Harris pour l'accès API.
Installation
- PHP5 nécessaire pour tmhOAuth - Décompressez l'archive dans un répertoire de votre choix. - Inscrivez-vous vos clés API Twitter au https://dev.twitter.com/apps - Modifier la configuration du script pour répondre à vos besoins: # twitter clés API, des jetons et des secrets # obtenir ces clés à -> https:// dev.twitter.com / apps $ consumer_key = "votre clé ICI"; $ consumer_secret = "votre clé ICI"; $ access_token = "votre clé ICI"; $ access_token_secret = "votre clé ICI"; # Nombre de tweets pour travailler sur par session $ tweets_per_session = 1000; # utilisateur de Twitter $ twitter_username = "VOTRE NOM D'UTILISATEUR ICI"; # Jours de garder tweets keep_days $ = 30; - Exécuter le script manuellement à partir du navigateur, console ou automatiquement par cron / usr / bin / php / var / www / tweetneglector / tweetneglector.php
Tweet Neglector 0,2 Télécharger ici
HOWTO: rapide et sale serveur DHCP et DNS cache avec dnsmasq sur Ubuntu
DHCP sur le LAN est pratique. Vous n'avez plus à gérer la configuration réseau de chaque ordinateur dans le réseau pour les clients eux-mêmes, mais tout a un serveur de localisation belle central. Enregistrer en mettant en cache les clients DNS un peu de temps doit être faite lors de la résolution des noms d'hôte, puisque les requêtes peuvent être appliquées à des noms d'hôtes connus à partir du cache local plutôt que sur un serveur sur Internet.
Un petit serveur DHCP est configuré avec dnsmasq très rapidement.
# Installez dnsmasq apt-get install dnsmasq
La configuration se fait au centre de la dnsmasq.conf fichier / etc /. On ne devrait pas partir avant que les options de configuration dans le fichier serrées dissuadé. À peu près tout est juste un exemple et est par défaut commenté. Une configuration très court est déjà suffisant pour une configuration de travail:
DHCP
# DHCP masque # Clients ont reçu 255.255.255.0 comme masque de réseau dhcp-option = 1,255.255.255.0 Passerelle par défaut # Les clients # reçu comme une passerelle 192.168.1.251 dhcp-option = 3,192.168.1.251 # Dns # Les clients obtiennent le serveur 192.168.1.4 nom # Si vous souhaitez utiliser Dnsmasq comme cache DNS, cela devrait être le Soyez # IP du serveur qui exécute le dnsmasq dhcp-option = 6,192.168.1.4 Hosts # pour la même adresse IP attribuée par le MAC: # Cela devient l'hôte avec l'adresse MAC 00:11:22:33:44:55 IP 192,168.1.1 pendant 12 heures dhcp-host = 00:11:22:33:44:55, hall d'entrée, 192.168.1.1,12 h dhcp-host = 00:11:22:33:44:66, Lobby2, 192.168.1.2,12 h # Tous les ordinateurs qui ne peuvent pas être identifiés par MAC recevoir IPs # De la piscine de 192.168.1.120 à 150 dhcp-range = 192.168.1.120,192.168.1.150,12 h
DNS
La fonctionnalité DNS de dnsmasq ne nécessite aucune configuration.
dnsmasq est préoccupé par son serveur de nom du fichier / etc / resolv.conf. Cela devrait être
serveur de noms connus du fournisseur sont enregistrées et peut-être même comme solution de repli
8.8.8.8 pour les serveurs DNS de Google.
Pour plus de noms d'hôtes qui devraient s'appliquer dans le réseau local peut, dnsmasq dans le fichier
Soyez / etc / hosts sont fait connaître. Voici tous les ordinateurs enregistrés les noms d'hôtes
le réseau local.
Pièges
dnsmasq a besoin de relire sa configuration fichiers Konfigänderungen
/ Etc / init.d / dnsmasq restart
Si les clients n'ont pas un bail de l'ancien serveur DHCP, vous pouvez manuellement l'amener à lancer une nouvelle demande DHCP.
# Linux dhclient eth0 # Windows ipconfig / release ipconfig / renew
D'urgence doivent être prudents, à ce jour pour une utilisation partout serveur DHCP (généralement le routeur à l'Internet) pour le désactiver. 2 serveurs DHCP sur le LAN peut générer beaucoup de chaos.
Sans fil pour Eee 1000H rt2860 dans Ubuntu
Avec une mise à jour dernièrement le sans fil était sur mes Eee PC 1000H avec assez instable Ubuntu. Déconnexions permanent, pas de wifi après mise en veille, connexion lente, etc
Je ne suis pas tout à fait sûr de ce qu'il est, sans doute le pilote a rt2860 obtenir toute mise à jour avec un bug.
Heureusement, le problème peut être résolu en installant le pilote Windows avec ndiswrapper.
Ce n'est qu'une traduction légèrement raccourcie allemande du modèle original en anglais de nevdelap du forum Ubuntu. (Merci)
D'abord les pilotes Windows sucer et unpack (comm_driver_gigabyte_mimobility_v.1.3.1.0.15.zip)
Deuxième Liste noire pilote Linux
# / Etc / modprobe.d / blacklist.conf liste noire rt2x00lib liste noire rt2x00pci liste noire rt2x00usb liste noire rt2400pci liste noire rt2500pci liste noire rt2500usb liste noire rt2800lib liste noire rt2800pci liste noire rt2800usb liste noire rt61pci liste noire rt73usb liste noire RT2600 liste noire rt2860 # Asus 1000H possède un rt2860. Pour être chargé par ndiswrapper. liste noire b43 liste noire b43 liste noire ssb liste noire r8192s_usb
Troisième Installez le pilote Windows avec ndisgtk drivers/GN-WI30N_WP30N_WS30N_WS30HN_WS31N/WINXP2k
ndisgtk sudo
4e Configuration grub
# / Etc / default / grub GRUB_CMDLINE_LINUX_DEFAULT = "pciehp.pciehp_force pciehp.pciehp_poll = 1 = 1 quiet splash"
update-grub2 sudo
5e Règle gestion de l'alimentation de créer
# / Etc / pm / sleep.d / ndiswrapper # / Bin / bash case "$ 1" dans hibernate | suspendre) sudo ndiswrapper rmmod ;; dégel | CV) modprobe ndiswrapper sudo ;; *) ;; esac exit $?
chmod + x / etc / pm / sleep.d / ndiswrapper
6e Redémarrez
Ensuite, le fil passe très vite et stable.
PHP Cheat Sheet
Ici je collectionne utiles extraits de code PHP
Multithreading à l'aide de pseudo-écran
# / Usr/bin/php5 pour! ($ I = 1; $ i <50; $ i + +) {echo "à partir de $ i \ n"; fil exec ("screen-d-m / usr/bin/php5 /. . php ");} Le serveur MySQL a disparu dans les scripts shell de longue durée PHP
# / Etc/php5/cli/php.ini = Sur mysql.allow_persistent mysql.max_persistent = -1 mysql.max_links = -1 mysql.connect_timeout = -1
XS bâton UMTS W14 avec Ubuntu
Le XS Memory Stick W14 zickte sur Ubuntu un peu partout. Parfois, le gestionnaire de réseau le reconnaître comme un modem USB, mais toujours il ne pouvait pas se connecter. Après un échec quelques délires, je suis sur le script de Sakis3G rencontré, qui promet de produire presque tous les lecteurs peuvent se connecter à. Et en effet, il a Sakis3G travaux immédiatement. Recommandé, et probablement pour d'autres lecteurs.
PLAQUE XS Memory Stick W14 P / N 3000.000056.00 www.4g-systems.com
# Lsusb Bus 002 Device 006: ID 1c9e: 9603
# / Var / log / syslog lorsque vous branchez 19 juin 20:41:04 noyau case: [74186.796148] usb 2-2: nouvelle pleine vitesse périphérique USB en utilisant uhci_hcd et adresse 7 19 juin 20:41:04 noyau case: [74186.946031] scsi11: usb-storage 2-2:1.0 19 juin 20:41:05 boîte de usb_modeswitch: commutation 1c9e: f000 (modem USB: modem USB) 19 juin 20:41:06 noyau case: [74189.293850] usb 2-2: USB disconnect, adresse 7 19 juin 20:41:07 noyau case: [74189.660069] usb 2-2: nouvelle pleine vitesse périphérique USB en utilisant uhci_hcd et adresse 8 19 juin 20:41:07 noyau case: [74189.819348] option 2-2:1.0: modem GSM (1 port) convertisseur détecté 19 juin 20:41:07 noyau case: [74189.819577] usb 2-2: modem GSM (1 port) convertisseur maintenant attaché à ttyUSB0 19 juin 20:41:07 noyau case: [74189.819802] option 2-2:1.1: modem GSM (1 port) convertisseur détecté 19 juin 20:41:07 noyau case: [74189.819950] usb 2-2: modem GSM (1 port) convertisseur maintenant attaché à ttyUSB1 19 juin 20:41:07 noyau case: [74189.820220] option 2-2:1.2: modem GSM (1 port) convertisseur détecté 19 juin 20:41:07 noyau case: [74189.820395] usb 2-2: modem GSM (1 port) convertisseur maintenant attaché à ttyUSB2 19 juin 20:41:07 noyau case: [74189.821414] scsi12: usb-storage 2-2:1.3 19 juin 20:41:07 boîte de modem-manager [10 480]:(TtyUSB1) l'ouverture du port série .. 19 juin 20:41:07 boîte de modem-manager [10 480]: (TtyUSB0) l'ouverture du port série .. 19 juin 20:41:07 boîte de modem-manager [10 480]: (TtyUSB2) l'ouverture du port série .. 19 juin 20:41:08 boîte de usb_modeswitch: mise à 1c9e: 9603 (modem USB: Configuration du modem) 19 juin 20:41:08 noyau case: [74190.823474] scsi 12:0:0:0: Direct-Access 02:31 USBModem disque PQ: 0 ANSI: 2 19 juin 20:41:08 noyau case: [74190.825402] sd 12:0:0:0: Attached SCSI générique sg3 type 0 19 juin 20:41:08 noyau case: [74190.833436] sd 12:0:0:0: [sdc] Attached SCSI disque amovible
12 mesures pour un système Linux Apache MySQL PHP LAMP Web racine du serveur sécuriser
La fréquence de piratage a augmenté de façon spectaculaire ces derniers mois. Surtout beaucoup de données à être captés par des hacks sur les serveurs web. Même le Sony PSN bidouille a profité d'une vulnérabilité non corrigée dans le serveur Web Apache. Donc ici, je suis mesures de sensibilisation que le serveur peut posséder un peu plus sûr contre les attaques provenant de l'extérieur. Bien sûr, ce n'est pas non plus fournir une protection à 100%, mais il est préférable de faire les méchants du jeu un peu plus difficile. Certaines de ces mesures exigent seulement une installation minimale et la maintenance. D'autres ont besoin de beaucoup de temps et des connaissances en PHP à attraper. Vous devez toujours faire attention au rapport coût-bénéfice dans la sélection des mesures de sécurité. Il ne fait aucun sens pour protéger un petit site privé comme la Federal Reserve Bank. Cependant, peu de changements spécifiques dans le système possède déjà un grand signifie plus de sécurité. Et que vous devez traiter, même avant qu'il ne soit trop tard ....
Tous les trucs et Codesnips référence à une boîte actuel de Debian.
Première Le pare-feu - Une fois que tout interdire
La plupart des distributions Linux dans leurs installations par défaut d'ouvrir les ports à l'extérieur qui ne sont pas absolument nécessaire. Cette situation peut changer rapidement, cependant, même lorsque le serveur
jouant autour et à essayer des choses. Soudain, même le serveur de médias est à l'écoute sur Internet ou la base de données
accepte les connexions à partir d'Internet. Par conséquent, il n'est pas faux de se discipliner et mettre sur un pare-feu très restrictif qui interdit fondamentalement fois toutes les connexions de l'extérieur et permet seulement (auto-) composés sélectionnés. Heureusement, cela se fait rapidement avec iptables. De cette façon, on ne peut plus fournir des services à rendre accessible au monde qui n'ont pas d'affaires là-bas. Malheureusement, vous payez un peu de confort - le pare-feu doit être ajustée à chaque fois que vous souhaitez offrir de nouveaux services. Néanmoins, l'effort est faible et les avantages grande.
# / Bin / bash # Supprimer les tables existantes iptables-F # Interdire toutes les connexions entrantes INPUT DROP iptables-P iptables-P FORWARD DROP # Autoriser tous les appels iptables-P OUTPUT ACCEPT # Autoriser SSH iptables-A INPUT-j ACCEPT-p tcp - dport 22 # Autoriser HTTP iptables-A INPUT-j ACCEPT-p tcp - dport 80 # En outre service (UDP) de permettre, par exemple le serveur de jeu, iptables-A INPUT-j ACCEPT-p tcp - dport 4534 # Autorise tout de localhost. (Pour permettre l'accès sans entrave au serveur lui-même, ses services, # Par exemple, PHP sur la base de données locale iptables-A INPUT-s 127.0.0.1-j ACCEPT # Connexions déjà établies seront acceptées dans chaque port # (Nécessaire pour certains démons) iptables-A INPUT-m état - state ESTABLISHED, RELATED-j ACCEPT
Cette épine dorsale peu que nous pouvons tout simplement continuer à élargir et d'ajouter leurs propres services. Lorsque vous travaillez sur le pare-feu, vous devez toujours prendre des dispositions pour le cas qui bloque par vous-même. Surtout pour les serveurs distants auxquels vous n'avez pas d'accès physique, il est très ennuyeux de perdre par un pare-feu n'a pas gouverner leur propre accès. Afin d'éviter ce problème de la route, vous pouvez quitter le travail pour commencer à le pare-feu temporairement juste une tâche cron qui réinitialise le pare-feu toutes les quelques minutes ou le redémarrage du serveur. Sont les règles tard testé et aimé, la tâche cron sera désactivé et les nouvelles règles restent actives en permanence.
Pour savoir quels services sont juste autour de l'écoute de votre propre serveur, vous pouvez utiliser la commande netstat:
# Pour les sockets TCP: netstat-LPN | grep tcp # De même pour le protocole UDP: netstat-LPN | grep udp
Pour tester si le pare-feu fonctionne vraiment, vous pouvez scanner les ports de votre propre serveur depuis un autre ordinateur. Tout élaboré et qu'il devrait se traduire uniquement dans les ports qui sont ouverts même:
# Pour TCP: nmap-p1-65 535 meinserver.de # Pour UDP: nmap-sU-p1-65 535 meinserver.de
Deuxième SSH connexions interdiction
Sur son serveur propre racine que vous avez plein accès SSH. C'est assez pratique, comme vous pouvez partir de n'importe quel client SSH pour les temps de serveur juste pour y travailler. L'inconvénient de cette est que le cours peut quiconque est malheureusement quelque peu repris leurs propres mots de passe. Il est beaucoup plus sûr pour permettre les connexions SSH uniquement avec un fichier de clé valide. Par conséquent, la clé publique du client au serveur et copiés connexions interactives sont désactivés en entrant un mot de passe.
# Sur le client, créer une clé publique # Si cela est spécifié lors de la génération de mot de passe, il faut # Fichier journal plus tard, la clé et le mot de passe. Autrement # Nécessaire seulement la clé. ssh-keygen-t rsa # Copiez la clé générée par le serveur ssh-copy-id-i ~ /. ssh / id_rsa.pub root@meinserver.de # Maintenant, ajustez sshd_config sur le serveur / etc / ssh / . . PasswordAuthentication no . . # Puis recommencez RearBBpos / Etc / init.d / ssh restart
Même ici, il faut prendre des précautions pour ne pas exclure, même si quelque chose ne fonctionne pas.
La clé publique sur une clé USB avec le mot de passe correspondant à votre tête, il est beaucoup plus difficile pour les méchants pour obtenir un shell.
Troisième SSH bruteforcing éviter denyhosts
Si des conseils n'est pas pratique 2 et vous n'avez pas renoncer à la commodité du mot de passe basés sur les connexions souhaitez, vous pouvez au moins éviter les taux de mot de passe automatisé des attaquants sur le serveur. Un grand nombre de robots sur Internet toute la journée à la recherche de ne rien faire de plus que de serveurs SSH et essayer dans vos mots de passe différents. Avec un mot de passe suffisamment sûr n'est pas un gros problème, mais il ya une meilleure sensation, même pas si c'est possible. En outre, il protège également ses utilisateurs, si il ya sur les comptes de serveur et l'utilisateur. Ici, vous ne pouvez pas compter sur les utilisateurs d'utiliser des mots de passe sécurisés. denyhosts constamment revus et les connexions ssh sur l'utilisateur verrouille pendant un certain temps, qui sont entrées dans leur mot de passe erroné répétée. Le IP des utilisateurs temporairement dans / etc / hosts.deny, de sorte qu'ils n'ont plus accès est possible. Cette SSH bruteforcing à une tâche très longue et pas très prometteur.
apt-get install denyhosts Denyhosts # fonctionne juste après l'installation. Il peut être # Dans l'air du fichier / etc / denyhosts.conf amende
4e Les listes noires utilisées pour bloquer les adresses IP des problèmes connus
Dans les listes noires Internet divers sont maintenus, ce qui liste un grand nombre de serveurs criminelles / hachée / spam / frauduleuse. Ces listes IP peuvent être saisies directement dans le pare-feu, de sorte qu'à partir de ce qu'on appelle ne pas les ordinateurs de confiance ne peut pas se connecter du tout à son propre serveur. Ainsi, vous pouvez réduire la quantité de spam sur leur propre serveur de façon spectaculaire et l'un ou l'autre script kiddie lock-out, parce que son mandataire Russie cesse soudainement de fonctionner. Comment faire que j'ai été dans un autre article de blog décrit l'exemple de la liste noire des Infiltrated.net.
5e Ne pas utiliser FTP pour travailler sur le serveur
FTP est une relique des temps meilleurs où l'Internet était un petit village encore confiance. De nombreux administrateurs de sites Web encore utiliser FTP pour transférer des fichiers vers le serveur ou pour travailler sur leur propre site web. Malheureusement, cela est très incertain, puisque FTP transmet toutes les données sans garantie. Les mots de passe et les données peuvent être lues sans aucun problème à chaque saut entre les serveurs et les clients. Beaucoup plus sûr d'aller avec sshfs. Permet de monter un répertoire via ssh sur le système sur le serveur distant de fichiers local. Vous pouvez alors travailler sur le serveur comme s'il était sur l'ordinateur local. Tous les accès aux fichiers pour les fichiers sur le serveur sont complètement transparents, de sorte que vous pouvez ouvrir avec le programme local graphique pour modifier une image directement sur le serveur, puis enregistrez. Plus de confort et de sécurité sans trop d'effort.
# Installez sshfs apt-get install sshfs # Créer le point de montage sur le système de fichiers local mkdir / media / monserveur # Serveur pour le support du système de fichiers local sshfs www-data@mein-server.de :/ var / www / media / monserveur # Maintenant, le répertoire est / var / www sur mon serveur local sous / media / monserveur disponibles
6e Installer mises à jour
Un système super sécurisé sera pas utile si le système lui-même est imparfaite et une vulnérabilité connue peut être exploitée. Dans la plupart des cas, ces vulnérabilités fermé rapidement, mais souvent oubliée admin mises à jour régulières du système à faire. Que vous devez activer les mises à jour automatiques sur des serveurs Linux ou non est une question controversée. Certains ne ferait jamais, parce qu'il naturellement avec beaucoup de malchance peut-être que les mises à jour de rendre le système inutilisable. Ce qui m'est arrivé dans plus de 10 années de travail sur les systèmes Debian, mais jamais et je comprends les avantages de mises à jour en temps opportun et régulier, beaucoup plus élevé que le risque qui en résulte.
# Cette ligne dans le fichier / etc / crontab, met à jour l'horloge système tous les jours à 6 heures du matin 0 6 *** root apt-get update && apt-get-y de mise à niveau
Ces méthode rapide et sale a fonctionné pour moi jusqu'à présent toujours bonne. J'ai lu récemment que dans le référentiel Debian et le paquet unattended-upgrades existe qui résout le problème sans doute plus élégant, mais je n'ai pas été testé.
Même avec ces mises à jour système vollautomtischen il n'est pas complètement décroché. Si une mise à jour du noyau a été livré, vous devez démarrer le système encore une fois à la main, sinon les modifications ne seront pas actifs.
Si nous utilisons un tiers du code PHP sur le serveur, comme un CMS open source ou d'un forum, il est bien sûr absolument nécessaire et ce code avec les nouvelles versions à jour. Comme Debian ne pas mettre à jour ses changements à ces demandes dans les règles régissant ce travail manuel est nécessaire. La meilleure façon de lire vos listes de diffusion avec les produits correspondants dans le but d'être toujours à jour.
7e PHP open_basedir avec emprisonner
Hacks Beaucoup repose sur le fait qu'une vulnérabilité dans le code PHP est utilisé pour accéder à des fichiers dans l'accès au système de fichiers qui n'appartiennent pas au site, mais le système lui-même est pourquoi vous devez enfermer PHP afin qu'il en lecture seule dans les annuaires spécifiquement désignés et à écrire autorisé. Pour ce faire, le fichier php.ini l'option de configuration open_basedir. PHP a la possibilité de mettre l'accès n'est autorisé dans les répertoires là-bas. Les fichiers tels que / etc / passwd sont hors de portée. Hébergement des sites Web multiples sur un seul serveur, vous devez définir open_basedir dans chaque configuration d'hôte virtuel de chaque côté.
Php.ini # global par le biais: # / Etc/php5/apache2/php.ini open_basedir = / var / www / :/ tmp / # Par site dans la configuration VirtualHost: php_value open_basedir / var / www / site / :/ tmp /
Il est important d'examiner si tous les sites ont été ajoutés aux scripts ont généralement besoin d'avoir accès, sinon il se peut que vous soyez fonctions handicapés et légitime de l'application PHP.
8e Créer vos propres sites Web pour les utilisateurs de MySQL
Utilisez votre propre PHP-MySQL application, vous devez absolument créer pour Apllikation MySQL d'utilisateur et en aucun cas utiliser les requêtes MySQL de l'utilisateur root. Vous devez également restreindre les droits de l'utilisateur jusqu'à ce que les opérations en réalité que sont autorisés, ce qui nécessite le script PHP. CREATE TABLE et DROP TABLE sont aussi communs dans les injections SQL et utilisé dans la plupart des applications PHP jamais nécessaires. Il héberge plusieurs sites Web avec plusieurs bases de données sur un serveur, vous devez créer vos propres bases de données pour tous les utilisateurs. Ainsi, après une attaque réussie, un attaquant a seulement accès à l'une des bases de données et non pas directement à tous. Wenn man nicht die Kommandozeile bemühen möchte, um die MySQL-Useraccounts zu verwalten, funktioniert das Usermanagement auch recht einfach mit PHPmyAdmin unter der Registerkarte "Rechte".
9e PHP Fehlermeldungen abschalten
PHP-Fehlermeldungen können einem Angreifer viel über den eigenen Server verraten: Verzeichnisstrukturen, Datenbankstrukturen, Konfigurationsfehler, etc. Außerdem sehen sie für den Benutzer sehr unprofessionell aus. Aus diesem Grund sollte man sie auf einem Live-Webserver grundsätzlich abschalten, da man sie ohnehin weiterhin in den Logs sehen kann.
# Global per php.ini: # /etc/php5/apache2/php.ini display_errors = Off # Per Site in der VirtualHost Config: php_flag display_errors Off # Fehlermeldungen trotzdem lesen: cat /var/log/apache2/error.log | grep PHP
10e Angriffsfläche für SQL-Injections einschränken mit modSecurity
SQL-injections sind die wohl am häufigsten genutzte Angriffsmethode auf Webserver. Der Zugriff erfolgt direkt über die Webapplikation und es genügt ein Browser um sie durchzuführen. Dabei werden über vom User übermittelte Variablen geschickt SQL-Abfragen eingebaut, die mit den Rechten des Datenbankbenutzers alles an der eigenen Datenbank nach belieben auslesen, löschen oder bearbeiten können. Ein wirklicher echter Schutz gegen SQL-Injections besteht nur, wenn der PHP-Code der Site im Hinblick auf diese Angriffe geschrieben wurde. Jede Variable aus Benutzereingaben, die in eine SQL-Abfrage gelangen könnte, muss geprüft und escaped werden. PHP bietet dafür die Funktion real_mysql_escape_string().
Ist man nicht sicher, ob der Code sauber ist, kann mod_security für den Apache helfen eine große Menge dieser Angriffe trotzdem abzuwehren. mod_security überprüft ständig alle Requests an den Webserver und reagiert auf vorgefertigte Muster mit denen viele SQL-Injection-Angriffe abgewehrt werden können. Leider funktioniert auch mod_security nur gut mit manuellem Aufwand. Oft blockt mod_security nach einer frischen Installation auch gewünschte (normale) Funktionen des eigenen PHP-Codes, so dass einem nichts anderes übrig bleibt, als die komplette Applikation nach der Installation einmal durchzutesten. Nur so findet man heraus, ob mod_security nicht eventuell auch gewünscht Funktionen blockt. Ist das der Fall, muss die Filterliste angepasst werden, so dass die false-positives verschwinden.
Die Konfiguration von mod_security ist etwas komplizierter und würde den Umfang dieses Artikels sprengen, es gibt aber massenweise gute Tutorials zu mod_security im Internet.
11 Ausweiskontrolle - Der Apache sagt nicht mehr, wer er ist
Dies ist keine wirklich wirkungsvolle Methode gegen einen Hack, sie macht es automatisierten Skripten, die nach Server-Versionen suchen aber etwas schwerer. Normalerweise zeigt der Apache auf Seiten mit Fehlermeldungen (zB 404 Not Found) seine Serversignatur.
Apache/2.2.16 (Debian) Server at www.daniel-ritter.de Port 80
So erhalten potentielle Angreifer zumindest schon einmal Informationen über den eigesetzten Webserver und den Versionsstand. Die Serversignatur ist schnell ausgeschaltet:
#/etc/apache2/conf.d/security ServerSignature Off
12 Nicht benutze Apache-Module deaktivieren
Per default hat der Apache einige Module geladen, die fast nie benötigt werden. Unter Debian findet man die geladenen Module
als Softlinks in /etc/apache2/mods-enabled.
Fast immer entfernt werden können:
mod_cgi
Dient dem ausführen von CGI-Skripten. Diese Technik stammt noch aus den Urzeiten des Web und war der Vorvater der modernen Skriptsprachen um dynamische Webseiten zu ermöglichen. mod_cgi ist auf 99% der PHP-Websites unnötig und bei einer fehlerhaften Apache-Config eine potentielle Sicherheitslücke
a2dismod cgi
mod_status
Ermöglicht es Browsern Statusinformationen über den Apache auszulesen. Es wird so gut wie nie für "normale" Sites genutzt, bietet Angreifern aber Statusinformationen über den Apache.
a2dismod status
mod_autoindex
mod_autoindex sorgt dafür, dass Verzeichnisse auf dem Webserver aufgelistet werden können, wenn es keine gültige Index-Seite in dem entsprechenden Verzeichnis gibt. Falls diese Funktionalität nicht erwünscht ist, sollte man sie abschalten, da durch sie ganze Verzeichnisbäume auf dem Webserver nach aussen sichtbar werden können.
a2dismod autoindex
Linux Server mit der Scam/Spam/Crime Blacklist von Infiltrated.net absichern
Im Internet gibt es viele böse Buben: Scammer, Hacker, Viagrabuden, Scriptkiddies, etc.
Infiltrated.net pflegt eine recht umfangreiche Liste auffällig gewordener Server unter http://www.infiltrated.net/blacklisted .
Wenn man Zugriff auf seinen Server oder auch sein Heimnetz von diesen IP's unterbindet, hat man bereits sehr viele Russen Proxies, Spammer und anderes Gesindel ausgesperrt.
Das folgende kleine Script saugt sich automatisch die aktuelle Liste und trägt die Hosts in die Firewall ein.
Mit einem Cronjob regelmässig gestartet, ermöglicht es ein Quentchen mehr Sicherheit für die eigenen Dienste.
#!/usr/bin/php
<?
# Zuerst bereits bestehende (eigene) Firewallrules ausführen
exec("/root/scripts/meine_standard_firewall_rules");
# Blacklist saugen
exec("wget -O /tmp/infiltrated_blacklist http://www.infiltrated.net/blacklisted");
$list = file("/tmp/infiltrated_blacklist");
$i = 1;
# Ein bisschen auseinanderschnibbeln und ab in Iptables
foreach ($list as $line)
{
$line = trim($line);
$line = str_replace("\t"," ",$line);
$line = explode(" ",$line);
$line = $line[0];
$firstchar = substr($line,0,1);
if (!is_numeric($firstchar))continue;
exec ("iptables -I INPUT -s $line -j DROP");
$i++;
}
echo "done. $i rules set.";
?>
USB Spickzettel: So sehen USB Stecker aus
Im Bild zu sehen von links nach rechts: Micro USB "B" - Mini USB "B" - Mini USB "B" 5 Pin - USB "A" weiblich - USB "A" männlich - USB "B" männlich
Out of the box mit Ubuntu – LogiLink WL0049A Wireless N USB Wifi WLAN Stick
Es ist mal wieder an der Zeit für Out-Of-The-Box Hardware für Ubuntu. Der Low-Budget USB WLAN-Stick von LogiLink funktioniert sofort ohne Konfiguration und Treiberinstallation unter einem aktuellen Ubuntu 10.10. Nach dem Einstecken ist im Netzwerkmanager sofort die Liste der verfügbaren WLANs verfügbar. Nicht schlecht für einen absoluten Low-Budget Stick (ca. 10 Euro). Mit den teureren von Netgear und Konsorten hat man leider einige Probleme mehr. Lediglich die Empfangsstärke ist nicht berauschend. Falls sich der Accesspoint oder Router im selben Raum befindet, hat man jedoch keine Probleme.
So meldet sich der Stick nach dem Einstecken:
Jan 27 15:15:48 box kernel: [50425.764049] usb 2-1: new high speed USB device using ehci_hcd and address 7 Jan 27 15:15:48 box kernel: [50425.916061] === pAd = f89cc000, size = 472668 === Jan 27 15:15:48 box kernel: [50425.916063] <-- RTMPAllocAdapterBlock, Status=0 Jan 27 15:15:48 box kernel: [50426.212122] <-- RTMPAllocTxRxRingMemory, Status=0 Jan 27 15:15:48 box kernel: [50426.214376] -->RTUSBVenderReset Jan 27 15:15:48 box kernel: [50426.214495] <--RTUSBVenderReset Jan 27 15:15:48 box kernel: [50426.495844] 1. Phy Mode = 0 Jan 27 15:15:48 box kernel: [50426.495847] 2. Phy Mode = 0 Jan 27 15:15:48 box kernel: [50426.495849] NVM is Efuse and its size =2d[2d0-2fc] Jan 27 15:15:48 box kernel: [50426.556586] RTMPSetPhyMode: channel is out of range, use first channel=1 Jan 27 15:15:48 box kernel: [50426.573077] 3. Phy Mode = 0 Jan 27 15:15:48 box kernel: [50426.578953] MCS Set = 00 00 00 00 00 Jan 27 15:15:48 box kernel: [50426.638326] <==== rt28xx_init, Status=0 Jan 27 15:15:48 box kernel: [50426.639953] 0x1300 = 00073200 Jan 27 15:15:49 box kernel: [50426.924845] ---> RTMPFreeTxRxRingMemory Jan 27 15:15:49 box kernel: [50426.924866] <--- RTMPFreeTxRxRingMemory Jan 27 15:15:49 box kernel: [50427.195749] <-- RTMPAllocTxRxRingMemory, Status=0 Jan 27 15:15:49 box kernel: [50427.198006] -->RTUSBVenderReset Jan 27 15:15:49 box kernel: [50427.198133] <--RTUSBVenderReset Jan 27 15:15:49 box kernel: [50427.484608] 1. Phy Mode = 0 Jan 27 15:15:49 box kernel: [50427.484610] 2. Phy Mode = 0 Jan 27 15:15:49 box kernel: [50427.484612] NVM is Efuse and its size =2d[2d0-2fc] Jan 27 15:15:49 box kernel: [50427.557222] 3. Phy Mode = 0 Jan 27 15:15:49 box kernel: [50427.563097] MCS Set = 00 00 00 00 00 Jan 27 15:15:49 box kernel: [50427.625962] <==== rt28xx_init, Status=0 Jan 27 15:15:49 box kernel: [50427.627588] 0x1300 = 00073200 Jan 27 15:15:54 box kernel: [50432.648580] ===>rt_ioctl_giwscan. 3(3) BSS returned, data->length = 483 Jan 27 15:15:59 box kernel: [50437.679264] ===>rt_ioctl_giwscan. 2(2) BSS returned, data->length = 308 Jan 27 15:15:59 box kernel: [50437.679356] ==>rt_ioctl_siwfreq::SIOCSIWFREQ[cmd=0x8b04] (Channel=1)
Mehrere Videos synchron ferngesteuert übers Netzwerk starten mit VLC
Eine befreundete Designstudentin wollte für die Präsentation ihrer Diplomarbeit eine Videoinstallation aufbauen. Auf im Raum angeordneten Fernsehern sollten parallel 3 von ihr erstellte Filme laufen und gleichzeitig gestartet werden. Die 3 Filme sind so geschnitten, dass sie gemeinsam ein Gesamtkunstwerk (und hoffentlich eine gute Abschlussnote) ergeben. Ein Veranstaltungsunternehmen verlangte für den Aufbau einige 1000 Euro. Das überstieg das Budget meiner Bekannten leider um einige 1000 Euro, deshalb haben wir den Aufbau selbst mit Open Source Software zusammengefrickelt. 3 (Windows)-Notebooks wurden per HDMI an die jeweiligen Fernseher angeschlossen und über einen Switch vernetzt. Ein viertes (Linux)-Notebook diente als zentraler Steuerrechner. Der VLC Media-Player bietet neben einer hervorragenden Unterstützung fast aller Videoformate auch viele weitere nützliche Funktionen. In diesem Aufbau kam das Remote Control Interface des VLC zum Einsatz, das es ermöglicht, den Player übers Netzwerk oder das Internet komplett fernzusteuern.
Die Windows Rechner bekamen die IP's 192.168.0.1 bis 192.168.0.3. Der Linux-Steuer-Rechner die IP 192.168.0.100.
Das Fernsteuerungsskript ist angelehnt an das Tutorial von Markus Berg (vielen Dank).
#/bin/bash
ip[0]="192.168.0.1"
ip[1]="192.168.0.2"
ip[2]="192.168.0.3"
port=20000
function send_cmd {
for address in ${ip[@]}
faire
echo "$1" | nc $address $port &
fait
}
while ( [ 1 ] )
faire
effacer
echo "Video Command"
écho
echo " s | START"
echo " p | PAUSE/PLAY"
echo " z | ZURUECKSPULEN"
echo " zp | ZURUECKSPULEN + PAUSE"
echo " f | VOLLBILD AN/AUS"
echo " b | Beenden"
écho
écho
écho
echo -n "Kommando? "
read command
case "$command" in
s)
send_cmd play
;;
p)
send_cmd pause
;;
z)
send_cmd prev
;;
zp)
send_cmd prev
perl -e 'select(undef,undef,undef,.3)'
send_cmd pause
;;
f)
send_cmd fullscreen
;;
b)
exit
;;
esac
done;
Dieses Skript auf dem Steuerungsrechner ergibt dieses spartanische menü:
Video Command s | START p | PAUSE/PLAY z | ZURUECKSPULEN zp | ZURUECKSPULEN + PAUSE f | VOLLBILD AN/AUS b | Beenden Kommando?
Auf den Windowsrechner musste nun nur noch aus der Windows-Konsole heraus VLC im Remote Control Modus gestartet werden:
vlc --extraintf oldrc --rc-host 192.168.0.1:20000
Nun wurde noch das Video in die jeweilige VLC-Playlist eingefügt. Die Fernsteuerung war fertig.
Leider gab es (wie fast immer) einige Fallstricke. Bei unseren Tests zickte zunächst die Windows-Firewall herum. Für die Präsentation musste diese deaktiviert werden. Generell war Windows keine besonders gute Wahl für die Präsentation, da Update-Meldungen, Avira-Popups und andere Nervereien natürlich im Video ziemlich peinlich wirken. Die Windows-Rechner mussten ziemlich kastriert werden. Firewalls, Virenscanner und Automatische Updates wurden deaktiviert. Zahlreiche Programme, die es sich im Tray gemütlich gemacht hatten, wurden deinstalliert. Im Endeffekt würde ich beim nächsten Mal das Abspielen auch mit Linux Clients realisieren, die aber wegen des Zeitdrucks nicht verfügbar waren.
Milestone flashen unter Linux mit sbf_flash
Ich habe bisher Windows nur noch für eine einzige Sache benötigt: Um mein Motorola Milestone mit neuer Firmware zu beflashen . Dafür waren bisher ein spezieller USB-Treiber und ein Flashtool von Motorola notwendig. Diese gab es nur für Windows und aus VirtualBox heraus haben sie nicht funktioniert. [mbm], ein Android Hacker aus #milestone-modding auf irc.freenode.net hat jetzt eine Binary zusammengebastelt, mit der es auch wunderbar unter Linux funktioniert. Getestet wurde es von mir unter Ubuntu 10.10. Leider gibt es keinen Quelltext zu der App, aber es funktioniert einwandfrei. Viele andere User bestätigen das hier in der offiziellen Bekanntmachung: http://blog.opticaldelusion.org/2010/05/sbfflash.html
Download: Original | Lokaler Mirror
So sieht ein Flashvorgang mit sbf_flash aus:
box-root-18:01:33 /home/ww/Desktop -> ./sbf_flash ./GOT_DACH_GERMANY_2_2_1FULL.sbf SBF FLASH 1.08 (mbm) === GOT_DACH_GERMANY_2_2_1FULL.sbf === 00: RDL03 0x82000000-0x8204CFFF 2FC7 AP 01: CG31 0xB01C0000-0xB01C47FF 24FE AP 02: CG33 0xD13FB000-0xD1BB783F E479 AP 03: CG34 0xB03A0000-0xB03A47FF CC19 AP 04: CG35 0xB07A0000-0xB0A607FF 888E AP 05: CG36 0xF0B7D000-0xF0BE083F 6799 AP 06: CG37 0xE4034000-0xE40379BF 9325 AP 07: CG39 0xD1D64000-0xDADE583F 6DA8 AP 08: CG40 0xDD2E4000-0xDD2E483F FDFF AP 09: CG42 0xB06A0000-0xB06DFFFF 73E3 AP 10: CG45 0xB0B20000-0xB0E207FF 79ED AP 11: CG47 0xB0EE0000-0xB12A07FF 679E AP 12: CG53 0xCFD80000-0xCFD807FF FDFF AP 13: CG61 0xB0640000-0xB06607FF 6C74 AP Milestone found. >> uploading RDL03 Uploading: 100% OK >> verifying ramloader -- OK >> executing ramloader Milestone found. >> sending erase >> uploading CG31 Uploading: 100% OK >> uploading CG33 Uploading: 100% OK >> uploading CG34 Uploading: 100% OK >> uploading CG35 Uploading: 100% OK >> uploading CG36 Uploading: 100% OK >> uploading CG37 Uploading: 100% OK >> uploading CG39 Uploading: 100% OK >> uploading CG40 Uploading: 100% OK >> uploading CG42 Uploading: 100% OK >> uploading CG45 Uploading: 100% OK >> uploading CG47 Uploading: 100% OK >> uploading CG53 Uploading: 100% OK >> uploading CG61 Uploading: 100% OK >> verifying CG31 -- OK >> verifying CG33 -- OK >> verifying CG34 -- OK >> verifying CG35 -- OK >> verifying CG36 -- OK >> verifying CG37 -- OK >> verifying CG39 -- OK >> verifying CG40 -- OK >> verifying CG42 -- OK >> verifying CG45 -- OK >> verifying CG47 -- OK >> verifying CG53 -- OK >> verifying CG61 -- OK >> rebooting









