Mostrando entradas con la etiqueta bloquear. Mostrar todas las entradas
Mostrando entradas con la etiqueta bloquear. Mostrar todas las entradas

miércoles, 12 de septiembre de 2018

Mikrotik, queue tree basado en L7

En entradas anteriores compartí distintas formas de regular el tráfico a traves de queue simple y queue tree.
Ahora, experimentando con un nuevo router, el ccr 1009 (creedence) encontré este script para la versión 6 de ROS basado en Layer 7.

Como se puede observar, definir las reglas de layer 7 es a primera vista algo sencillo, sin embargo hay que comprobar luego que estas funcionen de acuerdo a nuestras necesidades.
Por el momento yo dejé el script tal como lo programó el autor y estoy monitoreando el tráfico observando la actividad en cada una de las ramas del queue tree.
Solo faltaría agregar una rama más que le dé baja prioridad al resto del tráfico desconocido.

El tráfico considerado es el siguiente:


VoIP
VPN
Tráfico de juegos (red xbox, red PS Wii, WoW, LoL, etc.)
Transmisión de video (netflix, youtube, etc.)
Navegación Http (conexiones de menos de 5 MB)
Protocolos de administración (ssh, telnet, etc.)
Servicios de administración (DNS, ICMP, etc.)
Todo lo que sobra se considera basura y lucha por lo que queda.



Agregamos dos clases nuevas de queue:
 /queue type
add kind=pfifo name=streaming-video-in pfifo-limit=500
add kind=pcq name=games-in-pcq pcq-classifier=dst-address \
    pcq-dst-address6-mask=64 pcq-rate=100k pcq-src-address6-mask=64 \
    pcq-total-limit=750000KiB
 creamos los filtros regex según nuestras necesidades:
/ip firewall layer7-protocol
add name=speedtest-servers regexp="^.*(get|GET).+speedtest.*\$"
add name=torrent-wwws regexp="^.*(get|GET).+(torrent|thepiratebay|isohunt|ente\
    rtane|demonoid|btjunkie|mininova|flixflux|vertor|h33t|zoozle|bitnova|bitso\
    up|meganova|fulldls|btbot|fenopy|gpirate|commonbits).*\$"
add name=torrent-dns regexp="^.+(torrent|thepiratebay|isohunt|entertane|demono\
    id|btjunkie|mininova|flixflux|vertor|h33t|zoozle|bitnova|bitsoup|meganova|\
    fulldls|btbot|fenopy|gpirate|commonbits).*\$"
add name=netflix regexp="^.*(get|GET).+(netflix).*\$"
add name=mp4 regexp="^.*(get|GET).+\\.mp4.*\$"
add name=swf regexp="^.*(get|GET).+\\.swf.*\$"
add name=flv regexp="^.*(get|GET).+\\.flv.*\$"
add name=video regexp="^.*(get|GET).+(\\.flv|\\.mp4|netflix|\\.swf).*\$"
Creamos las listas de direcciones de la salida a Internet y la red interna:
 /ip firewall address-list
add address=192.168.0.0/16 list=internal-nets
add address=138.121.228.0/24 list=external-nets
add address=192.168.254.90 comment="cliente 1" list=customer-servers
 creamos las reglas del firewall para marcar el tráfico conocido:
/ip firewall mangle
add action=mark-packet chain=prerouting comment=\
    "internal-traffic packet mark" dst-address-list=internal-nets \
    new-packet-mark=internal-traffic passthrough=no src-address-list=\
    internal-nets
add action=mark-packet chain=prerouting comment=\
    "customer-servers-out packet mark" new-packet-mark=customer-servers-out \
    passthrough=no src-address-list=customer-servers
add action=mark-packet chain=prerouting comment=\
    "customer-servers-in packet mark" dst-address-list=customer-servers \
    new-packet-mark=customer-servers-in passthrough=no
add action=mark-packet chain=prerouting comment="admin-in packet mark DNS" \
    in-interface=!ISP new-packet-mark=admin-in passthrough=no protocol=udp \
    src-port=53
add action=mark-packet chain=prerouting comment="admin-in packet mark snmp" \
    dst-port=161 in-interface=ISP new-packet-mark=admin-in passthrough=no \
    protocol=udp
