Dejo caer todo el tráfico en los puertos, excepto en 80 para mi servidor web.
Tengo algunas reglas como esta en iptables:
iptables -A INPUT -p tcp -m tcp --dport 80 -m string --string "cgi" --algo bm --to 1000 -j DROP
Alguien que tiene más puede compartir? Sé que los piratas informáticos malos siguen actualizándose, pero algunos de ellos siempre comienzan con el mismo código. Necesito desconectar la conexión según algunos criterios. Aquí hay algunos registros de Apache (elimino ips pero cada ataque proviene de lo mismo):
Ataque 1: Esto no sé lo que estoy tratando de hacer, pero hazlo 50 veces desde la misma IP
GET / HTTP/1.1 301 224 - Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.152 Safari/537.22
GET / HTTP/1.1 302 3387 - Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.152 Safari/537.22
Ataque 2: intenta obtener información sobre el servidor solamente.
GET / HTTP/1.1 301 224 http://myip:80/ Go-http-client/1.1
GET / HTTP/1.1 302 3228 http mywebsite Go-http-client/1.1
GET /es/ HTTP/1.1 200 40947 https mywebsite Go-http-client/1.1
Ataque 3: intentan obtener acceso a una vulnerabilidad de página de inicio de sesión
GET /userlogin/login.aspx HTTP/1.1 302 186 - -
Ataque 4: este intento de acceder a un cgi en la primera solicitud, (vea mi primera regla de iptables para descartar esto)
GET /hndUnblock.cgi HTTP/1.0 302 186 - Wget(linux)
GET /tmUnblock.cgi HTTP/1.0 302 186 - Wget(linux)
Soy muy nuevo con el servidor, estos 4 ataques son de solo las últimas 12 horas ... Tienen miles por semana.

