Objetivos

Este wiki tem por objetivo reunir toda a documentação relacionada ao desenvolvimento da distribuição GNU/Linux usada nos computadores dos telecentros Comunitários da Prefeitura de Belo Horizonte e também, naqueles que forem para doação. Ele possuirá áreas comuns acessíveis a todas as pessoas e áreas restritas a determinados grupos de trabalho. Aqui será documentado o processo de configuração e uso da distribuição Linux Mint.

Servidor telecentros

Segue adiante procedimentos para a criação de um servidor telecentro

Criação do servidor telecentro

A criação de um servidor é feita a partir de uma máquina equipada com telecentro. Para que essa máquina funcione como servidor é necessário acrescentar uma placa de rede, ficando assim com duas placas: uma onboard e outra no barramento. A placa de rede onboard funcionará como rede local nomeada para eth0(instruções mais adiante) a outra funcionará como rede wan e estará conectada à rede RMI e também será renomeada para eth1.

Preparação da máquina telecentro

Desabilitando IPv6

A máquina servidora, assim como as máquinas de telecentro, não possuem acesso ou endereços IPv6. para que isso seja possível altera-se a linha

GRUB_CMDLINE_DEFAULT=”ipv6.disable=1” no arquivo /etc/default/grub.
Nomeação das placas de rede

Para conformidade com o firewall as placas de rede devem ser renomeadas para eth0 e eth1, pois o linux alterou a sistemática de nomeação das placas de rede nas versões atuais usando o barramento e slot onde a placa esta conectada. Para driblar essa regras acrescenta-se, no arquivo /etc/default/grub na opção GRUB_CMDLINE_LINUX_DEFAULT os valores: “net.ifnames=0 biosdevname=0”. assim essa linha ficaria no final como:

GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1 net.ifnames=0 biosdevname=0"

Instalação do daemon dhcp

A disponibilização do serviço dhcp visa oferecer endereços da rede 192.168.80.0 às maquinas conectadas à rede local, ou seja eth0. A instalação do daemon dhcp é feita pela instalação do utilitário isc-dhcp-server. Para isso digita-se na linha do bash:

# apt install isc-dhcp-server

Para checar se ele foi instalado digite:

# systemctl status isc-dhcp-server

No início erros serão reportados pois os arquivos de configuração não estão definidos. Apesar de não estar funcionando ele está instalado.

Com a instalação do servidor dhcp deve-se, primeiramente, alterar no arquivo /etc/default/isc-dhcp-server as opções INTERFACESv4=”eth0” e INTERFACESv6=”eth0” Após isso ter sido feito, substituir o conteúdo do arquivo /etc/dhcp/dhcpd.conf por:

# option definitions common to all supported networks...
# option domain-name "crc.pbh";
option domain-name-servers 8.8.8.8, 1.1.1.1;
#option domain-name-servers 192.168.80.1;

# Em segundos
default-lease-time 86400;
max-lease-time 604800;

ddns-update-style none;

authoritative;

subnet 192.168.80.0 netmask 255.255.255.0 {
  range 192.168.80.2 192.168.80.50;
  option subnet-mask 255.255.255.0;
  option routers 192.168.80.1;  
  option broadcast-address 192.168.80.255;
}

Para verificar se a configuração está correta digite:

# dhcpd -t 

Se houver erros eles serão reportados no terminal. Estando tudo ok basta reiniciar o daemon dhcpd:

# systemctl restart isc-dhcp-server.service

ele subirá sem erros.

Troubleshooting do daemon dhcpd

Para verificar os logs gerados pelo servidor dhcpd digite:

# journalctl -xeu isc-dhcp-server

nos logs estarão presentes todos os acontecimentos no dhcpd, inclusive os endereços atribuídos aos clientes.

Criação do firewall

O firewall no servidor do telecentro tem por finalidade restringir o acesso da rede lan (eth0) aos serviços disponibilizados na rede wan (eth1), permitindo somente acesso à internet e proibindo os demais(RMI).

Ele é criado usando-se o utilitário iptables que já vem instalado nas distribuições linux. A sua ‘criação’ segue os seguintes passos: - uso de script para estabelecer as regras - criação de um serviço no systemd para gerenciar o seu funcionamento.

script das regras

Esse script consiste de uma sequência de comandos que definem como o firewall irá funcionar. Ele é um arquivo texto comum e poderia ficar em qualquer lugar, mas por comodidade e obedecendo a hierarquia linux ele foi colocado em /etc/firewall/loadFirewall.sh. Tanto o diretório quanto o arquivo devem ser criados antecipadamente. O arquivo deve ter privilégios de execução para o usuário root e o seu grupo. Segue abaixo o conteúdo do arquivo:

#!/bin/bash

IPT='/sbin/iptables'
TC='192.168.80.0/24'
TCS='10.172.0.0/16'
DNS='10.0.24.151'
RMI1='192.168.0.0/16'
RMI2='10.0.0.0/8'
RMI3='172.16.0.0/12'
EAD1='10.0.29.70'
EAD2='201.54.223.111'

# Placa de rede ligada a internet
wan='eth1'

# Placa de rede que liga com a 'rede interna' (local)
lan='eth0'

# flush
function flushFirewall() {
iptables -t nat -F POSTROUTING
iptables -t nat -F PREROUTING
iptables -t nat -F OUTPUT

iptables -F
iptables -X
iptables -Z
}

