mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 18:32:03 +00:00
More gifts from FPstation. This fetches a list of known proxies and stops people from connecting whilst using them. Proxies are often used for nefarious reasons.
It needs to be kept as up-to-date as possible, so it autoupdates every 6+ hours or so to ensure the database is relatively up-to-date. Like the previous commit, I'd only really recommend it if the other stuff isn't getting the job done. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4257 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
@@ -49,6 +49,7 @@
|
||||
var/usewhitelist = 0
|
||||
var/kick_inactive = 0 //force disconnect for inactive players
|
||||
var/load_jobs_from_txt = 0
|
||||
var/ToRban = 0
|
||||
|
||||
var/server
|
||||
var/banappeals
|
||||
@@ -313,6 +314,9 @@
|
||||
if("humans_need_surnames")
|
||||
humans_need_surnames = 1
|
||||
|
||||
if("tor_ban")
|
||||
ToRban = 1
|
||||
|
||||
else
|
||||
diary << "Unknown setting in configuration: '[name]'"
|
||||
|
||||
|
||||
@@ -26,8 +26,10 @@ Starting up. [time2text(world.timeofday, "hh:mm.ss")]
|
||||
process_ghost_teleport_locs() //Sets up ghost teleport locations.
|
||||
sleep_offline = 1
|
||||
|
||||
if (config.kick_inactive)
|
||||
spawn(30)
|
||||
spawn(3000) //so we aren't adding to the round-start lag
|
||||
if(config.ToRban)
|
||||
ToRban_autoupdate()
|
||||
if(config.kick_inactive)
|
||||
KickInactiveClients()
|
||||
|
||||
#define INACTIVITY_KICK 6000 //10 minutes in ticks (approx.)
|
||||
|
||||
@@ -9,6 +9,14 @@ world/IsBanned(key,address,computer_id)
|
||||
message_admins("\blue Failed Login: [key] - Guests not allowed")
|
||||
return list("reason"="guest", "desc"="\nReason: Guests not allowed.brb")
|
||||
|
||||
//check if the IP address is a known TOR node
|
||||
if( config && config.ToRban && ToRban_isbanned(address) )
|
||||
log_access("Failed Login: [src] - Banned: ToR - BYOND Version: [byond_version]")
|
||||
message_admins("\blue Failed Login: [src] - Banned: ToR - BYOND Version: [byond_version]")
|
||||
//ban their computer_id and ckey for posterity
|
||||
AddBan(ckey(key), computer_id, "Use of ToR", "Automated Ban", 0, 0)
|
||||
return list("reason"="Using ToR", "desc"="\nReason: The network you are using to connect has been banned.\nIf you believe this is a mistake, please request help at [config.banappeals]")
|
||||
|
||||
//Ban Checking
|
||||
. = CheckBan( ckey(key), computer_id, address )
|
||||
if(.)
|
||||
|
||||
90
code/modules/admin/ToRban.dm
Normal file
90
code/modules/admin/ToRban.dm
Normal file
@@ -0,0 +1,90 @@
|
||||
//By Carnwennan
|
||||
//fetches an external list and processes it into a list of ip addresses.
|
||||
//It then stores the processed list into a savefile for later use
|
||||
#define TORFILE "data/ToR_ban.bdb"
|
||||
#define TOR_UPDATE_INTERVAL 216000 //~6 hours
|
||||
|
||||
/proc/ToRban_isbanned(var/ip_address)
|
||||
var/savefile/F = new(TORFILE)
|
||||
if(F)
|
||||
if( ip_address in F.dir )
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/proc/ToRban_autoupdate()
|
||||
var/savefile/F = new(TORFILE)
|
||||
if(F)
|
||||
var/last_update
|
||||
F["last_update"] >> last_update
|
||||
if((last_update + TOR_UPDATE_INTERVAL) < world.realtime) //we haven't updated for a while
|
||||
ToRban_update()
|
||||
return
|
||||
|
||||
/proc/ToRban_update()
|
||||
spawn(0)
|
||||
diary << "Downloading updated ToR data..."
|
||||
var/http[] = world.Export("http://exitlist.torproject.org/exit-addresses")
|
||||
|
||||
var/rawtext = file2text(http["CONTENT"])
|
||||
if(rawtext)
|
||||
var/list/rawlist = tg_text2list(rawtext,"\n")
|
||||
if(rawlist.len)
|
||||
fdel(TORFILE)
|
||||
var/savefile/F = new(TORFILE)
|
||||
for( var/line in rawlist )
|
||||
if(!line) continue
|
||||
if( copytext(line,1,12) == "ExitAddress" )
|
||||
var/cleaned = copytext(line,13,length(line)-19)
|
||||
if(!cleaned) continue
|
||||
F[cleaned] << 1
|
||||
F["last_update"] << world.realtime
|
||||
diary << "ToR data updated!"
|
||||
if(usr) usr << "ToRban updated."
|
||||
return 1
|
||||
diary << "ToR data update aborted: no data."
|
||||
return 0
|
||||
|
||||
/client/proc/ToRban(task in list("update","toggle","show","remove","remove all","find"))
|
||||
set name = "ToRban"
|
||||
set category = "Server"
|
||||
if(!holder) return
|
||||
switch(task)
|
||||
if("update")
|
||||
ToRban_update()
|
||||
if("toggle")
|
||||
if(config)
|
||||
if(config.ToRban)
|
||||
config.ToRban = 0
|
||||
message_admins("<font color='red'>ToR banning disabled.</font>")
|
||||
else
|
||||
config.ToRban = 1
|
||||
message_admins("<font colot='green'>ToR banning enabled.</font>")
|
||||
if("show")
|
||||
var/savefile/F = new(TORFILE)
|
||||
var/dat
|
||||
if( length(F.dir) )
|
||||
for( var/i=1, i<=length(F.dir), i++ )
|
||||
dat += "<tr><td>#[i]</td><td> [F.dir[i]]</td></tr>"
|
||||
dat = "<table width='100%'>[dat]</table>"
|
||||
else
|
||||
dat = "No addresses in list."
|
||||
src << browse(dat,"window=ToRban_show")
|
||||
if("remove")
|
||||
var/savefile/F = new(TORFILE)
|
||||
var/choice = input(src,"Please select an IP address to remove from the ToR banlist:","Remove ToR ban",null) as null|anything in F.dir
|
||||
if(choice)
|
||||
F.dir.Remove(choice)
|
||||
src << "<b>Address removed</b>"
|
||||
if("remove all")
|
||||
src << "<b>[TORFILE] was [fdel(TORFILE)?"":"not "]removed.</b>"
|
||||
if("find")
|
||||
var/input = input(src,"Please input an IP address to search for:","Find ToR ban",null) as null|text
|
||||
if(input)
|
||||
if(ToRban_isbanned(input))
|
||||
src << "<font color='green'><b>Address is a known ToR address</b></font>"
|
||||
else
|
||||
src << "<font color='red'><b>Address is not a known ToR address</b></font>"
|
||||
return
|
||||
|
||||
#undef TORFILE
|
||||
#undef TOR_UPDATE_INTERVAL
|
||||
@@ -254,6 +254,7 @@
|
||||
verbs += /client/proc/deadmin_self
|
||||
verbs += /client/proc/Set_Holiday //Force-set a Holiday
|
||||
verbs += /client/proc/admin_memo
|
||||
verbs += /client/proc/ToRban //ToRban frontend to access its features.
|
||||
//verbs += /client/proc/cmd_mass_modify_object_variables --Merged with view variables
|
||||
//verbs += /client/proc/cmd_admin_explosion --Merged with view variables
|
||||
//verbs += /client/proc/cmd_admin_emp --Merged with view variables
|
||||
@@ -412,6 +413,7 @@
|
||||
verbs -= /client/proc/admin_memo
|
||||
verbs -= /client/proc/investigate_show //investigate in-game mishaps using various logs.
|
||||
verbs -= /client/proc/toggle_log_hrefs
|
||||
verbs -= /client/proc/ToRban
|
||||
verbs -= /proc/possess
|
||||
verbs -= /proc/release
|
||||
//verbs -= /client/proc/give_spell --Merged with view variables
|
||||
|
||||
@@ -162,3 +162,6 @@ TICKCOMP 0
|
||||
|
||||
## if uncommented this adds a random surname to a player's name if they only specify one name
|
||||
HUMANS_NEED_SURNAMES
|
||||
|
||||
## Uncomment this to ban use of ToR
|
||||
#TOR_BAN
|
||||
@@ -781,6 +781,7 @@
|
||||
#include "code\modules\admin\newbanjob.dm"
|
||||
#include "code\modules\admin\player_notes.dm"
|
||||
#include "code\modules\admin\player_panel.dm"
|
||||
#include "code\modules\admin\ToRban.dm"
|
||||
#include "code\modules\admin\DB ban\functions.dm"
|
||||
#include "code\modules\admin\verbs\adminhelp.dm"
|
||||
#include "code\modules\admin\verbs\adminjump.dm"
|
||||
|
||||
Reference in New Issue
Block a user