Sysadmin: Install CSF Ubuntu 16.04

in spanish •  6 years ago  (edited)

Que tal amigos de Steemit, hoy les traigo la instalación de una herramienta imprescindible para todo Sysadmin: El Firewall.

csf_large-600x400.png

CSF Firewall

CSF (ConfigServer Firewall) es un software mantenido por configserver.com, empresa especializada en soluciones para cPanel.

Este desarrollo mantiene una gran constancia de actualizaciones, su instalación es sumamente práctica y su configuración, a pesar de que incluye muchísimas opciones a nivel de técnicas de defensa, está tan bien documentada.

ConfigServe Firewall también viene con un servicio llamado Login Failure Daemon o LFD. LFD observa la actividad del usuario para los fallos excesivos en la conexión que se ven comúnmente durante ataques de la fuerza bruta. Si se observa una gran cantidad de errores de inicio de sesión procedentes de la misma dirección IP, dicha IP se bloqueará temporalmente de forma inmediata en todos los servicios de su servidor. Estos bloques IP expirarán automáticamente, sin embargo, pueden eliminarse manualmente a través de la interfaz ConfigServer en WebHost Manager (O manualmente). Además de eliminar IPs, CSF también le permite administrar la lista blanca o lista negra IPs en el firewall, así como la monitorización en tiempo real de bloques automáticos de IP en LFD.

La Instalación

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install libwww-perl unzip -y

Validese como root

$ sudo -s
cd /tmp
wget http://download.configserver.com/csf.tgz
tar -xvzf csf.tgz
cd csf

Si usas cPanel:

sh install.sh

Si no usas cPanel:

sh install.generic.sh

Le mostrará la siguiente información:


.
.
.
Installation Completed

Verificamos la instalación con la siguiente instrucción:

perl /usr/local/csf/bin/csftest.pl

Testing ip_tables/iptable_filter...OK
Testing ipt_LOG...OK
Testing ipt_multiport/xt_multiport...OK
Testing ipt_REJECT...OK
Testing ipt_state/xt_state...OK
Testing ipt_limit/xt_limit...OK
Testing ipt_recent...OK
Testing xt_connlimit...OK
Testing ipt_owner/xt_owner...OK
Testing iptable_nat/ipt_REDIRECT...OK
Testing iptable_nat/ipt_DNAT...OK

RESULT: csf should function on this server

Configuramos CSF

vim /etc/csf/csf.conf

Realizamos los siguientes cambios, según sus requerimientos:

##Enable CSF TESTING = "0"
TESTING = "0"

##Allow incoming TCP ports
TCP_IN = "20,21,22,25,53,80,110,143,443,465,587,993,995"

##Allow outgoing TCP ports

TCP_OUT = "20,21,22,25,53,80,110,113,443,587,993,995"

##Allow incoming UDP ports
UDP_IN = "20,21,53"

##Allow outgoing UDP ports
##To allow outgoing traceroute add 33434:33523 to this list
UDP_OUT = "20,21,53,113,123"

##Allow incoming PING
ICMP_IN = "1"

##Set the per IP address incoming ICMP packet rate
##To disable rate limiting set to "0"
ICMP_IN_RATE = "1/s"

##Allow outgoing PING
ICMP_OUT = "1"
...

También deshabilite la opción CC_OLDGEOLITE en el archivo /etc/csf/csf.conf colocandola en "0"

Grabamos el archivo y reiniciamos csf:

csf -r

Comandos básicos del CSF:

Iniciar el Firewall (habilitar reglas del firewall)

csf -s

Flush/Stop reglas del firewall

csf -f

Reiniciar reglas del firewall

csf -r

Permitir una IP y agregarla /etc/csf/csf.allow.

csf -a 192.168.10.101

Resultado:

Removing rule...
ACCEPT all opt -- in !lo out * 192.168.10.101 -> 0.0.0.0/0
ACCEPT all opt -- in * out !lo 0.0.0.0/0 -> 192.168.10.101

Denegar una IP y agregarla a /etc/csf/csf.deny

csf -d 192.168.10.101

Resultado:

Adding 192.168.10.101 to csf.deny and iptables DROP...
DROP all opt -- in !lo out * 192.168.10.101 -> 0.0.0.0/0
LOGDROPOUT all opt -- in * out !lo 0.0.0.0/0 -> 192.168.10.101

Remover y borrar una IP desde /etc/csf/csf.deny

csf -dr 192.168.10.101

Resultado:

Removing rule...
DROP all opt -- in !lo out * 192.168.10.101 -> 0.0.0.0/0
LOGDROPOUT all opt -- in * out !lo 0.0.0.0/0 -> 192.168.10.101

Remover y desbloquear todas las entradas desde /etc/csf/csf.deny

csf -df

Resultado:

DROP all opt -- in !lo out * 192.168.10.101 -> 0.0.0.0/0
LOGDROPOUT all opt -- in * out !lo 0.0.0.0/0 -> 192.168.10.101
DROP all opt -- in !lo out * 192.168.10.101 -> 0.0.0.0/0
LOGDROPOUT all opt -- in * out !lo 0.0.0.0/0 -> 192.168.10.101
csf: all entries removed from csf.deny

Buscar una coincidencia de patrones en iptables, por ejemplo: IP, CIDR, Número de puerto

csf -g 192.168.10.101

Abrir y cerrar puertos

Dependiendo que servicios vayas a instalar en tu máquina tendrás que dejar abiertos unos puertos u otros. CSF, por defecto, crea una lista de puertos tanto de entrada como de salida que cubre un catálogo amplio.

