Skriptimiskeeled aine aruanded 2010 sügis: Difference between revisions
From ICO wiki
Jump to navigationJump to search
Line 12: | Line 12: | ||
==Alvar Unuks AK41== | ==Alvar Unuks AK41== | ||
Suurima andmemahuga paketite leidmine | Suurima andmemahuga paketite leidmine | ||
!/bin/bash | <source lang="bash"> | ||
!#/bin/bash | |||
sed -ne '/^Package: \(.*\)/{s//\1/;h;};/^Installed-Size: \(.*\)/{s//\1/;G;s/\n/ /;p;}' /var/lib/dpkg/status | sort -rn | sed -ne '/^Package: \(.*\)/{s//\1/;h;};/^Installed-Size: \(.*\)/{s//\1/;G;s/\n/ /;p;}' /var/lib/dpkg/status | sort -rn | ||
Revision as of 20:22, 26 January 2011
Siia tulevad kodus tehtud tööde lingid
Esitaja nimi
- Skript, mis teeb maailma paremaks - BASH
- Skript, mis teeb maailma paremaks - Python
- Skript, mis teeb maailma paremaks - PowerShell
- Arvustused sellele skriptile
Vabad ideed
Alvar Unuks AK41
Suurima andmemahuga paketite leidmine
!#/bin/bash
sed -ne '/^Package: \(.*\)/{s//\1/;h;};/^Installed-Size: \(.*\)/{s//\1/;G;s/\n/ /;p;}' /var/lib/dpkg/status | sort -rn
==Reget Kalamees DK21==
[[Skript otsib vabade Wifi AP-de hulgast kõige kiirema ühenduse ja haagib end selle külge]]
==Kaspar Prei==
[[Skript leiab dublikaat failid]]
==Lembit Elmik AK21==
* Bash - Skript, mis kontrollib võrguühenduse olemasolu ning selle puudusel diagnoosib häda.
[[V6rgudiagnoosiskript]]
* Python - SSH vigaste logimiste järgi source IP hosts.deny faili ja lisatud IP'd mailile (saadetud õppejõu mailile)
* PowerShell - Arvuti andmete (mälu hulk, protsessori tüüp jne.) kuvamine
==Marko Valing==
*[[XML päringute sageduse kontroll - BASH]]
*[[Python]]
*[[Teenusemonitor]]
==Lauri Liibert AK21==
* BASH [[Skript, mis otsib üles failid mille poole ei ole ammu pöördutud ja arhiveerib]]
* PYTHON [[Skript, mis otsib üles failid mille poole ei ole ammu pöördutud ja arhiveerib]]
* POWERSHELL [[Skript, mis küsib ACL-i objekte AD-st]]
==Siim Liivand AK41==
Midagi mailiserveri logide põhjal?
==Sander Tuulik AK41==
Skript mis otsib kõik pildi,video,muusika,dokumendid ja jagab need kaustadesse.
==Kristjan Karmo AK41==
* [[Skript, mis teeb varukoopia WordPressi instantsist - BASH]]
* [[Skript, mis teeb varukoopia WordPressi instantsist - Python]]
* [[Skript, mis arhiveerib etteantud laiendiga failid - PowerShell]]
==Chris Sinihelm AK41==
[[Skript, mis jaotab failid suuruse järgi kaustadesse - bash]] <br />
[[Skript, millega saab public folderitesse õiguseid lisada - PowerShell]]
==Nadežda Furs A31==
==Sigmar Muuga DK31==
Skript, mis vaatab /var/log/auth.log faili ja võtab sealt enim ebaõnnestunud IP aadressid, mis üritasid teha sisse logimist SSH kaudu(lävend võiks näiteks olla 10 ebaõnnestunud katset) ning saadab need kas e-mailile või lisab tulemüüri reeglitesse(IPTABLES näiteks).
Jah, ma tean, et on ka paremaid viise hoste blokeerida, näiteks kasutada hosts-allow parameetrit ssh konfiguratsioonis.
===Bash versioon===
<source lang="bash">
#!/bin/bash
# Skript, mis loeb läbi UNIX-i auth.log faili ja koostab IPTables block reeglid IP aadressidele,
# mille pealt on autentimine ebaõnnestunud vähemalt etteantud arv kordi
# käivitamise näide:
# sh check_ip.sh /var/log/auth.log /etc/iptables_blocked.txt
# Autor: Sigmar Muuga, DK31
# mitme ebaõnnestumise korral me IP blokeerime
BLOCK_LEVEL=5
# auth.log faili asukoht
AUTH_LOG_FILE=$1
# tüüpilised veasituatsioonid
ERROR_PATTERNS="error | illegal | not\ allowed"
# väljundfaili nimi (või asukoht)
IP_TABLES_FILE=$2
# kontrollime etteantud argumenti
if [ -z "$1" ]; then
echo "No command-line arguments."
exit 0
fi
if [ -z "$2" ]; then
echo "No IPTABLES file specified."
exit 0
fi
# kontrollime, et faili saaks kirjutada
touch "$IP_TABLES_FILE"
if [ -e $IP_TABLES_FILE ]; then
echo "IPTABLES file: "$IP_TABLES_FILE
else
echo "Cannot write IPTABLES file!"
exit 0
fi
# itereerime yle logiridade
more $AUTH_LOG_FILE | egrep "$ERROR_PATTERNS" | while read line; do
address=$(echo $line | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}')
# kas on valiidne IP
if [ ${#address} -gt 0 ]; then
# loeme esinevuskorrad
occurences=$(grep -c $address $AUTH_LOG_FILE)
if [ $occurences -ge $BLOCK_LEVEL ]; then # kui on juba piisavalt feilinud IP
added_occurences=$(grep -c $address $IP_TABLES_FILE)
#kontrollime, et poleks juba lisatud
if [ $added_occurences -lt 1 ]; then
echo "Blacklisting "$address" with "$occurences" occurences"
#kirjutame IPTABLES reegli
echo "iptables -A INPUT -s "$address" -j DROP" >> $IP_TABLES_FILE
fi
fi
fi
done
Pythoni versioon
#!/usr/bin/python
# -*- coding: latin-1 -*-
import sys
import getopt
import os
import re
# Skript, mis loeb läbi UNIX-i auth.log faili ja koostab IPTables block reeglid IP aadressidele,
# mille pealt on autentimine ebaõnnestunud vähemalt etteantud arv kordi
# käivitamise näide:
# py check_ip.py --logfile=/path/to/logfile --iptablesfile=/path/to/iptablesfile
# Autor: Sigmar Muuga, DK31
def main():
# mitme ebaõnnestumise korral me IP blokeerime
BLOCK_LEVEL=5
# kuvab kasutamise info
def usage():
print 'Programmi kasutamine:'
print 'py check_ip.py --logfile=/path/to/logfile --iptablesfile=/path/to/iptablesfile'
# loendab stringi esinemised etteantud failis
def matchCountInFile(str, filename):
log_file = open(filename, 'r')
count = 0
for line in log_file:
if re.search(str, line):
count=count+1
return count
try:
# loeme ja kontrollime getopti abil argumendid
opts, args = getopt.getopt(sys.argv[1:], "li:v", ["logfile=", "iptablesfile="])
AUTH_LOG_FILE = ''
IP_TABLES_FILE = ''
for opt, arg in opts:
if opt == '--logfile':
AUTH_LOG_FILE = arg
elif opt == '--iptablesfile':
IP_TABLES_FILE = arg
print 'AUTH_LOG_FILE=' + AUTH_LOG_FILE
print 'IP_TABLES_FILE=' + IP_TABLES_FILE
if AUTH_LOG_FILE.__len__() < 1:
raise Exception('Invalid auth log filename')
if IP_TABLES_FILE.__len__() < 1:
raise Exception('Invalid iptables filename')
if not os.path.isfile(AUTH_LOG_FILE):
raise Exception('Auth log file does not exist')
ip_pattern = re.compile('([0-9]{1,3}\.){3}[0-9]{1,3}')
# valmistame logifaili lugemiseks ette
log_file = open(AUTH_LOG_FILE, 'r')
ip_address_array = []
ip_tables_filehandle = None
# itereerime yle logiridade
for log_line in log_file:
# read, mis on veaga
if (re.search('error', log_line) != None or re.search('illegal', log_line) != None or re.search('not allowed', log_line) != None):
ip_address_match = re.search(ip_pattern, log_line)
if (ip_address_match == None):
continue
# leiame rea pealt IP aadressi
ip_address = ip_address_match.group(0)
occurences = matchCountInFile(ip_address, AUTH_LOG_FILE)
# vajadusel blacklistime
if occurences >= BLOCK_LEVEL and not ip_address in ip_address_array:
ip_address_array.append(ip_address)
print "Blacklisting " + ip_address + " with " + str(occurences) + " occurences"
if ip_tables_filehandle == None:
ip_tables_filehandle = open(IP_TABLES_FILE, 'w')
ip_tables_filehandle.write("iptables -A INPUT -s " + ip_address + " -j DROP\n")
log_file.close()
if (ip_tables_filehandle != None):
ip_tables_filehandle.close()
except getopt.GetoptError, err:
print str(err)
usage()
sys.exit(2)
# k2ivitame meetodi
if __name__ == "__main__":
main()