Procedimento - linux2business.com.br Firewall.pdf · Sandro Venezuela 24/08/10 V 1.1 Sandro...

27
Procedimento Servidor Firewall Autor: Sandro Venezuela <[email protected]> www.linux2business.com.br 1/27

Transcript of Procedimento - linux2business.com.br Firewall.pdf · Sandro Venezuela 24/08/10 V 1.1 Sandro...

ProcedimentoServidor 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

ÍndiceVersão...................................................................................................................................................4Objetivo................................................................................................................................................5CentOS.................................................................................................................................................6

Instalação.........................................................................................................................................6Configuração....................................................................................................................................6

Serviços desnecessários..............................................................................................................6Desabilitar Ctrl-Alt-Del..............................................................................................................7Desabilitar Terminais..................................................................................................................7Desabilitar Acesso Local para Usuário root...............................................................................7Desabilitar Acesso SSH para Usuário root.................................................................................8SNMP..........................................................................................................................................8SUDO..........................................................................................................................................8

DNS (Master / Slave).........................................................................................................................10DHCP.................................................................................................................................................18Proxy...................................................................................................................................................19Firewall (Iptables)..............................................................................................................................21Sincronização de data e hora (NTP)...................................................................................................26Referê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

ObjetivoApresentar 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

/dev/sda5 (LVM)/home/tmp/var

1 GB1 GB>10 GB

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 UPSsh: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 noAllowUsers 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 127.0.0.1/32 privatecom2sec local 192.168.0.39/32 linux2business

group MyROGroup v1 localgroup MyROGroup v2c localgroup MyROGroup usm local

view all included .1 80

access MyROGroup "" any noauth exact all none none

syslocation Linux2Businesssyscontact 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 Usersysadmin 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 "/var/named"; dump-file "data/cache_dump.db"; statistics-file "data/named_stats.txt"; memstatistics-file "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 { 127.0.0.1; }; match-destinations { 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 { 172.16.0.0/24; 192.168.100.0/24; }; match-destinations { 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 { any; }; match-destinations { 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 "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" IN { 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)

NS ns1.linux2business.br. NS ns2.linux2business.br. MX 10 mail.linux2business.br.

linux2business.br. A 192.168.100.10fw A 192.168.100.1ns1 A 192.168.100.1web A 192.168.100.10mail A 192.168.100.20ns2 A 192.168.100.20base A 192.168.100.30proxy A 172.16.0.1ntp CNAME fwwww CNAME webwebmail CNAME webldap CNAME baseldap2 CNAME mailsmtp CNAME 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)

NS ns1.linux2business.org.br. NS ns2.linux2business.org.br. MX 10 mail.linux2business.org.br.

linux2business.org.br. A 192.168.100.10fw A 192.168.100.1ns1 A 192.168.100.1www A 192.168.100.10mail A 192.168.100.20ns2 A 192.168.100.20base A 192.168.100.30ntp CNAME fwwebmail CNAME wwwldap CNAME baseldap2 CNAME 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)

NS ns1.linux2business.br. NS ns2.linux2business.br. MX 10 mail.linux2business.br.

linux2business.br. A 200.0.0.10fw A 200.0.0.1ns1 A 200.0.0.1www A 200.0.0.10mail A 200.0.0.20ns2 A 200.0.0.20base A 200.0.0.30webmail CNAME wwwldap CNAME baseldap2 CNAME 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 ; expire (seconds) 86400 ) ; minimum (seconds)

NS ns1.linux2business.org.br. NS ns2.linux2business.org.br. MX 10 mail.linux2business.org.br.

linux2business.org.br. A 200.0.0.10fw A 200.0.0.1ns1 A 200.0.0.1www A 200.0.0.10mail A 200.0.0.20ns2 A 200.0.0.20base A 200.0.0.30webmail CNAME wwwldap CNAME baseldap2 CNAME 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 "/var/named"; dump-file "data/cache_dump.db"; statistics-file "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 { 127.0.0.1; }; match-destinations { 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 { 172.16.0.0/24; 192.168.100.0/24; }; match-destinations { 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 { any; }; match-destinations { 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

DHCPInstalar 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 255.255.255.0; option broadcast-address 172.16.0.255; option routers 172.16.0.1;

option domain-name "linux2business.br"; option domain-name-servers 172.16.0.1; option ntp-servers 172.16.0.1; option time-offset -10800; # Brazil East

range dynamic-bootp 172.16.0.50 172.16.0.100;

}

www.linux2business.com.br 18/27

ProxyInstalar 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.0acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255acl to_localhost dst 127.0.0.0/8 acl SSL_ports port 443 acl Safe_ports port 80 # httpacl Safe_ports port 21 # ftpacl Safe_ports port 443 # httpsacl Safe_ports port 70 # gopheracl Safe_ports port 210 # waisacl Safe_ports port 1025-65535 # unregistered portsacl Safe_ports port 280 # http-mgmtacl Safe_ports port 488 # gss-httpacl Safe_ports port 591 # filemakeracl Safe_ports port 777 # multiling httpacl CONNECT method CONNECThttp_access allow manager localhosthttp_access deny managerhttp_access deny !Safe_portshttp_access deny CONNECT !SSL_portsacl internal_net src 172.16.0.0/24http_access allow internal_nethttp_access allow localhosthttp_access deny allicp_access allow allhttp_port 172.16.0.1:3128hierarchy_stoplist cgi-bin ?cache_mem 64 MBcache_dir ufs /var/spool/squid 1000 16 256access_log /var/log/squid/access.log squidacl QUERY urlpath_regex cgi-bin \?cache deny QUERYrefresh_pattern ^ftp: 1440 20% 10080refresh_pattern ^gopher: 1440 0% 1440refresh_pattern . 0 20% 4320acl apache rep_header Server ^Apachebroken_vary_encoding allow apacheerror_directory /usr/share/squid/errors/Portuguesecoredump_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=iptablesIPV=${IPTABLES%tables} # ip for ipv4 | ip6 for ipv6PROC_IPTABLES_NAMES=/proc/net/${IPV}_tables_namesVAR_SUBSYS_IPTABLES=/var/lock/subsys/$IPTABLES

if [ ! -x /sbin/$IPTABLES ]; then echo -n $"/sbin/$IPTABLES does not exist."; warning; echo exit 0fi

if lsmod 2>/dev/null | grep -q ipchains ; then echo -n $"ipchains and $IPTABLES can not be used together."; warning; echo exit 1fi

# 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 -p icmp iptables -A FORWARD -j ACCEPT -i eth1 -o eth0 -p icmp iptables -A FORWARD -j ACCEPT -i eth0 -o eth2 -p icmp iptables -A FORWARD -j ACCEPT -i eth2 -o eth0 -p icmp iptables -A FORWARD -j ACCEPT -i eth1 -o eth2 -p icmp iptables -A FORWARD -j ACCEPT -i eth2 -o eth1 -p 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 time synchronization with our time source, but do not# permit the source to query or modify the service on this system.restrict default kod nomodify notrap nopeer noqueryrestrict -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.orgserver 1.centos.pool.ntp.orgserver 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 clockfudge 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