Mini Curso – Controle e Segurança com Iptables

19
1 MINICURSO - CONTROLE E SEGURANÇA COM IPTABLES Ministrante: Edson Marco Ferrari Junior Local: CESUMAR -- Centro Universitário de Maringá Carga horária: 8 horas Data: 18 de novembro de 2006 Sumário 1. O que é um Firewall ....................................................................................................................... ........3 2. Conceito de protocolos .......................................................................................................... ................4  2.1 O que é um protocolo de rede .............................................................................................. ..........4  2.1.1 Protocolo TCP............................................................................................... .........................4  2.1.1.1 Estabelecendo uma conexão....................................................................... ....................4  2.1.1.2 Flags do protocolo TCP................................................................................... ...............5  2.1.2 Protocolo UDP ............................................................................................. ..........................5  2.1.3 Protocolo ICMP ................................................................................................................... ...5  3. Conceito de portas................................................................................................................. ...............5  4. IPTABLES .................................................................................................................................. ..........7  4.1 Principais funções do iptables .................................................................................. .....................7  4.2 Tabelas.................................................................................................................. .........................7  4.2.1 FILTER.................................................................................................................................. .7  4.2.2 NAT................................................................................................................................. .......7  4.2.3 MANGLE.................................................................................................. ............................7  4.3 Chains.................................................................................................................. ..........................8  4.3.1 Chains embutidas .................................................................................................... ...............8  4.3.1.1 Chains da tabela FILTER.......................................................................... .....................8  4.3.1.2 Chains da tabela NAT.......................................................................... ..........................8  4.3.2 Chains criadas pelo usuário......................................................................................... ..........9  4.3.3 Trabalhando com as chains .............................................................................................. ......9  4.3.3.1 Especificando o policiamento padrão de uma chain....................................................9  4.4 Regras ................................................................................................................. ...........................9  4.4.1 Adicionando regras ..................................................................................... .........................10  4.4.2 Listando regras ............................................................................................................. ........10  4.4.3 Apagando regras...................................................................................... ............................11  4.4.4 Posição das regras ................................................................................................... .............12  4.4.5 Inserindo regras em posição definida........................................................................... .......12  4.4.6 Substituindo uma regra......................................................................................... ...............12  4.5 Definindo regras .................................................................................................. ........................13  4.5.1 Tipos de protocolos.............................................................................................. ................13 Este trabalho é licenciado sobre a licença Creative Commons Attribution-ShareAlike 2.5. Para visualizar uma cópia desta licença visite o endereço: http://creativecommons.org/licenses/by-sa/2.5/br/deed.pt  ou envie uma carta para Creative Commons, 543 Howard Street, 5 th  Floor, San Francisco, California, 94105, USA.

description

Mini curso aprensentado no Cesumar (2006) sobre configuração e utilização do firewall Iptables. http://www.edmafer.com.br

Transcript of Mini Curso – Controle e Segurança com Iptables

Page 1: Mini Curso – Controle e Segurança com Iptables

1

MINICURSO ­ CONTROLE E SEGURANÇA COM IPTABLES

Ministrante: Edson Marco Ferrari JuniorLocal: CESUMAR ­­ Centro Universitário de MaringáCarga horária: 8 horasData: 18 de novembro de 2006

Sumário1. O que é um Firewall...............................................................................................................................32. Conceito de protocolos..........................................................................................................................4

 2.1 O que é um protocolo de rede........................................................................................................4 2.1.1 Protocolo TCP........................................................................................................................4

 2.1.1.1 Estabelecendo uma conexão...........................................................................................4 2.1.1.2 Flags do protocolo TCP..................................................................................................5

 2.1.2 Protocolo UDP.......................................................................................................................5 2.1.3 Protocolo ICMP......................................................................................................................5

 3. Conceito de portas................................................................................................................................5 4. IPTABLES............................................................................................................................................7

 4.1 Principais funções do iptables.......................................................................................................7 4.2 Tabelas...........................................................................................................................................7

 4.2.1 FILTER...................................................................................................................................7 4.2.2 NAT........................................................................................................................................7 4.2.3 MANGLE..............................................................................................................................7

 4.3 Chains............................................................................................................................................8 4.3.1 Chains embutidas...................................................................................................................8

 4.3.1.1 Chains da tabela FILTER...............................................................................................8 4.3.1.2 Chains da tabela NAT....................................................................................................8

 4.3.2 Chains criadas pelo usuário...................................................................................................9 4.3.3 Trabalhando com as chains....................................................................................................9

 4.3.3.1 Especificando o policiamento padrão de uma chain.....................................................9 4.4 Regras............................................................................................................................................9

 4.4.1 Adicionando regras..............................................................................................................10 4.4.2 Listando regras.....................................................................................................................10 4.4.3 Apagando regras..................................................................................................................11 4.4.4 Posição das regras................................................................................................................12 4.4.5 Inserindo regras em posição definida..................................................................................12 4.4.6 Substituindo uma regra........................................................................................................12

 4.5 Definindo regras..........................................................................................................................13 4.5.1 Tipos de protocolos..............................................................................................................13

Este trabalho é licenciado sobre a licença Creative Commons Attribution­ShareAlike 2.5. Para visualizar uma cópia desta   licença   visite   o   endereço:  http://creativecommons.org/licenses/by­sa/2.5/br/deed.pt  ou   envie   uma   carta   para Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.

Page 2: Mini Curso – Controle e Segurança com Iptables

