Nos comentários, estabelecemos que isso está em uma instância do Amazon AWS EC2 e que você se bloqueou remotamente a partir do acesso SSH. Ao usar o Amazon EC2, você terá um pouco de dor de cabeça aqui. Não há modo serial / console real para acesso, nem qualquer um que possa apenas 'consertar' isso, e desabilitando todas as conexões como você fez, você se bloqueou completamente.
Você não tem muita solução aqui, mas para destruir a instância do EC2 e começar de novo.
E depois de começar de novo, você tem duas opções de como firewall seu sistema:
-
Use o firewall do grupo de segurança do EC2. Isso é um pouco mais fácil de configurar e já está lá, sem nenhuma configuração adicional - é parte da infraestrutura do EC2, onde é necessário permitir que as portas realmente sejam recebidas para a instância do EC2. Você também não vai se trancar tão facilmente (embora você possa ficar bloqueado, é fácil consertá-lo, porque você apenas permite a porta 22 novamente no conjunto de regras do painel de configurações do Amazon EC2, desde que você não mexa. com
iptables
também. -
Use um conjunto de regras decente
iptables
e não saia do PuTTY no seu EC2 até que esteja absolutamente certo as regras que você colocou em prática não torpedo completamente seu acesso ao sistema.
Agora, menciono em # 2 um "conjunto de regras decente". Abaixo segue o meu guia para EC2 iptables
, desde que você realmente leia os comentários antes de executar os comandos (por exemplo, não mexa com OUTPUT ou FORWARD a menos que você realmente precise).
Um conjunto de regras de trabalho para iptables
de acordo com seus requisitos:
Você não precisa digitar linhas que tenham #
no começo, são apenas meus comentários explicando o que cada comando faz. Além disso, substitua YOUR.IP.ADDRESS.HERE
pelo seu endereço IP real, onde é mostrado abaixo.
Filtragem de entrada:
# Permit localhost to communicate with itself.
iptables -A INPUT -i lo -j ACCEPT
# Permit already established connection traffic and related traffic
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# Permit new SSH connections into the system from trusted IP address
iptables -A INPUT -p tcp --dport 22 -s YOUR.IP.ADDRESS.HERE -m conntrack --ctstate NEW -j ACCEPT
# Permit all other traffic from trusted IP Address
iptables -A INPUT -s YOUR.IP.ADDRESS.HERE -j ACCEPT
# Drop all other traffic
iptables -A INPUT -j DROP
Filtragem de saída:
% bl0ck_qu0te%# Allow Localhost to itself
iptables -A OUTPUT -i lo -j ACCEPT
# Allow RELATED,ESTABLISHED state traffic (related to Inbound for example)
iptables -A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# Allow all other traffic to trusted IP address
iptables -A OUTPUT -d YOUR.IP.ADDRESS.HERE -j ACCEPT
# Drop all other unpermitted outbound traffic.
iptables -A OUTPUT -j DROP
Filtragem avançada:
% bl0ck_qu0te%# Drop FORWARD target traffic, we don't need it
iptables -A FORWARD -j DROP
Note que eu acredito firmemente em não mexer com as políticas padrão em um servidor, porque ele tem alguns ... males ... se não forem feitos corretamente, e eu normalmente só filtro entrada tráfego e FORWARD
tráfego e permissão de tráfego de saída devido a servidores de sincronização de tempo, servidores de atualização do Ubuntu nem sempre têm um número definido de IPs, outros processos relacionados que eu preciso (SSH in / out por exemplo como parte do tráfego 'relacionado') etc.
Eu também acredito firmemente em usar REJECT
em vez de DROP
, mas isso é apenas para tornar mais fácil saber que seu servidor está ativo e recusando conexões. Para esse fim, eu estaria substituindo o -j DROP
por -j REJECT --reject-with icmp-host-unreachable
ou similar.
Observe que, se você tiver o sistema IPv6 ativado, isso também deverá ser feito para o IPv6, mas com ip6tables
e substituindo os indicadores de mensagens relacionadas ao ICMP pelos equivalentes ICMP6.