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 14:33] marcosm [Criação do servidor telecentro] |
inicial [2024/03/07 14:53] marcosm [Criação do servidor telecentro] |
||
---|---|---|---|
Linha 17: | Linha 17: | ||
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 | 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.'' | + | GRUB_CMDLINE_DEFAULT=”ipv6.disable=1” no arquivo /etc/default/grub. |
== Nomeação das placas de rede == | == Nomeação das placas de rede == | ||
Linha 24: | Linha 24: | ||
assim essa linha ficaria no final como: | assim essa linha ficaria no final como: | ||
- | ''GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1 net.ifnames=0 biosdevname=0"'' | + | GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1 net.ifnames=0 biosdevname=0" |
=== Instalação do daemon dhcp === | === Instalação do daemon dhcp === | ||
Linha 31: | Linha 31: | ||
A instalação do daemon dhcp é feita pela instalação do utilitário isc-dhcp-server. Para isso digita-se na linha do bash: | 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 | + | # apt install isc-dhcp-server |
Para checar se ele foi instalado digite: | Para checar se ele foi instalado digite: | ||
- | # systemctl status isc-dhcp-server | + | # 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. | 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. | ||
Linha 61: | Linha 61: | ||
option broadcast-address 192.168.80.255; | 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 | ||
+ | |||