Executar regras específicas de um arquivo de configuração

1. Executar regras específicas de um arquivo de configuração

Giovani Jorge Vargas
giovanijorge

(usa Ubuntu)

Enviado em 23/09/2015 - 11:07h

Viva o GNU/Linux!!
Gostaria de uma ajuda, tenho este arquivo de configuração
....
# arquivo de configuração do equipamento

internet =
conexao_rede = eth0
conexao_3g = nao
conexao_wifi = wlan0
....

e estas regras do firewall
....
#!/bin/bash

### BEGIN INIT INFO
# Provides: "start_firewall"
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Example initscript
# Description: This file should be used to construct scripts to be
# placed in /etc/init.d.
### END INIT INFO


# executavel e variaveis
IPTABLES=/sbin/iptables

rede=`more /mnt/brgo0002/sme.conf | grep conexao_rede | awk -F=" " '{print $2}'`
wifi=`more /mnt/brgo0002/sme.conf | grep conexao_wifi | awk -F=" " '{print $2}'`
internet=`more /mnt/brgo0002/sme.conf | grep internet | awk -F=" " '{print $2}'`

# Apagando todas as regras
$IPTABLES -F
$IPTABLES -X
$IPTABLES -t nat -F
$IPTABLES -t nat -X
$IPTABLES -t mangle -F
$IPTABLES -t mangle -X

# Compartilha a conexão
modprobe iptable_nat
echo 1 > /proc/sys/net/ipv4/ip_forward
$IPTABLES -t nat -A POSTROUTING -o $internet -j MASQUERADE ## conexao com a internet

# Bloqueia pings e protege contra IP spoofing e pacotes inválidos
$IPTABLES -A INPUT -p icmp --icmp-type echo-request -j DROP
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
$IPTABLES -A INPUT -m state --state INVALID -j DROP


#portas altas do FTP 1024:1300
$IPTABLES -A INPUT -i $rede -p tcp -m multiport --dport 1024:1300 -j ACCEPT
$IPTABLES -A INPUT -i $conexao_3g -p tcp -m multiport --dport 1024:1300 -j ACCEPT
$IPTABLES -A INPUT -i $wifi -p tcp -m multiport --dport 1024:1300 -j ACCEPT


#Liberar porta 80
$IPTABLES -A INPUT -i $wifi -p tcp --dport 80 -j ACCEPT
$IPTABLES -A INPUT -i $rede -p tcp --dport 80 -j ACCEPT
$IPTABLES -A FORWARD -p tcp -o $rede --sport 80 -j ACCEPT
$IPTABLES -A FORWARD -p tcp -o $wifi --sport 80 -j ACCEPT

#liberar porta 8888 btsync
$IPTABLES -A INPUT -i $rede -p tcp --dport 8888 -j ACCEPT
$IPTABLES -A INPUT -i $wifi -p tcp --dport 8888 -j ACCEPT
$IPTABLES -A FORWARD -p tcp -o $rede --sport 8888 -j ACCEPT
$IPTABLES -A FORWARD -p tcp -o $wifi --sport 8888 -j ACCEPT

# Mantem o estado das conexoes da interface de loopback
iptables -I INPUT -s 127.0.0.1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -I OUTPUT -s 127.0.0.1 -m state --state RELATED,ESTABLISHED -j ACCEPT

#libera porta 80 para interface loopback http://localhost
iptables -I INPUT -p tcp -s 127.0.0.1 -d 127.0.0.1 --dport 80 -j ACCEPT

#libera a porta 8888 para localhost
$IPTABLES -I INPUT -p tcp -s 127.0.0.1 -d 127.0.0.1 --dport 8888 -j ACCEPT

#Liberar porta 5901 VNC
$IPTABLES -A INPUT -i $rede -p tcp --dport 5901 -j ACCEPT
$IPTABLES -A FORWARD -p tcp -o $rede --sport 5901 -j ACCEPT
$IPTABLES -A INPUT -i $conexao_3g -p tcp --dport 5901 -j ACCEPT
$IPTABLES -A FORWARD -p tcp -o $conexao_3g --sport 5901 -j ACCEPT

....

Problema anterior:
Conforme a estrutura no local de instalação poderemos utilizar conexão 3G, Ethernet ou wi-fi.
A ideia é utilizar apenas um arquivo de firewall e um arquivo de configuração onde poderá ser verificado e executado conforme informações das variáveis de cada máquina..
Então como podem ver antes colocava todas as variáveis utilizadas e apagava outras... mas isso dificultou a manutenção de todas as máquinas pois teria de ter um pra cada... desta forma , que testei parcialmente, ficou mais fácil e inteligente.

Novo problema:
Como faço para testar o arquivo de configuração e executar apenas as regras que serão válidas para cada máquina, EXEMPLO:

tenho regra pra liberar a porta VNC para redes ethernet, 3G ou Wi-Fi.
Quando o script ler o arquivo de configuração a conexão que ele ler com o termo "nao", como no exemplo
...
conexao_3g = nao
...
Durante o script do firewall deixar de executar as regras referentes a este tipo de conexão?