add action=mark-connection chain=prerouting comment=\
    "Remote Protocols admin connection mark" new-connection-mark=admin port=\
    20,21,22,23,3389,8291 protocol=tcp
add action=mark-connection chain=prerouting comment=\
    "icmp connection mark as admin" new-connection-mark=admin protocol=icmp \
    src-address-list=internal-nets
add action=mark-packet chain=prerouting comment="admin-in packet mark" \
    connection-mark=admin in-interface=ISP new-packet-mark=admin-in \
    passthrough=no
add action=mark-packet chain=prerouting comment="admin-out packet mark" \
    connection-mark=admin new-packet-mark=admin-out passthrough=no
add action=mark-connection chain=prerouting comment=\
    "streaming video connection mark" dst-port=80 layer7-protocol=video \
    new-connection-mark=streaming-video protocol=tcp src-address-list=\
    internal-nets
add action=mark-packet chain=prerouting comment=\
    "streaming video in packet mark" connection-mark=streaming-video \
    in-interface=ISP new-packet-mark=streaming-video-in passthrough=no
add action=mark-packet chain=prerouting comment=\
    "streaming video out packet mark" connection-mark=streaming-video \
    new-packet-mark=streaming-video-out passthrough=no
add action=mark-connection chain=prerouting comment=\
    "http traffic connection mark" dst-port=80,443 new-connection-mark=http \
    protocol=tcp src-address-list=internal-nets
add action=mark-connection chain=prerouting comment=\
    "http traffic connection mark" connection-bytes=5000000-4294967295 \
    dst-port=80,443 new-connection-mark=http-download protocol=tcp \
    src-address-list=internal-nets
add action=mark-packet chain=prerouting comment="http in packet mark" \
    connection-mark=http in-interface=ISP new-packet-mark=http-in \
    passthrough=no
add action=mark-packet chain=prerouting comment="http out packet mark" \
    connection-mark=http new-packet-mark=http-out passthrough=no
add action=mark-connection chain=prerouting comment=\
    "wow connetion mark as gaming" dst-port=\
    1119,3724,6112-6114,4000,6881-6999 new-connection-mark=games protocol=tcp \
    src-address-list=internal-nets
add action=mark-connection chain=prerouting comment=\
    "eve online connetion mark as gaming" dst-address=87.237.38.200 \
    new-connection-mark=games src-address-list=internal-nets
add action=mark-connection chain=prerouting comment=\
    "starcraft 2 connetion mark as gaming" dst-port=1119 new-connection-mark=\
    games protocol=tcp src-address-list=internal-nets
add action=mark-connection chain=prerouting comment=\
    "heros of newerth connetion mark as gaming" dst-port=11031,11235-11335 \
    new-connection-mark=games protocol=tcp src-address-list=internal-nets
add action=mark-connection chain=prerouting comment=\
    "steam connetion mark as gaming" dst-port=27014-27050 \
    new-connection-mark=games protocol=tcp src-address-list=internal-nets
add action=mark-connection chain=prerouting comment=\
    "xbox live connetion mark as gaming" dst-port=3074 new-connection-mark=\
    games protocol=tcp src-address-list=internal-nets
add action=mark-connection chain=prerouting comment=\
    "ps3 online connetion mark as gaming" dst-port=5223 new-connection-mark=\
    games protocol=tcp src-address-list=internal-nets
add action=mark-connection chain=prerouting comment=\
    "wii online connetion mark as gaming" dst-port=28910,29900,29901,29920 \
    new-connection-mark=games protocol=tcp src-address-list=internal-nets
add action=mark-packet chain=prerouting comment=\
    "games packet mark forever-saken-game" dst-address-list=external-nets \
    new-packet-mark=games-in passthrough=no src-address-list=\
    forever-saken-game
add action=mark-packet chain=prerouting comment="games packet mark wow" \
    dst-address-list=external-nets new-packet-mark=games-in passthrough=no \
    protocol=udp src-port=53,3724
add action=mark-packet chain=prerouting comment=\
    "games packet mark starcraft2" dst-address-list=external-nets \
    new-packet-mark=games-in passthrough=no protocol=udp src-port=1119,6113
add action=mark-packet chain=prerouting comment="games packet mark HoN" \
    dst-address-list=external-nets new-packet-mark=games-in passthrough=no \
    protocol=udp src-port=11031,11235-11335
