Reglas de iptables para trabajar con GitHub y Bitbucket

Si trabajamos con GitHub y/o Bitbucket necesitaremos configurar una serie de reglas de iptables para permitir las conexiones necesarias. Parto del hecho de que en nuestro sistema ya tenemos una serie de reglas previas. Podemos tomar como referencia inicial las que comenté hace tiempo en un artículo (para entornos de escritorio) o las que tengáis definidas en vuestro sistema.

A la hora de hacer un whitelist de IPs hacia las que vamos a permitir conexiones, es importante en primer lugar que nos informemos de primera mano de qué IPs son legítimas. Para ello lo mejor es irnos a una fuente primaria de información. En este caso tenemos a mano la documentación de GitHub y también de Bitbucket.

Con la documentación en mano ya podemos empezar a diseñar las reglas de firewall que vamos a necesitar. En GitHub vemos:

Por lo que las reglas a añadir serán:

iptables -A OUTPUT -p tcp -d 192.30.252.0/22 -m multiport --dport 22,80,443,9418 -j ACCEPT
iptables -A OUTPUT -p tcp -d 185.199.108.0/22 -m multiport --dport 22,80,443,9418 -j ACCEPT

Siendo los puertos 22 (SSH), 80 (HTTP), 443 (HTTPS) y 9418 (GIT). En realidad y dependiendo de cómo trabaje cada uno podemos evitar abrir ciertos puertos. Por ejemplo si autenticamos contra nuestros repositorios con clave pública sólo necesitaremos conectar por el puerto 22 (SSH).

En el caso de Bitbucket y utilizando también la documentación oficial que comentaba antes:

Por lo tanto en un primer momento para trabajar con nuestros repositorios añadiremos:

iptables -A OUTPUT -p tcp -d 104.192.143.1 -m multiport --dport 22,80,443 -j ACCEPT
iptables -A OUTPUT -p tcp -d 104.192.143.2 -m multiport --dport 22,80,443 -j ACCEPT
iptables -A OUTPUT -p tcp -d 104.192.143.3 -m multiport --dport 22,80,443 -j ACCEPT
iptables -A OUTPUT -p tcp -d 104.192.143.65 -m multiport --dport 22,80,443 -j ACCEPT
iptables -A OUTPUT -p tcp -d 104.192.143.66 -m multiport --dport 22,80,443 -j ACCEPT
iptables -A OUTPUT -p tcp -d 104.192.143.67 -m multiport --dport 22,80,443 -j ACCEPT

Para los puertos podemos afinar según necesitamos al igual que en el caso comentado de Github.

Por otro lado, Bitbucket utiliza otro rango de IPs para la API. Si vamos a utilizarla tendremos que añadir también:

iptables -A OUTPUT -p tcp -d 104.192.143.4 -m multiport --dport 22,80,443 -j ACCEPT
iptables -A OUTPUT -p tcp -d 104.192.143.5 -m multiport --dport 22,80,443 -j ACCEPT
iptables -A OUTPUT -p tcp -d 104.192.143.6 -m multiport --dport 22,80,443 -j ACCEPT
iptables -A OUTPUT -p tcp -d 104.192.143.68 -m multiport --dport 22,80,443 -j ACCEPT
iptables -A OUTPUT -p tcp -d 104.192.143.69 -m multiport --dport 22,80,443 -j ACCEPT
iptables -A OUTPUT -p tcp -d 104.192.143.70 -m multiport --dport 22,80,443 -j ACCEPT

Podéis añadir las reglas utilizando formato de una única línea, aunque por claridad en el artículo he preferido poner las reglas una a una por línea. En caso de querer utilizar una línea podemos hacer por ejemplo:

iptables -A OUTPUT -p tcp -d 104.192.143.1,104.192.143.2,104.192.143.3,104.192.143.65,104.192.143.66,104.192.143.67 -m multiport --dport 22,80,443 -j ACCEPT

Recordad que estos rangos pueden cambiar en el futuro tal y como nos indican en la documentación oficial. Si se diera el caso tendríamos entonces que modificar estas reglas en consecuencia para seguir trabajando con nuestros repositorios.