Como negar um endereço IP de conexão ao meu sistema?

5

Existe uma maneira de impedir que um endereço IP se conecte ao meu computador?

Existe uma maneira de impedir que um Ip se conecte a uma porta específica?

    
por nux 28.01.2014 / 02:24

4 respostas

17
  

Antes de prosseguirmos, anote algumas coisas.

     
  1. A maioria da Internet não possui endereços IP estáticos. Portanto, proxies, Tor, etc. podem ser usados para tentar ignorar blocos de IP único.
  2.   
  3. Geralmente, é mais seguro fazer o inverso, bloquear todo o tráfego em uma porta e aceitar apenas determinados endereços. Isso não é viável na maioria das situações voltadas para a Web, mas ainda é uma prática de segurança geralmente aceita.
  4.   
  5. Não fazemos nenhuma filtragem aqui na Internet em geral - não levamos em conta o ponto 1 com a resposta abaixo e você deve considerar a probabilidade de que, se bloquear um IP, eles encontrarão um caminho em torno dele e ter acesso a um IP diferente e continuar atacando.
  6.   

Antes que alguém comente que ufw é menos complicado que iptables , usei iptables aqui porque o OP respondeu a essa pergunta usando os comandos iptables , o que me levou a supor que eles queriam uma resposta que tivesse iptables comandos e não ufw comandos /

Uma boa configuração de firewall iptables negará tudo, exceto os requisitos mínimos que você precisa em seu (s) sistema (s) em termos de "conexões aceitáveis", e deve aceitar somente conexões que foram explicitamente permitidas nas regras. / p>

Para isso, temos que configurar iptables E ip6tables para bloquear o tráfego por padrão, exceto o tráfego que você iniciou de dentro do seu computador (como como tráfego da web do Firefox, etc., se você estiver em um sistema ou de um fluxo wget para baixar software ou para permitir que apt atualize os pacotes). Também temos que permitir que você possa adicionar regras aceitáveis ao tráfego que você deseja alcançar em seu sistema.

Para que essas regras sejam persistentes para que funcionem o tempo todo a cada reinicialização, você deve instalar o pacote iptables-persistent , que permitirá salvar essas regras e, em seguida, carregá-las automaticamente em inicialização do sistema. Execute sudo apt-get install iptables-persistent primeiro e adicione suas regras. Atualizaremos o conjunto de regras que será carregado na inicialização depois que criarmos um conjunto de regras.

Assumindo que começamos com um iptables e ip6tables setup em branco (que é o padrão no Ubuntu), você precisará adicionar várias regras. Começarei com iptables , depois trabalharemos com ip6tables .

iptables

O seguinte é um conjunto de regras básico que restringe todos os dados e pacotes que tentam acessar seu sistema, independentemente da conexão:

Aceite os dados do host local em iptables -A INPUT -i lo -j ACCEPT - aceite todo o tráfego no LocalHost, que é o tráfego local apenas dentro do computador. Isso é necessário para o seu computador funcionar corretamente.

Aceite os dados relacionados às conexões de saída que seu sistema iniciou
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT - aceite todo o tráfego relacionado às conexões em uma direção de saída, incluindo respostas de servidores remotos (como os espelhos apt ou qualquer website que você esteja visitando).

Regras do ICMP
Note que eu não filtro os pacotes ICMP, já que estes são geralmente aceitáveis, a menos que você seja paranóico. Se você realmente quer bloquear o ICMP, então você precisa usar essas regras para aceitar alguns pacotes críticos:

Aceite o "ICMP do tempo excedido"
iptables -A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT - aceite os pacotes "Time Exceeded" que são necessários para determinadas configurações de conexão com restrição de tempo.

Aceite o "Destino Inacessível" ICMP
iptables -A INPUT -p icmp -m icmp --icmp-type 3/4 -j ACCEPT - aceite respostas ICMP "Destino Inacessível" de servidores remotos. Isso permite que o sistema funcione corretamente com sites remotos que você não consegue acessar.

Aceitar solicitações / respostas PING ("Echo" ICMP)
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT - aceitar solicitações "Echo" (também chamadas de "Ping"). É bom manter isso porque a conexão do seu sistema com certos sites e / ou serviços pode exigir um PING para uma solicitação de manutenção.

Crie uma tabela iptables para manter portas / regras de tráfego aceitáveis
iptables -N acceptable_traffic
iptables -A INPUT -j acceptable_traffic

Ao fazer isso, você tem uma tabela onde você pode colocar regras para o tráfego que você deseja aceitar no seu sistema a partir de conexões externas. Se você tem um servidor SSH, você deve iptables -A acceptable_traffic -p tcp --dport 22 -j ACCEPT (ou substituir 22 pela porta do servidor SSH). Você adicionaria outras regras de tráfego aceitáveis aqui também.

Rejeitar todo o tráfego para o qual não há regras definidas
Existem duas opções para isso.

iptables -A INPUT -j REJECT --reject-with icmp-host-unreachable - Esta é a primeira opção, e o que eu considero uma forma mais sadia de bloquear o tráfego, quando um indivíduo tenta acessar o servidor, ele recebe um pacote ICMP "Host Unreachable" que finaliza a conexão tentativa.

iptables -A INPUT -j DROP - esta é a segunda opção. Isso eliminará automaticamente todos os pacotes recebidos que são enviados ao seu sistema e que não correspondem a uma regra ACEITAR. Isso significa que os pacotes são completamente ignorados.As tentativas de conexão do local remoto acabarão por expirar sem resposta do sistema que está sendo conectado.

ip6tables

Como iptables para IPv4, você precisa configurar ip6tables para IPv6. As regras são semelhantes, mas diferentes. * Se você não tiver o IPv6 em seu sistema, talvez não tenha que se preocupar com isso, no entanto, não haverá danos nas regras do sistema.

Aceite os dados do host local em ip6tables -A INPUT -i lo -j ACCEPT - aceite todo o tráfego no LocalHost, que é o tráfego local apenas dentro do computador. Isso é necessário para o seu computador funcionar corretamente.

Aceite os dados relacionados às conexões de saída que seu sistema iniciou
ip6tables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT - aceite todo o tráfego relacionado às conexões em uma direção de saída, incluindo respostas de servidores remotos (como os espelhos apt ou qualquer website que você esteja visitando).

regras ICMPv6
ip6tables -A INPUT -p icmpv6 -j ACCEPT - Eu não bloqueio pacotes IPv6 ICMP, porque ao contrário do IPv4, há um bilhão a mais de pacotes IPv6 ICMP que você deve aceitar (ou seja, todos eles). Para esse fim, você pode fazer isso para aceitar todos eles.

Crie uma tabela ip6tables para manter portas / regras de tráfego aceitáveis
ip6tables -N acceptable_traffic
ip6tables -A INPUT -j acceptable_traffic

Ao fazer isso, você tem uma tabela onde você pode colocar regras para o tráfego que você deseja aceitar no seu sistema a partir de conexões externas. Se você tem um servidor SSH, você deve ip6tables -A acceptable_traffic -p tcp --dport 22 -j ACCEPT (ou substituir 22 pela porta do servidor SSH). Você adicionaria outras regras de tráfego aceitáveis aqui também.

Rejeitar todo o tráfego para o qual não há regras definidas
Existem duas opções para isso.

ip6tables -A INPUT -j REJECT --reject-with icmp6-addr-unreachable - Esta é a primeira opção, e o que eu considero uma forma mais sadia de bloquear o tráfego, quando um indivíduo tenta acessar o servidor, ele recebe um pacote ICMPv6 "Address Unreachable" que finaliza a conexão tentativa.

ip6tables -A INPUT -j DROP - esta é a segunda opção. Isso eliminará automaticamente todos os pacotes recebidos que são enviados ao seu sistema e que não correspondem a uma regra ACEITAR. Isso significa que os pacotes são completamente ignorados. As tentativas de conexão do local remoto acabarão por expirar sem resposta do sistema que está sendo conectado.

Salve todas as regras

Como eu lhe disse antes para instalar o pacote iptables-persistent , você precisará salvar as regras para que elas possam ser carregadas depois.

NOTA: Esse conjunto de comandos, na verdade, o coloca em um shell de superusuário. VOCÊ NÃO DEVE FAZER NADA MAIS NESTE SHELL EXCETO ESTES COMANDOS QUE EU ESTADO AQUI!

Execute os seguintes comandos:

sudo -s
iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6
exit

Isso salvará as regras para que possam ser carregadas a cada reinicialização. SE VOCÊ EDITAR AS REGRAS DEPOIS, VOCÊ PRECISARÁ REALIZAR ESSES COMANDOS PARA SALVAR OS REGULAMENTOS.

E se eu realmente quiser bloquear uma lista de IPs ruins?

Ainda podemos fazer isso! Você pode querer uma lista de blocos para o tráfego "ruim". Então, aqui está a minha solução para isso, e como antes eu vou dividi-lo em duas seções, iptables e ip6tables .

iptables

Crie uma tabela para prohibited_traffic

Precisamos agora criar uma tabela prohibited_traffic . Você adicionará "IPs ruins" aqui. Em seguida, precisamos inserir a regra prohibited_traffic na tabela INPUT. (No exemplo abaixo, eu uso 2 para indicar a localização do número da regra para onde inserimos essa regra, que a coloca logo após a regra que lê ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED :

iptables -N prohibited_traffic
iptables -I INPUT 2 -j prohibited_traffic

Adicionar regras para bloquear determinados IPs

Agora adicionamos IPs para bloquear a tabela prohibited_traffic . Aqui está o modelo:

iptables -A prohibited_traffic -s SourceIPAddress -j DROP

Substitua 'SourceIPAddress' pelo endereço IP que você deseja bloquear. Se você tiver um intervalo de IPs a bloquear, será necessário usar o 'intervalo' e determinar o intervalo CIDR que contém todos os endereços IP e, em seguida, usar o formato IPV4ADDRESS/cidr para bloquear o intervalo CIDR que inclui os IPs. Blocos de intervalo não podem ser feitos sem CIDR ou adicionando um monte de IPs, um por um.

ip6tables

Isso é quase idêntico a iptables

Crie uma tabela para prohibited_traffic

Precisamos agora criar uma tabela prohibited_traffic . Você adicionará "IPs ruins" aqui. Em seguida, precisamos inserir a regra prohibited_traffic na tabela INPUT. (No exemplo abaixo, eu uso 2 para indicar a localização do número da regra para onde inserimos essa regra, que a coloca logo após a regra que lê ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED :

ip6tables -N prohibited_traffic
ip6tables -I INPUT 2 -j prohibited_traffic

Adicionar regras para bloquear determinados IPs

Agora adicionamos IPs para bloquear a tabela prohibited_traffic . Aqui está o modelo:

ip6tables -A prohibited_traffic -s SourceIPAddress -j DROP

Substitua 'SourceIPAddress' pelo endereço IP que você deseja bloquear. Se você tiver um intervalo de IPs a bloquear, será necessário usar o 'intervalo' e determinar o intervalo CIDR que contém todos os endereços IP e, em seguida, usar o formato IPV6ADDRESS/cidr para bloquear o intervalo CIDR que inclui os IPs. Blocos de intervalo não podem ser feitos sem CIDR ou adicionando um monte de IPs, um por um.

    
por Thomas Ward 28.01.2014 / 15:52
20

Você também pode usar ufw e IMO é muito mais simples.

Para negar um endereço IP de conexões qualquer , use:

sudo ufw deny from <ip_address> to any  

Ou para negar acesso a uma porta específica:

sudo ufw deny from <ip_address> to any port <some_port>  

ou você pode especificar o protocolo:

sudo ufw deny proto tcp from <ip_address> to any port <some_port>  

(substituindo tcp por tcp ou udp dependendo de qual protocolo você deseja)

    
por Seth 28.01.2014 / 20:26
2

Uma das opções é usar iptables que ativará um firewall real para o seu sistema; esta é provavelmente a maneira mais segura (veja as outras respostas).

Esta resposta é útil se o problema é que você vê repetidas tentativas de entrar em seu sistema através do daemon sshd (serviço do servidor SSH).

Aviso: conforme 14.04, % o suporte co_de% foi eliminado .

A nova solução é usar denyhost . É mais poderoso e fácil de instalar com a configuração padrão. Veja o link

resposta antiga

Você não declarou explicitamente que tipo de problema você vê, mas se o problema é que alguém está tentando entrar no seu sistema por meio de força bruta fail2ban ataques (dificilmente perigoso se o seu sistema estiver bem configurado, mas ainda incômodo Sugiro que você dê uma olhada em DenyHosts .

Você pode instalá-lo a partir do repositório com ssh e ele simplesmente sai da caixa, bloqueando automaticamente por uma semana qualquer host que tente fazer login em sua máquina e falhe três vezes.

    
por Rmano 28.01.2014 / 16:49
1
iptables -A INPUT -s IP-ADDRESS -j DROP

Substitua IP-ADDRESS pelo seu endereço IP real. Por exemplo , se você quiser bloquear um endereço IP 192.168.0.100 por qualquer motivo, digite o comando da seguinte forma:

iptables -A INPUT -s 192.168.0.100 -j DROP

Se você quiser apenas bloquear o acesso a uma porta de um ip 192.168.0.100 para a porta 80, digite command:

iptables -A INPUT -s 192.168.0.100 -p tcp --destination-port 80 -j DROP
    
por nux 28.01.2014 / 02:24