Your SlideShare is downloading. ×
Mini Curso – Controle e Segurança com Iptables
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

Mini Curso – Controle e Segurança com Iptables

6,078
views

Published on

Mini curso aprensentado no Cesumar (2006) sobre configuração e utilização do firewall Iptables. …

Mini curso aprensentado no Cesumar (2006) sobre configuração e utilização do firewall Iptables.

http://www.edmafer.com.br

Published in: Technology

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
6,078
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
565
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 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, 5th Floor, San Francisco, California, 94105, USA.
  • 2. 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.
  • 3. 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 protocolos Para 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 TCP O 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.
  • 4. 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.
  • 5. 5 Comunicações que necessitam de velocidade e não a garantia da entrega do pacote. 2.1.3 Protocolo ICMP O  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 portas Portas 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 edmafer@127.0.0.1 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.
  • 6. 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. IPTABLES Netfilter é 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 iptables a) 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 Tabelas Tabelas é 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.
  • 7. 7 IPTABLES. 4.2.1 FILTER Tabela 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 NAT Tabela 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 MANGLE Esta 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 Chains Chains 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.
  • 8. 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ário Existe   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.
  • 9. 9 4.3.3 Trabalhando com as chains Apagando 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 Regras Regras 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 si uação, mas isto pode ser fácilmente  t contornado com a utilização de scripts. 4.4.1 Adicionando regras Todas 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.
  • 10. 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 regras Para 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.
  • 11. 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 regras Para 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 regras A 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.
  • 12. 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 definida Com 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 regras Na 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.
  • 13. 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 q ualquer 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.
  • 14. 14 4.5.3 Endereços de destino Podemos 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 destino Podemos 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 origem També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.
  • 15. 15 4.5.6 Definindo múltiplas portas Para 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 interface Geralmente 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.
  • 16. 16 como ppp. 4.5.8 Endereço MAC Para 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 SYN O 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ão Com 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 à regra Como 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.
  • 17. 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 regras Em 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.
  • 18. 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.
  • 19. 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.