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/
Download

curso redes semana acadêmica