Estrategias de simulacion de entornos desfavorables
03-04-2024
En el vertiginoso mundo del desarrollo de software, cada detalle cuenta. Desde la ideación inicial hasta la implementación final, cada paso en el proceso lleva consigo la promesa de innovación y la amenaza de error. Por esta razón, es fundamental contar con herramientas y estrategias que nos permitan validar, simular y mejorar constantemente nuestra labor. En este artículo, nos sumergiremos en técnicas y prácticas para garantizar la eficacia de nuestros desarrollos, con un enfoque especial en la simulación de condiciones de red. Así que, tanto si eres un desarrollador novato como si eres un veterano en el campo, te invito a explorar y descubrir herramientas que pueden revolucionar tu forma de trabajar. Estas estrategias pueden ser un valor diferencial para nuestros productos y colaboradores.
En este artículo, nos centraremos en diversas simulaciones usando la herramienta iptables, esencial para configurar el firewall en Linux y administrar las tablas de IP. Aunque mis pruebas se han limitado a entornos Linux, al final del post proporcionaré algunas recomendaciones y consejos para Windows y Mac.
En Linux también se encuentra la herramienta TC (Traffic Control), pero no tengo experiencia personal con ella.
Realizar este tipo de pruebas es una estrategia efectiva para simular distintos entornos de red, garantizando así el óptimo desempeño de la aplicación.
Conocer y aplicar estas tácticas brinda una sensación de control en el proyecto, beneficiando tanto al equipo como a la percepción del product owner. Al final del día, como empresa, resulta más sencillo invertir cuando se percibe que el equipo tiene todo bajo control.
A continuación, algunos ejemplos de estrategias usando iptables:
- Simular latencia en la red: combinar iptables con el módulo
netem
de Linux nos permite simular latencia en la red, esencial para evaluar el desempeño de la aplicación bajo condiciones de red no ideales. Ejemplo:tc qdisc add dev eth0 root netem delay 100ms
2. **Simular pérdida de paquetes**: para evaluar cómo la aplicación responde
ante la pérdida de paquetes en la red, se puede usar el siguiente comando:
tc qdisc add dev eth0 root netem loss 10%
3. **Limitar el ancho de banda**: esto es útil para testear el comportamiento
de la aplicación en redes lentas o saturadas. Ejemplo:
tc qdisc add dev eth0 root tbf rate 1mbit burst 32kbit latency 400ms
4. **Bloquear tráfico entrante/saliente**: Iptables facilita bloquear el
tráfico tanto entrante como saliente a determinados puertos o direcciones
IP. Este tipo de simulación, es valioso para probar respuestas ante
denegaciones de servicio (DoS) o interrupciones de conexión. Ejemplo:
iptables -A INPUT -p tcp --dport 80 -j DROP iptables -A OUTPUT -p tcp --sport 80 -j DROP
5. **Pruebas de seguridad**: iptables puede utilizarse para simular ataques y
verificar la seguridad de una aplicación. Ejemplo:
iptables -A INPUT -s <IP_sospechosa> -j DROP iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 10 -j REJECT iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
Si conoces otras estrategias, ¡deja tus comentarios! Son altamente apreciados.
Estas tácticas son valiosas al estandarizarlas en el flujo de vida de una
tarjeta kanban, siendo especialmente útiles en el proceso de control de calidad
de una tarea.
Como mencioné anteriormente, dejo a continuación algunas herramientas para
simular las situaciones descritas. Sin embargo, una limitación es que no todas
podrían ser funcionales para desarrollos en local, es decir, no siempre serán
compatibles con [http://localhost](http://localhost).
**Windows:**
1. **Clumsy**: herramienta gráfica que simula problemas de red. **Útil para
alterar tráfico local**.
2. **Network Emulator for Windows Toolkit (NEWT)**: similar a Clumsy. Es
incierto si modifica el tráfico en local.
3. **Fiddler**: Es una mítica herramienta gratuita de depuración web, que
registra todo el tráfico entre la web y tu computadora. Esto permite
inspeccionar, monitorizar y modificar peticiones y respuestas antes de que
lleguen al servidor o regresen al cliente, respectivamente. Fiddler es
multiplataforma y puede ser utilizado tanto en Windows como en Mac.
- **Inspeccionar tráfico HTTP/HTTPS**: Fiddler te permite visualizar todas las
peticiones HTTP y HTTPS que hace tu aplicación, incluyendo las cabeceras, el
cuerpo de la petición y el código de respuesta.
- **Modificar peticiones y respuestas**: Con la funcionalidad “AutoResponder”,
puedes modificar las respuestas del servidor antes de que estas lleguen a tu
aplicación. Esto es útil para simular diferentes respuestas del servidor y ver
cómo reacciona tu aplicación ante ellas.
- **Simulación de latencia**: Con Fiddler, puedes añadir una latencia artificial
a las respuestas, para simular un entorno de red más lento y ver cómo se
comporta tu aplicación bajo esas condiciones.
Es importante mencionar que, al igual que con otras herramientas, es necesario
configurar adecuadamente Fiddler y la aplicación que estás probando, para
capturar el tráfico correctamente.
Un **consejo** para Windows es usar **Group Policy**, para compartir ancho de
banda. Aunque no es ideal para pruebas de aplicaciones web, puede ser útil en
ciertas situaciones.
**Mac:**
1. **Network Link Conditioner**: herramienta de Apple que simula diferentes
condiciones de red. Se usó en el proyecto **AQTransfer**, pero **no
modificaba** el tráfico **local**.
2. **`dnctl`** y **`pfctl`**: dos utilidades para configurar reglas de filtrado
y limitación de ancho de banda. Ejemplo:
sudo dnctl pipe 1 config bw 1Mbit/s sudo dnctl qdisc 1 config pipe 1 sudo pfctl -E echo "dummynet in on lo0 all pipe 1" | sudo pfctl -f -
3. **Charles Proxy**: aplicación proxy HTTP/HTTPS multiplataforma, para
analizar y manipular tráfico de red en tiempo real. **Funciona para
modificar tráfico local**.
4. **Fiddler** : Al igual que en Windows, esta herramienta es muy útil en Mac
para depurar y simular condiciones de red.
**Es importante recordar ajustar las configuraciones del firewall o las
herramientas de simulación, según se requiera al trabajar con aplicaciones
locales**.
En conclusión, en la era digital asegurar la calidad, funcionalidad y seguridad
de nuestras aplicaciones es esencial. Las herramientas y estrategias que hemos
discutido aquí, son sólo una pequeña muestra de lo que podemos implementar, para
garantizar que nuestro software cumpla con los más altos estándares. Al simular
diferentes condiciones y escenarios de red, no sólo detectamos posibles fallos y
vulnerabilidades, sino que también nos preparamos para ofrecer una experiencia
de usuario impecable, independientemente de las circunstancias. Es esencial
estar siempre un paso adelante, adaptándonos y mejorando constantemente. Así
que, ya sea que estés comenzando en el mundo del desarrollo o seas un experto
con años de experiencia, nunca subestimes el poder de una buena prueba y
simulación.
Si tienes estrategias o herramientas que te han sido útiles, te invito a que las
compartas en los comentarios. Juntos, como comunidad, podemos aprender más y
construir software más robusto y eficiente.
¡Hasta la vista!