2

 4.5.1.1 TCP...............................................................................................................................13 4.5.1.2 UDP..............................................................................................................................13 4.5.1.3 ICMP............................................................................................................................13

 4.5.2 Endereços de origem............................................................................................................14 4.5.3 Endereços de destino............................................................................................................14 4.5.4 Portas de destino..................................................................................................................14 4.5.5 Portas de origem..................................................................................................................15 4.5.6 Definindo múltiplas portas..................................................................................................15

 4.5.6.1 Definindo uma faixa de portas.....................................................................................15 4.5.6.2 Definindo várias portas................................................................................................15

 4.5.7 Definindo a interface...........................................................................................................15 4.5.8 Endereço MAC.....................................................................................................................16 4.5.9 Pacotes SYN.........................................................................................................................16 4.5.10 Estado da conexão..............................................................................................................16 4.5.11 Exceções à regra.................................................................................................................17 4.5.12 Alvo das regras...................................................................................................................17

 4.5.12.1 DROP..........................................................................................................................17 4.5.12.2 REJECT......................................................................................................................17 4.5.12.3 LOG............................................................................................................................18 4.5.12.4 RETURN....................................................................................................................18 4.5.12.5 DNAT.........................................................................................................................19 4.5.12.6 SNAT..........................................................................................................................19 4.5.12.7 MASQUERADE........................................................................................................19 4.5.12.8 Limite de conferencia de uma regra...........................................................................19

Este trabalho é licenciado sobre a licença Creative Commons Attribution­ShareAlike 2.5. Para visualizar uma cópia desta   licença   visite   o   endereço:  http://creativecommons.org/licenses/by­sa/2.5/br/deed.pt  ou   envie   uma   carta   para Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.

Page 3: Mini Curso – Controle e Segurança com Iptables

3

1. O que é um FirewallÉ um dispositivo de rede que tem a função de regular o tráfego que entre redes distintas, 

controlar   as   conexões   entre   elas.   Podemos   entender   por   firewall   filtros   de   pacotes   e   proxy   de protocolos.

O Firewall   tem como objetivo proteger uma máquina ou rede contra acessos  indesejados, controlar estes acesso e manter informações sobre as conexões.

2. Conceito de protocolosPara entendermos um firewall é necessário um conhecimento básico de protocolos de redes. 

Pelo menos os dois mais importantes: TCP e UDP.

2.1 O que é um protocolo de redeÉ   um   padrão   que   específica   o   formato   de   dados   e   as   regras   a   serem   seguidas   para 

comunicação de máquinas em uma rede.

2.1.1 Protocolo TCPO protocolo TCP baseia­se na comunicação ponto­a­ponto entre duas máquinas em rede.

Este protocolo possui algumas características será útil na configuração de um firewall:

• Orientado a conexão: Antes do início da transferência de dados é necessário que ambas as partes estejam de acordo.

• Confiabilidade: O TCP confirma a entrega de todos os pacotes ao destinatário.

• Three Handshake:  Mecanismo de estabelecimento e   finalização de conexão a  três e 

Este trabalho é licenciado sobre a licença Creative Commons Attribution­ShareAlike 2.5. Para visualizar uma cópia desta   licença   visite   o   endereço:  http://creativecommons.org/licenses/by­sa/2.5/br/deed.pt  ou   envie   uma   carta   para Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.

Page 4: Mini Curso – Controle e Segurança com Iptables

4

quatro  tempos,  respectivamente,  o que permite a autenticação e encerramento de uma sessão completa. O TCP garante que, no final da conexão, todos os pacotes foram bem recebidos.

2.1.1.1 Estabelecendo uma conexão

Geralmente, em uma conexão TCP existe a máquina designada servidor (a máquina que inicia o serviço e fica aguardando uma conexão) e em outro extremo o cliente (a máquina que se conecta a um servidor).

Para iniciar a conexão a máquina cliente envia ao servidor um pacote TCP com a flag SYN ativa, e aguarda que o servidor aceite e lhe devolva um pacote com as flags  SYN+ACK  ativas. O cliente para informar o recebimento da confirmação do servidor devolve um pacote com a flag ACK ativa.

Em cada pacote contém o número de identificação do pacote.

2.1.1.2 Flags do protocolo TCP

• SYN: Quando setado em 1, significa que é um pacote de pedido de abertura de conexão.

• ACK:  Quando setado, sinaliza que este segmento contém o próximo octeto que o host origem espera receber. É a flag de confirmação de recebimento de pacotes.

• FIN:  Esta   flag   é   a   informação   de   término   da   transferência   de   pacotes.   Solicita   a desconexão. Este flag também deve ser confirmado.

• RST:  A flag  reset  indica que a conexão deve ser abortada e   reinicia­se novamente a conexão.

2.1.2 Protocolo UDPÉ um protocolo considerado não seguro. Isto se deve por ele não ser orientado a conexão.  O 

pacote poder ser entregue ou não, ele não irá tratar isto. Mas tem como vantagem a velocidade na entrega dos pacotes. Esta velocidade se deve já que ele não necessita fazer todas as verificações que o pacote TCP realiza. Este padrão de comunicação é muito utilizado em transmissão de vídeo e voz. 

Este trabalho é licenciado sobre a licença Creative Commons Attribution­ShareAlike 2.5. Para visualizar uma cópia desta   licença   visite   o   endereço:  http://creativecommons.org/licenses/by­sa/2.5/br/deed.pt  ou   envie   uma   carta   para Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.

Page 5: Mini Curso – Controle e Segurança com Iptables

5

Comunicações que necessitam de velocidade e não a garantia da entrega do pacote.

2.1.3 Protocolo ICMPO protocolo  ICMP é  utilizado para reportar erros na rede. Mas ele  também serve para a 

localização de hosts, através da aplicação PING. Também é possível com este protocolo descubrir a rota   utilizada  para   se   chegar   a   determinado   host,   com   a   aplicação  TRACEROUTE  (Linux,   ou TRACERT no Windows).

3. Conceito de portasPortas são links para conexões de um computador para outro. Cada porta somente pode ter um 

serviço por protocolo.

Para   efetuar   uma   conexão   é   necessário   que   no   computador   servidor   tenha   um   serviço aguardando  em   determinada  porta,   e   o   computador   cliente   saia   por   determinada  porta   para   se conectar.

Para direcionar a qual  serviço o cliente deseja conectar,  ele  informa no protocolo qual o endereço do destino, e em qual porta ele irá se conectar, e qual porta ele está utilizando para iniciar esta conexão.

