• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

[Pixray] böse Bots aussperren, IPtables, etc

braegler

Aktiver NGBler

Registriert
14 Juli 2013
Beiträge
904
Sicher keine wirklich elegante Lösung, aber doch irgendwie eine:

Platziere einen unsichtbaren Link auf der Hauptseite, der zu einer Unterseite führt.
Auf dieser wertest Du die IP Adresse aus, und packst sie dann mittels exec (o.ä.) in IPTables.

Oder aber du pflegst eine Art Whitelist.
Dazu einfach die Nutzer auffordern via DynDNS oder ähnlichem eine via NSLookup auflösbare Subdomain aufzuschalten.
Beim Aufruf der Seite schaust Du dann ob die aktuelle IP zu einer der hinterlegten Domains passt.. wenn nicht -> 404
Natürlich auch erweiterbar auf simple IPs wenn denn feste genutzt werden.
 

alter_Bekannter

N.A.C.J.A.C.

Registriert
14 Juli 2013
Beiträge
4.823
Ort
Midgard
Captchas und halböffentliche Passwörter sind relativ bescheiden weil sie regelmäßiger Pflege bedürfen.

Ich sollte vielleicht erwähnen das es nicht nur um den Webserver bzw Port 80 geht.
Wie gesagt leichter Overkill wäre auch in Ordnung solange es sich nachträglich relativ leicht korrigieren lässt.

Aber so eine "Are you human CHallenge" + Whitelist wäre ein Ansatz, aber da fehlt mir der Nutzerkomfort, das
müsste man irgendwie dauerhaft ohne Zusatzsoftware (auf Nutzerseite, Cookies?) automatisieren können.

Allerdings jedes mal einen Aufruf im Browser zu erfordern wäre "blöd", aber erstmal noch nicht ausgeschlossen.
Daher danke schonmal. Der Ansatz gefällt mir.
 

braegler

Aktiver NGBler

Registriert
14 Juli 2013
Beiträge
904
Du könntest auch alles via DynDNS auf bestimmte IPs beschränken.

Ich hatte mal sowas auf einem meiner Server, um den SSH Zugang zu beschränken:
File: firewall.conf
[src=perl]#! /usr/bin/perl
$enableFirewall = 1;[/src]

File: rcfirewall
[src=bash]#! /bin/sh

FIREWALL="/usr/sbin/iptables"

LOGFILE="/etc/firewall/updateFirewall.log"
DATAFILE="/etc/firewall/updateFirewall.data"
CONFFILE="/etc/firewall/firewall.conf"

UPDATESCRIPT="/etc/firewall/updatefirewall"

#################################################################
# Ab hier nichts mehr ändern
#################################################################

case "$1" in
start)
echo "Enable Firewall"

###########################################################
# global DROP rule
###########################################################
$FIREWALL -P INPUT DROP

###########################################################
# Allow all on Loopback Device
###########################################################
$FIREWALL -A INPUT -i lo -j ACCEPT

###########################################################
# Allow icmp
###########################################################
# $FIREWALL -A INPUT -i eth0 -p icmp -j ACCEPT

###########################################################
# Download-Server
###########################################################
$FIREWALL -A INPUT -i eth0 -s 85.25.128.62 -j ACCEPT

###########################################################
# SSH - Accept from I-net
###########################################################
$FIREWALL -A INPUT -i eth0 -p tcp -s 213.239.195.198/32 --dport ssh -j ACCEPT
$FIREWALL -A INPUT -i eth0 -p tcp -s 80.61.115.64/32 --dport ssh -j ACCEPT
$FIREWALL -A INPUT -i eth0 -p tcp -s 193.111.199.212 --dport ssh -j ACCEPT

###########################################################
# Domain - Server
###########################################################
# $FIREWALL -A INPUT -i eth0 -p tcp --dport domain -j ACCEPT
# $FIREWALL -A INPUT -i eth0 -p udp --dport domain -j ACCEPT

###########################################################
# Mail - Server (POP - SMTP - IMAP)
###########################################################
# $FIREWALL -A INPUT -i eth0 -p tcp --dport smtp -j ACCEPT
# $FIREWALL -A INPUT -i eth0 -p tcp --dport pop3 -j ACCEPT
# $FIREWALL -A INPUT -i eth0 -p tcp --dport pop2 -j ACCEPT
# $FIREWALL -A INPUT -i eth0 -p tcp --dport imap -j ACCEPT

###########################################################
# Web - Server
###########################################################
$FIREWALL -A INPUT -i eth0 -p tcp --dport http -j ACCEPT
# $FIREWALL -A INPUT -i eth0 -p tcp --dport https -j ACCEPT

