Tag: denyhosts
Denyhosts Stats
by Matt on May.25, 2009, under linux, programming, ubuntu, webbyness
I have been told many many times that moving ssh to a different port (i.e. other than 22) makes your machine more secure. I do see some wisdom in this, however, I’ve decided to put it to the test. I have been using Denyhosts to stop brute force attacks on my ssh servers for some time now, and on my most recent server, the attacks per day are fairly regular, as seen in the graph.
At the end of June I will stop using port 22 and start using another random port. I’ll then collect data for 3 months and at the end of september do another blog post showing the difference. I also have another server that I will repeat this experiment on, but that one will be 3 months behind.
Hopefully then I will have a nice sturdy scientific answer as to how much more protection moving ssh to a different port gives
The code I used to generate this graph is given below for reference.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | import os import matplotlib import datetime import matplotlib.pyplot as plt import matplotlib.dates as mdates import matplotlib.mlab as mlab matplotlib.use('Agg') datelist = {} rootdir = './' def plot_all(): #first convert dict to a set of x values and a set of y values keys = datelist.keys() keys.sort() values = [] times = [] for key in keys: values.append(datelist[key]) #now convert the keys into time format times.append(datetime.datetime.strptime(key, "%Y-%m-%d")) #now we're ready to plot with matplotlib months = mdates.MonthLocator() # every month days = mdates.DayLocator() yearsFmt = mdates.DateFormatter('%b') dayFmt = mdates.DateFormatter('%d') fig = plt.figure() ax = fig.add_subplot(111) dates = range(times[0].toordinal(), times[-1].toordinal()) ax.bar(times,values,width=1) ax.set_xlabel('Date') ax.set_ylabel('Number of Hosts Denied') #ax.plot(times, values) #ax.xaxis.set_major_formatter(yearsFmt) #ax.xaxis.set_major_locator(months) #ax.xaxis.set_minor_formatter(dayFmt) #ax.xaxis.set_minor_locator(days) ax.format_xdata = mdates.DateFormatter('%Y-%m-%d') fig.autofmt_xdate() fig.savefig("plot.png") def countup(file): f = open(file, 'r') for line in f.readlines(): #split by spaces to get the date line = line.split(" ") #now see if this is already in the list newline = False for part in line: if part == "new": newline = True else: continue if newline == True: n = 0 if line[0] in datelist: datelist[line[0]] = datelist[line[0]] + 1 else: datelist[line[0]] = 1 f.close() for subdir, dirs, files in os.walk(rootdir): for file in files: if not file[-2:] == "py" and file.split(".")[0] == "denyhosts": countup(rootdir + file) keys = datelist.keys() keys.sort() for key in keys: print("%s, %s" % (key,datelist[key])) plot_all() |