Antecipadamente agradeço pela ajuda.



  


2. Alguém

Giovani Jorge Vargas
giovanijorge

(usa Ubuntu)

Enviado em 29/09/2015 - 09:03h


Vamos lá participantes do VOL, me ajudem?


3. Re: Executar regras específicas de um arquivo de configuração

Wellingthon Dias Queiroz - @tonyhts
tonyhts

(usa Arch Linux)

Enviado em 29/09/2015 - 15:26h

Olá,

Deve existir formas melhores e mais bonitas de se fazer isso, mas aqui vai uma rapida contribuição:

Teremos 3 arquivos. São eles:

1) script.sh
#!/bin/bash


# executavel e variaveis

IPTABLES=/sbin/iptables

rede=`more /mnt/brgo0002/sme.conf | grep conexao_rede | awk -F=" " '{print $2}'`
wifi=`more /mnt/brgo0002/sme.conf | grep conexao_wifi | awk -F=" " '{print $2}'`
internet=`more /mnt/brgo0002/sme.conf | grep internet | awk -F=" " '{print $2}'`

# Arquivo de Configuração
conf='script.conf'

# Arquivo que contém as regras
regras='regras'

# Define a variável negado com o resultado do filtro no arquivo conf em busca dos valores que serão negados na execução do script
negado=$(awk '/nao/ {print$1}' $conf | tr "\n" "|" |sed 's/|$//')

# Filtra o arquivo regras somente com as linhas que NÂO contém na lista negada e executa
grep -v "($negado)" $regras | sh


2) script.conf
internet = 
conexao_rede = eth0
conexao_3g = nao
conexao_wifi = wlan0


3) regras
# Apagando todas as regras
$IPTABLES -F
$IPTABLES -X
$IPTABLES -t nat -F
$IPTABLES -t nat -X
$IPTABLES -t mangle -F
$IPTABLES -t mangle -X

# Compartilha a conexão
modprobe iptable_nat
echo 1 > /proc/sys/net/ipv4/ip_forward
$IPTABLES -t nat -A POSTROUTING -o $internet -j MASQUERADE ## conexao com a internet

# Bloqueia pings e protege contra IP spoofing e pacotes inválidos
$IPTABLES -A INPUT -p icmp --icmp-type echo-request -j DROP
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
$IPTABLES -A INPUT -m state --state INVALID -j DROP

#portas altas do FTP 1024:1300
$IPTABLES -A INPUT -i $rede -p tcp -m multiport --dport 1024:1300 -j ACCEPT
$IPTABLES -A INPUT -i $conexao_3g -p tcp -m multiport --dport 1024:1300 -j ACCEPT
$IPTABLES -A INPUT -i $wifi -p tcp -m multiport --dport 1024:1300 -j ACCEPT

#Liberar porta 80
$IPTABLES -A INPUT -i $wifi -p tcp --dport 80 -j ACCEPT
$IPTABLES -A INPUT -i $rede -p tcp --dport 80 -j ACCEPT
$IPTABLES -A FORWARD -p tcp -o $rede --sport 80 -j ACCEPT
$IPTABLES -A FORWARD -p tcp -o $wifi --sport 80 -j ACCEPT

#liberar porta 8888 btsync
$IPTABLES -A INPUT -i $rede -p tcp --dport 8888 -j ACCEPT
$IPTABLES -A INPUT -i $wifi -p tcp --dport 8888 -j ACCEPT
$IPTABLES -A FORWARD -p tcp -o $rede --sport 8888 -j ACCEPT
$IPTABLES -A FORWARD -p tcp -o $wifi --sport 8888 -j ACCEPT

# Mantem o estado das conexoes da interface de loopback
iptables -I INPUT -s 127.0.0.1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -I OUTPUT -s 127.0.0.1 -m state --state RELATED,ESTABLISHED -j ACCEPT

#libera porta 80 para interface loopback http://localhost
iptables -I INPUT -p tcp -s 127.0.0.1 -d 127.0.0.1 --dport 80 -j ACCEPT

#libera a porta 8888 para localhost
$IPTABLES -I INPUT -p tcp -s 127.0.0.1 -d 127.0.0.1 --dport 8888 -j ACCEPT

#Liberar porta 5901 VNC
$IPTABLES -A INPUT -i $rede -p tcp --dport 5901 -j ACCEPT
$IPTABLES -A FORWARD -p tcp -o $rede --sport 5901 -j ACCEPT
$IPTABLES -A INPUT -i $conexao_3g -p tcp --dport 5901 -j ACCEPT
$IPTABLES -A FORWARD -p tcp -o $conexao_3g --sport 5901 -j ACCEPT


O script.sh vai ler o arquivo de configuração e construir o comando para negar as linhas necessárias no arquivo de regras quando for executado.

PS: O script não tem limite para quantidade de valores setados para não.

abs,

---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts