[MOD] IP Sperre für eine Zeit XX Sekunden
Dieser MOD soll dein System etwas mehr absichern. Kaum eine Website ist gegen BRUTE FORCE Angriffe geschützt. Mit dieser Erweiterung kannst du festlegen, nach wievielen fehlerhaften LOGINS und wie lange die IP Adresse des vermeintlichen Angreifers gesperrt bleiben soll.
Die Sperre bezieht sich nur auf die Webseite. Solltest du SSH oder FTP aktiviert haben, hat dies keinen einfluss auf die Sperre.
Wenn die Anzahl X überschritten ist, wird dem vermeintlichen Angreifer nur noch eine Seite angezeigt, welche Ihn daraufhin weist, wann er sich wieder normal einloggen kann. Sobald eine Adresse gesperrt ist, bekommt der ADMIN eine EMAIL (sofern im ACP aktiviert).
Der Counter wird nach erst wieder zurückgesetzt, wenn die Zeit X abgelaufen ist. Diese Zeit kannst du im ACP frei definieren. Die Zeit wird dort in Sekunden angegeben.
1 min = 60 Sekunden
10 min = 600 Sekunden
1 Stunde = 3600 Sekunden
1 Tag = 86400 Sekunden
usw.
Sinnvolle Werte sind sicherlich ein Wert zwischen 5 - 10 Login Versuchen und eine Sperre zwischen 10 - 60 Minuten.
Default Werte im ACP:
Logins: 10
Sperre: 600 (10 Minuten)
Email: deaktiviert
Wenn noch drei Versuche übrig sind, erscheint ein Java POPUP und ziegt die verbleibenden Versuche an.
Dieser MOD hat mich auf die Idee der Absicherung gebracht:
http://www.4homepages.de/forum/index.php?topic=25322.0Nicht zu verwechseln mit [MOD] Ban v1.7
http://www.4homepages.de/forum/index.php?topic=7066.0DEMO
http://4images_1.rinaldos.homeip.netBenutze einen Benutzernamen und ein Passwort deiner Wahl. Du hast zwei Versuche. Der Zugriff auf die Webseite ist dann für Dich 120 Sekunden gesperrt
zu ändernde Dateien: 8
neue Dateien: 1
Schritt 1öffne /admin/setting.php
finde
show_form_footer($lang['save_changes'], "", 2);
füge darüber ein
show_table_separator($setting_group[xx], 2, "setting_group_xx");
show_setting_row("mod_block_count");
show_setting_row("mod_block_time");
show_setting_row("mod_block_email", "radio");
xx = Die Fortlaufende Nummer deiner SETTINGS
Schritt 2öffne /includes/constants.php
finde
define('USERS_TABLE', $table_prefix.'users');
füge darüber oder darunter ein:
// MOD BLOCK IP ADRESSE
define('USERS_LOGIN_COUNT_TABLE', $table_prefix.'users_login_count');
// MOD BLOCK IP ADRESSE
Schritt 3öffne /includes/page_header.php
finde
if (!defined('ROOT_PATH')) {
die("Security violation");
}
füge darunter ein:
// MOD BLOCK IP
reset_invalid_login();
if ((get_invalid_login($count_login) >= $config['mod_block_count']) && ($user_info['user_level'] != ADMIN)) {
$IP = $_SERVER['REMOTE_ADDR'];
$sql = "SELECT count, time
FROM ".USERS_LOGIN_COUNT_TABLE."
WHERE IP = '".$IP."'";
$result = $site_db->query_firstrow($sql);
$count = $result['count'];
$time = $result['time'];
$current_time = time();
$time_retry = $config['mod_block_time'];
if (($current_time <= $time) && ($user_info['user_level'] != ADMIN)) {
$main_template = "login_fail";
$login_time = format_date($config['date_format']." ".$config['time_format'],$time);
$site_template->register_vars(array(
"invalid_login_german" => $lang['invalid_login_german'],
"invalid_login_english" => $lang['invalid_login_english'],
"login_time" => $login_time,
));
$site_template->print_template($site_template->parse_template($main_template));
exit;
}
}
// MOD BLOCK IP
Schritt 4öffne /lang/deutsch/main.php
füge vor ?> folgende zeilen ein
// MOD BLOCK IP ADRESSE
$lang['invalid_login_text'] = "Es hat sich jemand mit einem falschen Benutzernamen / Passwort versucht einzuloggen. Sollte dieser Versuch mehrfach sein, wird die Webseite gerade gehackt";
$lang['invalid_login_emailsubject'] = "Benutzer login failed";
$lang['invalid_login_german'] = "Diese <font color=\"#FF0000\">Webseite</font> ist für Dich vorrübergehend geschlossen. Du hast dich zuoft mit einem falschen Benutzernamen oder einem falschen Passwort versucht anzumelden.Das System sperrt automatisch für eine gewisse Zeit deine IP Adresse. Du kannst es wieder versuchen am / um:<br> ";
$lang['invalid_login_english'] = "Sorry, but the <font color=\"#FF0000\">Website</font> is temporarily closed for you. Due to many LOGIN FAILURES please revisit this Website again at: <br> ";
$lang['invalid_login_1'] = "Du hattest bisher ";
$lang['invalid_login_2'] = "fehlgeschlagene Versuche gehabt. Dir verbleiben noch ";
$lang['invalid_login_3'] = "Versuch(e)";
// MOD BLOCK IP ADRESSE
Schritt 5öffne /lang/deutsch/admin.php
füge vor ?> folgende zeilen ein
// MOD BLOCK IP ADRESSE
$setting_group[xx]="INVALID LOGINS";
$setting['mod_block_count'] = "Anzahl der Versuche zum einloggen";
$setting['mod_block_time'] = "Wie lange bleibt die IP Adresse gesperrt?<br> Zeit ist in Sekunden einzutragen";
$setting['mod_block_email'] = "Per EMAIl Admin benachrichtigen?";
// MOD BLOCK IP ADRESSE
xx = Deine letzte SEETTINGS GROUP + 1
Schritt 6erstelle eine Datei im Verzeichnis lang/Deine Sprache/email/login_email.html
füge folgenden Code in diese Datei ein
Hallo
{text}
----------
Benutzer: {user_name}
Versuch: {login_date}
Anzahl: {login_counts}
IP-Adresse: {IP}
Browser: {Browser}
----------
Schritt 7 am 15.02.2010 geändertöffne /includes/functions.php
füge vor ?> folgende Zeilen ein
// MOD BLOCK IP
function get_invalid_login($count_login) {
global $site_db, $config, $lang;
$IP = $_SERVER['REMOTE_ADDR'];
$current_time = time();
// $time_retry = $config['mod_block_time'];
// $retry_time = $current_time + $time_retry;
$sql1 = "SELECT COUNT(IP) AS ips
FROM ".USERS_LOGIN_COUNT_TABLE."
WHERE IP = '".$IP."'";
$result1 = $site_db->query_firstrow($sql1);
$num_ips = $result1['ips'];
if ($num_ips == "1"){
// if ($current_time >= $retry_time){
$sql = "SELECT count FROM ".USERS_LOGIN_COUNT_TABLE."
WHERE ip = '".$IP."'";
$result= $site_db->query_firstrow($sql);
$count_login = $result['count'];
// }
}
return $count_login;
}
function reset_invalid_login() {
global $site_db, $config, $lang;
$IP = $_SERVER['REMOTE_ADDR'];
$current_time = time();
$time_retry = $config['mod_block_time'];
$retry_time = $current_time + $time_retry;
$sql1 = "SELECT COUNT(IP) AS ips
FROM ".USERS_LOGIN_COUNT_TABLE."";
$result1 = $site_db->query_firstrow($sql1);
$num_ips = $result1['ips'];
if ($num_ips >= "1"){
// changed if ($current_time >= $retry_time){
if ($current_time <= $retry_time){
$sql = "DELETE FROM ".USERS_LOGIN_COUNT_TABLE."
WHERE time <= '".$current_time."' ";
$site_db->query($sql);
}
}
}
function count_invalid_login($user_name) {
global $site_db, $site_sess, $user_info, $config, $lang, $script_url;
$IP = $_SERVER['REMOTE_ADDR'];
$current_time = time();
$time_retry = $config['mod_block_time'];
$retry_time = $current_time + $time_retry;
$sql1 = "SELECT COUNT(IP) AS ips
FROM ".USERS_LOGIN_COUNT_TABLE."
WHERE IP = '".$IP."'";
$result1 = $site_db->query_firstrow($sql1);
$num_ips = $result1['ips'];
if ($num_ips == "0"){
$sql = "INSERT INTO ".USERS_LOGIN_COUNT_TABLE."
(IP, count, time)
VALUES
('".$IP."', '1', '".$retry_time."')";
$site_db->query($sql);
$count = "1";
$count_rest = $config['mod_block_count'] - $count;
}else {
$sql = "UPDATE ".USERS_LOGIN_COUNT_TABLE." SET
count = count + 1,
time = '".$retry_time."'
WHERE IP = '".$IP."'";
$site_db->query($sql);
$sql = "SELECT count FROM ".USERS_LOGIN_COUNT_TABLE."
WHERE IP = '".$IP."'";
$result = $site_db->query_firstrow($sql);
$count = $result['count'];
$count_rest = $config['mod_block_count'] - $count;
}
if ($count_rest <= "3"){
echo "<script language='javascript'>alert('".$lang['invalid_login_1']." ".$count." ".$lang['invalid_login_2']." ".$count_rest." ".$lang['invalid_login_3']."')</script>";
}
$htaccess_email_send = $config['mod_block_email'];
$count_login_retry = $config['mod_block_count'];
if (($htaccess_email_send == 1) && ($count >= $count_login_retry)) {
$current_time = time();
include_once(ROOT_PATH.'includes/email.php');
$text = $lang['invalid_login_text'];
$user_password = trim($HTTP_POST_VARS['user_password']);
$site_email = new Email();
$site_email->set_to($config['site_email'], $config['site_name']);
$site_email->set_from($config['site_email'], $config['site_name']);
$site_email->set_subject($lang['invalid_login_emailsubject']);
$site_email->register_vars(array(
"user_name" => stripslashes($user_name),
"login_date" => format_date($config['date_format']." ".$config['time_format'], $current_time),
"login_counts" => $count,
"site_name" => $config['site_name'],
"text" => $text,
"IP" => $_SERVER['REMOTE_ADDR'],
"Browser" => $_SERVER['HTTP_USER_AGENT']
));
$site_email->set_body("login_email", $config['language_dir']);
$site_email->send_email();
$site_email->reset();
}
return $count;
}
Schritt 8erstelle in Deinem Template Verzeichnis folgende Datei
login_fail.html
füge folgenden Code ein
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<head>
<title>BLOCKED IP</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-15" />
<meta name="language" content="german,deutsch,DE,AT,CH,S">
</head>
<table width="90%" align="center" border="0"cellspacing="0" cellpadding="0">
<tr>
<td align="center">
<table border="0" width="640" align="center" id="table1" style="border-collapse: collapse">
<tr>
<td width="100%" height="480" align="center">
<h2>{invalid_login_german} {login_time}</h2>
<h2>------------------</h2>
<h2>{invalid_login_english} {login_time}</h2>
<p> </p>
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>
Schritt 9öffne login.php
finde
if ($error) {
$main_template = "error";
include(ROOT_PATH.'includes/page_header.php');
show_error_page($error);
}
ersetze mit
if ($error) {
$main_template = "error";
include(ROOT_PATH.'includes/page_header.php');
count_invalid_login($user_name);
show_error_page($error);
}
Schritt 10Führe den INSTALLER aus dem zip aus.
Das sollte es gewesen sein