Blockports
Para bloquear muchos puertos con Iptables, basta con usar la opción multiport, sin embargo, tiene un límite máximo de 15 puertos. Uno más y genera error:
iptables -A INPUT -p tcp -m multiport --dports 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 -J DROP iptables v1.4.21: too many ports specified
Sobre el módulo "multiport" el manual cita:
This module matches a set of source or destination ports. Up to 15 ports can be specified. A port range (port:port) counts as two ports
Entonces se puede reducir un poco el problema. Por ejemplo, si hay hasta 7 rangos (+1 puerto único), se puede hacer algo como:
iptables -A INPUT -p tcp -m multiport --dport 1:5,10:50,6666 -j DROP
Pero más allá de esto no hay nada que podamos hacer (excepto parchear el kernel de linux con una versión modificada de Iptables sin la limitante, algo que no es recomendable) y al sobrepasar el límite de los 15 puertos tendríamos que crear otra regla igual para poner los restantes puertos.
Afortunadamente, hay una solución mucho más eficiente, que permite bloquear gran cantidad de puertos con tan solo unas pocas reglas. Hablamos de Ipset
Si no lo tenemos instalado, lo hacemos con
sudo apt -y install ipset
. Ahora creamos una ACL que incluya los puertos a o bloquear, que para este ejemplo llamaremos "blockports.txt", y en ella incluimos algunos puertos. La selección queda en manos del sysadmin). 19 22 23 41 43 44 58 59 60 3544 79 2869 1900 5000 3389 5900 8008 8443 9001 9002 9003 9004 9090 9101 9102 9103 9030 9031 9050 9150 4662 4672 6881 6882 6883 6884 6885 6886 6887 6888 6889 853 5353 161 631
Como podemos ver la cantidad de puertos supera el límite. Y ahora la regla con Ipset para bloquear el tráfico desde (src) y hacia (dst) estos puertos, dejando registros con ulog2:
### BLOCKPORTS ### # Remove or add ports to block # Default list: CHARGEN (19), SSH (22), TELNET (23), 6to4 (41,43,44,58,59,60,3544), FINGER (79), SSDP (2869,1900,5000), RDP-MS WBT Server (3389), RFB-VNC (5900), TOR Ports (8008,8443,9001:9004,9101:9103,9030,9031,9050,9150), SqueezeCenter/Cherokee/Openfire (9090), P2P (4662,4672,6881:6889), DNS over TLS (853), Multicast (5353), SNMP (161), IPP (631) ipset -F ipset -N -! blockports bitmap:port range 0-65535 for ports in $(cat blockports.txt); do ipset -A blockports $ports done for srcdst in `echo src dst`; do iptables -t mangle -A PREROUTING -m set --match-set blockports $srcdst -j NFLOG --nflog-prefix 'Blockports' iptables -t mangle -A PREROUTING -m set --match-set blockports $srcdst -j DROP iptables -A INPUT -m set --match-set blockports $srcdst -j NFLOG --nflog-prefix 'Blockports' iptables -A INPUT -m set --match-set blockports $srcdst -j DROP iptables -A FORWARD -m set --match-set blockports $srcdst -j NFLOG --nflog-prefix 'Blockports' iptables -A FORWARD -m set --match-set blockports $srcdst -j DROP iptables -A OUTPUT -m set --match-set blockports $srcdst -j NFLOG --nflog-prefix 'Blockports' iptables -A OUTPUT -m set --match-set blockports $srcdst -j DROP done
Lo que hemos hecho es un flush de reglas ipset, luego nombramos la regla como blockports, agregamos la lista y el rango con "bitmap:port" y todos los puertos de red, cargamos nuestra lista con un "cat" y finalmente bloqueamos los puertos con reglas iptables.
Post a Comment