Para exemplicar, utilizaremos uma conexão SSH.

Para se fazer uma conexão SSH é necessário que haja um serviço aguardando a conexão em determinada porta, como no caso do SSH já é definida que será a porta 22. O computador cliente irá iniciar a conexão alocando uma porta nele, uma porta maior que 1024 (portas abaixo destas são portas reservadas), por exemplo a porta 1030, e vai conectar­se ao servidor na porta 22.

ssh [email protected]

Visualização da conexão:

Na primeira  tela nós  temos uma conexão  ssh  efetuada (neste caso estamos conectados na mesma máquina), na segunda tela nós podemos analisar as conexões efetuadas e utilizamos um filtro 

Este trabalho é licenciado sobre a licença Creative Commons Attribution­ShareAlike 2.5. Para visualizar uma cópia desta   licença   visite   o   endereço:  http://creativecommons.org/licenses/by­sa/2.5/br/deed.pt  ou   envie   uma   carta   para Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.

Page 6: Mini Curso – Controle e Segurança com Iptables

6

(grep :22) para facilitar a visualização.

Observaremos que nós possuímos um serviço que está com o estado ESTABELECIDA que tem como endereço local 127.0.0.1:33730 e a remota o endereço 127.0.0.1:22, na porta 22 um serviço com o estado OUÇA que é o servidor ssh aguardando uma nova conexão.

A terceira é justamente o contrário, já que o teste foi testado na máquina local. É o servidor no endereço 127.0.0.1:22 e o cliente no endereço 127.0.0.1:33730.

As portas abaixo de 1024 são portas reservadas para os serviços mais comuns, como exemplo:

• ftp porta 21 TCP

• ssh porta 22 TCP

• telnet porta 23 TCP

• smtp porta 25 TCP

• dns porta 53 UDP

• http porta 80 TCP

• pop3 porta 110 TCP

Esta é uma lista resumida dos serviços mais comuns, é possível estar verificando os serviços mais comuns em: http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers

As portas acima de 1024 são liberadas para outros serviços, e devem ser tratadas com muita atenção em um firewall. Estas portas devem obrigatoriamente ser bloqueadas e ir liberando somente o que é necessário.

4. IPTABLESNetfilter é um módulo no kernel do Linux disponível desde o kernel versão 2.4.x que lhe 

abilita as funções de firewall, NAT e Log de utilização. Técnicamente o conhecido apenas como iptables.

Iptables é o nome dado a ferramenta em linha de comando que configura este módulo. Esta ferramenta permite configurar as regras de firewall, NAT e logs.

4.1 Principais funções do iptablesa) Listar as regras de filtragem dos pacotes

b) Adicionar, remover ou modificar as regras de filtragem dos pacotes

c) Listar, apagar por regras os contadores das regras de filtragem dos pacotes

4.2 TabelasTabelas é o local onde são armazenados os  chains  e conjuntos de regras com determinadas 

características em comum. As tabelas são referenciadas através da opção ­t e há 3 tabelas padrões no 

Este trabalho é licenciado sobre a licença Creative Commons Attribution­ShareAlike 2.5. Para visualizar uma cópia desta   licença   visite   o   endereço:  http://creativecommons.org/licenses/by­sa/2.5/br/deed.pt  ou   envie   uma   carta   para Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.

Page 7: Mini Curso – Controle e Segurança com Iptables

7

IPTABLES.

4.2.1 FILTERTabela padrão, caso não seja definido uma tabela com a opção  ­t.  Nesta tabela estarão as 

regras de filtragem e controle dos pacotes.

4.2.2 NATTabela que contém regras que irão modificar conexões. Regras que gerarão outras conexões 

através de masquerading, source nat, destination nat, port forwarding.

As   regras   contidas   nesta   tabela  serão  verificadas  antes   da   tabela  filter,   já   que   elas  irão modificar as regras.

4.2.3 MANGLEEsta tabela ser para modificações especiais no cabeçalho dos pacotes. Esta  tabela contém 

cinco   chains:  PREROUTING,  POSTROUTING,  INPUT,  OUTPUT  e  FORWARD.   As   regras contidas nas chains desta tabela serão verificadas antes das regras de outras tabelas.

Como exemplo de utilização de uma regra na tabela mangle seria a alteração a alteração do TOS (Type of Service) do pacote.

Usando o alvo TOS pode­se especificar a prioridade de uma pacote,  tendo como valores aceitos:

Espera Mínima 

É especificado através de Minimize­Delay, 16 ou 0x10 

Máximo Processamento É especificado através de Maximize­Throughput, 8, ou 0x08. 

Máxima Confiança É especificado através de Maximize­Reliability, 4 ou 0x04. 

Custo mínimo Especificado através de Minimize­Cost, 2 ou 0x02. 

Prioridade Normal Especificado através de Normal­Service, 0 ou 0x00.

Regra para a chain output: iptables ­t mangle ­A OUTPUT ­p tcp ­­dport 80 ­j TOS ­­set­tos 16

4.3 ChainsChains são os locais onde serão armazenadas as regras do firewall definidas pelo usuário. 

Existem dois tipos de chains, os embutidos e os criados pelo usuário.

Este trabalho é licenciado sobre a licença Creative Commons Attribution­ShareAlike 2.5. Para visualizar uma cópia desta   licença   visite   o   endereço:  http://creativecommons.org/licenses/by­sa/2.5/br/deed.pt  ou   envie   uma   carta   para Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.

Page 8: Mini Curso – Controle e Segurança com Iptables

8

4.3.1 Chains embutidas

4.3.1.1 Chains da tabela FILTER

• INPUT ­­  Regras  responsáveis  pelo controle das  conexão que chegam com destino à máquina

Regra para a chain INPUT: iptables ­t filter ­A INPUT ­s 200.200.200.200 ­j DROP

• OUTPUT ­­ Regras responsáveis pelo controle das conexões que saem da máquina

