Como corrigir iptables se eu bloquear todas as conexões de entrada e saída?

-2

Estou usando o Ubuntu Server (Amazon EC2) e conectado com o ssh usando putty Eu estava configurando iptables para bloquear todas as conexões de entrada e saída, exceto o meu endereço IP, eu tentei esses comandos de putty:

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

Agora, não consigo me conectar de nenhum lugar. Por favor me ajude como recuperar minha conexão.

    
por Suraj Bharti 28.04.2017 / 19:20

1 resposta

1

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:

  1. 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.

  2. 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.

    
por Thomas Ward 28.04.2017 / 21:16