add action=mark-packet chain=prerouting comment="games packet mark steam in" \
    dst-address-list=external-nets new-packet-mark=games-in passthrough=no \
    port=4380,28960,27000-27030 protocol=udp
add action=mark-packet chain=prerouting comment="games packet mark steam out" \
    dst-port=53,1500,3005,3101,3478,4379-4380,4380,28960,27000-27030,28960 \
    new-packet-mark=games-out passthrough=no protocol=udp src-address-list=\
    internal-nets
add action=mark-packet chain=prerouting comment="games packet mark xbox live" \
    dst-address-list=external-nets new-packet-mark=games-in passthrough=no \
    protocol=udp src-port=88,3074,3544,4500
add action=mark-packet chain=prerouting comment=\
    "games packet mark ps3 online" dst-address-list=external-nets \
    new-packet-mark=games-in passthrough=no protocol=udp src-port=\
    3478,3479,3658
add action=mark-packet chain=prerouting comment="games packet mark in" \
    connection-mark=games dst-address-list=external-nets new-packet-mark=\
    games-in passthrough=no
add action=mark-packet chain=prerouting comment="games packet mark out" \
    connection-mark=games new-packet-mark=games-out passthrough=no
add action=mark-packet chain=prerouting comment=\
    "voip-in packet mark teamspeak" dst-address-list=external-nets \
    new-packet-mark=voip-in passthrough=no protocol=udp src-port=9987
add action=mark-packet chain=prerouting comment=\
    "voip-out packet mark teamspeak" dst-port=9987 new-packet-mark=voip-out \
    passthrough=no protocol=udp src-address-list=internal-nets
add action=mark-packet chain=prerouting comment=\
    "voip-out packet mark teamspeak" dst-address-list=external-nets \
    new-packet-mark=voip-in passthrough=no protocol=udp src-port=9987
add action=mark-packet chain=prerouting comment=\
    "voip-in packet mark ventrilo" dst-address-list=external-nets \
    new-packet-mark=voip-in passthrough=no protocol=udp src-port=3784
add action=mark-packet chain=prerouting comment=\
    "voip-out packet mark ventrilo" dst-port=3784 new-packet-mark=voip-out \
    passthrough=no protocol=udp src-address-list=internal-nets
add action=mark-packet chain=prerouting comment=\
    "voip-in packet mark ventrilo" dst-address-list=external-nets \
    new-packet-mark=voip-in passthrough=no protocol=tcp src-port=3784
add action=mark-packet chain=prerouting comment=\
    "voip-out packet mark ventrilo" dst-port=3784 new-packet-mark=voip-out \
    passthrough=no protocol=tcp src-address-list=internal-nets
add action=mark-packet chain=prerouting comment="voip-in packet mark SIP" \
    dst-address-list=internal-nets new-packet-mark=voip-in passthrough=no \
    port=5060 protocol=tcp
add action=mark-packet chain=prerouting comment="voip-out packet mark SIP" \
    new-packet-mark=voip-out passthrough=no port=5060 protocol=tcp \
    src-address-list=internal-nets
add action=mark-packet chain=prerouting comment="voip-in packet mark udp SIP" \
    dst-address-list=internal-nets new-packet-mark=voip-in passthrough=no \
    port=5004,5060 protocol=udp
add action=mark-packet chain=prerouting comment=\
    "voip-out packet mark udp SIP" new-packet-mark=voip-out passthrough=no \
    port=5004,5060 protocol=udp src-address-list=internal-nets
add action=mark-packet chain=prerouting comment="voip-in packet mark RTP" \
    dst-address-list=internal-nets new-packet-mark=voip-in packet-size=\
    100-400 passthrough=no port=16348-32768 protocol=udp
add action=mark-packet chain=prerouting comment="voip-out packet mark RTP" \
    new-packet-mark=voip-in packet-size=100-400 passthrough=no port=\
    16348-32768 protocol=udp src-address-list=internal-nets
add action=mark-packet chain=prerouting comment="vpn-in packet mark GRE" \
    in-interface=ISP new-packet-mark=vpn-in passthrough=no protocol=gre
add action=mark-packet chain=prerouting comment="vpn-out packet mark GRE" \
    new-packet-mark=vpn-out passthrough=no protocol=gre