Regra para a chain OUTPUT: iptables ­t filter ­A OUTPUT ­d 200.200.200.200 ­j DROP

• FORWARD ­­  Regras responsáveis pelo controle das conexões que são redirecionadas pela máquina

Regra para a chain FORWARD: iptables ­t filter ­A FORWARD ­s 200.200.200.200 ­j DROP

4.3.1.2 Chains da tabela NAT

• PREROUTING ­­ Consulta os dados que deverão ser modificados antes de serem enviados para a chain

Regra   para   a   chain  PREROUTING:  iptables  ­t  nat   ­A  PREROUTING  ­s  200.200.200.200  ­j  DNAT  ­­to  192.168.1.5

• OUTPUT ­­ Consulta os dados gerados localmente e que necessitam ser modificados antes de serem roteados. Este chain somente é consultado por conexões que se originam pela interfaces da máquina firewall

• POSTROUTING ­­ Verificando os dados que precisam ser modificados após as verificações das regras

Regra para a chain POSTROUTING: iptables ­t nat ­A POSTROUTING ­s 192.168.1.0/24 ­p tcp ­­dport 80 ­j  MASQUERADE

4.3.2 Chains criadas pelo usuárioExiste   a   possibilidade   de   o   usuário   criar   suas   próprias   chains,   organizando  as   regras 

agrupando regras de mesmas características. Como por exemplo regras para determinada interface, ou determinada rede.

Criando uma nova chain: iptables ­N nova_chain

Inserindo regras nesta chain: iptable ­A nova_chain ­p tcp ­­dport 80 ­j DROP

Chamando esta chain: iptables ­j nova_chain

Excluindo uma chain: iptables ­X nova_chain

Alterando o nome de uma chain: iptables ­E nova_chain novo_nome_chain

Desta forma sempre que a chain for chamada ela irá verificar todas as regras que nela estão contidas.

Este trabalho é licenciado sobre a licença Creative Commons Attribution­ShareAlike 2.5. Para visualizar uma cópia desta   licença   visite   o   endereço:  http://creativecommons.org/licenses/by­sa/2.5/br/deed.pt  ou   envie   uma   carta   para Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.

Page 9: Mini Curso – Controle e Segurança com Iptables

9

4.3.3 Trabalhando com as chainsApagando as regras de uma chain: iptables ­F INPUT

Zerando o contador de bytes de uma chain: iptables ­t nat ­Z PREROUTING

Também é possível alterar toda uma tabela quando se omite a chain: iptables ­t nat ­F

4.3.3.1 Especificando o policiamento padrão de uma chain

O policiamento padrão determina qual será a ação da chain caso o pacote não se enquadre em nenhuma das regras que estão nela.

As opções de policiamento padrão são:

iptables ­P INPUT DROP 

iptables ­P INPUT ACCEPT

Onde na primeira opção todas os pacotes que não conferirem com as regras serão negados. E a segunda opção justamente o contrário, os pacotes serão aceitos.

Um bom firewall bloqueia tudo para estar liberando somente o que é necessário, para bloquearmos tudo, definimos como policiamento padrão das chains como DROP, com isto os pacotes que não são tratados pelas regras serão negados.

4.4 RegrasRegras são comando passados ao iptables para configurá­lo para o tratamento dos pacotes. 

Liberá­los, bloqueá­los ou registrar log da sua passagem, ou tentativa de conexão.

O iptables nos permite criar regras complexas, com várias condicionais para tratamento dos pacotes. As regras não possui um dinamismo de acordo com as situação, mas isto pode ser fácilmente contornado com a utilização de scripts.

4.4.1 Adicionando regrasTodas as regras para o iptables são adicionadas com o uso da opção ­A e com a seguinte 

sintaxe:

iptables ­t [tabela] ­A [chain] [opções] ­j [alvo]

Todos os comandos são case­sensitive, ou seja ele diferencia maiúsculas de minúsculas.

Abaixo um exemplo de adição de uma regra:

iptables ­A INPUT ­s 127.0.0.1 ­j LOG ­­log­prefix “Log de acesso ”

A regra acima é uma regra de controle, onde podemos logar todos os pacotes que coincidam com as condições descritas na regra.

Abaixo listo outros tipos de regras:

Bloqueando a porta 80 (http)

Este trabalho é licenciado sobre a licença Creative Commons Attribution­ShareAlike 2.5. Para visualizar uma cópia desta   licença   visite   o   endereço:  http://creativecommons.org/licenses/by­sa/2.5/br/deed.pt  ou   envie   uma   carta   para Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.

Page 10: Mini Curso – Controle e Segurança com Iptables

10

iptables ­A INPUT ­p tcp ­­dport 80 ­j DROP

Liberando acesso a porta 53 (DNS)

iptables ­A INPUT ­p udp ­­dport 53 ­j ACCEPT

Liberando acesso acesso de uma determinada rede ao servidor de e­mail (pop3 e smtp)

iptables ­A INPUT ­p tcp ­m multiport ­­dport 25,110 ­s 192.168.5.0/24 ­j ACCEPT

Fazendo um redirecionamento de porta

iptables ­t nat ­A PREROUTING ­s 192.168.5.0/24 ­p tcp ­­dport 80 ­j REDIRECT ­­to­port 3128

4.4.2 Listando regrasPara listar as regras utiliza­se a opção ­L, a sintaxe do comando:

iptables ­t [tabela] ­L

Exemplificando o comando:

iptables ­L

Seu retorno será:

root@ferrari:/home/edmafer# iptables ­L

Chain INPUT (policy ACCEPT)

target         prot  opt source                  destination

DROP          tcp   ­­  anywhere             anywhere            tcp dpt:www

ACCEPT     udp  ­­  anywhere             anywhere            udp dpt:domain

ACCEPT     tcp   ­­  192.168.5.0/24       anywhere            multiport dports smtp,pop3

Chain FORWARD (policy ACCEPT)

target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination

root@ferrari:/home/edmafer#