function stopFirewall() {
echo "Desligando o firewall................................ [ >> ]"

# --------- POLITICAS -----------------------
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

# Desabilita o roteamento entre as interfaces
#--------------------------------------------
echo 0 > /proc/sys/net/ipv4/ip_forward


echo "Firewall DESATIVADO.................................. [ OK ]"
}

function startFirewall() {
	echo "Iniciando o firewall................................. [ >> ]"

	# --------- POLITICAS -----------------------
	iptables -P INPUT DROP
	iptables -P FORWARD DROP
	iptables -P OUTPUT ACCEPT


	#----------REGRAS ADICIONAIS DE SEGURANA ---------: 
	iptables -A INPUT -m state --state INVALID -j DROP
	iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
	echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
	echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
	echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
	echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
	echo 1 > /proc/sys/net/ipv4/tcp_syncookies

	# Habilita o roteamento entre as interfaces
	#------------------------------------------
	echo 1 > /proc/sys/net/ipv4/ip_forward

	# Liberando acesso por SSH em todas as interfaces
	#------------------------------------------------
	iptables -A INPUT -p tcp --dport 22 -j ACCEPT
	iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT

	# garante que o firewall permitira pacotes de conexoes ja iniciadas:
	#-------------------------------------------------------------------
	iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
	iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
	iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
	
	
	# Regra para compartilhar a Internet (NAT)
	#-----------------------------------------
	iptables -t nat -A POSTROUTING  -o $wan -j MASQUERADE
	
	iptables -A FORWARD -i $lan -d $EAD1 -j ACCEPT
	iptables -A FORWARD -i $lan -d $TC -j ACCEPT

	iptables -A FORWARD -i $lan  -d $RMI1 -j REJECT
	iptables -A FORWARD -i $lan  -d $RMI2 -j REJECT
	iptables -A FORWARD -i $lan  -d $RMI3 -j REJECT

	# Permitir resolução de DNS
	iptables -A FORWARD  -i $lan -p udp --dport 53 -j ACCEPT
	iptables -A INPUT  -i $lan -p tcp -d $RMI1 -j DROP
	iptables -A INPUT  -i $lan -p tcp -d $RMI2 -j DROP
	iptables -A INPUT  -i $lan -p tcp -d $RMI3 -j DROP


	# Permitir tudo com origem na rede local
	#---------------------------------------
	iptables -A INPUT    -i $lan -j ACCEPT
	iptables -A FORWARD  -i $lan -j ACCEPT


	# --------- LOOPBACK ------------------------
	iptables -A INPUT -i lo -j ACCEPT



	# Compartilhamento - Porta 80 >> Proxy 3128
	#--------------------------------------------------
	#iptables -t nat -A PREROUTING -i $lan -p tcp --dport 80 -j REDIRECT --to-port 3128







	echo "Firewall Ativado..................................... [ OK ]"

}


case $1 in
    stop)
    	stopFirewall	    
	flushFirewall
	;;
   start)
	flushFirewall
   	startFirewall
	;;

    restart)
	stopFirewall
	flushFirewall
	startFirewall
	;;
    *)

	echo 'POR FAVOR USE "stop|start|restart"'
	;;
esac
Implementação do serviço firewall

A criação do serviço no systemd consiste na criação de um script na pasta /etc/systemd/system/ que será chamado quando se decidir iniciar, reiniciar ou parar o firewall. Esse arquivo deve ter a extensão .service, deve ser executavel somente pelo root e seu grupo. O nome dado a esse arquivo foi firewall.service (naturalmente). Seu conteúdo é:

/etc/systemd/system/firewall.service:

[Unit]
    Description=firewall
    After=network.target

[Service]
    RemainAfterExit=yes
    Restart=always
    RestartSec=10
    ExecStart=/etc/firewall/loadFirewall.sh start
    ExecStop=/etc/firewall/loadFirewall.sh stop
#    ExecRestart=/etc/firewall/loadFirewall.sh restart
    User=root

[Install]
    WantedBy=multi-user.target

Após todos esses passos serem concluídos deve-se reiniciar os daemons para que o systemd possa reconhecer os serviços:

# systemctl daemon-reload

Com a recarga dos serviços o firewall já estará operando. Para checar basta digitar:

# systemctl status firewall.service

para checar se o firewall está funcionando digite:

# iptables -nvL

Se estiver ativo as regras (tabela filter) de cada chain serão listadas. Caso contrário, nenhuma regra será listada apenas os nomes das chains.

Ativando e desativando o firewall

Para ativar o firewall digite:
# systemctl start firewall.service

desativar:

# systemctl stop firewall.service

reiniciar:

# systemctl restart firewall.service

checar funcionamento:

# systemctl status firewall.service

Instalação do proxy

O proxy (no caso o squid) tem a função de filtrar conteúdo no acesso à internet. Essa funcionalidade esta sendo descontinuada porque a prodabel já implementa um proxy transparente que já filtra as páginas não permitidas.

Testes finais …

Acesso à RMI = proibido

# ping 10.0.24.1 

sem resposta/ inalcançável.

Acesso internet = permitido

# ping google.com

respondendo o ip da google e o tempo de busca, com isso testa-se também o dns.

Acesso servidores RTP

# chronyc status

resposta : lista de servidores de RTP.