add action=mark-packet chain=prerouting comment="vpn-in packet mark ESP" \
    in-interface=ISP new-packet-mark=vpn-in passthrough=no protocol=ipsec-esp
add action=mark-packet chain=prerouting comment="vpn-out packet mark ESP" \
    new-packet-mark=vpn-out passthrough=no protocol=ipsec-esp
add action=mark-packet chain=prerouting comment=\
    "vpn-in packet mark VPN UDP ports" in-interface=ISP new-packet-mark=\
    vpn-in passthrough=no protocol=udp src-port=500,1701,4500
add action=mark-packet chain=prerouting comment=\
    "vpn-out packet mark VPN UDP ports" new-packet-mark=vpn-out passthrough=\
    no protocol=udp src-port=500,1701,4500
add action=mark-packet chain=prerouting comment="vpn-in packet mark PPTP" \
    in-interface=ISP new-packet-mark=vpn-in passthrough=no protocol=tcp \
    src-port=1723
add action=mark-packet chain=prerouting comment="vpn-out packet mark PPTP" \
    new-packet-mark=vpn-out passthrough=no protocol=tcp src-port=1723
add action=mark-packet chain=prerouting comment="all in" in-interface=ISP \
    new-packet-mark=in passthrough=no
add action=mark-packet chain=prerouting comment="all out" new-packet-mark=out \
    passthrough=no
 Finalmente creamos el queue tree:
/queue tree
add max-limit=10M name=in parent=global
add max-limit=10M name=out parent=global
add limit-at=3M max-limit=10M name=http-in packet-mark=http-in parent=in \
    priority=4 queue=default
add limit-at=4M max-limit=10M name=streaming-In packet-mark=\
    streaming-video-in parent=in priority=3 queue=streaming-video-in
add limit-at=500k max-limit=10M name=gaming-in packet-mark=games-in parent=in \
    priority=2 queue=games-in-pcq
add max-limit=10M name=download-in packet-mark=in parent=in queue=default
add max-limit=10M name=upload-out packet-mark=out parent=out queue=default
add limit-at=500k max-limit=10M name=gaming-out packet-mark=games-out parent=\
    out priority=2 queue=default
add limit-at=3M max-limit=10M name=http-out packet-mark=http-out parent=out \
    priority=4 queue=default
add limit-at=4M max-limit=10M name=streaming-Out packet-mark=\
    streaming-video-out parent=out priority=3 queue=default
add limit-at=1M max-limit=10M name=Clientes-In packet-mark=\
    customer-servers-in parent=in priority=1 queue=default
add limit-at=1M max-limit=10M name=Clientes-Out packet-mark=\
    customer-servers-out parent=out priority=1 queue=default
add limit-at=500k max-limit=10M name=voip-in packet-mark=voip-in parent=in \
    priority=1 queue=default
add limit-at=500k max-limit=10M name=vpn-in packet-mark=vpn-in parent=in \
    priority=2 queue=default
add limit-at=500k max-limit=10M name=voip-out packet-mark=voip-out parent=out \
    priority=1 queue=default
add limit-at=500k max-limit=10M name=vpn-out packet-mark=vpn-out parent=out \
    priority=2 queue=default
add limit-at=500k max-limit=10M name=admin-in packet-mark=admin-in parent=in \
    priority=1 queue=default
add limit-at=500k max-limit=10M name=admin-out packet-mark=admin-out parent=\
    out priority=1 queue=default

Aqui se puede observar un exceso en el trafico marcado como descargas:

 alarma en el tráfico http:

Tráfico total:

Fuente: http://gregsowell.com/?p=4665

domingo, 25 de diciembre de 2016

Bloquear publicidad con las facilidades del sistema

Existen varias aplicaciones que se agregan al navegador, como add block+, pero las mismas son fácilmente detectadas por los sitios de publicidad.
para evitar eso tenemos la facilidad (en Linux, MAC y Windows) de editar el archivo hosts que le indica al sistema cual es la IP de los hosts listados en ese archivo.
difiere el lugar donde se encuentra el mismo, por lo que solo voy a explicar cómo hacerlo en linux

creamos un script con este contenido:





