Obtendo o NTP para trabalhar na AWS sem abrir a porta de entrada no grupo de segurança

1

Eu tenho um servidor privado na AWS que não abre portas de entrada publicamente . A única porta aberta é o SSH, e só é acessível a partir de outras máquinas na mesma sub-rede.

Esta máquina lê arquivos do S3 pela rede. Recentemente, ele parou de funcionar porque o tempo do servidor havia mudado em mais de 15 minutos e os pedidos para o S3 foram rejeitados:

<Code>RequestTimeTooSkewed</Code>
<Message>
    The difference between the request time and the current time
    is too large.
</Message>
<MaxAllowedSkewMilliseconds>900000</MaxAllowedSkewMilliseconds>

A solução fácil é instalar o ntp , mas isso requer a abertura da porta UDP 123. Como o UDP é sem estado, as portas de entrada e de saída devem estar abertas.

Como posso atualizar automaticamente a hora do sistema usando apenas conexões TCP iniciadas pelo meu servidor? Existe um daemon padrão baseado em TCP como o NTP? Eu não me importo se não é tão preciso: até mesmo uma inclinação de até 10 minutos seria aceitável.

Editar 2 jun 2017

É assim que os grupos de segurança são configurados:

  • Entrada

    Type           Protocol    Port Range    Source
    SSH            TCP         22            172.31.0.0/16
    
  • Saída

    Type           Protocol    Port range    Destination
    All traffic    All         All           0.0.0.0/0
    

Esta é a rede ACL para a sub-rede - apenas a ACL padrão:

  • Entrada

    Rule #    Type           Protocol    Port Range    Source       Allow / Deny
    100       ALL Traffic    ALL         ALL           0.0.0.0/0    ALLOW
    *         ALL Traffic    ALL         ALL           0.0.0.0/0    DENY
    
  • Saída

    Rule #    Type           Protocol    Port Range    Destination  Allow / Deny
    100       ALL Traffic    ALL         ALL           0.0.0.0/0    ALLOW
    *         ALL Traffic    ALL         ALL           0.0.0.0/0    DENY
    

Editar 2 jun 2017 # 2

Tudo bem, agora, ele funciona sem nenhum grupo de segurança especial, conforme predicado por @Tim. Acho que não estava testando corretamente:

  • ntpdate não usa os servidores em /etc/ntp.conf , por isso estava relatando um erro:

    no servers can be used, exiting

  • ntpd não tenta atualizar o relógio assim que ele é iniciado; espera por um minuto ou mais.

Em vez disso, o teste com ntpdate-debian e sem a porta 123 aberta em um grupo de segurança funciona bem; e ntpd atualiza o horário corretamente se eu deixar ele funcionar por um tempo.

    
por z0r 02.06.2017 / 02:52

2 respostas

9

De acordo com a Documentação da AWS , você pode abrir o UDP: 123 em seu saída de grupo de segurança apenas. Como os grupos de segurança são respostas com estado, você receberá uma resposta, mas ninguém fora do seu VPC poderá iniciar uma conexão.

Você certamente precisará de NACLs abertos em ambas as direções para essa porta.

Atualizar Você deve ler sobre Segurança da AWS , particularmente grupos de segurança e NACLs.

O NACL é o ACL da rede. Esse é um firewall que mora fora da sua instância e permite que o tráfego chegue à sua instância apenas se você tiver portas abertas. Por padrão, todas as portas de entrada e saída estão abertas, mas você pode configurar da maneira que desejar. NACLs são sem estado, então você precisa abrir as portas em cada direção. Não esqueça as portas efêmeras.

Os grupos de segurança, por outro lado, aplicam regras de rede no nível do hipervisor. Eles são stateful, portanto, se você permitir uma porta de saída, a resposta será automaticamente permitida de volta à instância.

Em teoria, os NACLs reduzem um pouco a carga do servidor host, porque impedem que o tráfego atinja a interface de rede. Já que você controla apenas uma pequena fração do servidor que provavelmente não faz muita diferença.

Atualização de 1º de dezembro de 2017

A AWS tem anunciado o AWS Time Sync Service . Em suma, eles estão fornecendo servidores dentro de cada data center para garantir que o tempo do servidor seja preciso.

A documentação da AWS diz para usar o software Chrony, em vez de NTP, mas ambos os serviços NTP. Não há como eu copiar as instruções da AWS para essa postagem, pois elas podem mudar no futuro, e a documentação da AWS é excelente.

Usando o NTPD

Em vez de instalar o Chrony, simplesmente adicionei o seguinte ao meu /etc/ntp.conf para tentar fazer com que o NTP use o novo servidor NTP da AWS

server 169.254.169.123 prefer iburst

Também certifiquei-me de que nenhuma das outras instruções do servidor tivesse "preferência" configurada.

    
por 02.06.2017 / 03:28
0

Se você não se opuser a executar uma tarefa cron em outra máquina que tenha tempo preciso, sempre poderá ter uma atualiza automaticamente a data por SSH . Se você tiver permissões SSH em outro servidor que tenha uma data precisa, também poderá fazê-lo de outra forma.

    
por 02.06.2017 / 03:11