Diferenças
Aqui você vê as diferenças entre duas revisões dessa página.
Ambos lados da revisão anterior Revisão anterior Próxima revisão | Revisão anterior Próxima revisão Ambos lados da revisão seguinte | ||
inicial [2024/03/07 11:47] marcosm [Versões documentadas] |
inicial [2024/03/07 14:57] marcosm [Criação do servidor telecentro] |
||
---|---|---|---|
Linha 1: | Linha 1: | ||
~~NOCACHE~~ | ~~NOCACHE~~ | ||
- | ===== Desenvolvimento da Libertas ===== | + | ===== Objetivos ===== |
- | Este wiki tem por objetivo reunir toda a documentação relacionada ao desenvolvimento da distribuição //Libertas Debian GNU/Linux//. Ele possuirá áreas comuns acessíveis a todas as pessoas e áreas restritas a determinados grupos de trabalho. Aqui será documentado o processo de produção da distribuição, de forma a permitir que qualquer um consiga reproduzir a aparência e as funcionalidades da //Libertas//. | + | 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//. |
- | [[justificativa_sl|Justificativa para o uso de softwares livres na educação]] | ||
- | ==== Versões documentadas ==== | ||
- | * [[desenvolvimentoCRC:debian11_inicial|Versão 11]] (bullseye) | + | |
+ | ===== Servidor telecentros ===== | ||
+ | ==== 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; | ||
| | ||
- | * [[desenvolvimento9:libertas9_inicial|Versão 9]] (stable) (descontinuada) | + | # Em segundos |
- | * [[desenvolvimento:libertas8_inicial|Versão 8]] (old) - restrito | + | default-lease-time 86400; |
- | * [[desenvolvimento6:inicial|Versão 6]] (old) - restrito | + | 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. | ||
- | ==== Documentação interna ==== | ||
- | * [[smed:inicial_smed|Orientações para a SMED]] (em desenvolvimento) | ||
- | * [[interno:libertas9_terceiros| Orientações para a GMRI-PB]] | ||
- | * [[dev:inicial| Desenvolvimento Libertas]] | ||
- | * [[tc:inicial| Desenvolvimento dos telecentros]] (em desenvolvimento) |