[config, firewall4, ipt, deconnexion] Bridage pour les décos pour upload
This commit is contained in:
parent
c03e0187b3
commit
90764dba42
6 changed files with 50 additions and 19 deletions
|
@ -278,11 +278,12 @@ file_pickle = { 4 : '/tmp/ipt_pickle',
|
||||||
6 : '/tmp/ip6t_pickle'
|
6 : '/tmp/ip6t_pickle'
|
||||||
}
|
}
|
||||||
|
|
||||||
blacklist_sanctions = ['upload', 'warez', 'p2p', 'autodisc_p2p','autodisc_virus','virus','autodisc_upload', 'bloq']
|
blacklist_sanctions = ['upload', 'warez', 'p2p', 'autodisc_p2p','autodisc_virus','virus', 'bloq']
|
||||||
if bl_carte_et_definitif:
|
if bl_carte_et_definitif:
|
||||||
blacklist_sanctions.append('carte_etudiant')
|
blacklist_sanctions.append('carte_etudiant')
|
||||||
blacklist_sanctions_soft = ['autodisc_virus','ipv6_ra','mail_invalide','virus',
|
blacklist_sanctions_soft = ['autodisc_virus','ipv6_ra','mail_invalide','virus',
|
||||||
'upload', 'warez', 'p2p', 'autodisc_p2p', 'autodisc_upload', 'bloq','carte_etudiant','chambre_invalide']
|
'upload', 'warez', 'p2p', 'autodisc_p2p', 'bloq','carte_etudiant','chambre_invalide']
|
||||||
|
blacklist_bridage_upload = ['autodisc_upload']
|
||||||
|
|
||||||
adm_users = [ 'root', 'identd', 'daemon', 'postfix', 'freerad', 'amavis',
|
adm_users = [ 'root', 'identd', 'daemon', 'postfix', 'freerad', 'amavis',
|
||||||
'nut', 'respbats', 'list', 'sqlgrey', 'ntpd', 'lp' ]
|
'nut', 'respbats', 'list', 'sqlgrey', 'ntpd', 'lp' ]
|
||||||
|
|
|
@ -24,8 +24,8 @@ logiciels envoyant une très grande quantité de petites données
|
||||||
(vidéo-conférence par exemple). Il peut y avoir d'autres raisons.
|
(vidéo-conférence par exemple). Il peut y avoir d'autres raisons.
|
||||||
|
|
||||||
|
|
||||||
Si cela continuait, et que tu dépassais la limite acceptable des 4096
|
Si cela continuait, et que tu dépassais la limite acceptable des 3789
|
||||||
Mo sur 24 heures, tu serais automatiquement déconnecté du réseau pour
|
Mo sur 24 heures, ton débit serais automatiquement fortement limité pour
|
||||||
une durée de 24 heures. Il t'appartient donc de surveiller cela de
|
une durée de 24 heures. Il t'appartient donc de surveiller cela de
|
||||||
plus près et de faire en sorte que tes machines n'uploadent pas de
|
plus près et de faire en sorte que tes machines n'uploadent pas de
|
||||||
manière excessive à l'avenir.
|
manière excessive à l'avenir.
|
||||||
|
@ -50,15 +50,13 @@ Content-Type: text/plain; charset="utf-8"
|
||||||
|
|
||||||
Bonjour %(proprio)s,
|
Bonjour %(proprio)s,
|
||||||
|
|
||||||
Tu as temporairement été déconnecté du réseau en raison de l'envoi trop
|
Ton débit à été temporairement limité en raison de l'envoi trop
|
||||||
important de données vers l'extérieur (%(upload)s Mo en 24h).
|
important de données vers l'extérieur (%(upload)s Mo en 24h).
|
||||||
|
|
||||||
Tu as toujours accès au web ainsi qu'à tes mails crans mais tous les
|
Si cela devait se renouveler trop souvent, tu serais déconnecté
|
||||||
autres services te sont suspendus. Si cela devait se renouveler trop
|
complètement pour une durée plus importante.
|
||||||
souvent, tu serais déconnecté complètement pour une durée plus
|
Il t'appartient donc de surveiller cela de plus près et de faire en sorte que
|
||||||
importante. Il t'appartient donc de surveiller cela de plus près et de
|
ta machine n'uploade plus de manière excessive à l'avenir.
|
||||||
faire en sorte que ta machine n'uploade plus de manière excessive à
|
|
||||||
l'avenir.
|
|
||||||
|
|
||||||
Pour plus d'informations, tu peux consulter la page :
|
Pour plus d'informations, tu peux consulter la page :
|
||||||
http://wiki.crans.org/VieCrans/DéconnexionPourUpload
|
http://wiki.crans.org/VieCrans/DéconnexionPourUpload
|
||||||
|
|
|
@ -11,7 +11,7 @@ exempt = [ ['138.231.136.0/21', '138.231.0.0/16'],
|
||||||
soft = 300
|
soft = 300
|
||||||
|
|
||||||
#: limite hard
|
#: limite hard
|
||||||
hard = 4096
|
hard = 3789
|
||||||
|
|
||||||
#: envoyer des mails à disconnect@ en cas de dépassement soft ?
|
#: envoyer des mails à disconnect@ en cas de dépassement soft ?
|
||||||
disconnect_mail_soft = False
|
disconnect_mail_soft = False
|
||||||
|
|
|
@ -7,7 +7,7 @@ import sys
|
||||||
sys.path.append('/usr/scripts/gestion')
|
sys.path.append('/usr/scripts/gestion')
|
||||||
sys.path.append('/usr/scripts/lc_ldap')
|
sys.path.append('/usr/scripts/lc_ldap')
|
||||||
|
|
||||||
from config import NETs, blacklist_sanctions, blacklist_sanctions_soft, mac_komaz, mac_titanic, adm_users, accueil_route
|
from config import NETs, blacklist_sanctions, blacklist_sanctions_soft, blacklist_bridage_upload, mac_komaz, mac_titanic, adm_users, accueil_route
|
||||||
|
|
||||||
import pwd
|
import pwd
|
||||||
import config.firewall
|
import config.firewall
|
||||||
|
@ -223,7 +223,6 @@ class firewall_base(object) :
|
||||||
}
|
}
|
||||||
|
|
||||||
self.ipset['blacklist']={
|
self.ipset['blacklist']={
|
||||||
'soft' : Ipset("BLACKLIST-SOFT","ipmap","--from 138.231.136.0 --to 138.231.151.255"),
|
|
||||||
'hard' : Ipset("BLACKLIST-HARD","ipmap","--from 138.231.136.0 --to 138.231.151.255"),
|
'hard' : Ipset("BLACKLIST-HARD","ipmap","--from 138.231.136.0 --to 138.231.151.255"),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -472,6 +471,11 @@ class firewall_komaz(firewall_base_routeur):
|
||||||
'allow' : Ipset("RESEAUX-NON-ROUTABLE-ALLOW","nethash"),
|
'allow' : Ipset("RESEAUX-NON-ROUTABLE-ALLOW","nethash"),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
self.ipset['blacklist'].update({
|
||||||
|
'soft' : Ipset("BLACKLIST-SOFT","ipmap","--from 138.231.136.0 --to 138.231.151.255"),
|
||||||
|
'upload' : Ipset("BLACKLIST-UPLOAD","ipmap","--from 138.231.136.0 --to 138.231.151.255"),
|
||||||
|
})
|
||||||
|
|
||||||
def blacklist_maj(self, ips):
|
def blacklist_maj(self, ips):
|
||||||
self.blacklist_hard_maj(ips)
|
self.blacklist_hard_maj(ips)
|
||||||
self.blacklist_soft_maj(ips)
|
self.blacklist_soft_maj(ips)
|
||||||
|
@ -673,12 +677,19 @@ class firewall_komaz(firewall_base_routeur):
|
||||||
for ip in ip_list:
|
for ip in ip_list:
|
||||||
machine = conn.search("ipHostNumber=%s" % ip)
|
machine = conn.search("ipHostNumber=%s" % ip)
|
||||||
# Est-ce qu'il y a des blacklists soft parmis les blacklists de la machine
|
# Est-ce qu'il y a des blacklists soft parmis les blacklists de la machine
|
||||||
if machine and set([bl.value['type'] for bl in machine[0].blacklist_actif() ]).intersection(blacklist_sanctions_soft):
|
if machine:
|
||||||
|
if set([bl.value['type'] for bl in machine[0].blacklist_actif() ]).intersection(blacklist_sanctions_soft):
|
||||||
try: self.ipset['blacklist']['soft'].add(ip)
|
try: self.ipset['blacklist']['soft'].add(ip)
|
||||||
except IpsetError: pass
|
except IpsetError: pass
|
||||||
|
if machine and set([bl.value['type'] for bl in machine[0].blacklist_actif() ]).intersection(blacklist_bridage_upload):
|
||||||
|
try: self.ipset['blacklist']['upload'].add(ip)
|
||||||
|
except IpsetError: pass
|
||||||
else:
|
else:
|
||||||
try: self.ipset['blacklist']['soft'].delete(ip)
|
try: self.ipset['blacklist']['soft'].delete(ip)
|
||||||
except IpsetError: pass
|
except IpsetError: pass
|
||||||
|
try: self.ipset['blacklist']['upload'].delete(ip)
|
||||||
|
except IpsetError: pass
|
||||||
|
|
||||||
|
|
||||||
def blacklist_soft(self, table=None, fill_ipset=False, apply=False):
|
def blacklist_soft(self, table=None, fill_ipset=False, apply=False):
|
||||||
"""Redirige les gens blacklisté vers le portail captif"""
|
"""Redirige les gens blacklisté vers le portail captif"""
|
||||||
|
@ -696,7 +707,17 @@ class firewall_komaz(firewall_base_routeur):
|
||||||
for ip in ips
|
for ip in ips
|
||||||
)
|
)
|
||||||
|
|
||||||
|
bl_upload_ips = set(
|
||||||
|
str(ip) for ips in
|
||||||
|
[
|
||||||
|
machine['ipHostNumber'] for machine in self.blacklisted_machines()
|
||||||
|
if set([bl.value['type'] for bl in machine.blacklist_actif() ]).intersection(blacklist_bridage_upload)
|
||||||
|
]
|
||||||
|
for ip in ips
|
||||||
|
)
|
||||||
|
|
||||||
self.ipset['blacklist']['soft'].restore(bl_soft_ips)
|
self.ipset['blacklist']['soft'].restore(bl_soft_ips)
|
||||||
|
self.ipset['blacklist']['upload'].restore(bl_upload_ips)
|
||||||
print OK
|
print OK
|
||||||
|
|
||||||
if table == 'mangle':
|
if table == 'mangle':
|
||||||
|
@ -830,6 +851,9 @@ class firewall_komaz(firewall_base_routeur):
|
||||||
for net in NETs['personnel-ens']:
|
for net in NETs['personnel-ens']:
|
||||||
self.add(table, chain, '-o %s -d %s -j CLASSIFY --set-class 1:3' % (dev['app'], net))
|
self.add(table, chain, '-o %s -d %s -j CLASSIFY --set-class 1:3' % (dev['app'], net))
|
||||||
self.add(table, chain, '-o %s -s %s -j CLASSIFY --set-class 1:2' % (dev['out'], net))
|
self.add(table, chain, '-o %s -s %s -j CLASSIFY --set-class 1:2' % (dev['out'], net))
|
||||||
|
|
||||||
|
# Classification pour les blacklists upload
|
||||||
|
self.add(table, chain, '-o %s -m set --match-set %s src -j CLASSIFY --set-class 1:11' % (dev['out'], self.ipset['blacklist']['upload']))
|
||||||
print OK
|
print OK
|
||||||
|
|
||||||
if run_tc:
|
if run_tc:
|
||||||
|
@ -851,6 +875,13 @@ class firewall_komaz(firewall_base_routeur):
|
||||||
tc('qdisc add dev %s parent 1:10 '
|
tc('qdisc add dev %s parent 1:10 '
|
||||||
'handle 10: sfq perturb 10' % dev[int_key])
|
'handle 10: sfq perturb 10' % dev[int_key])
|
||||||
|
|
||||||
|
|
||||||
|
#Classe des decos upload
|
||||||
|
tc('class add dev %s parent 1:2 classid 1:11 '
|
||||||
|
'htb rate 40kbps ceil 40kbps prio 1' % dev['out'])
|
||||||
|
tc('qdisc add dev %s parent 1:11 '
|
||||||
|
'handle 11: sfq perturb 10' % dev['out'])
|
||||||
|
|
||||||
for int_key in ['app']:
|
for int_key in ['app']:
|
||||||
try:
|
try:
|
||||||
tc('qdisc del dev %s root' % dev[int_key])
|
tc('qdisc del dev %s root' % dev[int_key])
|
||||||
|
|
|
@ -25,13 +25,14 @@ import os, re, syslog, cPickle, socket
|
||||||
from ldap_crans import crans_ldap, hostname
|
from ldap_crans import crans_ldap, hostname
|
||||||
from commands import getstatusoutput
|
from commands import getstatusoutput
|
||||||
from config import NETs, role, prefix, rid, output_file, filter_policy
|
from config import NETs, role, prefix, rid, output_file, filter_policy
|
||||||
from config import blacklist_sanctions, blacklist_sanctions_soft, file_pickle, ann_scol, periode_transitoire
|
from config import blacklist_sanctions, blacklist_sanctions_soft, blacklist_bridage_upload, file_pickle, ann_scol, periode_transitoire
|
||||||
from iptools import AddrInNet
|
from iptools import AddrInNet
|
||||||
from ridtools import Rid
|
from ridtools import Rid
|
||||||
import subprocess
|
import subprocess
|
||||||
import netaddr
|
import netaddr
|
||||||
|
|
||||||
blacklist_sanctions.extend(blacklist_sanctions_soft)
|
blacklist_sanctions.extend(blacklist_sanctions_soft)
|
||||||
|
blacklist_sanctions.extend(blacklist_bridage_upload)
|
||||||
|
|
||||||
Mangle_policy = """
|
Mangle_policy = """
|
||||||
*mangle
|
*mangle
|
||||||
|
|
|
@ -312,7 +312,7 @@ for elupload, eltype, elid in uploadeurs:
|
||||||
mail.sendmail(upload.expediteur, upload.expediteur, corps)
|
mail.sendmail(upload.expediteur, upload.expediteur, corps)
|
||||||
|
|
||||||
# On supprime les vieux avertisements
|
# On supprime les vieux avertisements
|
||||||
curseur.execute("DELETE FROM avertis_upload_hard WHERE date < timestamp 'now' - interval '1 day'")
|
curseur.execute("DELETE FROM avertis_upload_hard WHERE date < timestamp 'now' - interval '85200 seconds'") # 23h et 40min pour prolonger les blacklists toujours au dessus de la limite
|
||||||
curseur.execute("DELETE FROM avertis_upload_soft WHERE date < timestamp 'now' - interval '1 day'")
|
curseur.execute("DELETE FROM avertis_upload_soft WHERE date < timestamp 'now' - interval '1 day'")
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue