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 AttributionShareAlike 2.5. Para visualizar uma cópia desta licença visite o endereço: http://creativecommons.org/licenses/bysa/2.5/br/deed.pt ou envie uma carta para Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.
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 AttributionShareAlike 2.5. Para visualizar uma cópia desta licença visite o endereço: http://creativecommons.org/licenses/bysa/2.5/br/deed.pt ou envie uma carta para Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.
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 baseiase na comunicação pontoaponto 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 AttributionShareAlike 2.5. Para visualizar uma cópia desta licença visite o endereço: http://creativecommons.org/licenses/bysa/2.5/br/deed.pt ou envie uma carta para Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.
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 reiniciase 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 AttributionShareAlike 2.5. Para visualizar uma cópia desta licença visite o endereço: http://creativecommons.org/licenses/bysa/2.5/br/deed.pt ou envie uma carta para Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.
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 conectarse ao servidor na porta 22.
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 AttributionShareAlike 2.5. Para visualizar uma cópia desta licença visite o endereço: http://creativecommons.org/licenses/bysa/2.5/br/deed.pt ou envie uma carta para Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.
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 AttributionShareAlike 2.5. Para visualizar uma cópia desta licença visite o endereço: http://creativecommons.org/licenses/bysa/2.5/br/deed.pt ou envie uma carta para Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.
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 podese especificar a prioridade de uma pacote, tendo como valores aceitos:
Espera Mínima
É especificado através de MinimizeDelay, 16 ou 0x10
Máximo Processamento É especificado através de MaximizeThroughput, 8, ou 0x08.
Máxima Confiança É especificado através de MaximizeReliability, 4 ou 0x04.
Custo mínimo Especificado através de MinimizeCost, 2 ou 0x02.
Prioridade Normal Especificado através de NormalService, 0 ou 0x00.
Regra para a chain output: iptables t mangle A OUTPUT p tcp dport 80 j TOS settos 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 AttributionShareAlike 2.5. Para visualizar uma cópia desta licença visite o endereço: http://creativecommons.org/licenses/bysa/2.5/br/deed.pt ou envie uma carta para Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.
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 AttributionShareAlike 2.5. Para visualizar uma cópia desta licença visite o endereço: http://creativecommons.org/licenses/bysa/2.5/br/deed.pt ou envie uma carta para Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.
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 casesensitive, 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 logprefix “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 AttributionShareAlike 2.5. Para visualizar uma cópia desta licença visite o endereço: http://creativecommons.org/licenses/bysa/2.5/br/deed.pt ou envie uma carta para Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.
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 email (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 toport 3128
4.4.2 Listando regrasPara listar as regras utilizase 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 AttributionShareAlike 2.5. Para visualizar uma cópia desta licença visite o endereço: http://creativecommons.org/licenses/bysa/2.5/br/deed.pt ou envie uma carta para Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.
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.
• linenumbers 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. Percebese 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 AttributionShareAlike 2.5. Para visualizar uma cópia desta licença visite o endereço: http://creativecommons.org/licenses/bysa/2.5/br/deed.pt ou envie uma carta para Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.
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, alterandoas 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 AttributionShareAlike 2.5. Para visualizar uma cópia desta licença visite o endereço: http://creativecommons.org/licenses/bysa/2.5/br/deed.pt ou envie uma carta para Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.
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á rejectwith icmpportunreachable, por causa do alvo reject.
No protocolo icmp é possível a utilização da opção –icmptype[tipo]. Onde poderemos estar informando qual é o tipo de comunicação icmp que deve ser tratada.
Alguns tipos de comunicação icmp:
echoreply (pong)
destinationunreachable
networkunreachable
hostunreachable
protocolunreachable
portunreachable
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 AttributionShareAlike 2.5. Para visualizar uma cópia desta licença visite o endereço: http://creativecommons.org/licenses/bysa/2.5/br/deed.pt ou envie uma carta para Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.
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
destinationport, 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 AttributionShareAlike 2.5. Para visualizar uma cópia desta licença visite o endereço: http://creativecommons.org/licenses/bysa/2.5/br/deed.pt ou envie uma carta para Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.
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 AttributionShareAlike 2.5. Para visualizar uma cópia desta licença visite o endereço: http://creativecommons.org/licenses/bysa/2.5/br/deed.pt ou envie uma carta para Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.
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 macsource.
iptables A INPUT s 192.168.5.2 m mac macsource 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 filtralas 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 AttributionShareAlike 2.5. Para visualizar uma cópia desta licença visite o endereço: http://creativecommons.org/licenses/bysa/2.5/br/deed.pt ou envie uma carta para Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.
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 rejectwith icmpportunreachable
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. Definese 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 –logprefix”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 AttributionShareAlike 2.5. Para visualizar uma cópia desta licença visite o endereço: http://creativecommons.org/licenses/bysa/2.5/br/deed.pt ou envie uma carta para Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.
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 –logprefix, 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 AttributionShareAlike 2.5. Para visualizar uma cópia desta licença visite o endereço: http://creativecommons.org/licenses/bysa/2.5/br/deed.pt ou envie uma carta para Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.
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.200200.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, evitandose 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 loglevel 1 logprefix “Teste de log ssh ”
Este trabalho é licenciado sobre a licença Creative Commons AttributionShareAlike 2.5. Para visualizar uma cópia desta licença visite o endereço: http://creativecommons.org/licenses/bysa/2.5/br/deed.pt ou envie uma carta para Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.
Top Related