###########################################################
# IRC
###########################################################
# $FIREWALL -A INPUT -i eth0 -p tcp --dport 6667 -j ACCEPT
# $FIREWALL -A INPUT -i eth0 -p udp --dport 6667 -j ACCEPT

##########################################################
# FTP
###########################################################
# $FIREWALL -A INPUT -i eth0 -p tcp --dport 21 -j ACCEPT
# $FIREWALL -A INPUT -i eth0 -p udp --dport 21 -j ACCEPT

###########################################################
# Teamspeak
###########################################################
$FIREWALL -A INPUT -i eth0 -p tcp --dport 8767 -j ACCEPT
$FIREWALL -A INPUT -i eth0 -p udp --dport 8767 -j ACCEPT

$FIREWALL -A INPUT -i eth0 -p tcp --dport 14534 -j ACCEPT

$FIREWALL -A INPUT -i eth0 -p tcp --dport 51234 -j ACCEPT
$FIREWALL -A INPUT -i eth0 -p udp --dport 51234 -j ACCEPT

###########################################################
# ETW
###########################################################
$FIREWALL -A INPUT -i eth0 -p tcp --dport 27960 -j ACCEPT
$FIREWALL -A INPUT -i eth0 -p udp --dport 27960 -j ACCEPT
$FIREWALL -A INPUT -i eth0 -p tcp --dport 27961 -j ACCEPT
$FIREWALL -A INPUT -i eth0 -p udp --dport 27961 -j ACCEPT


###########################################################
# Antwortpakete generell erlauben
###########################################################
$FIREWALL -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

###########################################################
# Logging
###########################################################
# $FIREWALL -A INPUT -i eth0 -p tcp --dport 23:65535 -j LOG
# $FIREWALL -A INPUT -i eth0 -p udp --dport 23:65535 -j LOG


###########################################################
# Start updateFirewall all 5 minutes
###########################################################
echo "#! /usr/bin/perl" > $CONFFILE;
echo "\$enableFirewall = 1;" >> $CONFFILE;
# echo "1" >> $CONFFILE;

$UPDATESCRIPT;
;;
stop)
echo "Disable Firewall"

# If File exists
[ -f $DATAFILE ] && rm $DATAFILE
echo "#! /usr/bin/perl" > $CONFFILE;
echo "\$enableFirewall = 0;" >> $CONFFILE;
# echo "1" >> $CONFFILE;

$FIREWALL -F INPUT
$FIREWALL -F OUTPUT
$FIREWALL -F FORWARD
$FIREWALL -P INPUT ACCEPT

;;
status)
$FIREWALL -L -n
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage ( start | stop | status | restart )"
;;
esac
[/src]

Filename: updatefirewall
[src=perl]
#! /usr/bin/perl
require '/etc/firewall/firewall.conf';

$iptables_bin = "/usr/sbin/iptables";
$dataFile = "/etc/firewall/updateFirewall.data";
$logFile = "/etc/firewall/updateFirewall.log";

@URL = ( "/bin/ping -c 1 -w 1 user1.mine.nu |" ,
"/bin/ping -c 1 -w 1 user2.mine.nu |",
"/bin/ping -c 1 -w 1 user3.dnsalias.com |" );

@ENV = ( "User1", "User2" ,"User3");



# -----------------------------------------------------------------
# Ab hier nichts mehr aendern
# -----------------------------------------------------------------


sub RemoveRule
{
# open(OUTFILE, ">>$logFile") or die print "error with logfile\n";

# printf OUTFILE "Remove Rule for User: $user[$i] with IP: $data[$i]\n";

open(INFILE, "$iptables_bin -D INPUT -i eth0 -s $data[$i]/32 -p tcp --dport ssh -j ACCEPT |") or die printf OUTFILE "error with iptables\n";
close(INFILE);

# close(OUTFILE);

}

sub AddRule
{
# open(OUTFILE, ">>$logFile") or die print "error with logfile\n";

# printf OUTFILE "Add Rule for User: $user[$i] with IP: $data[$i]\n";

open(INFILE, "$iptables_bin -A INPUT -i eth0 -s $data[$i]/32 -p tcp --dport ssh -j ACCEPT |") or die printf OUTFILE "error with iptables\n";
close(INFILE);

# close(OUTFILE);
}

sub updateDataFile
{
open(OUTFILE, ">$dataFile") or die "Cant createFile\n";

for ($a=0; $a<$counter; $a++)
{
printf OUTFILE "$user[$a] : $data[$a]\n";
}
close(OUTFILE);

}


sub CheckFirewall
{
$changes = 0;
for ($i=0; $i<$counter; $i++)
{
if ($data[$i] ne $ip[$i])
{
$changes = 1;
RemoveRule;
$data[$i] = $ip[$i];
AddRule;
}
}

if ($changes == 1)
{
updateDataFile;
}
}


