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.