Visualizando as regras da tabela nat:

iptables ­t nat ­L

E seu retorno será:

root@ferrari:/home/edmafer# iptables ­t nat ­L

Chain PREROUTING (policy ACCEPT)

target             prot opt source               destination

REDIRECT   tcp  ­­  192.168.5.0/24       anywhere            tcp dpt:www redir ports 3128

Este trabalho é licenciado sobre a licença Creative Commons Attribution­ShareAlike 2.5. Para visualizar uma cópia desta   licença   visite   o   endereço:  http://creativecommons.org/licenses/by­sa/2.5/br/deed.pt  ou   envie   uma   carta   para Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.

Page 11: Mini Curso – Controle e Segurança com Iptables

11

Chain POSTROUTING (policy ACCEPT)

target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination

root@ferrari:/home/edmafer#

Temos ainda algumas opções que poderemos estar verificando a na listagem das regras:

• ­v Exibe mais detalhes sobre as regras criadas, como a quantidade de pacotes e bytes tratados pelas regras. E a quantidade de pacotes e bytes tratados pelas regras padrões das chains.

• ­n Endereços de máquinas/portas não serão resolvidos, serão exibidos como números. Util quando se possui muitas regras em um firewall.

• ­x Exibe valores exatos ao invés de arredondamentos.

• ­­line­numbers Exibe o número da posição da regra na primeira coluna da listagem.

4.4.3 Apagando regrasPara apagar as regras usaremos a opção ­F, e com a seguinte sintaxe:

iptables ­t [tabela] ­F

Apagando as regras da tabela

Apagando da tabela filter

iptables ­F

Apagando da tabela nat

iptables ­t nat ­F

4.4.4 Posição das regrasA ordem na regra na inserção dos comandos é importante. Percebe­se que os iniciantes na 

configuração de um firewall erram muito aqui. Uma regra inserida antes prevalecerá a outra inserida posteriormente.

iptables ­A INPUT ­p tcp ­­dport 80 ­j DROP

iptables ­A INPUT ­p tcp ­­dport ­s 127.0.0.1 ­j ACCEPT

Verifique as regras acima. Na primeira regra nós bloqueamos o acesso a porta 80, na segunda nós liberamos o acesso a porta 80, desde que esta conexão seja proveniente da máquina local.

Isto não irá funcionar. Pois quando nosso firewall estiver verificando em qual regra se encaixa o pacote, ele irá encontrar a primeira e não fará mais verificações. Com isto a regra que libera o 

Este trabalho é licenciado sobre a licença Creative Commons Attribution­ShareAlike 2.5. Para visualizar uma cópia desta   licença   visite   o   endereço:  http://creativecommons.org/licenses/by­sa/2.5/br/deed.pt  ou   envie   uma   carta   para Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.

Page 12: Mini Curso – Controle e Segurança com Iptables

12

acesso da máquina local não terá função nenhuma já que a primeira a excluirá.

Para funcionar as regras devem ficar assim:

iptables ­A INPUT ­p tcp ­­dport 80 ­s 127.0.0.1 ­j ACCEPT

iptables ­A INPUT ­p tcp ­­dport 80 ­j DROP

A não ser que a conexão seja local ele irá passar pela primeira regra já que os pacotes não coincidiram com as condições descritas na regra, e ela será negada na segunda.

4.4.5 Inserindo regras em posição definidaCom o uso da opção ­A inserimos as regras sempre uma posição depois da última inserida, e 

como vimos no tópico anterior isto pode nos gerar problemas se precisarmos inserir uma regra com mais especificações do que a já inserida.

Por isto é possível inserimos uma regra em uma posição definida com a opção ­I.

iptables ­I INPUT 1 ­s 127.0.0.1 ­p tcp ­­dport 80 ­j ACCEPT

Assim nós estaremos inserindo esta regra na primeira posição, e a regra que estava na primeira posição automaticamente irá para a posição 2, e assim por diante.

Desta forma nossa regra será verificada antes de uma regra mais abrangente atenda a conexão.

4.4.6 Substituindo uma regraÉ possível nós mantermos um controle sobre as nossas regras, alterando­as sem a necessidade 

de se reiniciar todo o firewall. Por isto podemos estar substituindo as regras com a opção ­R.

Vamos substituir a regra anterior para liberar acesso para toda a rede interna:

iptables ­R INPUT 1 ­s 192.168.5.0/24 ­p tcp ­­dport 80 ­j ACCEPT

Com este controles controles de regras, adicionar, excluir, inserir em posição definida e substituir, é possível criar scripts que vão alterando o nosso firewall de acordo com a necessidade de forma automática.

4.5 Definindo regrasNa definições de regras, podemos estar nos utilizando de várias verificações que nos permitem 

um controle maior sobre as conexões direcionadas ou originadas ao servidor.

4.5.1 Tipos de protocolos

4.5.1.1 TCP

Em cada regra é possível estar definindo os tipos de protocolos a serem tratados, seja TCP, UDP e ICMP. Para isto utilizamos a opção ­p.

iptables ­A INPUT ­p tcp ­­dport 80 ­j DROP

Este trabalho é licenciado sobre a licença Creative Commons Attribution­ShareAlike 2.5. Para visualizar uma cópia desta   licença   visite   o   endereço:  http://creativecommons.org/licenses/by­sa/2.5/br/deed.pt  ou   envie   uma   carta   para Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.

Page 13: Mini Curso – Controle e Segurança com Iptables

13

Na regra acima as conexões que forem direcionadas a porta 80 e utilizem o protocolo tcp serão tratadas por ela. No caso negando a conexão.

Mais informações: iptables ­p tcp ­h

4.5.1.2 UDP

iptables ­A INPUT ­s 192.168.5.0/24 ­p udp ­­dport 53 ­j ACCEPT

Já na regra acima estaremos fazendo um filtro para permitir que o DNS seja consultado somente pela máquinas da rede interna utilizando o protocolo udp.

Mais informações: iptables ­p udp ­h

4.5.1.3 ICMP

iptables ­A INPUT ­s ! 192.168.5.0/24 ­p icmp ­j REJECT

Definimos nesta regra que qualquer pacote com o protocolo ICMP (ex. ping) que não tenha se originado na rede interna seja negado, e como mensagem de retorno será reject­with icmp­port­unreachable, por causa do alvo reject.

No protocolo icmp é possível a utilização da opção –icmp­type[tipo]. Onde poderemos estar informando qual é o tipo de comunicação icmp que deve ser tratada.

Alguns tipos de comunicação icmp:

echo­reply (pong)

destination­unreachable

network­unreachable

host­unreachable

protocol­unreachable

port­unreachable

Para outros tipos: iptables ­p icmp ­h

Quando não definido o protocolo a regra aceitará qualquer protocolo.

4.5.2 Endereços de origemÉ possível nas regras definirmos os endereços de origem. Isto é útil para estarmos validando 

as conexões e permitindo que determinados hosts, ou redes, sejam liberados, ou negados.

iptables ­A INPUT ­s 192.168.5.0/24 ­p tcp ­­dport 80 ­j ACCEPT

Nesta regra definimos que a rede 192.168.5.0 pode acessar o servidor http.

iptables ­A INPUT ­s 200.200.200.200 ­j DROP

Aqui definimos que a máquina na internet com o ip 200.200.200.200 em qualquer porta, com qualquer protocolo não pode acessar nosso servidor.

Este trabalho é licenciado sobre a licença Creative Commons Attribution­ShareAlike 2.5. Para visualizar uma cópia desta   licença   visite   o   endereço:  http://creativecommons.org/licenses/by­sa/2.5/br/deed.pt  ou   envie   uma   carta   para Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.

Page 14: Mini Curso – Controle e Segurança com Iptables

14

4.5.3 Endereços de destinoPodemos definir o destino das conexões com a opção ­d. Com isto é possível negar o acesso 

do servidor ou da rede a determinados endereços.

iptables ­A FORWARD ­d 200.200.200.200 ­j DROP

Na regra acima definimos que qualquer conexão que seja com o destino a máquina na internet 200.200.200.200 não será redirecionada.

Uma grande preocupação dos administradores de redes é o bloqueio de determinados sites, com esta opção podemos estar bloqueando.

iptables ­A FORWARD ­d orkut.com ­j DROP

Como visto foi utilizado como destino uma url ao invés do ip da máquina que se deseja bloquear o acesso. Isto é possível pois o iptables irá fazer a resolução do nome sempre que precisar verificar a regra. Assim é possível manter o controle sobre aqueles endereços que possuem ip dinâmicos.

Assim qualquer que seja a origem do pacotes, indiferente da porta e do protocolo toda e qualquer conexão que desejar acessar o orkut.com não será redirecionada.

4.5.4 Portas de destinoPodemos definir qual é a porta de destino em que as regras estarão verificando com a opção ­­

destination­port, ou simplesmente ­­dport.

Esta opção somente funcionará se anteriormente foi definido o tipo de protocolo que a regra estará conferindo.

iptables ­A INPUT ­s ! 192.168.5.0/24 ­p tcp ­­dport 110 ­j DROP

Foi definido aqui que não será possível conexões de fora da rede interna acessem o nosso servidor pop3.

Com a definição das portas nós controlamos quais serviço poderão ser acessados através do nosso firewall. Verifique a tabela das portas comuns.

4.5.5 Portas de origemTambém podemos definir em qual porta está se originando a conexão com a opção ­­source­

port ou ­­sport.

iptables ­A INPUT ­s 200.200.200.200 ­p tcp ­­sport 25 ­j ACCEPT

Assim definiremos que a conexão que for proveniente do host 200.200.200.200 e que esteja sendo originada na porta 25 (smtp) seja aceita.

Este trabalho é licenciado sobre a licença Creative Commons Attribution­ShareAlike 2.5. Para visualizar uma cópia desta   licença   visite   o   endereço:  http://creativecommons.org/licenses/by­sa/2.5/br/deed.pt  ou   envie   uma   carta   para Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.

Page 15: Mini Curso – Controle e Segurança com Iptables

15

4.5.6 Definindo múltiplas portasPara facilitar o controle, poderemos estar definindo várias portas para a mesma regra, seja de 

destino ou de origem.

4.5.6.1 Definindo uma faixa de portas

iptables ­A INPUT ­p tcp ­­dport 1024:65535 ­j DROP

Nesta regra nós definimos que todas as conexões com destino a portas altas (de 1024 até 65535) sejam bloqueadas.

Caso não seja definido a porta de inicial (:1024) ele assumirá como porta inicial a 0, e caso não seja definido a porta final (1024:) será assumido como porta final a 65535.

4.5.6.2 Definindo várias portas

Para definir várias portas que não estejam em uma faixa, poderemos estar utilizando o módulo multiport, que nos permite adicionar até 15 portas na mesma regra.

iptables ­A INPUT ­s 192.168.5.0/24 ­p tcp ­m multiport ­­dport 22,25,80,110 ­j ACCEPT

Aqui foram liberados os acessos para rede interna para os serviços ssh,smtp,http e pop3 respectivamente.

4.5.7 Definindo a interfaceGeralmente máquinas firewall trabalham com várias interfaces (placas de rede). Com a opção 

­i e ­o podemos estar definindo as interfaces de origem ou destino, respectivamente.

Não é possível adicionar esta opção as regras de todas as chains, na tabela filter a interface de origem não poderá ser especificar em uma chain OUTPUT, e a de destino em um chain INPUT. E na tabela nat não será possível especificar a interface de saída na chain PREROUTING e a interface de origem nas chains OUTPUT E PREROUTING.

iptables ­A INPUT ­i eth0 ­p tcp ­­dport 80 ­j ACCEPT

Definimos que toda conexão que tenha chego pela eth0 (poderia ser a interface da rede interna) tenha acesso ao servidor http.

