On durcit avec du lubrifiant un peu le parefeu pour le bruteforce ssh.
This commit is contained in:
parent
2838a60501
commit
a70205526f
2 changed files with 32 additions and 30 deletions
|
@ -94,6 +94,7 @@ class firewall(base.firewall_routeur):
|
|||
self.add(table, chain, '-p icmp -j ACCEPT')
|
||||
self.add(table, chain, '-m state --state RELATED,ESTABLISHED -j ACCEPT')
|
||||
self.add(table, chain, '-j %s' % blacklist_soft_chain)
|
||||
self.add(table, chain, '-j %s' % self.limit_ssh_connexion(table))
|
||||
for net in base.config.NETs['all'] + base.config.NETs['adm'] + base.config.NETs['personnel-ens']:
|
||||
self.add(table, chain, '-s %s -j %s' % (net, mac_ip_chain))
|
||||
self.add(table, chain, '-j %s' % blacklist_hard_chain)
|
||||
|
@ -156,7 +157,7 @@ class firewall(base.firewall_routeur):
|
|||
if table == 'filter':
|
||||
pretty_print(table, chain)
|
||||
self.add(table, chain, '-i %s -p tcp --dport ssh -m state --state NEW -m recent --name SSH --set' % dev['out'])
|
||||
self.add(table, chain, '-i %s -p tcp --dport ssh -m state --state NEW -m recent --name SSH --update --seconds 30 --hitcount 10 --rttl -j DROP' % dev['out'])
|
||||
self.add(table, chain, '-i %s -p tcp --dport ssh -m state --state NEW -m recent --name SSH --update --seconds 120 --hitcount 10 --rttl -j DROP' % dev['out'])
|
||||
print OK
|
||||
|
||||
if apply:
|
||||
|
|
|
@ -20,7 +20,10 @@
|
|||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
import sys, re, os, pwd
|
||||
import sys
|
||||
import re
|
||||
import os
|
||||
import pwd
|
||||
|
||||
sys.path.append('/usr/scripts/gestion')
|
||||
|
||||
|
@ -57,13 +60,11 @@ def ports(dev_ip6, dev_list):
|
|||
# Il semble qu'il faille un kernel >= .29 et iptables >= 1.4.3
|
||||
# http://netfilter.org/projects/iptables/files/changes-iptables-1.4.3.txt
|
||||
|
||||
# ip6tables.filter.forward('-i %s -p tcp --dport ssh -m state --state NEW -m \
|
||||
#recent --name SSH --set ' % dev_ip6)
|
||||
# ip6tables.filter.forward('-i %s -p tcp --dport ssh -m state --state NEW -m \
|
||||
#recent --name SSH --update --seconds 60 --hitcount 4 --rttl -j DROP' %
|
||||
# dev_ip6)
|
||||
# ip6tables.filter.forward('-i %s -p tcp --dport ssh -m state --state NEW \
|
||||
#-j ACCEPT' % dev_ip6)
|
||||
ip6tables.filter.forward('-i %s -p tcp --dport ssh -m state --state NEW -m recent --name SSH --set ' % dev_ip6)
|
||||
ip6tables.filter.forward('-i %s -p tcp --dport ssh -m state --state NEW -m recent --name SSH --update --seconds 120 --hitcount 10 --rttl -j DROP' % dev_ip6)
|
||||
ip6tables.filter.input('-i %s -p tcp --dport ssh -m state --state NEW -m recent --name SSH --set ' % dev_ip6)
|
||||
ip6tables.filter.input('-i %s -p tcp --dport ssh -m state --state NEW -m recent --name SSH --update --seconds 120 --hitcount 10 --rttl -j DROP' % dev_ip6)
|
||||
#ip6tables.filter.forward('-i %s -p tcp --dport ssh -m state --state NEW -j ACCEPT' % dev_ip6)
|
||||
|
||||
for proto in open_ports.keys():
|
||||
ip6tables.filter.forward('-i %s -p %s -m multiport --dports %s -j ACCEPT' % (dev_ip6, proto, open_ports[proto]))
|
||||
|
@ -72,7 +73,7 @@ def ports(dev_ip6, dev_list):
|
|||
prefix[dprefix[type_machine]][0], 'EXT' + re.sub('-', '',
|
||||
type_machine.upper())))
|
||||
eval('ip6tables.filter.ext' + re.sub('-', '', type_machine))('-j REJECT --reject-with icmp6-port-unreachable')
|
||||
|
||||
|
||||
# Port ouvert CRANS->EXT
|
||||
for dev in dev_list:
|
||||
ip6tables.filter.forward('-i %s -p udp -m multiport --dports 0:136,140:65535 -j ACCEPT' % dev)
|
||||
|
@ -97,7 +98,7 @@ def basic_fw():
|
|||
for icmpv6 in ['neighbour-solicitation','neighbour-advertisement','redirect','router-solicitation']:
|
||||
ip6tables.filter.input('-p icmpv6 -m icmp6 --icmpv6-type %s -j ACCEPT' % icmpv6)
|
||||
ip6tables.filter.output('-p icmpv6 -m icmp6 --icmpv6-type %s -j ACCEPT' % icmpv6)
|
||||
|
||||
|
||||
# on accepte les ping
|
||||
for icmpv6 in authorized_icmpv6:
|
||||
ip6tables.filter.forward('-p icmpv6 -m icmp6 --icmpv6-type %s -j ACCEPT' % icmpv6)
|
||||
|
@ -106,26 +107,26 @@ def basic_fw():
|
|||
# On ne vérifie rien sur les ip qui ne sont pas dans notre prefix
|
||||
for net in prefix['subnet']:
|
||||
ip6tables.filter.ieui64('! -s %s -j RETURN' % net)
|
||||
|
||||
|
||||
# Correspondance MAC-IP
|
||||
mac_ip(ip6tables, machines, ['fil', 'adherents-v6', 'adm', 'wifi', 'wifi-adh-v6', 'serveurs'])
|
||||
|
||||
|
||||
def main_router():
|
||||
''' Firewall pour le router principal '''
|
||||
|
||||
|
||||
#TODO : réseaux non routable, interaction avec generate
|
||||
# il faut aussi voir les conditions pour passer la ctstate avant MAC-IP
|
||||
# (normalement, il n'y a pas de problèmes.
|
||||
# et peut être aussi avant blackliste (il faut prévoir un script qui
|
||||
# enlève les entrées dans la conntract lors de la mise en place de la
|
||||
# blackliste
|
||||
|
||||
|
||||
|
||||
dev_crans = iface6('fil')
|
||||
dev_wifi = iface6('wifi')
|
||||
dev_ip6 = iface6('sixxs2')
|
||||
|
||||
|
||||
ip6tables.mangle.forward("-o %s -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu" % dev_ip6)
|
||||
ip6tables.mangle.forward("-o %s -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu" % dev_wifi)
|
||||
ip6tables.mangle.forward("-o %s -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu" % dev_crans)
|
||||
|
@ -133,14 +134,14 @@ def main_router():
|
|||
ip6tables.mangle.prerouting('-i %s -m state --state NEW -j LOG --log-prefix "LOG_ALL "' % dev_crans)
|
||||
ip6tables.mangle.prerouting('-i %s -m state --state NEW -j LOG --log-prefix "LOG_ALL "' % dev_wifi)
|
||||
ip6tables.mangle.prerouting('-i %s -m state --state NEW -j LOG --log-prefix "LOG_ALL "' % dev_ip6 )
|
||||
|
||||
|
||||
# On force le /32 de google à passer en ipv4 pour tester si ça soulage le tunnel ipv6
|
||||
ip6tables.filter.forward('-o %s -p tcp -d 2a00:1450:4006::/32 -j REJECT' % dev_ip6)
|
||||
|
||||
|
||||
# Ipv6 sur évènementiel, on ne laisse sortir que si ça vient de la mac d'ytrap-llatsni
|
||||
ip6tables.filter.forward('-o %s -d 2a01:240:fe3d:d2::/64 -j ACCEPT' % dev_crans)
|
||||
ip6tables.filter.forward('-o %s -m mac --mac-source 00:00:6c:69:69:01 -s 2a01:240:fe3d:d2::/64 -j ACCEPT' % dev_ip6)
|
||||
|
||||
|
||||
# Les blacklistes
|
||||
# Si on les met après la règle conntrack, une connexion existante ne sera
|
||||
# pas sevrée et dinc avec un tunnel ssh idoine, la blacklist aurait aucun
|
||||
|
@ -151,15 +152,15 @@ def main_router():
|
|||
ip6tables.filter.forward('-i %s -j BLACKLIST_SRC' % dev_crans)
|
||||
ip6tables.filter.forward('-i %s -j BLACKLIST_SRC' % dev_wifi)
|
||||
ip6tables.filter.forward('-i %s -j BLACKLIST_DST' % dev_ip6)
|
||||
|
||||
|
||||
#tracker_torrent(ip6tables)
|
||||
#ip6tables.filter.forward('-o %s -p udp -j TRACKER_TORRENT' % dev_ip6 )
|
||||
#ip6tables.filter.forward('-o %s -p tcp -m string --algo kmp --string "GET /" -j TRACKER_TORRENT' % dev_ip6)
|
||||
#ip6tables.filter.forward('-o %s -p tcp -m string --algo kmp --string "get /" -j TRACKER_TORRENT' % dev_ip6)
|
||||
|
||||
|
||||
|
||||
ip6tables.filter.forward('-m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT')
|
||||
|
||||
|
||||
# On filtre les réseaux non routable et aussi on accepte en entrée
|
||||
# que les paquets dont la source n'est pas notre plage, pour éviter
|
||||
# http://travaux.ovh.net/?do=details&id=5183
|
||||
|
@ -182,18 +183,18 @@ def main_router():
|
|||
|
||||
# Ouverture des ports
|
||||
ports(dev_ip6, [dev_crans, dev_wifi])
|
||||
|
||||
|
||||
# On met en place le forwarding
|
||||
enable_forwarding(6)
|
||||
|
||||
|
||||
def routeur_nat64():
|
||||
''' Firewall pour le nat64 '''
|
||||
|
||||
|
||||
dev_crans = iface6('fil')
|
||||
dev_adm = iface6('adm')
|
||||
dev_v6only = iface6('v6only')
|
||||
|
||||
|
||||
# Les blacklistes
|
||||
# Si on les met après la règle conntrack, une connexion existante ne sera
|
||||
# pas sevrée et dinc avec un tunnel ssh idoine, la blacklist aurait aucun
|
||||
|
@ -203,10 +204,10 @@ def routeur_nat64():
|
|||
blacklist(ip6tables)
|
||||
ip6tables.filter.forward('-i %s -j BLACKLIST_SRC' % dev_v6only)
|
||||
ip6tables.filter.forward('-i %s -j BLACKLIST_DST' % dev_crans)
|
||||
|
||||
|
||||
|
||||
|
||||
ip6tables.filter.forward('-m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT')
|
||||
|
||||
|
||||
# Pour les autres connections
|
||||
for type_m in [i for i in ['fil', 'adherents-v6', 'wifi', 'wifi-adh-v6'] if not 'v6' in i]:
|
||||
ip6tables.filter.mac('-s %s -j %s' % (prefix[type_m][0], 'MAC' +
|
||||
|
@ -258,7 +259,7 @@ def adherents_server():
|
|||
|
||||
# On arrête tout
|
||||
ip6tables.filter.srv_out_adm('-j REJECT --reject-with icmp6-adm-prohibited')
|
||||
|
||||
|
||||
def appt_proxy():
|
||||
pass
|
||||
|
||||
|
@ -276,7 +277,7 @@ def start():
|
|||
global machines
|
||||
machines = db.all_machines(graphic = True)
|
||||
print hostname
|
||||
|
||||
|
||||
# On supprime les anciennes règles si elles existent.
|
||||
try:
|
||||
os.remove(output_file[6])
|
||||
|
@ -311,7 +312,7 @@ def start():
|
|||
def stop():
|
||||
''' Vide les tables '''
|
||||
# TODO
|
||||
# il manque une gestion des règles de routage spéciales réalisées à
|
||||
# il manque une gestion des règles de routage spéciales réalisées à
|
||||
# l'aide de ip rule et ip route
|
||||
# idée faire une classe et la stocker en pickle pour savoir ce qui a été
|
||||
# ajouté
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue