Configuração e exemplos fáceis de IPTables no Ubuntu 16.04

Introdução

iptablesé uma ferramenta poderosa usada para configurar o firewall integrado do kernel do Linux. Ele vem pré-instalado na maioria das distribuições do Ubuntu; no entanto, se você estiver usando uma versão personalizada do Ubuntu ou executando dentro de um contêiner, provavelmente precisará instalá-lo manualmente.

sudo apt-get install iptables iptables-persistent

Após a instalação, se você for perguntado se deseja salvar suas regras atuais, isso não importa no momento, porque você removerá ou criará novas regras posteriormente.

Dicas

Você pode usar o netcatcomando (em um computador diferente do servidor) para testar quais portas estão abertas ou fechadas.

nc -z -w5 -v SERVER_IP PORT
  • nc é o comando netcat.
  • -z basta enviar um pacote sem carga útil.
  • -w5 aguarde até 5 segundos por uma resposta.
  • -v modo detalhado.
  • Substitua SERVER_IPpelo endereço do servidor.
  • Substitua PORTpela porta que você deseja testar se estiver aberta (por exemplo 22).

No seu servidor, você pode usar o netstatcomando para ver quais portas estão ouvindo conexões no momento.

sudo netstat -tulpn

Nota: Embora netstatseja útil encontrar as portas com as quais você deseja trabalhar, você deve estar ciente dos aplicativos que você instalou no momento no servidor e quais portas estão atendendo, não é necessário permitir todas as portas encontradas na netstatsaída .

Sintaxe

sudo iptables -A INPUT -p tcp -m tcp --dport 22 --m geoip --src-cc PE -j ACCEPT
  • -A INPUTadicionar uma regra para a INPUTcadeia, uma cadeia é um conjunto de regras, as que usamos mais sobre este guia vai ser INPUT, OUTPUTe PREROUTING.
  • -p tcpdefinido tcpcomo o protocolo ao qual esta regra se aplicará, você também pode usar outros protocolos como udp, icmpou all.
  • -m tcpuse o tcpmódulo iptablessuporta recursos adicionais por meio de módulos, alguns dos quais já vêm pré-instalados com iptablesoutros, como o geoipmódulo.
  • --dport 22os comandos iniciados com --indicam opções adicionais para o módulo usado anteriormente; nesse caso, tcpsolicitaremos que o módulo se aplique apenas à porta 22.
  • -m geoipuse o geoipmódulo Isso limitará os pacotes por país (mais informações na etapa 5).
  • --src-cc PEdiga ao geoipmódulo para limitar os pacotes recebidos aos que vêm do Peru. Para obter mais códigos de países, procure ISO 3166 country codesna internet.
  • -j ACCEPTo -jargumento diz iptableso que fazer se um pacote corresponder às restrições especificadas nos argumentos anteriores. Neste caso, será ACCEPTaqueles pacotes, outras opções são REJECT, DROPe muito mais. Você pode encontrar mais opções pesquisando iptables jump targetsna internet.

1. Noções básicas

Liste todas as regras.

sudo iptables -L

Liste todos os comandos que foram usados ​​para criar as regras usadas atualmente, úteis para editar ou excluir regras.

sudo iptables -S

Para excluir uma regra específica, escolha uma regra sudo iptables -Se substitua -Apor -D.

# -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

sudo iptables -D INPUT -p tcp -m tcp --dport 22 -j ACCEPT

Liste todas as regras numeradas na INPUTcadeia.

sudo iptables -L INPUT --line-numbers

Exclua uma regra numerada.

sudo iptables -D INPUT 2

Para limpar todas as regras.

sudo iptables -F

Aviso: você pode perder a conexão se conectado por SSH .

Limpe apenas regras da OUTPUTcadeia.

sudo iptables -F OUTPUT

2. Crie regras iniciais

Permitir SSHna eth0interface

sudo iptables -A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
  • -i eth0 aplique a regra a uma interface específica para permitir que, a partir de qualquer interface, remova esse comando.

Limitar pacotes recebidos a um IP específico (ou seja 10.0.3.1/32).

sudo iptables -A INPUT -i eth0 -s 10.0.3.1/32 -p tcp -m tcp --dport 22 -j ACCEPT
  • -s 10.0.3.1/32 especifica um IP / sub-rede da qual permitir conexões.

Defina regras de cadeia padrão.

Aviso: antes de continuar, verifique se você aplicou as regras SSH corretas se estiver trabalhando em um servidor remoto .

sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP 
sudo iptables -P OUTPUT ACCEPT 
  • -P INPUT DROP nega todos os pacotes recebidos (ou seja, ninguém será capaz de se conectar aos servidores em execução, como Apache, SQL, etc).
  • -P FORWARD DROP nega todos os pacotes encaminhados (ou seja, quando você estiver usando seu sistema como roteador).
  • -P OUTPUT ACCEPTpermite todos os pacotes de saída (ou seja, quando você executa uma HTTPsolicitação).

Permitir todo o tráfego na interface de loopback ( recomendado ).

sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT

3. Torne as regras persistentes

Salve as iptablesregras atuais .

sudo netfilter-persistent save
sudo netfilter-persistent reload

Se você estiver executando dentro de um contêiner, o netfilter-persistentcomando provavelmente não funcionará; portanto, é necessário reconfigurar o iptables-persistentpacote.

sudo dpkg-reconfigure iptables-persistent

4. Permitir conexões de saída

Permitir consultas DNS.

sudo iptables -A OUTPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT
sudo iptables -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT

Use o statemódulo para permitir RELATEDe ESTABLISHEDenviar pacotes.

sudo iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

Permita as portas desejadas; neste caso, HTTPportas.

sudo iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT

Mais portas que você pode querer usar.

  • FTP: tcp na porta 21
  • HTTPS: tcp na porta 443
  • DHCP: udp na porta 67
  • NTP: udp na porta 123

Nota: Se você deseja permitir apt-get, pode ser necessário permitir FTPeHTTPS .

Permitir o tráfego retornado apenas para RELATEDe já ESTABLISHEDconexões ( recomendado porque às vezes é necessária comunicação bidirecional).

sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
Outras regras úteis

Permitir solicitações de ping de fora.

sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
sudo iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

Encaminhar tráfego na eth0porta 2200para 10.0.3.21:22(útil se você deseja expor um servidor SSH que está sendo executado dentro de um contêiner).

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 2200 -j DNAT --to-destination 10.0.3.21:22

Se você fizer login com sucesso no servidor usando SSH, uma conexão persistente será criada (ou seja, nenhuma conexão nova, mesmo se você estiver conectado por mais de 1 hora). Se você falhar e tentar fazer login novamente, uma nova conexão será criada. Isso bloqueará tentativas contínuas de login no SSH, limitando novas conexões por hora.

sudo iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
sudo iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 3600 --hitcount 4 -j DROP

Redirecione todas as solicitações de porta 443em porta 4430(útil se você desejar ligar à porta 443sem root).

sudo iptables -t nat -A PREROUTING -i ens3 -p tcp --dport 443 -j REDIRECT --to-port 4430
sudo iptables -A INPUT -p tcp -m tcp --dport 4430 -m geoip --src-cc PE -j ACCEPT
  • ens3 a interface de rede.
  • -m geoip módulo de bloco do país (consulte a etapa 5).

Aviso: Não use lo, o sistema operacional descartará todos os pacotes redirecionados para a interface de loopback .

5. Permitir ou bloquear países inteiros

5.1 Instalação xtables-addons

Você pode instalar o xtables-addonsmódulo usando vários métodos, fique à vontade para usar o método de instalação que funciona melhor para você.

  • Instale usando apt-get.

    sudo apt-get install xtables-addons-common
    
  • Instale usando module-assistant.

    sudo apt-get install module-assistant xtables-addons-source
    sudo module-assistant --verbose --text-mode auto-install xtables-addons
    
  • Instale a partir da fonte.

    sudo apt-get install git bc libncurses5-dev libtext-csv-xs-perl autoconf automake libtool xutils-dev iptables-dev
    git clone git://git.code.sf.net/p/xtables-addons/xtables-addons
    cd xtables-addons
    ./autogen.sh
    ./configure
    make
    sudo make install
    

Crie um banco de dados "países".

sudo apt-get install libtext-csv-xs-perl unzip
sudo mkdir /usr/share/xt_geoip
sudo /usr/lib/xtables-addons/xt_geoip_dl
sudo /usr/lib/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip *.csv
sudo rm GeoIPCountryCSV.zip GeoIPCountryWhois.csv GeoIPv6.csv

Reinicie seu sistema.

sudo reboot

Após a xtables-addonsinstalação bem-sucedida, após a primeira reinicialização, execute depmodcaso contrário, o bloqueio do país não funcionará corretamente (isso é necessário apenas pela primeira vez).

sudo depmod 

Crie um script em /etc/cron.monthly/geoip-updaterpara atualizar o geoipbanco de dados mensalmente.

#!/usr/bin/env bash
# this script is intended to run with sudo privileges

echo 'Removing old database---------------------------------------------------'
rm -rf /usr/share/xt_geoip/*
mkdir -p /usr/share/xt_geoip

echo 'Downloading country databases-------------------------------------------'
mkdir /tmp/geoip-updater
cd /tmp/geoip-updater
/usr/lib/xtables-addons/xt_geoip_dl

echo 'Building geoip database-------------------------------------------------'
/usr/lib/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip *.csv

echo 'Removing temporary files------------------------------------------------'
cd /tmp
rm -rf /tmp/geoip-updater

Tornar /etc/cron.monthly/geoip-updaterexecutável.

sudo chmod +x /etc/cron.monthly/geoip-updater

5.2 Exemplos de regras

_Nota: Se você estiver recebendo um iptables: No chain/target/match by that nameerro ao tentar aplicar uma geoipregra, é possível que xtables-addonsnão tenha sido instalado corretamente. Tente outro método de instalação.

Bloqueie todos os pacotes recebidos da China, Hong Kong, Rússia e Coréia.

sudo iptables -A INPUT -m geoip --src-cc CN,HK,RU,KR -j DROP

Permitir pacotes recebidos na porta 80de qualquer lugar, exceto os países acima.

sudo iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

Permita pacotes recebidos na ens3interface 22apenas na porta do Peru (fique à vontade para escolher o código do país do qual deseja aceitar pacotes, por exemplo, USpara os Estados Unidos).

sudo iptables -A INPUT -i ens3 -p tcp -m tcp --dport 22 -m geoip --src-cc PE -j ACCEPT

Permitir pacotes recebidos na porta 443apenas do Peru.

sudo iptables -A INPUT -p tcp -m tcp --dport 443 -m geoip --src-cc PE -j ACCEPT


Leave a Comment

Como instalar a plataforma LiteCart Shopping Cart no Ubuntu 16.04

Como instalar a plataforma LiteCart Shopping Cart no Ubuntu 16.04

LiteCart é uma plataforma de carrinho de compras de código aberto e gratuita escrita em PHP, jQuery e HTML 5. É um software de comércio eletrônico simples, leve e fácil de usar

Configuração inicial segura do servidor Ubuntu 18.04

Configuração inicial segura do servidor Ubuntu 18.04

Introdução Neste tutorial, você aprenderá como configurar um nível básico de segurança em uma nova máquina virtual Vultr VC2 executando o Ubunt

Instalando o McMyAdmin no Ubuntu 14.10

Instalando o McMyAdmin no Ubuntu 14.10

McMyAdmin é um painel de controle do servidor Minecraft usado para administrar seu servidor. Embora o McMyAdmin seja gratuito, há várias edições, algumas das quais são pai

Configurar um TeamTalk Server no Linux

Configurar um TeamTalk Server no Linux

O TeamTalk é um sistema de conferência que permite aos usuários ter conversas de áudio / vídeo de alta qualidade, bate-papo por texto, transferir arquivos e compartilhar telas. É eu

Como instalar e configurar o CyberPanel no servidor CentOS 7

Como instalar e configurar o CyberPanel no servidor CentOS 7

Usando um sistema diferente? Introdução O CyberPanel é um dos primeiros painéis de controle do mercado, tanto de código aberto quanto de OpenLiteSpeed. What thi

Instale o Grafana no Ubuntu 16.04 LTS

Instale o Grafana no Ubuntu 16.04 LTS

Usando um sistema diferente? Introdução O Grafana é um software de código aberto que transforma vários feeds de sistemas como Graphite, Telegraf, um

Instale o phpBB com Apache no Ubuntu 16.04

Instale o phpBB com Apache no Ubuntu 16.04

PhpBB é um programa de boletim de código aberto. Este artigo mostra como instalar o phpBB em cima de um servidor Apache no Ubuntu 16.04. Foi writte

Como instalar o Foreman no Ubuntu 16.04 LTS

Como instalar o Foreman no Ubuntu 16.04 LTS

Usando um sistema diferente? O Foreman é uma ferramenta gratuita e de código aberto que ajuda na configuração e gerenciamento de servidores físicos e virtuais. Forema

Configurar um usuário não root com Sudo Access no Ubuntu

Configurar um usuário não root com Sudo Access no Ubuntu

Ter apenas um usuário, que é root, pode ser perigoso. Então vamos consertar isso. O Vultr nos dá a liberdade de fazer o que quisermos com nossos usuários e servidores

Instale o eSpeak no CentOS 7

Instale o eSpeak no CentOS 7

Usando um sistema diferente? O ESpeak pode gerar arquivos de áudio de conversão de texto em fala (TTS). Isso pode ser útil por vários motivos, como criar seu próprio Turim

Instalando o Fuel CMS no Ubuntu 16.04 LTS

Instalando o Fuel CMS no Ubuntu 16.04 LTS

Usando um sistema diferente? O Fuel CMS é um sistema de gerenciamento de conteúdo baseado em CodeIgniter. Seu código fonte está hospedado no GitHub. Este guia mostra como você pode

Como instalar o Couch CMS 2.0 em um VPS Debian 9 LAMP

Como instalar o Couch CMS 2.0 em um VPS Debian 9 LAMP

Usando um sistema diferente? O Couch CMS é um sistema de gerenciamento de conteúdo (CMS) simples e flexível, gratuito e de código aberto que permite que os web designers

Monitore seus dispositivos usando o LibreNMS no CentOS 7

Monitore seus dispositivos usando o LibreNMS no CentOS 7

Usando um sistema diferente? O LibreNMS é um sistema de monitoramento de rede de código aberto completo. Ele usa o SNMP para obter os dados de diferentes dispositivos. Uma variedade

Como usar o Sudo no Debian, CentOS e FreeBSD

Como usar o Sudo no Debian, CentOS e FreeBSD

Usar um usuário sudo para acessar um servidor e executar comandos no nível raiz é uma prática muito comum entre o Linux e o Unix Systems Administrator. O uso de um sud

Como instalar o RabbitMQ no CentOS 7

Como instalar o RabbitMQ no CentOS 7

Usando um sistema diferente? O RabbitMQ é um intermediário de mensagens de código aberto amplamente usado, escrito na linguagem de programação Erlang. Como um middleware orientado a mensagens

Como ativar o TLS 1.3 no Apache no Fedora 30

Como ativar o TLS 1.3 no Apache no Fedora 30

Usando um sistema diferente? O TLS 1.3 é uma versão do protocolo TLS (Transport Layer Security) publicada em 2018 como um padrão proposto no RFC 8446

Configurando um Chroot no Debian

Configurando um Chroot no Debian

Este artigo ensinará como configurar uma prisão chroot no Debian. Presumo que você esteja usando o Debian 7.x. Se você estiver executando o Debian 6 ou 8, isso pode funcionar, mas

Como instalar o PiVPN no Debian

Como instalar o PiVPN no Debian

Introdução Uma maneira fácil de configurar um servidor VPN no Debian é com o PiVPN. PiVPN é um instalador e wrapper para o OpenVPN. Ele cria comandos simples para você t

Configurar o Nginx-RTMP no CentOS 7

Configurar o Nginx-RTMP no CentOS 7

Usando um sistema diferente? O RTMP é ótimo para veicular conteúdo ao vivo. Quando o RTMP é emparelhado com o FFmpeg, os fluxos podem ser convertidos em várias qualidades. Vultr i

Como instalar e configurar o CyberPanel no Ubuntu 18.04 LTS

Como instalar e configurar o CyberPanel no Ubuntu 18.04 LTS

Usando um sistema diferente? Introdução O CyberPanel é um dos primeiros painéis de controle do mercado, tanto de código aberto quanto de OpenLiteSpeed. What thi

A IA pode lutar contra o aumento do número de ataques de ransomware

A IA pode lutar contra o aumento do número de ataques de ransomware

Os ataques de ransomware estão aumentando, mas a IA pode ajudar a lidar com os vírus de computador mais recentes? AI é a resposta? Leia aqui para saber se é AI boone ou bane

ReactOS: Este é o futuro do Windows?

ReactOS: Este é o futuro do Windows?

ReactOS, um sistema operacional de código aberto e gratuito está aqui com a versão mais recente. Será que ela pode atender às necessidades dos usuários modernos do Windows e derrubar a Microsoft? Vamos descobrir mais sobre esse estilo antigo, mas uma experiência de sistema operacional mais recente.

Fique conectado por meio do aplicativo WhatsApp Desktop 24 * 7

Fique conectado por meio do aplicativo WhatsApp Desktop 24 * 7

O Whatsapp finalmente lançou o aplicativo Desktop para usuários de Mac e Windows. Agora você pode acessar o Whatsapp do Windows ou Mac facilmente. Disponível para Windows 8+ e Mac OS 10.9+

Como a IA pode levar a automação de processos ao próximo nível?

Como a IA pode levar a automação de processos ao próximo nível?

Leia isto para saber como a Inteligência Artificial está se tornando popular entre as empresas de pequena escala e como está aumentando as probabilidades de fazê-las crescer e dar vantagem a seus concorrentes.

A atualização do suplemento do macOS Catalina 10.15.4 está causando mais problemas do que resolvendo

A atualização do suplemento do macOS Catalina 10.15.4 está causando mais problemas do que resolvendo

Recentemente, a Apple lançou o macOS Catalina 10.15.4, uma atualização suplementar para corrigir problemas, mas parece que a atualização está causando mais problemas, levando ao bloqueio de máquinas mac. Leia este artigo para saber mais

13 Ferramentas de Extração de Dados Comerciais de Big Data

13 Ferramentas de Extração de Dados Comerciais de Big Data

13 Ferramentas de Extração de Dados Comerciais de Big Data

O que é um sistema de arquivos de registro no diário e como ele funciona?

O que é um sistema de arquivos de registro no diário e como ele funciona?

Nosso computador armazena todos os dados de uma maneira organizada conhecida como sistema de arquivos Journaling. É um método eficiente que permite ao computador pesquisar e exibir arquivos assim que você clicar em search.https: //wethegeek.com/? P = 94116 & preview = true

Singularidade tecnológica: um futuro distante da civilização humana?

Singularidade tecnológica: um futuro distante da civilização humana?

À medida que a ciência evolui em um ritmo rápido, assumindo muitos de nossos esforços, os riscos de nos sujeitarmos a uma singularidade inexplicável também aumentam. Leia, o que a singularidade pode significar para nós.

Uma visão sobre 26 técnicas analíticas de Big Data: Parte 1

Uma visão sobre 26 técnicas analíticas de Big Data: Parte 1

Uma visão sobre 26 técnicas analíticas de Big Data: Parte 1

O impacto da inteligência artificial na saúde 2021

O impacto da inteligência artificial na saúde 2021

A IA na área da saúde deu grandes saltos nas últimas décadas. Portanto, o futuro da IA ​​na área da saúde ainda está crescendo dia a dia.