Extra: script de usuário
No MyAuth é possível implementar regras de firewall por usuário.

Para implementar isso é necessário ter conhecimentos de:

  • Programação em Shell Script
  • Conhecimentos de IPTABLES

Sempre que um um usuário efetua login ou logout o MyAuth verifica a existência de um arquivo na pasta /myauth/session/ com o nome do usuário com permissões de execução.

Ao ser acionado para login ou logou, o script é executado com os seguintes parâmetros:

Parâmetro Descrição Valor de exemplo
1 Ação, valores: login ou logout
login=usuário efetuou login, logout=usuário desconectado
login
2 Endereço IP do usuário 192.168.1.231
3 Endereço MAC do usuário 00:01:AB:CF:ED:A0

Exemplo:

O usuário "joao" efetuou o login, o MyAuth verifica a existência do arquivo /myauth/session/joao com permissão de execução, se o arquivo existir com permissão de execução ele é executado da seguinte maneira:


root@servidor:/# /myauth/session/joao login 192.168.1.231 00:01:AB:CF:ED:A0
Quando o usuário "joao" efetuar logout ou for desconectado a seguinte linha de comando será executada:

root@servidor:/# /myauth/session/joao logout 192.168.1.231 00:01:AB:CF:ED:A0

No script /myauth/session/joao você deverá programar as regras para o usuário. Por padrão, o MyAuth já cria uma tabela no NETFILTER (iptables) com o nome do usuário e o prefixo "FW", ou seja, no exemplo acima o usuário "joao" teria uma tabela propria chamada FWjoao onde todos os pacotes passariam por ela.

As regras na tabela "FW" + "nome do usuário" devem ser inseridas fazendo verificação de IP pois todos os pacotes passam por ela, inclusive os pacotes de outros usuários.

Quando o usuário é desconectado ou efetua logout o MyAuth automaticamente remove todas as regras e remove a tabela "FW" + "nome do usuário" do NETFILTER.

Como exemplo, criaremos para o usuário "joao" um script quer bloqueia o acesso de serviços de e-mail:

root@servidor:/# mcedit /myauth/session/joao

chain=FWjoao
action=$1
ip=$2
mac=$3

if [ "$action" = "login" ]; then
	# bloquear SMTP
	iptables -t filter -A $chain -s $ip -p tcp --dport 25 -j DROP
	# bloquear POP3
	iptables -t filter -A $chain -s $ip -p tcp --dport 110 -j DROP
	# bloquear IMAP
	iptables -t filter -A $chain -s $ip -p tcp --dport 143 -j DROP
fi

Agora que o script está pronto, deve-se dar a ele permissão de execução:
root@servidor:/# chmod +x /myauth/session/joao

Está pronto. Se o usuário estiver on-line, é possivel executar o script manualmente.

Criando grupos de acesso manualmente

No MyAuth não é possível fazer grupos de acesso a serviços mas manualmente é possível. Sempre que o MyAuth é iniciado ele verifica se os arquivos /myauth/bin/rc.local e /etc/rc.d/rc.firewall existem e se são executáveis, se existirem e forem executáveis ele os executará após terminar de se iniciar.

No arquivo /etc/rc.d/rc.firewall você poderá criar tabelas personalizadas no NETFILTER (iptables) que serão usadas para agilizar o serviço na hora de bloquear determinados serviços para usuários.

No exemplo abaixo, criaremos 2 tabelas personalizadas para acessos a alguns serviços.

root@servidor:/# touch /etc/rc.d/rc.firewall
root@servidor:/# chmod +x /etc/rc.d/rc.firewall
root@servidor:/# mcedit /etc/rc.d/rc.firewall
#!/bin/sh

# Grupos de bloqueio -----------------------------------------


# criar grupo 1 que nao pode acessar E-mail e nem fazer PING
	iptables -N Grupo1
	iptables -F Grupo1

	# bloquear acesso a e-mail
	iptables -A Grupo1 -p tcp --dport 25 -j DROP  # SMTP
	iptables -A Grupo1 -p tcp --dport 110 -j DROP  # POP3
	iptables -A Grupo1 -p tcp --dport 143 -j DROP  # IMAP

	# bloquear Ping
	iptables -A Grupo1 -p icmp -j DROP


# criar grupo 2 que so pode navegar normalmente, o resto
	# será bloqueado
	iptables -N Grupo2
	iptables -F Grupo2

	# liberar navegação
	iptables -A Grupo2 -p tcp -m multiport --port 80 -j RETURN  # HTTP
	iptables -A Grupo2 -p tcp -m multiport --port 443 -j RETURN # HTTPS
	iptables -A Grupo2 -p udp -m multiport --port 53 -j RETURN  # DNS
	# bloquear o resto
	iptables -A Grupo2 -j DROP



Reinicie o MyAuth ou execute o arquivo para iniciar as tabelas criadas (o MyAuth deve estar em execução).
root@servidor:/# sh /etc/rc.d/rc.firewall
Agora vamos editar 2 arquivos de usuários, o usuário "pedro" ficará no Grupo1 (não acessa e-mail):

root@servidor:/# touch /myauth/session/pedro
root@servidor:/# chmod +x /myauth/session/pedro
root@servidor:/# mcedit  /myauth/session/pedro

chain=FWpedro
action=$1
ip=$2
mac=$3

if [ "$action" = "login" ]; then
	# incluir no Grupo1
	iptables -t filter -A $chain -s $ip -j Grupo1
	iptables -t filter -A $chain -d $ip -j Grupo1
fi


O usuário "marcos" ficará no Grupo2 (apenas navegação):

root@servidor:/# touch /myauth/session/marcos
root@servidor:/# chmod +x /myauth/session/marcos
root@servidor:/# mcedit  /myauth/session/marcos

chain=FWmarcos
action=$1
ip=$2
mac=$3

if [ "$action" = "login" ]; then
	# incluir no Grupo1
	iptables -t filter -A $chain -s $ip -j Grupo2
	iptables -t filter -A $chain -d $ip -j Grupo2
fi