#!/bin/bash -x
# si es la primera vez, hacemos una copia de nuestro /etc/hosts
ls /etc/hosts.old &> /dev/null
if [ $? -ne 0 ]; then
cp /etc/hosts /etc/hosts.old
fi
# comprobamos con curl si el documento se modifico en el servidor
OLD="Nov"
NEW=`curl -sI http://winhelp2002.mvps.org/hosts.txt| grep Last-Modified|awk '{print $4}'`
if [ $OLD != $NEW ]; then
wget http://winhelp2002.mvps.org/hosts.txt -O /root/hosts.txt
cp /etc/hosts.old /etc/hosts
cat /root/hosts.txt|uniq >> /etc/hosts
# actualizamos la variable OLD si cambió
sed -i.back "8s/OLD=${OLD}/OLD=${NEW}/" /root/addblock.sh
else
echo " el archivo no se modifico"
fi

exit


como se puede observar estamos bajando un archivo que periodicamente se actualiza de  servidores que se utilizan para emitir publicidad. Los mismos son signados a una IP general que no lleva a ningún lugar

Con curl comprobamos si  el archivo   fue modificado, si es asi lo bajamos y actualizamos nuestro /etc/hosts

con sed modificamos el valor de comparación para la variable de la fecha del archivo

Finalmente automatizamos la tarea creando una entrada para el cron:

ln -s addblock.sh /etc/cron.monthly/

martes, 13 de noviembre de 2012

Servidor Ubuntu con interface web zentyal



Zentyal es un conjunto de modulos administrados desde una interface web que permite a profesionales TIC administrar todos los servicios de una red informática, tales como el acceso a Internet, la seguridad de la red, la compartición de recursos, la infraestructura de la red o las comunicaciones, de forma sencilla y a través de una única plataforma.
se lo puede instalar directamente desde un CD que se obtiene en la página de los desarrolladores del software o mejor aun se puede instalar un servidor ubuntu server y luego desde los repositorios de zentyal instalar las partes o modulos que necesitemos. Si bien zentyal esta pensado para usuarios con poco o nada de conocimiento en GNU/Linux y como una alternativa libre a windows Small Business Server, aqui vamos a instalar un ubuntu server y zential para, sin dejar de administrar un servidor linux desde consola, tener a mano esta interesante herramienta visual.

Bajamos e instalamos la versión 32 ó 64 de ubuntu server 12.04 LTS

http://releases.ubuntu.com/precise/

No es necesario instalar ninguno de los servicios de servidor ya que estos se irán instalando a medida que seleccionamos los modulos de zentyal. Configuramos los repositorios de zentyal junto con la llave gpg y actualizamos.
apt-get install -y python-software-properties && sudo add-apt-repository ppa:zentyal/3.0 && sudo apt-get update

Instalamos el core de zentyal
sudo apt-get install zentyal
Y a partir de aqui ya podemos empezar a usar la interface de zentyal ingresando a:
https://localhost

si no estamos físicamente en el servidor, cambiamos localhost por la IP del mismo. El usuario y clave es el mismo que usamos en nuestro servidor Ubuntu


Comenzamos la instalacion
Seleccionamos los modulos que queremos instalar
Finalmente se nos muestra en iconos la lista de modulos a instalar Y comienza la descarga e instalación de los mismos
configuramos las interfaces y con esto damos por finalizado el proceso pudiendo comenzar a utilizar esta poderosa herramienta
Referencias:
  http://trac.zentyal.org/wiki/Documentation/Community/Installation/InstallationGuide http://doc.zentyal.org/es/presentation.html
  http://www.lapipaplena.net/foro/index.php?topic=37.0

jueves, 14 de junio de 2012

Iptables - Bloquear por String


Iptables - Bloquear por String

iptables -I  FORWARD -i vlan110 -p tcp --dport 443 -m string --string
"facebook" --algo kmp -j DROP


# iptables -nvL
Chain FORWARD (policy DROP 433 packets, 149K bytes)
 pkts bytes target     prot opt in     out     source
destination
   0     0 DROP       tcp  --  vlan110 *       0.0.0.0/0
0.0.0.0/0           tcp dpt:443 STRING match "facebook" ALGO name bm
TO 65535

Esto funciona de esta manera:

si el usuario busca "facebook" en https://google.com.ar encuentra y
accede a todo lo que este permitido.
por ejemplo

