Regras das ACLs
- A sintaxe das regras é igual para ambos os arquivos (allow ou deny);
- Cada arquivo tem zero, ou mais, linhas e SEMPRE deve terminar com uma linha vazia. Um enter na linha anterior gera uma linha vazia;
- Cada linha é uma regra, um comentário ou linha vazia;
- As regras são processadas em ordem de aparência;
- A busca termina quando uma combinação ocorre;
- Para escapar caracteres especiais (new line ou dois-pontos) utilizamos uma barra invertida ( \ );
- Linhas em branco não são consideradas nem analisadas;
- Linhas iniciadas pelo caractere # são consideradas comentários.
* Atenção: Após a última regra em
hosts.allow e
hosts.deny inclua uma linha em branco. Sem ela a última regra irá falhar (?).
Formato das regras
Uma regra possui o seguinte formato:
- daemon_list: É uma lista separada por espaços em branco e vírgulas, com um ou mais nomes dos daemons dos processos ou números das portas dos serviços ou wildcards.
- client_list: É uma lista separada por por espaços em branco e vírgulas com um ou mais nomes de hosts ou endereços IP ou combinações de um ou outro destes critérios.
- shell_command: Um comando do shell [opcional] que é executado quando a regra combinar. Pode gerar um log ou mandar um e-mail, por exemplo.
Padrões de combinação
A linguagem de ACL TCP Wrapper obedece aos seguinte padrões:
- Se a string começa com um ponto (.), a expressão regular que SEGUE, será procurada como um padrão. Por exemplo: .com.br - Em "client_list" irá combinar para as requisições, com origem em google.com.br e para vivaolinux.com.br, também.
- Se a string termina com um ponto (.), a expressão regular que ANTECEDE será procurada como um padrão. Por exemplo: 192.168 - Irá combinar para "192.168.1." e para "192.168.130." também.
- A expressão na forma "n.n.n.n/m.m.m.m" é interpretada como um par rede/máscara (net/mask), e irá combinar com o resultado do bitwise AND entre eles. Por exemplo: 192.168.1.0/255.255.255.0 irá combinar com 254 endereços IP deste segmento (192.168.1.1 até 192.168.1.254).
- São Wildcards, o asterisco (*) e a interrogação (?) significando respectivamente TUDO ou UM caractere. Os Wildcards podem ser combinados tanto para nomes ou endereços de hosts, EXCETO em conjunto com o formato net/mask, hostnames começados com ponto (.) ou endereços terminados com pontos (.) onde IRÃO falhar.
Wildcards Especiais
- ALL: Sempre combina com TUDO.
- LOCAL: Combina com um host cujo nome não tenha um ponto. Notadamente localhost.
- UNKNOWN: Combina com nomes ou endereços DESCONHECIDOS. Use com muito cuidado. Se a resolução de nomes em DNS estiver indisponível gera problemas.
- KNOWN: Combina com hosts cujos nomes e endereços são CONHECIDOS. Se a resolução DNS estiver indisponível gera problemas.
- PARANOID: Combina com nomes de hosts que não combinam com os endereços CONHECIDOS.
Operadores
EXCEPT – Permite criar exceções dentro da regra.
Por exemplo, 192.168.100. EXCEPT 192.168.100.254 192.168.100.255. Esta EXCEÇÃO excluí os hosts 254 e 255 da regra.
Este operador pode ser utilizado nas listas de Daemons e de Clientes.
Observe que o separador é um "espaço em branco" que PODE ou NÃO incluir uma vírgula.
Executando comandos do shell nas regras
Se a regra combinar (daemon_list : client_list) e incluir um campo opcional como [: shell_command], então um comando do shell poderá ser executado concomitantemente com a aceitação da conexão.
Um conjunto de máscaras seguidas pelo caractere %<letra> podem ser aplicadas de acordo com a tabela abaixo, permitindo um controle de logs de acesso bem apurado.
A opção [ : comando do shell ] será executada por um processo filho em
/bin/sh e terá as saídas padrão e de erro, e a entrada padrão redirecionadas para
/dev/null.
Este comando pode ser enviado para segundo plano (background) com o uso do caractere (&) no final da regra, se você não deseja esperar pelo fim de sua execução.
Todos os executáveis devem ser referenciados por suas rotas completadas ou uma declaração temporária de: PATH="/rota/bin"
...Que PODE existir antes de cada comando. Outras formas de execução de um comando são:
- aclexec shell_command: Executa em um shell filho, o comando em shell_command, após expandir os Wildcards em %<letra>.
Por exemplo:
smtp : ALL : aclexec checkdnsbl %a
- spawn shell_command: Executa em um shell filho, o comando em shell_command, após expandir os Wildcards em %<letra>.
Por exemplo:
spawn (/usr/sbin/safe_finger -l @%h | /usr/bin/mail root) &