sub ReadLog
{
open(INFILE, "<$dataFile") or die "File not Found!\n";
@FILE = <INFILE>;
close(INFILE);

$counter = 0;

foreach $line (@FILE)
{
chomp($line);
@DATA = split( / : /, $line);

$user[$counter] = $DATA[0];
$data[$counter] = $DATA[1];

$counter++;
}

CheckFirewall;
}


if (!(-e $dataFile))
{
open(OUTFILE, ">$dataFile") or die "Cant create File\n";
foreach $line (@ENV)
{
printf OUTFILE "$line : 0.0.0.0\n";
}
close(OUTFILE);
}

$index = -1;

foreach $url (@URL)
{
open(INFILE, $url) or die "File not Found!\n";
$line = <INFILE>;
close(INFILE);

if ($line =~ /.* \([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\) .*/)
{
$index++;

@fields = split( / \(/ , $line);
@IP = split( /\) / , $fields[1]);

$ip[$index] = $IP[0];
}
else
{
print "No IP found";
}
}

if ($enableFirewall > 0)
{
if ($index > 0)
{
ReadLog;
}
}
else
{
}
[/src]


Das ganze müsste natürlich noch für die entsprechenden Dienste eingerichtet werden (hier war es in erster Linie für Gameserver, Webserver, Teamspeak und SSH ausgelegt, wobei nur SSH durch das updatefirewall - Skript erlaubt wird, der Rest durch die rcfirewall.
 

accC

gesperrt

Registriert
14 Juli 2013
Beiträge
5.250
  • Thread Starter Thread Starter
  • #25
Captchas halte ich für einen Usability-GAU. Logins sind in Ordnung, wenn es sich um eine geschlossene Plattform handelt. Etwa ein "facebook"-Portal. Da kannst du einfach alle Inhalte für öffentlich sperren und nur über gültigen Account zugänglich machen.Pixray kann ja eigentlich nur über FTP (falls öffentlich) und HTTP auf deine Seite. Daher sollte es ausreichen seinen Schutz dahingehend zu beschränken.Für den Apache gibt es ein Modul, welches es erlaubt Geolocations aus einer Datenbank abzufragen und den Nutzer auf Basis dieser Daten umzuleiten. Es sollte eigentlich kein Problem sein, das Modul ein bisschen umzuschreiben um eine Datenbank gesteuerte Black-/White-List zu schreiben. Um Performance heraus zu kitzeln könnte man die Funktionalität auf Anfragen auf Bild-Ressourcen beschränken.Alternativ könnte man den anfragenden Host prüfen, ob dieser eine private oder eine öffentliche IP ist. Wobei das vermutlich nicht unbedingt weniger Aufwand ist und deutlich fehleranfälliger ist (Proxy und VPN Nutzer werden ausgesperrt und Bots, die über private IPs kommen, können immer noch rein)..
 

alter_Bekannter

N.A.C.J.A.C.

Registriert
14 Juli 2013
Beiträge
4.823
Ort
Midgard
Mir gehts nicht nur um Pixray, sondern halt generell alle Bots.

Es soll gar nicht öffentlich sein, ich will das Gegenteil von Werbung.
 

drfuture

Zeitreisender
Teammitglied

Registriert
14 Juli 2013
Beiträge
8.748
Ort
in der Zukunft
Google hat doch vor "kurzem" eine neue Captcha technik vorgestellt für sein reCapture - bin mir nur nicht sicher ob das noch beta ist oder schon größer im Einsatz, wobei statt ein Captcha nach möglichkeit nur ein hacken gemacht werden muss "Ja ich bin ein Mensch" und sonst nichts (Wobei im Hintergrund sehr viel mehr abläuft um zu prüfen ob es ein Bot ist oder nicht). Nur wenn die neue Prüfung nicht genau sagen kann ob es ein Bot ist oder ein User dann kommt ein "normales" Captcha.
Wenn man dann noch das erfolgreiche Lösen des Captchas mit einem Cookie speichert wäre die usability evtl. noch angemessen für die Webseite - wenn man die ganze Webseite mit so einem Captcha versperrt.
 

accC

gesperrt

Registriert
14 Juli 2013
Beiträge
5.250
  • Thread Starter Thread Starter
  • #29
Wenn du die Bots kennst, also mit IP, dann kannst du je nach firewall / iptables entsprechende Regeln einstellen.
"Gute bots" hören auf deine robots.txt. Damit wären zumindest schon mal die großen Suchmaschinen draußen. (Du kannst, wenn du dich auf den Plattformen registrierst bei den großen Anbietern aber auch so deine Seite sperren. Google, Yahoo, Microsoft bieten dafür extra Schnittstellen an.)
 
Oben