Esto lo podrás encontrar en las línea 139 a la 149 del archivo de configuración (/etc/csf/csf.conf).

TCP_IN = "20,21,22,25,53,80,110,143,443,465,587,993,995"
TCP_OUT = "20,21,22,25,53,80,110,113,443"
UDP_IN = "20,21,53"
UDP_OUT = "20,21,53,113,123"

En Wikipedia puedes consultar una lista muy completa de puertos por si tienes duda de cual corresponde a cada programa. Lo básico es que la máquina permita conectarse por SSH y que pueda responder al PING y a las peticiones DNS. Estos son los puertos que se dejan abiertos:

TCP_IN: 22,53
TCP_OUT: 22,53,80,113,443
UDP_IN: 53
UPD_OUT: 53,113,123

Para un servidor web, sea Apache o Nginx necesitaras:

TCP_IN: 80,443

Si quieres acceder por FTP (aunque mejor seria usar SFTP por seguridad) esta es la configuración:

TCP_IN: 20,21
TCP_OUT: 20,21
UPD_IN: 20,21
UPD_OUT:20,21

Las bases de datos MySQL usan el puerto 3306 pero solo hay que dejarlo abierto si vas a acceder desde otra máquina:

TCP_IN: 3306
TCP_OUT: 3306

Y para el servidor de correo:

TCP_IN: 25,110,143,587,993,995
TCP_OUT: 25,110

Configuraciones avanzadas:

Aquí hay algunos ajustes sobre CSF, por lo que puede configurar lo que necesita.

Vuelva al directorio de configuración csf y edite el archivo de configuración /etc/csf/csf.conf:

cd /etc/csf
vim csf.conf

1.- Para no bloquear las direcciones IP que se encuentran en el archivo csf.allow.

Por defecto, LFD también bloqueará una IP que esté en el archivo csf.allow, así que si desea que una IP en el archivo csf.allow nunca sea bloqueada por LFD, entonces vaya a la línea 272 y cambie: "IGNORE_ALLOW" a "1". Esto es útil cuando tienes una IP estática en casa o en la oficina y quieres asegurarte de que tu IP nunca sea bloqueado por el firewall en tu servidor de Internet.

2.- Permitir el protocolo ICMP Entrante/Saliente.

Vaya a la línea 152 for incoming ping/ICMP:

ICMP_IN = "1"

y en la línea 159 for outgoing ping ping/ICMP:

ICMP_OUT = "1"

3.- Bloquear ciertos países

CSF proporcionan una opción para permitir y denegar el acceso por país utilizando el CIDR (Country Code). Vaya a la línea 836 y agregue los códigos de país que se permitirán y denegarán:

CC_DENY = "CN,UK,US"
CC_ALLOW = "ID,MY,DE"

  1. Enviar log de login, a través de SU y SSH por e-mail:

Puede establecer una dirección de correo electrónico que LFD utilice para enviar un correo electrónico sobre los sucesos "SSH Login" y los usuarios que ejecuten el comando "su", vaya a la línea 1069 y cambie el valor a "1".

LF_SSH_EMAIL_ALERT = "1"
...
LF_SU_EMAIL_ALERT = "1"

y defina la cuenta de correo que desea usar en la línea 588:

LF_ALERT_TO = "[email protected]"

Si deseas más ajustes, lea las opciones en el archivo de configuración "/etc/csf/csf.conf".

Referencias:

https://blog.rapid7.com/2017/05/24/how-to-install-and-configure-csf-firewall-on-ubuntu-linux/

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

@jsosa, go and place your daily vote for Steem on netcoins! http://contest.gonetcoins.com/

¡Qué gusto verte por aquí! A veces me dan ganas de regresarme a Ubuntu, pero el software que utilizo está casado con Microsoft.

Estoy en Discord como thaishps#8225, búscame por allí para mantenernos en contacto

Congratulations @jsosa! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

Award for the number of upvotes

Click on the badge to view your Board of Honor.
If you no longer want to receive notifications, reply to this comment with the word STOP

Do not miss the last post from @steemitboard:

SteemitBoard Ranking update - Resteem and Resteemed added

Support SteemitBoard's project! Vote for its witness and get one more award!

Congratulations! This post has been upvoted from the communal account, @minnowsupport, by Thaishps from the Minnow Support Project. It's a witness project run by aggroed, ausbitbank, teamsteem, someguy123, neoxian, followbtcnews, and netuoso. The goal is to help Steemit grow by supporting Minnows. Please find us at the Peace, Abundance, and Liberty Network (PALnet) Discord Channel. It's a completely public and open space to all members of the Steemit community who voluntarily choose to be there.

If you would like to delegate to the Minnow Support Project you can do so by clicking on the following links: 50SP, 100SP, 250SP, 500SP, 1000SP, 5000SP.
Be sure to leave at least 50SP undelegated on your account.

Congratulations @jsosa! You have received a personal award!

1 Year on Steemit
Click on the badge to view your Board of Honor.

Do not miss the last post from @steemitboard:

Trick or Treat - Publish your scariest halloweeen story and win a new badge
SteemitBoard notifications improved

Support SteemitBoard's project! Vote for its witness and get one more award!

Congratulations @jsosa! You received a personal award!

Happy Birthday! - You are on the Steem blockchain for 2 years!

You can view your badges on your Steem Board and compare to others on the Steem Ranking

Vote for @Steemitboard as a witness to get one more award and increased upvotes!