Arquivos mensais: julho 2019

Permissão adequada em aplicações de servidor Apache2

1
2
3
4
5
6
7
8
    # Configuração geral de dono e grupo:
     chown -R root:www-data /var/www
    # Permissão geral de para dono, grupo e outros:
     chmod -R 744 /var/www/
    # Reconfigura as permissões apenas de grupo para diretórios (acesso Apache - www-data):
     find /var/www/ -type d -exec chmod g=rx {} ";"
    # Reconfigura permissões apenas para diretórios de uploads:
     find /var/www/ -type d -iname "upload*" -exec chmod -R g=wrx {} ";"

Script para analisar e bloquear possíveis ataques ao servidor por meio de requisições elevadas | Shell Script + TCPDUMP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!/bin/bash
##
 
 # Repare que este script depende primeiramente da execucao do TCPDUMP
 # tcpdump -i any port 80 -nn | awk '{print $3}' >> origem_http_ip
 # A variavel fileAnalyze (declarada no script) condiz com o arquivo 'origem_http_ip' gerado pelo TCPDUMP.
 
##
exceptions[0]="127.0.0.1"
exceptions[1]="10.142.0.2"
exceptions[2]=$(curl -s ip.infsite.org)
fileAnalyze="origem_http_ip"
tmpFileAnalyze="/tmp/fileAnalyze-$fileAnalyze"
logResulted="$fileAnalyze.logResult"
maxRequestAccept=5000
remoteIp=""
requestNumber=""
totalRegister=0
percentageProgress=0
indexRegister=0
 
 
echo "Preparando, por favor espere..."
> short.list
echo "Relatorio iniciado em $(date +%d/%m/%Y-%H:%M:%S)" > $logResulted
cat $fileAnalyze | cut -d. -f 1-4 | sort -n | uniq -c > $tmpFileAnalyze
totalRegister=$(cat $tmpFileAnalyze | wc -l)
 
 
funcExceptions(){
    ip="$1"
    verify=1
    for e in ${exceptions[@]}
    do
        if [ "$ip" == "$e" ];then
            verify=0
            break
        fi
    done
    echo $verify
}
while read i; do
 
    remoteIp=$(echo $i | awk '{print $2}')
    requestNumber=$(echo $i | awk '{print $1}')
 
        if [ $requestNumber -ge $maxRequestAccept ];then
            if [ $(funcExceptions $remoteIp) -eq 0 ];then
                 echo "IP de excecao: $remoteIp" >> $logResulted 
             else
                 iptables -I INPUT -s $remoteIp -j DROP
                 echo "IP: $remoteIp bloqueado! $requestNumber conexoes." >> $logResulted
             fi
        fi
    percentageProgress=$(( $(( indexRegister=indexRegister+1 ))*100/$totalRegister ))
    clear && echo "$percentageProgress% de registros analisados do total de $totalRegister..."
    echo "Resultado do processo em $logResulted"
 
done < $tmpFileAnalyze
echo "Relatorio finalizado em $(date +%d/%m/%Y-%H:%M:%S)" >> $logResulted
 
# Marcelo Viana
# AMDG

Amazon AWS LAMBDA – Ligar apenas algumas instâncias automaticamente – Python 2.7

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# -*- coding: utf-8 -*-
"""
Script para ligar instancias em Amazon AWS EC2
"""
# webserve SDK AWS para Python
import boto3
# Instancia o tipo de serviço que será consulmido da importação boto3
client=boto3.client('ec2')
 
# Função manipuladora - É uma espécie de int main, como em C++
def lambda_handler(event, context):
 
    # Instancia do método que será usada. Neste caso o método describe_instances() mapeia as instâncias existentes
    response=client.describe_instances()
 
    # Array contendo somente as maquinas que serão ligadas
    onlyInstances=["i-00f0a3dfas654df", "i-00f0a31ad0lq154df", "i-11156456as654df"]
 
    # Laço no objeto response para Reservations
    for reservation in response["Reservations"]:
 
        # Laço no objeto reservation para Instances
        for instance in reservation["Instances"]:
 
            # Observe o formato: id deve ser um Array [], a ser passado para o método client.start_instances(InstanceIds=[...])
            id=[instance["InstanceId"]]
 
            # Verifica se registro contém no array de exceção.
            if instance["InstanceId"] in onlyInstances:
                print(instance["InstanceId"] + " starting")
                client.start_instances(InstanceIds=id)
            else:
                print(instance["InstanceId"] + " in exception, not starting.")
 
 
    return "Fim da execucao."

Amazon AWS LAMBDA – Desligar instâncias automaticamente – Python 2.7

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# -*- coding: utf-8 -*-
"""
Script para ligar instancias em Amazon AWS EC2
"""
# webserve SDK AWS para Python
import boto3
# Instancia o tipo de serviço que será consulmido da importação boto3
client=boto3.client('ec2')
 
# Função manipuladora - É uma espécie de int main, como em C++
def lambda_handler(event, context):
 
    # Instancia do método que será usada. Neste caso o método describe_instances() mapeia as instâncias existentes
    response=client.describe_instances()
 
    # Array de exceção de máquinas que não serão ligadas
    exceptionsInstances=["i-00f0a3dfasa32s1df654df"]
 
    # Laço no objeto response para Reservations
    for reservation in response["Reservations"]:
 
        # Laço no objeto reservation para Instances
        for instance in reservation["Instances"]:
 
            # Observe o formato: id deve ser um Array [], a ser passado para o método client.stop_instances(InstanceIds=[...])
            id=[instance["InstanceId"]]
 
            # Verifica se registro contém no array de exceção.
            if instance["InstanceId"] in exceptionsInstances:
                print(instance["InstanceId"] + " in exception, not stopping.")
            else:
                print(instance["InstanceId"] + " stopping")
                client.stop_instances(InstanceIds=id)                    
 
 
    return "Fim da execucao."