Así que he estado buscando en la red un script que elimine todo el tráfico a todos los puertos excepto los puertos http (80) y https (443), y luego solo permita el tráfico en todos los demás puertos del país x (donde está en mi caso país x es Estados Unidos).
No quiero agregar todas las IP de todos los países, solo quiero permitir ips de mi país y luego bloquear casi todo el resto del tráfico del mundo exterior. Nadie fuera de mi país debería tener acceso a ssh, ftp, smtp, ect. aparte de mi Si esto cambia alguna vez, agregaré un caso especial cuando se acerque.
Nota al margen
Debo señalar que encontré una pregunta que contiene un script para prohibir ip por país usando tablas de ip, pero eso es una gran cantidad de inserción adicional que tendría que hacer.
El script marcado como la mejor respuesta bloqueará todo el tráfico de esas IP. Solo quiero bloquear el acceso a todos los puertos, excepto a 80 y 443.
Actualizar
Con la siguiente regla,
iptables -A OUTPUT -m geoip --dst-cc CN -j DROP
sería capaz de modificarlo y hacer algo como
iptables -A OUTPUT -m geoip --dst-cc CN --dport 80 -j ACCEPT
iptables -A OUTPUT -m geoip --dst-cc CN --dport 443 -j ACCEPT
iptables -A OUTPUT -m geoip --dst-cc CN -j DROP
Supongo que esto permitiría que los ips de China accedan al puerto 80 y al puerto 443 y dejaría caer el resto. ¿Sería correcta esta suposición? ¿Si no, porque no?
Actualización 2
Después de jugar un poco, descubrí que mi versión de Ubuntu no le gusta el --dport
atributo. Entonces, en lugar de usar eso, aquellos de nosotros que ejecutamos Ubuntu 14+ (al menos, solo tengo Ubuntu 14.04, 14.10 y 15.04 instalados en algunas máquinas) tendremos que usar-p PORT_NUMBER_OR_NAME
Entonces eso se vería como
iptables -A OUTPUT -m geoip --dst-cc CN -p 443 -j ACCEPT
o para el tráfico entrante,
iptables -A INPUT -m geoip --src-cc CN -p 443 -j ACCEPT