JHONY MASETO [email protected] Configuração e segurança de redes de computadores Semana Acadêmica dos Cursos de Sistema de Computação e Ciência da Computação- Unochapecó Chapecó 12/09/2012 Sumário 1.Preparação do ambiente.........................................................................................................................3 1.1. Softwares / pacotes utilizados ......................................................................................................3 1.2.Comandos básicos..........................................................................................................................3 1.3.Estrutura proposta ..........................................................................................................................3 1.4.Mão na massa / configurações iniciais .........................................................................................4 a)Níveis de execução / runlevel.......................................................................................................4 b)Verificação dos pacotes necessários.............................................................................................5 c)Definição de um nome para o servidor........................................................................................5 d)Desativar o Selinux para evitar surpresas.....................................................................................5 e)Desativar o serviço do iptables.....................................................................................................5 f)Configurar as interfaces de rede ...................................................................................................5 g)verificando as rotas ......................................................................................................................6 h)Ajustar a resolução de nomes DNS..............................................................................................6 1.5.Serviço dhcp...................................................................................................................................6 a)habilitando a repassagem de pacotes ...........................................................................................7 2.Iptables...................................................................................................................................................7 2.1.Definição........................................................................................................................................7 2.2.Filter...............................................................................................................................................8 2.3.NAT - Network Address Translation..............................................................................................8 a)PREROUTING ............................................................................................................................8 b)POSTROUTING - .......................................................................................................................9 c)Mangle..........................................................................................................................................9 d)Script iptables básico gateway exemplo 1..................................................................................10 e)script iptables mais completo exemplo 2....................................................................................11 3.Squid cache - proxy..............................................................................................................................14 3.1.Configurações básicas do squid..................................................................................................14 a)Definição....................................................................................................................................14 b)Configuração do squid................................................................................................................14 c)outras opções de configuração ...................................................................................................15 - Configurações de segurança / performance ...........................................................................15 - Outras ACLs...........................................................................................................................15 4.Referências...........................................................................................................................................17 1. Preparação do ambiente. 1.1. Softwares / pacotes utilizados – CentOS release 5.8 (Final) – squid-2.6.STABLE21-6.el5 – iptables-1.3.5-9.1.el5 – dhcp-3.0.5-31.el5_8.1 – samba-3.0.33-3.39.el5_8 – vsftpd-2.0.5-24.el5_8.1 1.2. Comandos básicos – vi ( editor de texto shell ) – yum ( atualizador / instalador de pacotes ) – rpm ( gerenciador de pacotes ) – fdisk ( manipulador das tabelas de partição ) – man ( documentação ) – df ( mostra o particionamento e espaço em disco ) – ls ( lista diretórios e arquivos ) – tail ( lista a saída de um arquivo ) – cat ( imprime em tela o arquivo ) 1.3. Estrutura proposta A ideia do curso é demonstrar de forma prática com poucos conceitos teóricos a montagem de uma estrutura simples de um Gateway para internet com filtro de conteúdo, proteção da rede interna através de um script iptables e demais funcionalidades básicas. 1.4. Mão na massa / configurações iniciais a) Níveis de execução / runlevel O Linux é capaz de operar em vários estados diferentes de sistema, cada um dos quais definido pelo conjunto de serviços disponibilizados ao usuário quando o respectivo estado está no controle do sistema. Runlevel - Simões Aprígio,2009 No Centos esta configuração pode ser feita em /etc/inittab, abaixo segue parte do arquivo: # Default runlevel. The runlevels used by RHS are: # 0 - halt (Do NOT set initdefault to this) # 1 - Single user mode # 2 - Multiuser, without NFS (The same as 3, if you do not have networking) # 3 - Full multiuser mode # 4 - unused # 5 - X11 # 6 - reboot (Do NOT set initdefault to this) # id:5:initdefault: – Existe algum motivo para eu modificar isso? – Como eu verifico que serviços estão associados a este runlevel? – Como eu faço para iniciar / desligar um serviço? b) Verificação dos pacotes necessários [root@localhost ~]# rpm -q squid [root@localhost ~]# rpm -q iptables [root@localhost ~]# rpm -q dhcpd [root@localhost ~]# rpm -q samba [root@localhost ~]# rpm -q vsftpd c) Definição de um nome para o servidor. [root@localhost ~]# vi /etc/sysconfig/network NETWORKING=yes NETWORKING_IPV6=no HOSTNAME=comp.unochapeco.edu.br d) Desativar o Selinux para evitar surpresas. [root@localhost ~]# vi /etc/sysconfig/selinux SELINUX=disabled e) Desativar o serviço do iptables [root@localhost ~]# service iptables stop [root@localhost ~]# chkconfig iptables off f) Configurar as interfaces de rede [root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 BOOTPROTO=static IPADDR=10.1.1.1 NETMASK=255.255.255.0 GATEWAY=10.1.1.254 ONBOOT=yes [root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth1 DEVICE=eth1 BOOTPROTO=static IPADDR=192.168.1.254 NETMASK=255.255.255.0 ONBOOT=yes [root@localhost ~]# service network restart g) verificando as rotas [root@localhost ~]# route -n Tabela de Roteamento IP do Kernel Destino Roteador MáscaraGen. Opções Métrica Ref Uso Iface 10.1.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 0.0.0.0 10.1.1.254 0.0.0.0 UG 0 0 0 eth0 h) Ajustar a resolução de nomes DNS [root@comp ~]# vi /etc/resolv.conf search unochapeco.edu.br nameserver 200.135.240.15 nameserver 200.135.240.2 Servidor navegando ????? 1.5. Serviço dhcp [root@comp ~]# vi /etc/dhcpd.conf ddns-update-style none; #para utilizar dns dinâmico via dhcp, ou seja o dhcp troca informações com o serviço dns e faz a tradução de cada micro da rede. ignore client-updates; #habilita a atualização dos clientes no dns subnet 192.168.1.0 netmask 255.255.255.0 { authoritative; option routers 192.168.1.254; option subnet-mask 255.255.255.0; option domain-name-servers 192.168.1.254; option time-offset -18000; # Eastern Standard Time -18000 = gmt -3 range dynamic-bootp 192.168.1.1 192.168.1.200; default-lease-time 21600; Amount of time in seconds that a client may keep the IP address max-lease-time 43200; ##################### utilizado para atribuir o mesmo ip a determinado computador host boss { hardware ethernet 2C:27:D7:E1:D3:9A; fixed-address 192.168.1.201; } #################### } O Micro pegou ip ? a) habilitando a repassagem de pacotes [root@comp ~]# vi /etc/sysctl.conf net.ipv4.ip_forward = 0 ou echo "1" > /proc/sys/net/ipv4/ip_forward 2. Iptables 2.1. Definição O IPTABLES é uma ferramenta de edição da tabela de filtragem de pacotes, que atua sobre o kernel ou seja, com ele você é capaz de analisar o cabeçalho (header) e tomar decisões sobre os destinos destes pacotes. O IPTABLES não é a única solução existente para controle desta filtragem, temos ainda as antigas ipfwadm e ipchains, dentre outros. Elgio Schlemer,2007 São três as tabelas mais importantes do iptables: · filter · nat · mangle 2.2. Filter Entram nesta tabela o conjunto de regras com finalidades gerais, como bloquear, negar, realizar logs. Em geral os firewall são configurados fazendo uso das três CHAINS Abaixo: – INPUT – todos os pacotes dom destino ao servidor que esta sendo configurado. – OUPUT – pacotes que saem do servidor – FORWARD – pacotes que passam pelo servidor com destino a rede interna ou externa. Para inserir uma regra em uma lista, pode-se usar -A para APPEND, inserindo-a no final, ou -I para INSERT o destino alvo -j pode ser – REJECT – bloqueia o pacote e retorna ao usuário “porta inatingível”; – DROP – bloqueia o pacote; – ACCEPT – Aceita o pacote – LOG - realiza um log deste pacote no sistema /var/log/messages; 2.3. NAT - Network Address Translation Endereços privados não são permitidos na internet. Routers não fazem routing destes IPs { 10.0.0.0 – 10.255.255.255 /8 { 172.16.0.0 – 172.31.255.255 /12 { 192.168.0.0 - 192.168.255.255 /24 a) PREROUTING Segundo Osvaldo,2011, Logo que o pacote chega ele é modificado, isso acontece antes do roteamento do pacote. É usado em regras de DNAT e Redirecionamento de porta. Vamos analisar o cenário abaixo, onde estamos fazendo um DNAT, ou seja, toda requisição feita para o IP 200.164.30.20 na porta 80 será repassado para o IP da rede interna 192.168.2.100. Redirect de portas (Osvaldo,2011). iptables -t nat -A PREROUTING -d 200.164.30.20 -p tcp --dport 80 -j DNAT --to 192.168.2.100:80 Neste caso todo pacote com destino 200.164.30.20:80 será repassado para 192.168.2.100:80, porém isso acontece antes de qualquer roteamento. b) POSTROUTING - Para pacotes que necessitam de modificação após o roteamento, usa-se regras SNAT e IP MASQUERADING. Masquerading (Osvaldo,2011) A máquina 192.168.2.100 pretende acessar a INTERNET, para isso é necessário uma regra de MASQUERADING onde o firewall vai encaminhar a requisição da rede interna para o site destino neste caso o google mas com o ip válido para que o pacote consiga chegar ao destino, no exemplo do “osvaldohp” , o ip 200.164.30.20 é quem chega ao www.google.com . (Osvaldo,2011) iptables -t nat -A POSTROUTING -s 192.168.2.100 -o eth0 -j MASQUERADE outras aplicações para a tabela nat: – Balanceamento de carga (load balancing) – Backup Systems – Diversas rotas para um dado endereço de destino c) Mangle A tabela mangle serve para especificar ações especiais para o tratamento do tráfego que atravessa os chains. Nesta tabela existem cincos chains: PREROUTING, POSTROUTING, INPUT, OUTPUT e FORWARD. (almirwendel,2008). Em geral, cada um deste chain é processado antes do chain correspondente na tabela filter e nat para definir opções especiais para o tráfego.(almirwendel,2008). d) Script iptables básico gateway exemplo 1 [root@comp ~]# vi /etc/iptables #!/bin/bash # variáveis do firewall internal_net="192.168.1.0/24" IPTABLES="/sbin/iptables" MODPROBE="/sbin/modprobe" #### $MODPROBE ip_conntrack_ftp $MODPROBE ip_nat_ftp ####### $IPTABLES -F -t filter # FLUSH $IPTABLES -F -t mangle # FLUSH $IPTABLES -F -t nat # FLUSH $IPTABLES -P INPUT DROP $IPTABLES -P OUTPUT ACCEPT $IPTABLES -P FORWARD DROP #### #habilita a repassagem de pacotes echo "1" > /proc/sys/net/ipv4/ip_forward # maskarar ip $IPTABLES -t nat -A POSTROUTING -s $internal_net -j MASQUERADE $IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128 $IPTABLES -t nat -A PREROUTING -i eth1 -p tcp --dport 443 -j REDIRECT --to-port 3128 #tcp $IPTABLES -A INPUT -p tcp -s $internal_net --dport 3128 -j ACCEPT $IPTABLES -A INPUT -p tcp -s $internal_net --dport 21 -j ACCEPT #udp $IPTABLES -A FORWARD -p udp -s $internal_net --dport 53 -j ACCEPT ###### e) script iptables mais completo exemplo 2 [root@comp ~]# vi /etc/iptables #!/bin/sh # # rc.firewall - Initial SIMPLE IP Firewall test script for 2.4.x # # Author: Oskar Andreasson <[email protected]> # (c) of BoingWorld.com, use at your own risk, do whatever you please with # it as long as you don't distribute this without due credits to # BoingWorld.com # # Alterado, comentado e traduzido por Elton Luís Minetto <[email protected]> # Modificado para uso em configurações mais simples – jhony 01/05/2006 ################################################################################### ## # Variáveis de configuração # LOCALHOST_IP="127.0.0.1/32" LAB_NET="192.168.1.0/24" proxy=”10.1.1.254” ###interfaces LAB_IFACE="eth1" LINK_IFACE="eth0" ########Servidores IPTABLES="/sbin/iptables" DEPMOD="/sbin/depmod" MODPROBE="/sbin/modprobe" # ################################################################################### # Carrega todos os módulos do IPTables necessários ## # $DEPMOD -a # # Adiciona alguns modulos de alvos para o iptables como LOG, REJECT e MASQUARADE# $MODPROBE ipt_LOG $MODPROBE ipt_MASQUERADE # # Suporte para owner matching # $MODPROBE ipt_owner # # Suporte para traking de conecxoes FTP e IRC. # $MODPROBE ip_conntrack_ftp $MODPROBE ip_nat_ftp #$IPTABLES -F -t filter # flush nas regras de filter $IPTABLES -F -t nat # flush nas regras de nat $IPTABLES -F -t mangle # flush nas regras de mangle $IPTABLES -X -t filter # deleta chains de filter $IPTABLES -X -t nat # deleta chains de nat $IPTABLES -X -t mangle # deleta chains de mangle $IPTABLES -Z -t filter # zera contadores de filter $IPTABLES -Z -t nat # zera contadores de nat $IPTABLES -Z -t mangle # zera contadores de mangle $IPTABLES -P INPUT DROP # muda a politica padrao de INPUT para ACCEPT $IPTABLES -P OUTPUT ACCEPT # muda a politica padrao de OUTPUT para ACCEPT $IPTABLES -P FORWARD DROP # muda a politica padrao de FORWARD para ACCEPT # # # Masquerading # #LAB $IPTABLES -t nat -A POSTROUTING -s $LAB_NET -o $LINK_IFACE -j MASQUERADE ################################################################################### ######## #habilita a repassagem de pacotes echo "1" > /proc/sys/net/ipv4/ip_forward # # # Masquerading # #LAB $IPTABLES -t nat -A POSTROUTING -s $LAB_NET -o $LINK_IFACE -j MASQUERADE ################################################################################### ######## # Aceita a repassagem de pacotes que venham em resposta a pedidos feitos por aplicações da rede interna #$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j LOG --log-prefix "Volta " $IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT #redirect de porta $IPTABLES -A FORWARD -p tcp --dport 3389 -j ACCEPT $IPTABLES -t nat -A PREROUTING -i $LINK_IFACE -p tcp --dport 3389 -j DNAT --to 192.168.60.8:3389 $IPTABLES -t nat -A POSTROUTING -s 192.168.60.8 -j MASQUERADE # #se não casou até aqui logar $IPTABLES -A FORWARD -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level debug --logprefix "IPT FORWARD packet died" # Altera políticas padrão para correntes de INPUT, FORWARD e OUTPUT # #Somente navegar pelo proxy $IPTABLES -t nat -A PREROUTING -i $LAB_IFACE -p tcp --dport 80 -j REDIRECT --to-port 3128 $IPTABLES -t nat -A PREROUTING -i $LAB_IFACE -p tcp --dport 443 -j REDIRECT --to-port 3128 # rotear portas para o proxy correto $IPTABLES -t nat -A PREROUTING -p tcp -m multiport -s $LAB_NET --destination-ports 443,3128,6588,32767,3382,3124,10576,1080,32127,32167,12336,4868 -j DNAT --to-destination $proxy:3128 ## # Regras ICMP # # Aceita pacotes ICMP do tipo 0,3,5,8,11 # Tipo 0 = echo # Tipo 3 = unreachable # Tipo 5 = redirect # Tipo 11 = exceeded $IPTABLES -A INPUT -p ICMP -s 0/0 --icmp-type 0 -j ACCEPT $IPTABLES -A INPUT -p ICMP -s 0/0 --icmp-type 3 -j ACCEPT $IPTABLES -A INPUT -p ICMP -s 0/0 --icmp-type 5 -j ACCEPT # só liberar o tipo 8 para maquinas de confiaça. $IPTABLES -A INPUT -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT $IPTABLES -A INPUT -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT # # Regras TCP # #localhost $IPTABLES -A INPUT -s 127.0.0.1 -j ACCEPT $IPTABLES -A INPUT -s 192.168.1.254 -j ACCEPT $IPTABLES -A FORWARD -p tcp -s $LAB_NET --dport 80 -j ACCEPT $IPTABLES -A FORWARD -p tcp -s $LAB_NET --dport 3128 -j ACCEPT # # Portas UDP # $IPTABLES -A FORWARD -p udp -s $LAB_NET --dport 53 -j ACCEPT $IPTABLES -A FORWARD -p udp -d $LAB_NET --sport 53 -j ACCEPT # # Corrente de INPUT # Aceita pacotes que venham em resposta a serviços iniciados no servidor $IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES -A INPUT -p tcp -s $LOCALHOST_IP -j ACCEPT #o que nao casou loga $IPTABLES -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level debug --log-prefix "IPT INPUT packet died" ####################### 3. Squid cache - proxy 3.1. Configurações básicas do squid a) Definição Squid é um cache proxy para web, suporta http, https, ftp entre outros. Ele otimiza o consumo de banda de rede and melhora o tempo de resposta das requisições utilizando-se de um cache. O squid tem um extenso controle de acesso e roda na maioria dos sistemas operacionais e no windows também “não sei para que”. O squid esta licenciado na GNU GPL. b) Configuração do squid [root@comp ~]# vi /etc/squid/squid.conf #roda de forma transparente para o usuário, não suporta autenticação, porém não precisa configurar nada no computador do usuário. # Squid normally listens to port 3128 http_port 3128 transparent #comentar tag que vai entes de INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS http_access deny all #exemplos básicos ACL squid #Nao permitir acesso a determinados sites acl sitesproibidos dstdomain "/etc/squid/sites_bloqueados" http_access deny sitesproibidos #bloqueia por extensão acl extensiondeny url_regex -i mp3 acl download method GET http_access deny extensiondeny download http_access deny extensiondeny #troca o idioma para as mensagens de erro. #error_directory /usr/share/squid/errors/English error_directory /usr/share/squid/errors/Portuguese c) outras opções de configuração - Configurações de segurança / performance #aumenta o tamanho do cache e define as configurações para pastas filho cache_dir ufs /var/cache/squid 4000 16 256 #deve ser setado em off, a alteração se deve porque muitas vezes o squid não diferencia um cliente que encerrou a conexão, e uma conexão travada, ou meio encerrada. half_closed_clients off #supressão do nome para segurança httpd_suppress_version_string on visible_hostname none - Outras ACLs ############################################################# ### ##### ### CONTROLE DE BANDA POR USUÁRIOS ##### ### ##### ############################################################# acl user_metido proxy_auth "/etc/squid/usuarios_limitados_banda1.txt" acl user_fuck proxy_auth "/etc/squid/usuarios_limitados_banda2.txt" ### quantia de pools delay_pools 2 #faixa FDP redução pequena delay_class 1 2 # Limita a sua banda para +- 64 Kbps de download delay_parameters 1 6200/6200 6200/6200 delay_access 1 allow user_metido #faixa Fuck redução maior delay_class 2 2 # Limita a sua banda para +- 35 Kbps de download delay_parameters 2 3000/3000 3000/3000 delay_access 2 allow user_fuck ######################## # matador de p2p - chato acl clientep2p_url url_regex ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+ http_access deny CONNECT clientep2p_url ##### # usuário que estiver inserido nesta lista vai ter o facebook e twitter bloqueado nos horários abaixo acl lista proxy_auth "/etc/squid/trabalha_users.txt" #acl do horário acl trabalha-nene-manha time 09:00-11:30 acl trabalha-nene-tarde time 14:00-17:00 #acl para chamar os arquivos contendo os sites a serem bloqueados acl sites_bloqueados_horario dstdomain "/etc/squid/sites_bloqueados_horario_domains.txt" #bloqueia os sites na hora http_access deny sites_bloqueados_horario trabalha-nene-manha lista http_access deny sites_bloqueados_horario trabalha-nene-tarde lista ## ####################################################### 4. Referências Osvaldohp, Acessado em 17/05/2012, diponível em: http://osvaldohp.blogspot.com.br/2011_11_01_archive.html Pedro Brandão,2004. Acessado em 17/05/2012, diponível em: http://www.dcc.fc.up.pt/~pbrandao/aulas/0405/arq_r/slides/nat.pdf Elgio Schlemer,2007. Acessado em 17/05/2012, diponível em: http://www.vivaolinux.com.br/artigo/Estrutura-do-Iptables?pagina=5 Mirwendel,2008. Acessado em 17/05/2012, diponível em: http://www.onlytutorials.com.br/2008/11/26/iptables-tabela-mangles/ the squid cache group, Acessado em 17/05/2012, diponível em: http://www.squid-cache.org Wagner Assis,2008. Acessado em 17/05/2012, diponível em: http://www.linuxadm.com.br/2008/02/08/otimizando-o-squid-versao-2008/ Simões Aprígio,2009. Acessado em 27/09/2012, diponível em: http://www.aprigiosimoes.com.br/2009/11/19/runlevel-unix-e-linux/