Procedimento - linux2business.com.br Firewall.pdf · Sandro Venezuela 24/08/10 V 1.1 Sandro...
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