~~NOCACHE~~ ===== 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.