Depois de uma rápida introdução, é hora de colocar a mão na massa e começar a trabalhar com os módulos, e nesta página, irei abordar o uso do módulo
MAC e
Owner.
Módulo MAC
O MAC é a identificação de mais baixo nível que um computador pode ter, trata-se de um endereço da placa de rede. O IPtables usa o módulo MAC para tratar os pacotes fazendo a leitura do MAC de cada pacote, e tomando decisões conforme a regra estabelecida, fazendo a checagem pelo MAC ao invés do IP do host.
Uma coisa que tem que ficar bem clara, é que o endereço de MAC só pode ser lido em uma rede local, isto acontece por que os roteadores ou computadores que fazem esta função, não transmite o MAC do computador de origem, então podemos aplicar regras específicas na rede local corporativa, ou de sua casa, baseando-se no endereço de MAC, mas nunca em comunicação entre duas redes diferentes.
A sintaxe é simples: o módulo deve ser chamado pela opção "-m" ou "--match", seguido do nome do módulo.
- Colocando em Prática
Bloqueando todo o tráfego que venha do Host da rede local, que tem o MAC 00:F3:90:03:01:BA
# iptables -A INPUT -m mac --mac-source 00:F3:90:03:01:BA -j DROP
Bloqueando o tráfego para a porta 22 do SSH, para o Host com MAC 00:F3:90:03:01:BA, sem especificar a interface e nem IP de origem:
# iptables -A INPUT -p tcp --dport 22 -m mac --mac-source 00:F3:90:03:01:BA -j DROP
Caso fosse utilizar a regra acima para um Host com esse endereço de MAC, e o mesmo estiver em uma outra rede, não iria funcionar, pois o MAC do mesmo iria
ser trocado pelo MAC do roteador, ou até mesmo descartado.
Módulo Owner
O módulo Owner não é tão usado como outros, apesar de ser interessante.
O Owner é capaz de verificar o conteúdo do pacote e identificar quem é o responsável pela conexão, e a partir daí, tomar decisões conforme as regras aplicadas.
Este módulo pode ser utilizado com a Chain OUTPUT da tabela Filter.
- Colocando em Prática
- --uid-owner : filtra pacotes em que a origem tenha sido gerada por um UID (usuário) especificado.
# iptables -A OUTPUT -p tcp --dport 80 -d www.orkut.com -m owner --uid-owner 1000 -j DROP
Esta regra acima, poderia ser usada substituindo o UID pelo nome do usuário.
# iptables -A OUTPUT -p tcp --dport 80 -d www.orkut.com -m owner --uid-owner edson -j DROP
No exemplo acima, estou bloqueando o tráfego para o destino
www.orkut.com, para o usuário Edson que tem o UID 1000, e pode ser utilizado tanto o controle pelo UID como pelo nome de usuário.
- --gid-owner: filtra pacotes em que a origem tenha sido gerada por um GID (grupo de usuários) especificado.
# iptables -A OUTPUT -m owner --gid-owner 1002 -p icmp -j REJECT
No exemplo acima, está sendo rejeitado pacotes do tipo ICMP que estejam saindo, e que foram gerados pelo GID 1002, desta forma, será enviada um
mensagem ICMP de erro.
Caso queira usar o nome do grupo, poderá substituir o GID pelo nome do grupo, no exemplo abaixo, o nome do grupo é 'teste' e tem o GID 1002.
Esta regra é similar a de cima, porém, aqui se usa o nome do grupo ao invés do GID:
# iptables -A OUTPUT -m owner --gid-owner teste -p icmp -j REJECT