webtomich.com.ar/?tag=facebook

que es el quinto elemento mostrado en esa búsqueda.

Ahora, si el usuario tiene su facebook para conectarse automáticamente
al abrir el sitio, esta acción procede y se logea pero no puede ver el
contenido multimedia que esta bloqueado en el squid.


http://wiztelsys.com/Article_iptables_bob2.html
http://rhcelinuxguide.wordpress.com/2008/08/05/iptables-string-match-to-drop-malicious-urls/




System Requirements.

Preferred kernel version : 2.6.18 or later.
The iptables program(1.3.5 or later) installed on your machine.
The kernel should be compiled with string matching support. To do this, the following line should be added to the .config file prior to compiling the kernel:
CONFIG_NETFILTER_XT_MATCH_STRING=m

cat /proc/modules|grep xt_string

iptables -I INPUT -p tcp --dport 25 -m string --string "Subject" --algo bm -j DROP
**Do it now with an optimised rule!

The same rule might be modified to one with less overhead (that is, it uses less resources) by limiting the search specifying offset values, and by assuming that the SMTP subject header will be within an offset limit of 15000 in the packet.
iptables -I INPUT -p tcp --dport 25 -m string --string "Subject"  --algo bm --to 15000 -j DROP

miércoles, 23 de mayo de 2012

Iptables - bloquear Torrent

http://www.adminsehow.com/2011/04/block-bittorrent-traffic-on-your-linux-firewall-using-iptables/

Bloquear torrents con iptables

iptables -N DROPTORRENT > /dev/null 2> /dev/null
iptables -F DROPTORRENT
iptables -A DROPTORRENT -j LOG --log-prefix "DROPTORRENT "
iptables -A DROPTORRENT -j DROP

#Torrent
iptables -A FORWARD -m string --algo bm --string "BitTorrent" -j DROPTORRENT
iptables -A FORWARD -m string --algo bm --string "BitTorrent protocol" -j DROPTORRENT
iptables -A FORWARD -m string --algo bm --string "peer_id=" -j DROPTORRENT
iptables -A FORWARD -m string --algo bm --string ".torrent" -j DROPTORRENT
iptables -A FORWARD -m string --algo bm --string "announce.php?passkey=" -j DROPTORRENT
iptables -A FORWARD -m string --algo bm --string "torrent" -j DROPTORRENT
iptables -A FORWARD -m string --algo bm --string "announce" -j DROPTORRENT
iptables -A FORWARD -m string --algo bm --string "info_hash" -j DROPTORRENT

# DHT keyword
iptables -A FORWARD -m string --string "get_peers" --algo bm -j DROPTORRENT
iptables -A FORWARD -m string --string "announce_peer" --algo bm -j DROPTORRENT
iptables -A FORWARD -m string --string "find_node" --algo bm -j DROPTORRENT

lunes, 5 de marzo de 2012

limitar por tiempo iptables


Allow connections to webserver, 512/sec, as I said, small server
-A INPUT -m tcp -p tcp --dport 80 -m state --state NEW -m limit --limit 512/s --limit-burst 512 -j ACCEPT
# Allow SSL connections to webservers, same as port 80
-A INPUT -m tcp -p tcp --dport 443 -m state --state NEW -m limit --limit 512/s --limit-burst 512 -j ACCEPT
# Allow connections to mail server, small traffic, 10/s should be more than enough
-A INPUT -m tcp -p tcp --dport 25 -m state --state NEW -m limit --limit 10/s --limit-burst 10 -j ACCEPT
# Allow TLS connections to mail server
-A INPUT -m tcp -p tcp --dport 465 -m state --state NEW -m limit --limit 10/s --limit-burst 10 -j ACCEPT
# Allow connections to IMAP4 server
-A INPUT -m tcp -p tcp --dport 143 -m state --state NEW -m limit --limit 10/s --limit-burst 10 -j ACCEPT
# Allow connections to IMAPS server
-A INPUT -m tcp -p tcp --dport 993 -m state --state NEW -m limit --limit 10/s --limit-burst 10 -j ACCEPT
# Allow connections to sieve server
-A INPUT -m tcp -p tcp --dport 4190 -m state --state NEW -m limit --limit 3/min --limit-burst 3 -j ACCEPT
COMMIT