Instalação e configuração de um servidor Firewall

Transcrição

Instalação e configuração de um servidor Firewall
Procedimento
Servidor Firewall
Autor: Sandro Venezuela <[email protected]>
www.linux2business.com.br
1/27
Atribuição – Uso não-comercial – Compartilhamento pela mesma licença 2.5 Brasil
Você pode:
Copiar, distribuir, exibir e executar a obra.
Sob as seguintes condições:
Atribuição: Você deve dar crédito ao autor original, da forma
especificada pelo autor ou licenciante.
Uso não-comercial: Você não pode utilizar esta obra com finalidades
comerciais
Compartilhamento pela mesma licença: Se você alterar, transformar ou
criar outra obra com base nesta, você somente poderá distribuir a obra
resultante sob uma licença idêntica a esta.
A reprodução do material contido neste tutorial é permitido desde que se incluam os créditos ao
autor e a frase: “Reproduzido da Linux2Business — www.linux2business.com.br” em local
visível.
www.linux2business.com.br
2/27
Índice
Versão...................................................................................................................................................4
Objetivo................................................................................................................................................5
CentOS.................................................................................................................................................6
Instalação.........................................................................................................................................6
Configuração....................................................................................................................................6
Serviços desnecessários..............................................................................................................6
Desabilitar Ctrl-Alt-Del..............................................................................................................7
Desabilitar Terminais..................................................................................................................7
Desabilitar Acesso Local para Usuário root...............................................................................7
Desabilitar Acesso SSH para Usuário root.................................................................................8
SNMP..........................................................................................................................................8
SUDO..........................................................................................................................................8
DNS (Master / Slave).........................................................................................................................10
DHCP.................................................................................................................................................18
Proxy...................................................................................................................................................19
Firewall (Iptables)..............................................................................................................................21
Sincronização de data e hora (NTP)...................................................................................................26
Referências.........................................................................................................................................27
www.linux2business.com.br
3/27
Versão
Criado/Alterado
Data
Versão
Sandro Venezuela
28/07/10
V1.0
Sandro Venezuela
24/08/10
V 1.1
Sandro Venezuela
09/09/10
V 1.2
Sandro Venezuela
18/10/10
V 1.3
Sandro Venezuela
23/11/10
V 1.4
www.linux2business.com.br
4/27
Objetivo
Apresentar os procedimentos de instalação e configuração de um servidor Firewall contendo além
das regras de Firewall, os serviços de Proxy, DHCP, DNS Mestre e Escravo, e NTP, utilizando o
sistema operacional GNU/Linux, distribuição CentOS 5.
As configurações foram realizadas tomando como referência o uso de duas redes, sendo uma a rede
das estações e a outra a dos servidores (DMZ), além é claro a rede da Internet.
Serão apresentadas também as configurações realizadas no momento da instalação do sistema
operacional.
www.linux2business.com.br
5/27
CentOS
Instalação
Iniciar o servidor através da unidade de CD/DVD com a mídia do CentOS 5. A instalação deve
ocorrer sempre no idioma English.
Na configuração do fuso horário deve-se marcar sempre a opção UTC para definição da data e hora.
O particionamento do disco deve obedecer a seguinte configuração:
Partição
Ponto de Montagem
Tamanho
/dev/sda1
/
1 GB
/dev/sda2
/usr
4 GB
/dev/sda3
swap
1 GB
/home
/tmp
/var
1 GB
1 GB
>10 GB
/dev/sda5 (LVM)
Normalmente a instalação de um servidor firewall é realizada com a quantidade mínima de pacotes,
onde para realizar tal configuração no CentOS é necessário selecionar a opção Customize Now e
desmarcar todos os grupos de pacotes.
Obs.: Somente é possível realizar a instalação mínima através da instalação gráfica.
Deve ser criado o usuário sysadmin, para administração do servidor e com isto evitar o uso do
usuário root.
Após a instalação, caso sejam necessários alguns pacotes extras, como nmap, tcpdump, crontabs,
etc, estes devem ser instalados através do comando YUM.
Configuração
Serviços desnecessários
Desabilitando os serviços desnecessários
# chkconfig haldaemon off
# chkconfig kudzu off
# chkconfig iptables off
# chkconfig ip6tables off
# chkconfig mcstrans off
# chkconfig messagebus off
# chkconfig netfs off
# chkconfig restorecond off
Obs.: Os serviços iptables e ip6tables somente estão sendo desabilitados porque serão
configuradas novas regras de firewall, senão recomenda-se que estes serviços sejam mantidos.
www.linux2business.com.br
6/27
Desabilitar Ctrl-Alt-Del
Editar o arquivo /etc/inittab, comentando a seguinte linha:
# what to do when CTRL-ALT-DEL is pressed
# ca::ctrlaltdel:/sbin/shutdown -r -t 4 now
Para habilitar a alteração, execute o comando:
# init q
Desabilitar Terminais
Editar o arquivo /etc/inittab, comentando a seguinte linha, em negrito:
...
# for ARGO UPS
sh:12345:powerfail:/sbin/shutdown -h now THE POWER IS FAILING
# getty-programs for the normal runlevels
# <id>:<runlevels>:<action>:<process>
# The "id" field MUST be the same as the last
# characters of the device (after "tty").
1:2345:respawn:/sbin/mingetty --noclear tty1
2:2345:respawn:/sbin/mingetty tty2
# 3:2345:respawn:/sbin/mingetty tty3
# 4:2345:respawn:/sbin/mingetty tty4
# 5:2345:respawn:/sbin/mingetty tty5
# 6:2345:respawn:/sbin/mingetty tty6
#
#S0:12345:respawn:/sbin/agetty -L 9600 ttyS0 vt102
#cons:12345:respawn:/sbin/smart_agetty -L 38400 console
...
Normalmente devem ser permitidos somentes 2 terminais, acessíveis localmente através das teclas
Alt+F1 e Alt+F2. Se for necessário mais terminais, basta habilitar, descomentando o terminal
correspondente.
Para habilitar a alteração, execute o comando:
# init q
Desabilitar Acesso Local para Usuário root
Por padrão, não deve ser permitido o acesso local para o usuário root. Para bloquear este acesso,
remova todas as linhas do arquivo /etc/securetty, conforme apresentado abaixo:
# cp -p /etc/securetty /etc/securetty.default
# cat /dev/null > /etc/securetty
Obs.: Este procedimento SOMENTE deve ser realizado após a criação de pelo menos um usuário,
normalmente criado no momento da instalação.
www.linux2business.com.br
7/27
Desabilitar Acesso SSH para Usuário root
Por padrão, não deve ser permitido o acesso via SSH para o usuário root. Para bloquear este acesso
é necessário incluir ou alterar as seguintes linhas no arquivo /etc/ssh/sshd_config, conforme
apresentado abaixo:
PermitRootLogin no
AllowUsers sysadmin
Para que as alterações sejam ativadas é preciso reiniciar o serviço SSH:
# service sshd restart
Obs.: Este procedimento SOMENTE deve ser realizado após a criação de pelo menos um usuário,
normalmente criado no momento da instalação.
SNMP
Para o serviço de monitoramento do servidor, devemos instalar o pacote net-snmp através do
YUM. Em seguida, deve-se criar o arquivo snmpd.conf, no diretório /etc/snmp, com o seguinte
conteúdo:
com2sec local
com2sec local
127.0.0.1/32
192.168.0.39/32
group MyROGroup v1
group MyROGroup v2c
group MyROGroup usm
view all
included
access MyROGroup ""
private
linux2business
local
local
local
.1
80
any
noauth
exact
all
none
none
syslocation Linux2Business
syscontact System Admin <[email protected]>
Obs.: O endereço IP 192.168.0.39 deve ser substituído pelo endereço do seu servidor de
monitoramento via SNMP.
Por fim, devemos iniciar o serviço SNMP:
# service snmpd start
E habilitar para que o serviço seja sempre iniciado junto com o sistema operacional:
# chkconfig snmpd on
SUDO
Para esta funcionalidade, deve-se instalar o pacote sudo através do YUM.
Com o comando visudo, que altera o arquivo /etc/sudoers, devemos adicionar os seguintes
parâmetros para o usuário sysadmin:
www.linux2business.com.br
8/27
# visudo
(Incluir ao final do arquivo)
# SysAdmin User
sysadmin ALL = NOPASSWD: /usr/bin/passwd administrator, /sbin/reboot, /sbin/halt
Obs.: Para cada servidor existirá uma configuração específica do sudo a ser realizada.
Com a configuração acima o usuário sysadmin terá o “poder” de alterar a senha do usuário
administrator, reiniciar e desligar o servidor.
Outros comandos podem ser configurados, porém devem estar de acordo com a política de TI da
empresa.
www.linux2business.com.br
9/27
DNS (Master / Slave)
Instalar os pacotes bind e bind-chroot utilizando o YUM:
# yum install bind bind-chroot
Através
dos
arquivos de exemplo, disponíveis no diretório /usr/share/doc/bind<versão>/sample, será configurado um servidor de nomes (DNS) utilizado tanto para a rede
interna quanto externa e posteriormente configurado um novo servidor secundário (Slave).
Como o servidor será executado em um ambiente restrito, ou seja, uma jaula chroot, toda
configuração
será
criada
dentro
dos
diretórios
/var/named/chroot/etc
e
/var/named/chroot/var/named, conforme abaixo:
Arquivo /var/named/chroot/etc/named.conf:
options
{
directory
dump-file
statistics-file
memstatistics-file
"/var/named";
"data/cache_dump.db";
"data/named_stats.txt";
"data/named_mem_stats.txt";
version
"BIND";
listen-on port 53 { any; };
notify yes;
};
logging
{
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
view "localhost"
{
match-clients
match-destinations
{ 127.0.0.1; };
{ 127.0.0.1; };
allow-transfer { 192.168.100.20; };
allow-query { 127.0.0.1; };
recursion yes;
include "/etc/named.root.hints";
include "/etc/named.rfc1912.zones";
zone "linux2business.br" {
type master;
file "internal.linux2business.br.db";
allow-update { none; };
};
zone "linux2business.org.br" {
www.linux2business.com.br
10/27
type master;
file "internal.linux2business.org.br.db";
allow-update { none; };
};
};
view "internal"
{
match-clients
match-destinations
{ 172.16.0.0/24; 192.168.100.0/24; };
{ 172.16.0.0/24; 192.168.100.0/24; };
allow-transfer { 192.168.100.20; };
allow-query { 172.16.0.0/24; 192.168.100.0/24; };
recursion yes;
include "/etc/named.root.hints";
zone "linux2business.br" {
type master;
file "internal.linux2business.br.db";
allow-update { none; };
};
zone "linux2business.org.br" {
type master;
file "internal.linux2business.org.br.db";
allow-update { none; };
};
};
view
{
"external"
match-clients
match-destinations
{ any; };
{ any; };
allow-transfer { 192.168.100.20; };
allow-query { any; };
recursion no;
include "/etc/named.root.hints";
zone "linux2business.br" {
type master;
file "external.linxux2business.br.db";
allow-update { none; };
};
zone "linux2business.org.br" {
type master;
file "external.linxux2business.org.br.db";
allow-update { none; };
};
};
key ddns_key
{
algorithm hmac-md5;
www.linux2business.com.br
11/27
// Use /usr/sbin/dns-keygen to generate TSIG keys
secret "9FDDwPimOMnhsfNtmjaxQvNSSdrBIHwg6gjxxRxZMvKP8wHRRPDzyiZaW76s";
};
Arquivo /var/named/chroot/etc/named.rfc1912.zones:
// named.rfc1912.zones:
//
// ISC BIND named zone configuration for zones recommended by
// RFC 1912 section 4.1 : localhost TLDs and address zones
//
zone "localdomain" IN {
type master;
file "localdomain.zone";
allow-update { none; };
};
zone "localhost" IN {
type master;
file "localhost.zone";
allow-update { none; };
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local";
allow-update { none; };
};
zone
IN {
"0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa"
type master;
file "named.ip6.local";
allow-update { none; };
};
zone "255.in-addr.arpa" IN {
type master;
file "named.broadcast";
allow-update { none; };
};
zone "0.in-addr.arpa" IN {
type master;
file "named.zero";
allow-update { none; };
};
Arquivo /var/named/chroot/etc/named.root.hints:
//
//
The 'named.root' root cache hints zone for the bind DNS 'named'
nameserver.
//
//
named's cache must be primed with the addresses of the root zone '.'
nameservers.
//
The root zone file can be obtained by querying the root 'A' nameserver:
//
$ dig . ns @198.41.0.4 > named.root
//
Or by download via FTP / HTTP:
//
$ wget ftp://ftp.rs.internic.net/domain/named.root
www.linux2business.com.br
12/27
//
//
Every view that is to provide recursive service must include this zone.
//
zone "." IN {
type hint;
file "named.root";
};
Alguns parâmetros importantes e que merecem uma informação a mais são:
listen-on
–
Configura em quais interfaces de rede e porta o serviço DNS
ficará funcionando;
allow_transfer
–
Especifica os endereços IP dos servidores DNS que estão
autorizados a receber as informações das zonas. Normalmente
são os servidores DNS Escravos;
allow_query
–
Especifica os endereços IP que possuem permissão para
utilizar o serviço DNS;
allow_update
–
Especifica os endereços IP que podem atualizar as informações
das zonas. Normalmente utilizado em DNS Dinâmicos;
recursion
–
Determina a possibilidade ou não de realizar consultas
recursivas, ou seja, de outros domínios. Normalmente esta
opção é habilitada somente internamente.
Com os arquivos de configuração do DNS criados, vamos agora criar os arquivos de zona para os
domínios, tanto para a rede interna quanto externa. Os arquivos estão apresentados abaixo:
Arquivo /var/named/chroot/var/named/internal.linux2business.br.db:
$TTL 86400
@ IN SOA fw.linux2business.br. root.fw.linux2business.br. (
2008080105
; serial
28800
; refresh (seconds)
7200
; retry (seconds)
604800
; expire (seconds)
86400 )
; minimum (seconds)
linux2business.br.
fw
ns1
web
mail
ns2
base
proxy
ntp
www
webmail
ldap
ldap2
smtp
NS
NS
MX 10
ns1.linux2business.br.
ns2.linux2business.br.
mail.linux2business.br.
A
A
A
A
A
A
A
A
CNAME
CNAME
CNAME
CNAME
CNAME
CNAME
192.168.100.10
192.168.100.1
192.168.100.1
192.168.100.10
192.168.100.20
192.168.100.20
192.168.100.30
172.16.0.1
fw
web
web
base
mail
mail
www.linux2business.com.br
13/27
imap
CNAME
mail
Arquivo /var/named/chroot/var/named/internal.linux2business.org.br.db:
$TTL 86400
@ IN SOA fw.linux2business.org.br. root.fw.linux2business.org.br. (
2008080102
; serial
28800
; refresh (seconds)
7200
; retry (seconds)
604800
; expire (seconds)
86400 )
; minimum (seconds)
linux2business.org.br.
fw
ns1
www
mail
ns2
base
ntp
webmail
ldap
ldap2
NS
NS
MX 10
ns1.linux2business.org.br.
ns2.linux2business.org.br.
mail.linux2business.org.br.
A
A
A
A
A
A
A
CNAME
CNAME
CNAME
CNAME
192.168.100.10
192.168.100.1
192.168.100.1
192.168.100.10
192.168.100.20
192.168.100.20
192.168.100.30
fw
www
base
mail
Arquivo /var/named/chroot/var/named/external.linux2business.br.db:
$TTL 86400
@ IN SOA fw.linux2business.br. root.fw.linux2business.br. (
2008080101
; serial
28800
; refresh (seconds)
7200
; retry (seconds)
604800
; expire (seconds)
86400 )
; minimum (seconds)
linux2business.br.
fw
ns1
www
mail
ns2
base
webmail
ldap
ldap2
NS
NS
MX 10
ns1.linux2business.br.
ns2.linux2business.br.
mail.linux2business.br.
A
A
A
A
A
A
A
CNAME
CNAME
CNAME
200.0.0.10
200.0.0.1
200.0.0.1
200.0.0.10
200.0.0.20
200.0.0.20
200.0.0.30
www
base
mail
Arquivo /var/named/chroot/var/named/external.linux2business.org.br.db:
$TTL 86400
@ IN SOA fw.linux2business.org.br. root.fw.linux2business.org.br. (
2008080101
; serial
28800
; refresh (seconds)
7200
; retry (seconds)
www.linux2business.com.br
14/27
604800
86400 )
linux2business.org.br.
fw
ns1
www
mail
ns2
base
webmail
ldap
ldap2
; expire (seconds)
; minimum (seconds)
NS
NS
MX 10
ns1.linux2business.org.br.
ns2.linux2business.org.br.
mail.linux2business.org.br.
A
A
A
A
A
A
A
CNAME
CNAME
CNAME
200.0.0.10
200.0.0.1
200.0.0.1
200.0.0.10
200.0.0.20
200.0.0.20
200.0.0.30
www
base
mail
Vamos criar os links simbólicos para os arquivos criados dentro do ambiente chroot, senão alguns
comandos de verificação do DNS, como named-checkconf e named-checkzone, não irão
funcionar:
#
#
#
#
#
#
>
#
>
#
>
#
>
#
#
#
#
#
#
#
cd /etc
ln -s /var/named/chroot/etc/named.conf named.conf
ln -s /var/named/chroot/etc/named.rfc1912.zones named.rfc1912.zones
ln -s /var/named/chroot/etc/named.root.hints named.root.hints
cd /var/named
ln -s /var/named/chroot/var/named/external.linux2business.br.db \
external.linux2business.br.db
ln -s /var/named/chroot/var/named/external.linux2business.org.br.db
external.linux2business.org.br.db
ln -s /var/named/chroot/var/named/internal.linux2business.br.db \
internal.linux2business.br.db
ln -s /var/named/chroot/var/named/internal.linux2business.org.br.db \
internal.linux2business.org.br.db
ln -s /var/named/chroot/var/named/localdomain.zone localdomain.zone
ln -s /var/named/chroot/var/named/localhost.zone localhost.zone
ln -s /var/named/chroot/var/named/named.broadcast named.broadcast
ln -s /var/named/chroot/var/named/named.ip6.local named.ip6.local
ln -s /var/named/chroot/var/named/named.local named.local
ln -s /var/named/chroot/var/named/named.root named.root
ln -s /var/named/chroot/var/named/named.zero named.zero
Por fim, vamos habilitar o serviço para que seja iniciado junto com o sistema operacional:
# chkconfig named on
Os procedimentos de instalação e configuração do DNS Escravo (Slave) são praticamente os
mesmos utilizados para configurar o DNS Mestre (Master), sendo necessário alterar somente o
arquivo /etc/named.conf:
Arquivo /etc/named.conf:
options
{
directory
dump-file
statistics-file
"/var/named";
"data/cache_dump.db";
"data/named_stats.txt";
www.linux2business.com.br
15/27
memstatistics-file
"data/named_mem_stats.txt";
version
"BIND";
listen-on port 53 { any; };
notify no;
};
logging
{
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
view "localhost"
{
match-clients
match-destinations
{ 127.0.0.1; };
{ 127.0.0.1; };
allow-transfer { none; };
allow-notify { 192.168.100.1; };
allow-query { 127.0.0.1; };
recursion yes;
include "/etc/named.root.hints";
include "/etc/named.rfc1912.zones";
zone "linux2business.br" {
type slave;
file "slaves/internal.linux2business.br.db";
masters { 192.168.100.1; };
};
zone "linux2business.org.br" {
type slave;
file "slaves/internal.linux2business.org.br.db";
masters { 192.168.100.1; };
};
};
view "internal"
{
match-clients
match-destinations
{ 172.16.0.0/24; 192.168.100.0/24; };
{ 172.16.0.0/24; 192.168.100.0/24; };
allow-transfer { none; };
allow-notify { 192.168.100.1; };
allow-query { 172.16.0.0/24; 192.168.100.0/24; };
recursion yes;
include "/etc/named.root.hints";
zone "linux2business.br" {
type slave;
www.linux2business.com.br
16/27
file "slaves/internal.linux2business.br.db";
masters { 192.168.100.1; };
};
zone "linux2business.org.br" {
type slave;
file "slaves/internal.linux2business.org.br.db";
masters { 192.168.100.1; };
};
};
view
{
"external"
match-clients
match-destinations
{ any; };
{ any; };
allow-transfer { none; };
allow-notify { 192.168.100.1; };
allow-query { any; };
recursion no;
include "/etc/named.root.hints";
zone "linux2business.br" {
type slave;
file "slaves/external.linxux2business.br.db";
masters { 192.168.100.1; };
};
zone "linux2business.org.br" {
type slave;
file "slaves/external.linxux2business.org.br.db";
masters { 192.168.100.1; };
};
};
key ddns_key
{
algorithm hmac-md5;
// Use /usr/sbin/dns-keygen to generate TSIG keys
secret "9FDDwPimOMnhsfNtmjaxQvNSSdrBIHwg6gjxxRxZMvKP8wHRRPDzyiZaW76s";
};
Obs.: Lembre-se que o arquivo /etc/named.conf é um link simbólico para o arquivo
/var/named/chroot/etc/named.conf.
Os arquivos /etc/named.root.hints e /etc/named.rfc1912.zones são idênticos ao utilizado no
servidor DNS primário.
www.linux2business.com.br
17/27
DHCP
Instalar o pacote dhcp, através do YUM:
# yum install dhcp
Para configurar o serviço DHCP devemos alterar o arquivo /etc/dhcpd.conf, conforme abaixo:
Arquivo /etc/dhcpd.conf:
ddns-update-style interim;
authoritative;
subnet 172.16.0.0 netmask 255.255.255.0 {
default-lease-time 3600;
max-lease-time 14400;
option subnet-mask
option broadcast-address
option routers
255.255.255.0;
172.16.0.255;
172.16.0.1;
option
option
option
option
"linux2business.br";
172.16.0.1;
172.16.0.1;
-10800; # Brazil East
domain-name
domain-name-servers
ntp-servers
time-offset
range dynamic-bootp 172.16.0.50 172.16.0.100;
}
www.linux2business.com.br
18/27
Proxy
Instalar o pacote squid, através do comando YUM:
# yum install squid
Para configurar o Squid deve-se alterar o arquivo /etc/squid/squid.conf, conforme abaixo:
Arquivo /etc/dhcpd.conf:
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443
acl Safe_ports port 80
# http
acl Safe_ports port 21
# ftp
acl Safe_ports port 443
# https
acl Safe_ports port 70
# gopher
acl Safe_ports port 210
# wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280
# http-mgmt
acl Safe_ports port 488
# gss-http
acl Safe_ports port 591
# filemaker
acl Safe_ports port 777
# multiling http
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
acl internal_net src 172.16.0.0/24
http_access allow internal_net
http_access allow localhost
http_access deny all
icp_access allow all
http_port 172.16.0.1:3128
hierarchy_stoplist cgi-bin ?
cache_mem 64 MB
cache_dir ufs /var/spool/squid 1000 16 256
access_log /var/log/squid/access.log squid
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY
refresh_pattern ^ftp:
1440
20%
10080
refresh_pattern ^gopher:
1440
0%
1440
refresh_pattern .
0
20%
4320
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
error_directory /usr/share/squid/errors/Portuguese
coredump_dir /var/spool/squid
Obs.: Para listar somente as linhas válidas, ou seja que não são comentários e também não são
linhas em branco, deve-se utilizar o comando “grep ^[^#$] /etc/squid/squid.conf”.
A configuração acima é bem simples, liberando o acesso a qualquer estação que tenha um endereço
IP dentro da rede 172.16.0.0/24. Qualquer regra de bloqueio que for adicionada a configuração deve
ser obrigatoriamente inserida antes da linha “http_access allow internal_net”.
Outro detalhe, para liberar sites que funcionam em portas diferentes da porta 80, como por exemplo,
www.linux2business.com.br
19/27
81, 82, etc, é necessário adicionar uma ACL com o parâmetro Safe_ports com a porta necessária,
por exemplo, “acl Safe_ports port 81”.
Por fim, uma breve explicação sobre os parâmetros cache_mem e cache_dir, onde o primeiro deve
ser configurado com aproximadamente 25% da memória RAM total do servidor, porém é comum
encontrar na Internet pessoas indicando valores de até 75% da memória RAM.
No parâmetro cache_dir, o tamanho do cache (terceiro valor, logo após a definição do diretório)
depende do tamanho disponível na partição /var, lembrando que cada 1GB de tamanho representa
um consumo de 10MB da memória RAM.
Um detalhe importante, a configuração do Squid apresentada acima não é para um Proxy
transparente, assim, para funcionar, o navegador deve ser alterado.
www.linux2business.com.br
20/27
Firewall (Iptables)
Normalmente o pacote iptables já vem instalado, porém se for necessário, este pacote pode ser
instalado via YUM, através do comando abaixo:
# yum install iptables
Para configurar as regras de firewall deve-se criar o script firewall no diretório /etc/init.d,
conforme abaixo:
Arquivo /etc/init.d/firewall:
#!/bin/sh
#
# firewall
Start iptables firewall
#
# chkconfig: 2345 08 92
# description: Starts, stops and saves iptables firewall
#
# Source function library.
. /etc/init.d/functions
IPTABLES=iptables
IPV=${IPTABLES%tables} # ip for ipv4 | ip6 for ipv6
PROC_IPTABLES_NAMES=/proc/net/${IPV}_tables_names
VAR_SUBSYS_IPTABLES=/var/lock/subsys/$IPTABLES
if [ ! -x /sbin/$IPTABLES ]; then
echo -n $"/sbin/$IPTABLES does not exist."; warning; echo
exit 0
fi
if lsmod 2>/dev/null | grep -q ipchains ; then
echo -n $"ipchains and $IPTABLES can not be used together."; warning; echo
exit 1
fi
# Default firewall configuration:
IPTABLES_STATUS_NUMERIC="yes"
IPTABLES_STATUS_VERBOSE="no"
IPTABLES_STATUS_LINENUMBERS="yes"
start() {
# Load Modules
modprobe ip_nat_ftp
modprobe ip_conntrack_ftp
# Disable IP Spoofing attack
sysctl -w net.ipv4.conf.all.rp_filter=2 > /dev/null 2>&1
# Enable IP Forward
sysctl -w net.ipv4.ip_forward=1 > /dev/null 2>&1
# Kill Timestamps
sysctl -w net.ipv4.tcp_timestamps=0 > /dev/null 2>&1
# Enable protection Cookie TCP syn
sysctl -w net.ipv4.tcp_syncookies=1 > /dev/null 2>&1
www.linux2business.com.br
21/27
# Disable ICMP broadcast
sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1 > /dev/null 2>&1
# Enable protection to bad error message
sysctl -w net.ipv4.icmp_ignore_bogus_error_responses=1 > /dev/null 2>&1
# It certifys that packages routed in the origin had been discarded
sysctl -w net.ipv4.conf.all.accept_source_route=0 > /dev/null 2>&1
# Change TTL value
sysctl -w net.ipv4.ip_default_ttl=255 > /dev/null 2>&1
# Ratemask to ICMPs: 0 3 4 5 8 11 12
sysctl -w net.ipv4.icmp_ratemask=6457 > /dev/null 2>&1
# Recommended values of datagram TCP thinking about DOS and DRDOS attack
sysctl -w net.ipv4.tcp_fin_timeout=30 > /dev/null 2>&1
sysctl -w net.ipv4.tcp_keepalive_time=1800 > /dev/null 2>&1
sysctl -w net.ipv4.tcp_window_scaling=0 > /dev/null 2>&1
sysctl -w net.ipv4.tcp_sack=0 > /dev/null 2>&1
# Clear the firewall rules
iptables -F
iptables -t nat -F
iptables -X
iptables -t nat -X
# Allow loopback
iptables -A INPUT -j ACCEPT -i lo -d 127.0.0.1
iptables -A OUTPUT -j ACCEPT -o lo -s 127.0.0.1
# Allow ICMP
iptables -A INPUT -j ACCEPT -i eth0 -p icmp
iptables -A OUTPUT -j ACCEPT -o eth0 -p icmp
iptables -A INPUT -j ACCEPT -i eth1 -p icmp
iptables -A OUTPUT -j ACCEPT -o eth1 -p icmp
iptables -A INPUT -j ACCEPT -i eth2 -p icmp
iptables -A OUTPUT -j ACCEPT -o eth2 -p icmp
iptables -A FORWARD -j ACCEPT -i eth0 -o eth1
iptables -A FORWARD -j ACCEPT -i eth1 -o eth0
iptables -A FORWARD -j ACCEPT -i eth0 -o eth2
iptables -A FORWARD -j ACCEPT -i eth2 -o eth0
iptables -A FORWARD -j ACCEPT -i eth1 -o eth2
iptables -A FORWARD -j ACCEPT -i eth2 -o eth1
-p
-p
-p
-p
-p
-p
icmp
icmp
icmp
icmp
icmp
icmp
# Allow Firewall to access the Internet
iptables -A INPUT -j ACCEPT -i eth0 -p tcp -m multiport --sport 80,443
iptables -A OUTPUT -j ACCEPT -o eth0 -p tcp -m multiport --dport 80,443
iptables -A INPUT -j ACCEPT -i eth0 -p udp -m multiport --sport 53,123
iptables -A OUTPUT -j ACCEPT -o eth0 -p udp -m multiport --dport 53,123
# Allow Firewall to access the DMZ
iptables -A INPUT -j ACCEPT -i eth1 -p tcp -m multiport --sport 22
iptables -A OUTPUT -j ACCEPT -o eth1 -p tcp -m multiport --dport 22
# Allow Firewall to access the LAN
iptables -A INPUT -j ACCEPT -i eth2 -p tcp -m multiport --sport 22
www.linux2business.com.br
22/27
iptables -A OUTPUT -j ACCEPT -o eth2 -p tcp -m multiport --dport 22
# Allow Internet to access the Firewall
iptables -A INPUT -j ACCEPT -i eth0 -p tcp -m multiport --dport 22
iptables -A OUTPUT -j ACCEPT -o eth0 -p tcp -m multiport --sport 22
# Allow Internet to access the DMZ
# Allow Internet to access the LAN
# Allow DMZ to access the Firewall
iptables -A INPUT -j ACCEPT -i eth1 -p tcp -m multiport --dport 22,53
iptables -A OUTPUT -j ACCEPT -o eth1 -p tcp -m multiport --sport 22,53
iptables -A INPUT -j ACCEPT -i eth1 -p udp -m multiport --dport 53
iptables -A OUTPUT -j ACCEPT -o eth1 -p udp -m multiport --sport 53
# Allow DMZ to access the Internet
iptables -A FORWARD -j ACCEPT -i eth1 -o eth0 -p tcp -m multiport --dport 80
iptables -A FORWARD -j ACCEPT -i eth0 -o eth1 -p tcp -m multiport --sport 80
# Allow DMZ to access the LAN
# Allow LAN to access the Firewall
iptables -A INPUT -j ACCEPT -i eth2 -p tcp -m multiport --dport 22,53,80,3128
iptables -A OUTPUT -j ACCEPT -o eth2 -p tcp -m multiport --sport 22,53,80,3128
iptables -A INPUT -j ACCEPT -i eth2 -p udp -m multiport --dport 53,67
iptables -A OUTPUT -j ACCEPT -o eth2 -p udp -m multiport --sport 53,67
# Allow LAN to access the Internet
# Allow LAN to access the DMZ
iptables -A FORWARD -j ACCEPT -i eth2 -o eth1 -p tcp -m multiport --dport 25,80,143,389,443
iptables -A FORWARD -j ACCEPT -i eth1 -o eth2 -p tcp -m multiport --sport 25,80,143,389,443
# NAT
iptables -t nat -A POSTROUTING -j MASQUERADE -s 192.168.100.0/24 -o eth0
iptables -t nat -A POSTROUTING -j MASQUERADE -s 172.16.0.0/24 -o eth0
# PREROUTING
iptables -t nat -A PREROUTING -i eth0 -d 200.0.0.10 -p tcp -m multiport
--dport 80,443,8080 -j DNAT --to 192.168.100.10
iptables -A FORWARD -j ACCEPT -i eth0 -o eth1 -d 192.168.100.10 -p tcp -m
multiport --dport 80,443,8080
iptables -A FORWARD -j ACCEPT -i eth1 -o eth0 -s 192.168.100.10 -p tcp -m
multiport --sport 80,443,8080
# Sets policy
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
# Logs
iptables -A INPUT -j LOG --log-level alert --log-prefix “DROP”
iptables -A OUTPUT -j LOG --log-level alert --log-prefix “DROP”
iptables -A FORWARD -j LOG --log-level alert --log-prefix “DROP”
touch $VAR_SUBSYS_IPTABLES
www.linux2business.com.br
23/27
return $ret
}
stop() {
# Clear the firewall rules
iptables -F
iptables -t nat -F
iptables -X
iptables -t nat -X
# Sets policy
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
rm -f $VAR_SUBSYS_IPTABLES
return $ret
}
status() {
tables=`cat $PROC_IPTABLES_NAMES 2>/dev/null`
# Do not print status if lockfile is missing and iptables modules are not
# loaded.
# Check if iptable module is loaded
if [ ! -f "$VAR_SUBSYS_IPTABLES" -a -z "$tables" ]; then
echo $"Firewall is stopped."
return 1
fi
# Check if firewall is configured (has tables)
if [ ! -e "$PROC_IPTABLES_NAMES" ]; then
echo $"Firewall is not configured. "
return 1
fi
if [ -z "$tables" ]; then
echo $"Firewall is not configured. "
return 1
fi
NUM=
[ "x$IPTABLES_STATUS_NUMERIC" = "xyes" ] && NUM="-n"
VERBOSE=
[ "x$IPTABLES_STATUS_VERBOSE" = "xyes" ] && VERBOSE="--verbose"
COUNT=
[ "x$IPTABLES_STATUS_LINENUMBERS" = "xyes" ] && COUNT="--line-numbers"
for table in $tables; do
echo $"Table: $table"
$IPTABLES -t $table --list $NUM $VERBOSE $COUNT && echo
done
return 0
}
restart() {
stop
start
}
www.linux2business.com.br
24/27
case "$1" in
start)
stop
start
RETVAL=$?
;;
stop)
stop
RETVAL=$?
;;
restart)
restart
RETVAL=$?
;;
status)
status
RETVAL=$?
;;
*)
echo $"Usage: $0 {start|stop|restart|status}"
exit 1
;;
esac
exit $RETVAL
Obs.: As regras apresentadas acima devem ser adequadas aos serviços existentes na rede e também
as necessidades de cada estrutura de servidores. Normalmente prefiro criar regras bem explícitas,
indicando quais servidores ou redes tem acesso à determinados serviços.
Uma vez criado o script, deve-se configurar as permissões corretas e habilitá-lo para iniciar com o
sistema operacional:
# chmod a+x /etc/init.d/firewall
# chkconfig firewall on
Uma outra opção para configurar as regras do Firewall é utilizar o Shorewall
(http://www.shorewall.net), que facilita muito a configuração, principalmente quando a estrutura é
complexa e grande.
www.linux2business.com.br
25/27
Sincronização de data e hora (NTP)
Instalar o pacote ntp, através do comando YUM:
# yum install ntp
Para configurar o serviço NTP deve-se alterar o arquivo /etc/ntp.conf, conforme abaixo:
Arquivo /etc/ntp.conf:
# Permit
# permit
restrict
restrict
time synchronization with our time source, but do not
the source to query or modify the service on this system.
default kod nomodify notrap nopeer noquery
-6 default kod nomodify notrap nopeer noquery
# Permit all access over the loopback interface. This could
# be tightened as well, but to do so would effect some of
# the administrative functions.
restrict 127.0.0.1
restrict -6 ::1
# Hosts on local network are less restricted.
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server 0.centos.pool.ntp.org
server 1.centos.pool.ntp.org
server 2.centos.pool.ntp.org
# Undisciplined Local Clock. This is a fake driver intended for backup
# and when no outside source of synchronized time is available.
server 127.127.1.0
# local clock
fudge
127.127.1.0 stratum 10
# Drift file. Put this in a directory which the daemon can write to.
# No symbolic links allowed, either, since the daemon updates the file
# by creating a temporary in the same directory and then rename()'ing
# it to the file.
driftfile /var/lib/ntp/drift
# Key file containing the keys and key identifiers used when operating
# with symmetric key cryptography.
keys /etc/ntp/keys
Obs.: A configuração depende da topologia da rede utilizada. Neste caso será permitido aos
servidores da DMZ sincronizarem a data e hora com o servidor Firewall, assim como as estações de
trabalho da rede local.
Um detalhe importante na sincronização da data e hora é o horário de verão, onde para funcionar
corretamente, todas as estações de trabalho precisam ter atualizado o arquivo de timezone, que
determina o dia correto do início e término do horário de verão.
Nas estações com o sistema GNU/Linux, este arquivo é /etc/localtime, que pode ser um link
simbólico para o arquivo /usr/share/zoneinfo/Brazil/East, ou uma cópia deste arquivo.
www.linux2business.com.br
26/27
Referências
•
DNS for Rocket Scientists
http://www.zytrax.com/books/dns/
•
Ajustando o tamanho do cache no Squid
http://www.vivaolinux.com.br/dica/Ajustando-o-tamanho-do-cache-no-Squid
•
Otimizando seu Squid (Squid Tunning) - Versão 2008
http://linuxadm.blogspot.com/2008/02/otimizando-o-squid-verso-2008.html
•
The netfilter.org project
http://www.netfilter.org/
•
Guia Foca GNU/Linux - Capítulo 10 - Firewall iptables
http://focalinux.cipsga.org.br/guia/avancado/ch-fw-iptables.htm
•
Iptables Tutorial 1.2.2
http://www.frozentux.net/iptables-tutorial/iptables-tutorial.html
www.linux2business.com.br
27/27

Documentos relacionados

exemplo com DNS - eriberto.pro.br

exemplo com DNS - eriberto.pro.br zone "127.in-addr.arpa" { type master; file "named.local";

Leia mais

Segurança de Redes Utilizando Recursos do Sistema

Segurança de Redes Utilizando Recursos do Sistema Em se tratando de tecnologia computacional, criar uma rede é a prática de ligar dois ou mais dispositivos de computação em conjunto com a finalidade de compartilhamento de dados. As redes são const...

Leia mais