iptables ­A FORWARD ­i eth0 ­o eth1 ­j DROP

Sendo a interface eth0 nossa interface da rede interna, e a eth1 a interface conectada a internet, estaríamos bloqueando todo o acesso da rede interna a internet.

Também é possível a utilização do coringa + que permite que definamos vários interfaces.

iptables ­A FORWARD ­i wlan+ ­o eth0 ­j DROP

Para aumentar a segurança da nossa rede, bloqueamos o acesso de todos os usuários conectados a nossa wireless, nas interfaces de 0 à 9 a rede interna.

É possível fazer referências a interfaces que ainda não existem. Como conexões intermitentes 

Este trabalho é licenciado sobre a licença Creative Commons Attribution­ShareAlike 2.5. Para visualizar uma cópia desta   licença   visite   o   endereço:  http://creativecommons.org/licenses/by­sa/2.5/br/deed.pt  ou   envie   uma   carta   para Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.

Page 16: Mini Curso – Controle e Segurança com Iptables

16

como ppp.

4.5.8 Endereço MACPara aumentar a segurança na validação da origem da conexão, é possível que se especifique 

qual é o endereço físico do host de origem, o endereço mac, com o módulo mac e a opção ­­mac­source.

iptables ­A INPUT ­s 192.168.5.2 ­m mac ­­mac­source 00:11:2F:DE:5F:4A ­p tcp ­­dport 22 ­j ACCEPT

Estaremos aceitando somente a conexão do host 192.168.5.2 e que tenha como endereço físico 00:11:2F:DE:5F:4A no serviço ssh.

A especificação do mac em uma regra aumenta a segurança, mas não garante que um outro host não tenha seu endereço ip e seu endereço mac alterado.

4.5.9 Pacotes SYNO pacotes SYN são utilizados para iniciarem uma conexão TCP, assim é possível bloquear 

novas conexões, ou filtra­las utilizando a opção –syn.

iptables ­A INPUT ­p tcp ­­dport 22 ­­syn ­j DROP

Esta regra não permite que nenhuma outra conexão ao serviço ssh se inicie, mas não irá cancelar as conexões já existentes.

4.5.10 Estado da conexãoCom o módulo state é possível estarmos conferindo o estado de uma conexão.

• NEW: Verifica se o pacote é responsável pelo inicio de uma nova conexão.

• ESTABLISHED: Se o pacote faz parte de uma conexão já estabilizada.

• RELATED: São pacotes que estão relacionados a outras conexões, como por exemplo mensagens de erro icmp

• INVALID: Pacotes que não estão relacionados a nada, não puderam ser conferidos, como respostas de conexões desconhecidas.

iptables ­A INPUT ­s 192.168.5.0/24 ­p tcp –dport 22 ­m state –state NEW,ESTABLISHED ­j ACCEPT

Estamos aceitando todas as novas conexões e as já existentes, desde que venham da nossa rede interna para o serviço ssh.

Para se evitar processamento, como umas das primeiras regras deve se adicionar uma regra para negar conexões inválidas.

iptables ­A INPUT ­m state –state INVALID ­j DROP

4.5.11 Exceções à regraComo em alguns casos devemos criar uma exceção à regra, nós podemos estar utilizando o 

Este trabalho é licenciado sobre a licença Creative Commons Attribution­ShareAlike 2.5. Para visualizar uma cópia desta   licença   visite   o   endereço:  http://creativecommons.org/licenses/by­sa/2.5/br/deed.pt  ou   envie   uma   carta   para Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.

Page 17: Mini Curso – Controle e Segurança com Iptables

17

identificador ! (not)  para informar que a próxima informação não deve ser verdadeira para conferir a regra.

iptables ­A INPUT ­s !192.168.5.2 ­p tcp –dport 23 ­j DROP

Neguei o acesso de todos que não possuam o ip 192.168.5.2 ao serviço telnet.

iptables ­t nat ­A PREROUTING ­p ! icmp ­d 200.200.200.200 ­j DNAT –to 200.200.200.111

Só faço o redirecionamento da conexão se o protocolo for diferente de icmp.

iptables ­A INPUT ­p tcp –dport 25 ­m state –state ! NEW,ESTABLISHED ­j DROP

Proibindo o acesso de pacotes que não estejam iniciando uma conexão, ou que não estejam relacionados a uma conexão já existente no serviço smtp.

4.5.12 Alvo das regrasEm toda regra é necessário se especificar um alvo. É ele que vai definir qual será a ação da 

regra quando as condições impostas sejam satisfeitas.

4.5.12.1 DROP

É o alvo padrão para negação de uma conexão. DROP faz o bloqueio e não retorna nada a máquina que originou a conexão, isto delata a um scanner que a a máquina possui um firewall.

iptables ­A INPUT ­s ! 192.168.5.0/24 ­m state –state NEW,INVALID ­j DROP

Estou negando toda nova conexão, e toda conexão inválida que seja originada de fora da rede interna.

4.5.12.2 REJECT

Também um alvo de negação, mas com reject é possível enviar de volta uma mensagem do tipo icmp.

iptables ­A INPUT ­p tcp ­­dport 80 ­j REJECT ­­reject­with icmp­port­unreachable

Será negada a conexão, e remetido a máquina que originou o pacote que a porta não existe.

Verifique as opções de tipos icmp.

4.5.12.3 LOG

Este alvo nos permite um controle dos pacotes que são verificados pelo firewall. Define­se como se fosse uma regra, e ao satisfazer as condições, ele gera o log. Como o netfilter é um módulo do kernel, ele gera um log em /var/log/kern.log como um log do kernel. Mas é possível definir qual é o nível de log.

iptables ­A INPUT ­p tcp –dport 22 ­j LOG –log­prefix”Acessaram o ssh ”

E sempre que houver uma conexão ssh o resultado do log será:

