Olá comunidade estou de volta...
Nesta terceira parte da série de artigos venho mostrar as
explicações para cada parte de uma regra e tomarei como exemplo
as regras citadas no artigo anterior, algumas regras simples, mas
que são de vital importância para a segurança de uma rede que
fica conectada 24 horas por dia com a internet.
Antigos anteriores:
Vamos ver algumas regras simples:
# iptables -A INPUT -p tcp -syn -j DROP
# iptables -A INPUT -i ppp0 -p udp -drport 0:30000 -j DROP
Isso fará com que a sua máquina passe a ignorar as conexões vindas
de qualquer porta tcp, sem enviar sequer uma confirmação de que o
pacote foi recebido. Você continuará acessando a internet
normalmente, mas ninguém conseguirá se conectar diretamente a sua
máquina. A Segunda regra bloqueia também parte das portas UDP,
adicionando uma camada extra de segurança.
Agora vamos a explicação dos comandos desta regra.
O firewall com iptables funciona com regras e estas regras são
chamadas de
chains, as três chains possíveis são:
- INPUT - Utilizada quando o destino final é a própria
máquina firewall;
- OUTPUT - Qualquer pacote gerado na máquina firewall
e que deva sair para a rede será tratado por essa chain;
- FORWARD - Qualquer pacote que atravessa o firewall,
oriundo de uma máquina e direcionado a outra será tratada
por essa chain.
As regras de um firewall no
Linux são compostas assim:
iptables [-t tabela] [opção] [chain] [dados] -j [ação] ]
Um exemplo:
# iptables -A FORWARD -d 192.168.1.1 -j DROP
A linha acima determina que todos os pacotes destinados à máquina
192.168.1.1 devem ser descartados. No caso:
Tabela:
filter (é a default)
Opção:
-A
Chain:
FORWARD
Dados:
-d 192.168.1.1
Ação:
DROP
Existem várias possibilidades que fogem à sintaxe mostrada
anteriormente. É o caso do comando
iptables -L, que mostra
as regras em vigor.
Análise das regras com a tabela filter
As principais opções são:
- -P - Policy (política). Altera a política da chain.
A política inicial de cada chain é ACCEPT. Isso faz que o
firewall, inicialmente, aceite qualquer INPUT, OUTPUT ou
FORWARD. A política pode ser alterada para DROP, que irá
negar o serviço da chain, até que uma opção -A entre em
vigor. O -P não aceita REJECT ou LOG;
- -A - Append (anexar). Acresce uma nova regra a chain.
Tem prioridade sobre o -P. Geralmente, como buscamos
segurança máxima, colocamos todas as chains em política
DROP, com o -P e, depois, abrimos o que é necessário;
- -D - Delete (apagar). Apaga uma regra. A regra deve
ser escrita novamente, trocando-se a opção para -D;
- -L - Flush (esvaziar). Remove todas as regras
existentes, no entanto, não altera a política (-P).
Dados
Os elementos mais comuns para se gerar dados são os seguintes:
- -s - Source (origem). Estabelece a origem do pacote.
Geralmente é uma combinação do endereço IP com a máscara de
sub-rede, separados por uma barra;
- -d - Destination (destino). Estabelece o destino do
pacote. Funciona exatamente como o -s, incluindo a sintaxe;
- -p - Protocol (protocolo). Especifica o protocolo a
ser filtrado. O protocolo IP pode ser especificado pelo seu
número ou pelo seu nome. Os protocolos mais utilizados são
udp, tcp e icmp;
- -i - In-Interface (Interface de entrada). Especifica
a interface de entrada. As interfaces existentes podem ser
vistas com o comando ifconfig. O -i não pode ser
utilizado com a chain OUTPUT;
- -o - Out-Inteface (interface de saída). Especifica a
interface de saída. Similar a -i, inclusive nas
flexibilidades. O -o não pode ser utilizado com a chain
INPUT;
- -! - Exclusão. Utilizado com -s, -d, -p, -i, -o e
outros para excluir o argumento;
- --sport - Source Port. Porta de origem. Só funciona
com as opções -p udp e -p tcp;
- --dport - Destination Port. Porta de destino. Só
funciona com as opções -p udp e -p tcp;
Ações
As principais ações são:
- ACCEPT - Aceitar. Permite a passagem do pacote;
- DROP - Abandonar. Não permite a passagem do pacote,
descartando-o. não avisa a origem sobre o ocorrido;
- REJECT - Igual ao DROP, mas avisa a origem sobre o
ocorrido (envia pacote icmp);
- LOG - Cria um log referente à regra, em
/var/log/messages.
Relação custo benefício
Este é um aspecto bem interessante quando lidamos com o Linux, pois
como todos nós sabemos o Linux é um software livre e gratuito, mas
o desenvolvimento de uma solução não é gratuito, pois o desenvolvedor
do firewall deverá sempre estar atento a possíveis ataques com isso
ele tem que estar sempre atento a novas regras e principalmente
verificar os logs do sistema...
Mas como cobrar por isso??? Esse é um fator que devemos estar muito
atentos, pois devemos saber quanto cobrar, ou seja, cobrar pelo seu
tempo de desenvolvimento, como o próprio título do artigo frisa,
este é um firewall de baixo custo devido as ferramentas envolvidas
no processo, softwares livres. O que devemos levar em conta são as
horas de desenvolvimento do mesmo.
Conclusão
Conclui-se que um firewall, sem dúvida nenhuma, é um fator
essencial para a segurança de uma empresa, pois como vimos nestes
três artigos, o mesmo protege a integridade dos dados de uma rede
de computadores e devemos levar em conta que a construção da mesmo
requer muita atenção e auditorias constantes.
Para um estudo mais aprofundado sobre segurança, sugiro o IDS
(sistemas de Detecção de Intrusão).
Até o próximo artigo!!!
Thiago da Silva Christofoli
Analista de Sistemas