Respuestas:
A continuación, se analizan algunas formas, involucradas en un mecanismo completo, de cómo aumentar la seguridad de Apache2 en Ubuntu 16.04.
Tabla de contenidos:
Además, digamos que siempre es bueno usar HTTPS:
WWW Security Assistant Script ► Iptables
Aquí se presenta el guión
www-security-assistant.bash. Podría ayudarlo a manejar las direcciones IP maliciosas. El guión tiene dos modos.Modo automatico
Cuando un programa externo, como el de Apache
mod_security, proporciona una$IPdirección maliciosa . En este caso, la sintaxis que invoca el script debe ser:En este modo, el script proporciona dos etapas de acción y para cada acción enviará un correo electrónico a los administradores.
Primera etapa: durante las primeras 'transgresiones' la fuente
$IPserá prohibida por un período de tiempo igual al valor de$BAN_TIME. Este modo usa el comandoat.Segunda etapa: cuando el número de transgresiones de ciertos
$IPse iguala al valor de$LIMIT, esta$IPdirección se prohibirá permanentemente a través de Iptables y se agregará a$BAN_LIST.Modo manual
Este modo acepta las siguientes opciones:
www-security-assistant.bash <ip-address>--DROP "log notes"Crea una entrada en el archivo
/var/www-security-assistant/iptables-DROP.listy genera una regla como:www-security-assistant.bash <ip-address>--DROP-CLEAR "log notes"Crea una entrada en el archivo
/var/www-security-assistant/iptables-DROP-CLEAR.list, elimina la cierta regla de Iptables, elimina la$IPdel historial y de$BAN_LIST:www-security-assistant.bash <ip-address>--ACCEPT "log notes"Crea solo una entrada en el archivo
/var/www-security-assistant/iptables-ACCEPT.list.www-security-assistant.bash <ip-address>--ACCEPT-CHAIN "log notes"Crea una entrada en el archivo
/var/www-security-assistant/iptables-ACCEPT.listy genera una regla como:Dependencias
El script usa
iptables-save.shy laiptablescadenaGUARDIAN, explicada en la siguiente sección. Creará y mantendrá pocos archivos dentro de$WORK_DIR:www-security-assistant.history- contiene los datos de las transgresiones de IP anteriores.www-security-assistant.mail- el contenido del último correo electrónico enviado por el script.iptables-ACCEPT.list;iptables-DROP.listyiptables-DROP-CLEAR.list.El script necesita una configuración mínima para enviar correos electrónicos:
Si hay algún servicio HTTPS configurado, su certificado TLS se puede usar dentro del servicio Postfix.
Además, el script usa
at:sudo apt install at.Instalación
Crear directorio de trabajo, llamémoslo
/var/www-security-assistant. Descargarwww-security-assistant.bashy hacerlo ejecutable:Poner a
www-security-assistant.bashdisposición como comando personalizado:Conceder permiso para
www-dataejecutarwww-security-assistant.bashsin contraseña a través desudo. Use el siguiente comando para crear y editar de forma segura un nuevo archivo con unasudoersregla adicional ' ':Agregue la siguiente línea dentro del archivo: guarde el archivo y salga:
Tweak
www-security-assistant.bash. Cambie al menos el valor de la variable$EMAIL_TO.Chequeo
Represéntese como
$AGENTy verifique si el MODO automático funciona correctamente:Luego revise su correo electrónico, escriba
iptables -L GUARDIAN -n, revise los archivoswww-security-assistant.historyywww-security-assistant.mail. Ejecute el comando anterior 5 veces y revise los archivosiptables-DROP.listyiptables-CURRENT.conf.Compruebe si el MODO manual funciona correctamente; agregue su host local a la Lista blanca:
Luego verifique el archivo
iptables-ACCEPT.list.Iptables - Configuración básica - Guardar y restaurar
Configuracion basica
Lea este manual antes de agregar las siguientes reglas.
Antes de realizar las siguientes acciones, abra una nueva conexión SSH e intente iniciar sesión en su sistema para verificar si todo funciona bien.
Guardar y restaurar
Esto podría lograrse a través de scripts personalizados, que guardarán y restaurarán el
iptablesconing durante el proceso de parada de arranque (o reinicio) del sistema. (Si usamos UFW para configurar las reglas de Iptables, este paso no es necesario).Crear nueva cadena
Cree una nueva cadena, llamada
GUARDIANe insértela como número 3 en laINPUTcadena:Chequeo
Reinicie el sistema y verifique la configuración. Por favor, use
sudo systemctl reboot(no use la opción de fuerzareboot -f). Cuando el sistema vuelve a estar en línea, podemos verificar si la cadena recién creada existe:ModEvasive para Apache2
Instalación
Instalar y habilitar el módulo:
Cree un directorio de registros y hágalo accesible para
www-data:Ajuste la configuración básica: descomente y edite ciertas directivas en el archivo de configuración:
Reinicia Apache:
sudo systemctl restart apache2.service.Chequeo
F5): debe obtener un mensaje de error prohibido 403 . En el directorio de registro, se generará un nuevo archivo de bloqueo. Este archivo debe eliminarse para detectar más transgresiones de esta dirección IP.ModEvasive ► WSAS ► Iptables
Aquí lo configuraremos
mod_evasivepara hablar aiptablestravés dewww-security-assistant.bash, creado en la sección anterior.Edite
/etc/apache2/mods-available/evasive.confde esta manera:Cree un archivo de registro y reinicie Apache:
Para probar esta configuración se puede simular ataque DDoS a través del
F5método, mencionado anteriormente, o se puede utilizar una comandos comoab,hping3, etc.Atención: tenga cuidado porque la
iptablesregla, utilizada en WSAS, DROP todas las conexiones nuevas de la fuente$IP, incluidas sus conexiones SSH. Es bueno tener una forma de respaldo para conectarse al servidor durante las pruebas. Puede cambiar esta regla para que funcione solo con los puertos HTTP / HTTPS.ModSecurity 2.9 para Apache2
Instalación
Instalar y habilitar el módulo:
Crear archivo de configuración:
sudo cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
¡Lee y edita
/etc/modsecurity/modsecurity.confcuidadosamente! Agregue o cambie al menos las siguientes directivas:El archivo
/etc/apache2/mods-enabled/security2.confinvolucra/etc/modsecurity/modsecurity.confla configuración de Apache. En esta etapasecurity2.confse verá así:Crear directorio de registro:
Configurar la rotación del registro. Primero cree el archivo de configuración:
Luego edite el nuevo archivo de esta manera:
Reinicia Apache.
Chequeo
Cree un archivo de configuración adicional
/etc/modsecurity, llámelo, por ejemploz-customrules.conf, y agregue la siguiente regla como su contenido:Reiniciar el servidor:
sudo systemctl restart apache2.service. Abre tu navegador y escribehttps://example.com/?abc=../. El resultado será: 403 Prohibido . Consulte los archivos de registro/var/log/apache2_mod_securitypara obtener más detalles.Para hacer las cosas más divertidas, coloque el script
issues.phpen un lugar apropiado dentro de ustedDocumentRoot(aquí supongo que este lugar es/var/www/html):Luego modifique la regla anterior de la siguiente manera:
Reinicie Apache, luego abra su navegador y escriba
https://example.com/?abc=../;-) La idea está tomada del script del SEBotLovin.cs.Edite
/etc/modsecurity/z-customrules.confuna vez más y comente (desactive) la regla: este fue solo un ejemplo de prueba y está cubierto por OWASP CRS, que se describe en la siguiente sección.Aquí hay otro ejemplo en el que redirigiremos todas las
wp-adminsolicitudes de página, pero excepto estas de ciertas direcciones IP (tenga en cuenta lachain):Aquí tenemos dos acciones disruptivas: (1)
deny, status:403y (2)redirect:'/issues.php'. En realidad, no necesitamos ladenyacción porque será anulada por laredirectacción.ModSecurity OWASP Core Rule Set 3.x
En Ubuntu 16.04 puede instalar 2.x RSE:
apt install modsecurity-crs. Aquí instalaremos CSR 3.x , se proporcionan instrucciones detalladas en el manual de instalación (gites obligatorio).Instalación
Clonar CSR en la carpeta
/usr/share/modsecurity-crs.3:Actualice y renueve automáticamente la base de datos GeoIP. (GeoIP DB ya no se incluye con el CRS. En su lugar, se recomienda descargarlo regularmente). El script
util/upgrade.pyofrece esta funcionalidad. Puede usarlo de la siguiente manera en cron -sudo crontab -e:Crear archivos de configuración:
¡Lea y edite estos archivos con cuidado! Descomente al menos la
SecGeoLookupDBdirectiva:Aplica la configuración de Apache. Edite
/etc/apache2/mods-available/security2.confde esta manera:Guarde el archivo y luego reinicie Apache.
Lista blanca de reglas de ModSecurity
La inclusión en la lista blanca de las reglas de ModSecurity se puede realizar a través de las siguientes directivas de ModSec, que se pueden usar en todo el sistema o dentro de la configuración del host virtual, también globalmente, para directorios específicos o coincidencias de ubicación:
Deshabilitar
mod_security2para PhpMyAdmin. Cambiar/etc/phpmyadmin/apache.confde esta manera:Deshabilitar reglas específicas para cierto directorio:
Deshabilitar reglas a nivel mundial. Para este propósito, debemos agregar nuestras directivas en algún lugar de los archivos de configuración de Apache:
/etc/modsecurity/z-customrules.confes un buen lugar.Deshabilite las reglas dentro de toda la configuración de Apache:
Incluya en la lista blanca una dirección IP para que pueda pasar por ModSecurity:
Deshabilitar reglas dentro de la coincidencia de directorio:
Actualice la acción de la regla por su ID dentro de la coincidencia de ubicación:
En los ejemplos anteriores asumimos eso
973301y950907son ID de reglas que obstruyen el trabajo normal de nuestras aplicaciones web. Podemos encontrar reglas como estas mediante un análisis demodsec_audit.log.Reglas de ModSecurity ► WSAS ► Iptables
Aquí se dan algunos ejemplos más de cómo crear SecRules personalizadas, y también cómo podemos llamar a WWW Security Assistant Script (WSAS) a través de ellas.
Configuración inicial
Necesitamos un script de inicio adicional
modsecurity-assistant.sh. La razón es que laexecacción de ModSecurity tiene una sintaxis demasiado simple y limitada.Si mira dentro del script, verá algunas variables que ModSecurity exporta. Estos son:
$REQUEST_URI,$ARGS,$SERVER_NAME,$REMOTE_ADDR,$REMOTE_HOSTy$UNIQUE_ID. Las otras variables se explican dentro del script.Crea una regla personalizada y llama a nuestros scripts a través de ella
Primero, creemos una regla que se ejecutará
modsecurity-assistant.sh(y llamaráwww-security-assistant.bash) cuando el URI de solicitud contenga una palabra incluida en nuestra lista negra. Abra/etc/modsecurity/z-customrules.confy agregue las siguientes líneas en la parte inferior:REQUEST_URI- esta variable contiene el URI completo de la solicitud actual. La regla podría ser más amplia:SecRule REQUEST_URI|ARGS|REQUEST_BODY ...@pmFromFileleerá el archivomodsecurity-uri-black.listque contiene la lista de frases, donde cada frase o palabra específica se coloca en una nueva línea. Puede recopilar palabras y frases interesantes de los archivos de registro. Si hay una coincidencia particular entreREQUEST_URIy nuestra lista de patrones, se aplicará la regla. El archivo puede estar vacío, pero debe crearlo (touch).La
logacción creará entradas de registro en los archivos de registro para esta regla conid:150.drop,deny(constatus) y lasredirectacciones pertenecen al grupo de acciones disruptivas , deben estar al comienzo de la reglachain(si hay una cadena). La segunda acción anulará la primera y la tercera anulará la segunda, por lo que debe elegir qué desea realizar y puede eliminar las demás.chainacción llamará a la siguiente regla de la cadena, tenga en cuenta que la segunda regla, no tieneid.REMOTE_ADDRcontiene la dirección IP de la solicitud.@ipMatchFromFileaparecerá el archivomodsecurity-ip-white.listque contiene una lista blanca de direcciones IP, separadas en nuevas líneas. Las entradas CIDR también son aceptables. Debido a que la acción disruptiva siempre se encuentra en la regla principal de la cadena, se aplicará, pero cuando cierta IP está en esta lista blanca, laexecacción no se aplicará. El archivo puede estar vacío, pero debe crearlo (touch).execaction llamará a nuestro script externo. Esta acción no es disruptiva y se ejecutará cuando la regla actual regrese verdadero. Cuando se aplica esta acción, la IP remota se procesará a través de nuestros scripts.setenvesta acción exportará ciertas variables internas=%{...}como envvars, los nombres exportados pueden ser diferentes de los internos. Algunas variables deben exportarse manualmente, otras se exportan automáticamente, probablemente sea un pequeño error (en algunos casos, la exportación manual con los mismos nombres, por ejemplosetenv:REQUEST_URI=%{REQUEST_URI}, causará un valor en blanco de la variable exportada).Chequeo
Supongamos que no tiene Joomla en su servidor, edite el archivo
modsecurity-uri-black.listy agregue una línea con contenido/joomla. Luego escriba su navegadorhttps://exemple.com/joomla. Debería ser redirigido y bloqueado a través de Iptables. Borre los registrossudo www-security-assistant.bash <your-ip> --DROP-CLEAR 'some note', agregue su IPmodsecurity-ip-white.listy vuelva a hacer el ejercicio. Ahora debería ser redirigido, pero no bloqueado.Conecte nuestros scripts con OWASP Core Rule Set 3.x
Para hacerlo, actualizaremos la acción predeterminada de las Reglas de modo de anomalía (949110 y 959100). Para este propósito, edite el archivo
/usr/share/modsecurity-crs.3/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.confy agregue las siguientes líneas en la parte inferior:Chequeo
No olvide reiniciar (o volver a cargar) Apache para aplicar los cambios de configuración. No olvide borrar los registros periódicamente durante las pruebas, de lo contrario puede ser bloqueado permanentemente :-)
Simular el ataque transversal del directorio:
Simular ataque de inyección SQL:
ModSecurity y archivos de registro de Apache
ModSecurity tiene un poderoso mecanismo de registro. Según la directiva
SecGuardianLog, proporciona una fuente de registro especialmente diseñada para trabajar con scripts externos.Archivos de registro de ModSecurity ► Fail2Ban ► Iptables
Es posible configurar Fail2Ban para el análisis de datos de los archivos de registro de Apache.
modsec_audit.loges probablemente la mejor opción, pero vea también las secciones de las que hablamosSecGuardianLog.Tenga cuidado de que
SecAuditLogRelevantStatusen/etc/modsecurity/modsecurity.confse comente. De lo contrario, todos los que reciban una página de error 404 serían bloqueados por fail2ban.Actualmente Fail2Ban no está implementado de ninguna manera en este proyecto.
ModSecGuardianLog ► HTTPD-Guardian ► WSAS ► Iptables
Instalación y configuración dentro de las circunstancias actuales
Descargar
httpd-guardiany hacerlo ejecutable:Lea las líneas
98-119para ver cómo se conecta el script con nuestro script WSAS.Aplique el siguiente cambio dentro de la configuración de Apache (
/etc/modsecurity/modsecurity.conf), luego reinícielo:Chequeo
Para probar el script, desactive ModEvasive (
sudo a2dismod evasiveno olvide habilitarlo más tarde) y reinicie Apache. Luegotailel registro ejecutivo:Y desde otra instancia, realice un ataque DoS, por ejemplo, use
abde esta manera:ModSecGuardianLog ► Análisis personalizado ► WSAS ► Iptables
Aquí se presenta un script simple, llamado
httpd-custom-analyze.bash, que no es algo especial, pero podría ser un buen ejemplo. Sus características se describen dentro del cuerpo del script.Instalación y configuración
Descargar
httpd-custom-analyze.bashy hacerlo ejecutable:Aplique el siguiente cambio dentro de la configuración de Apache (
/etc/modsecurity/modsecurity.conf) y reinícielo:El script llamará a WSAS cuando se alcance el umbral: lea la línea
86y35.Para que ambos
httpd-scripts funcionen simultáneamente, editemodsecurity.confy canaliceSecGuardianLoga ambos.Para realizar una prueba, siga los consejos de la sección anterior.
fuente
Me doy cuenta de que pa4080 dio una respuesta detallada y probablemente muy útil para ocuparse de todo esto por su cuenta. Si bien resolver los problemas por su cuenta puede sentirse bien, esto también puede llevar mucho tiempo .
fuente