Nov 16 17:49:02 controle kernel: Acessaram o ssh IN=eth0 OUT= MAC=00:00:e8:77:0c:69:00:e0:12:34:56:78:08:00 

Este trabalho é licenciado sobre a licença Creative Commons Attribution­ShareAlike 2.5. Para visualizar uma cópia desta   licença   visite   o   endereço:  http://creativecommons.org/licenses/by­sa/2.5/br/deed.pt  ou   envie   uma   carta   para Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.

Page 18: Mini Curso – Controle e Segurança com Iptables

18

SRC=10.1.58.108 DST=10.1.58.252 LEN=48 TOS=0x00 PREC=0x00 TTL=128 ID=13237 DF PROTO=TCP SPT=4912 DPT=22 WINDOW=65535 RES=0x00 SYN URGP=0

Nov 16 17:49:02 controle kernel: Acessaram o ssh IN=eth0 OUT= MAC=00:00:e8:77:0c:69:00:e0:12:34:56:78:08:00 SRC=10.1.58.108 DST=10.1.58.252 LEN=40 TOS=0x00 PREC=0x00 TTL=128 ID=13238 DF PROTO=TCP SPT=4912 DPT=22 WINDOW=65535 RES=0x00 ACK URGP=0

Nov 16 17:49:02 controle kernel: Acessaram o ssh IN=eth0 OUT= MAC=00:00:e8:77:0c:69:00:e0:12:34:56:78:08:00 SRC=10.1.58.108 DST=10.1.58.252 LEN=68 TOS=0x00 PREC=0x00 TTL=128 ID=13239 DF PROTO=TCP SPT=4912 DPT=22 WINDOW=65494 RES=0x00 ACK PSH URGP=0

Nos logs temos informações importantes sobre o acesso, como a data, a frase informada em –log­prefix, a interface de entrada, e se houve a interface de saída, o mac da máquina que originou o pacote, endereço ip da máquina de origem e o destino do pacote, protocolo, porta utilizada pela máquina de origem e a porta de destino, flags e outras informações.

4.5.12.4 RETURN

Este alvo permite que se retorne a chain anterior, sem continuar verificando as regras da chain atual.

Útil para se fazer tratamento de exceções à regra.

1. iptables ­N WEB

2. iptables ­A INPUT ­p tcp ­­dport 80 ­j WEB

3. iptables ­A INPUT ­p tcp ­­dport 80 ­j ACCEPT

4. iptables ­A WEB ­s 192.168.5.2 ­j RETURN

5. iptables ­A WEB ­j DROP

Estamos fazendo um bloqueio do serviço http se a máquina que originou a conexão não seja a 192.168.5.2.

No passo 1 criamos uma chain chamada WEB, no passo 2 chamamos esta chain. No passo 3 eu libero acesso ao serviço, mas como eu chamei a chain antes, eu redirecionei as regras, e esta não será verificada. A primeira regra da chain WEB é a verificação da origem. Caso seja a origem especificada, ela chama RETURN. Ele redireciona a verificação para a chain anterior, que no caso será a liberação da porta 80.

4.5.12.5 DNAT

Regra utilizada na chain PREROUTING, este alvo altera os pacotes editando o seu destino, assim redirecionando a conexão para outras máquinas.

iptables ­t nat ­A PREROUTING ­p tcp –dport 80 ­j DNAT –to 192.168.5.2:3128

Nesta regra estamos redirecionando toda a conexão que chega na porta 80 para a máquina 192.168.5.2 na porta 3128, que é a porta padrão de um proxy.

Na omissão da porta, será usada a porta de destino do pacote.

Este trabalho é licenciado sobre a licença Creative Commons Attribution­ShareAlike 2.5. Para visualizar uma cópia desta   licença   visite   o   endereço:  http://creativecommons.org/licenses/by­sa/2.5/br/deed.pt  ou   envie   uma   carta   para Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.

Page 19: Mini Curso – Controle e Segurança com Iptables

19

4.5.12.6 SNAT

Regra da chain POSTROUTING ela faz alteração da origem do pacote, serve para fazer o acesso das máquinas da rede interna a internet, quando se utiliza um ou mais ip's fixos.

iptables ­t nat ­A POSTROUTING ­s 192.168.5.0/24 ­p tcp ­­dport 80 ­j SNAT ­­to 200.200.200.200

Com esta regra estamos alterando a origem do pacote para o ip da internet 200.200.200.200, quando é feita esta alteração o iptables cria uma tabela em memória onde no retorno da conexão ele sabe quem foi a máquina que originou esta conexão e devolve a ela os pacotes.

iptables ­t nat ­A POSTROUTING ­s 192.168.5.0/24 ­j SNAT ­­to 200.200.200.200­200.200.200.250

A diferença nesta regra é que ele vai utilizar uma faixa de ip's para as conexões.  Será escolhido um endereço de acordo com o último alocado.

4.5.12.7 MASQUERADE

Masquerade é um alvo utilizado também para alterar a origem de um pacote, permitindo que as máquinas da rede interna possam estar acessando a internet. Ele é utilizado nos casos em que não se possui um ip fixo. Ele verifica o endereço ip da interface de saída e utiliza ele para alterar o pacote.

4.5.12.8 Limite de conferencia de uma regra

Algumas regras devem ter limite para serem executadas. Como o número máximo de conexões ao serviço ssh por hora, quantidade de logs que devem ser armazenados, evitando­se um ataque de logs que poderia encher o seu hd. Assim com o módulo limit e a opção ­­limit poderemos estar definindo quantas vezes a regra deve ser validade em determinado tempo.

iptables ­A INPUT ­p tcp ­­dport 22 ­m limit –limit 5/s ­j LOG ­­log­level 1 ­­log­prefix “Teste de log ssh ”

Este trabalho é licenciado sobre a licença Creative Commons Attribution­ShareAlike 2.5. Para visualizar uma cópia desta   licença   visite   o   endereço:  http://creativecommons.org/licenses/by­sa/2.5/br/deed.pt  ou   envie   uma   carta   para Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.