Você está na página 1de 27

Procedimento

Servidor Firewall

Autor: Sandro Venezuela <sandro@linux2business.com.br>

www.linux2business.com.br 1/27

Atribuio Uso no-comercial Compartilhamento pela mesma licena 2.5 Brasil

Voc pode: Copiar, distribuir, exibir e executar a obra.

Sob as seguintes condies: Atribuio: Voc deve dar crdito ao autor original, da forma especificada pelo autor ou licenciante. Uso no-comercial: Voc no pode utilizar esta obra com finalidades comerciais Compartilhamento pela mesma licena: Se voc alterar, transformar ou criar outra obra com base nesta, voc somente poder distribuir a obra resultante sob uma licena idntica a esta.

A reproduo do material contido neste tutorial permitido desde que se incluam os crditos ao autor e a frase: Reproduzido da Linux2Business www.linux2business.com.br em local visvel.

www.linux2business.com.br 2/27

ndice
Verso...................................................................................................................................................4 Objetivo................................................................................................................................................5 CentOS.................................................................................................................................................6 Instalao.........................................................................................................................................6 Configurao....................................................................................................................................6 Servios desnecessrios..............................................................................................................6 Desabilitar Ctrl-Alt-Del..............................................................................................................7 Desabilitar Terminais..................................................................................................................7 Desabilitar Acesso Local para Usurio root...............................................................................7 Desabilitar Acesso SSH para Usurio root.................................................................................8 SNMP..........................................................................................................................................8 SUDO..........................................................................................................................................8 DNS (Master / Slave).........................................................................................................................10 DHCP.................................................................................................................................................18 Proxy...................................................................................................................................................19 Firewall (Iptables)..............................................................................................................................21 Sincronizao de data e hora (NTP)...................................................................................................26 Referncias.........................................................................................................................................27

www.linux2business.com.br 3/27

Verso
Criado/Alterado Sandro Venezuela Sandro Venezuela Sandro Venezuela Sandro Venezuela Sandro Venezuela Data 28/07/10 24/08/10 09/09/10 18/10/10 23/11/10 Verso V1.0 V 1.1 V 1.2 V 1.3 V 1.4

www.linux2business.com.br 4/27

Objetivo
Apresentar os procedimentos de instalao e configurao de um servidor Firewall contendo alm das regras de Firewall, os servios de Proxy, DHCP, DNS Mestre e Escravo, e NTP, utilizando o sistema operacional GNU/Linux, distribuio CentOS 5. As configuraes foram realizadas tomando como referncia o uso de duas redes, sendo uma a rede das estaes e a outra a dos servidores (DMZ), alm claro a rede da Internet. Sero apresentadas tambm as configuraes realizadas no momento da instalao do sistema operacional.

www.linux2business.com.br 5/27

CentOS
Instalao
Iniciar o servidor atravs da unidade de CD/DVD com a mdia do CentOS 5. A instalao deve ocorrer sempre no idioma English. Na configurao do fuso horrio deve-se marcar sempre a opo UTC para definio da data e hora. O particionamento do disco deve obedecer a seguinte configurao: Partio
/dev/sda1 /dev/sda2 /dev/sda3 /dev/sda5(LVM) /home /tmp /var 1GB 1GB >10GB

Ponto de Montagem
/ /usr swap

Tamanho
1GB 4GB 1GB

Normalmente a instalao de um servidor firewall realizada com a quantidade mnima de pacotes, onde para realizar tal configurao no CentOS necessrio selecionar a opo Customize Now e desmarcar todos os grupos de pacotes. Obs.: Somente possvel realizar a instalao mnima atravs da instalao grfica. Deve ser criado o usurio sysadmin, para administrao do servidor e com isto evitar o uso do usurio root. Aps a instalao, caso sejam necessrios alguns pacotes extras, como nmap, tcpdump, crontabs, etc, estes devem ser instalados atravs do comando YUM.

Configurao
Servios desnecessrios
Desabilitando os servios desnecessrios
#chkconfighaldaemonoff #chkconfigkudzuoff #chkconfigiptablesoff #chkconfigip6tablesoff #chkconfigmcstransoff #chkconfigmessagebusoff #chkconfignetfsoff #chkconfigrestorecondoff

Obs.: Os servios iptables e ip6tables somente esto sendo desabilitados porque sero configuradas novas regras de firewall, seno recomenda-se que estes servios 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 alterao, 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, acessveis localmente atravs das teclas Alt+F1 e Alt+F2. Se for necessrio mais terminais, basta habilitar, descomentando o terminal correspondente. Para habilitar a alterao, execute o comando:
# init q

Desabilitar Acesso Local para Usurio root


Por padro, no deve ser permitido o acesso local para o usurio 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 aps a criao de pelo menos um usurio, normalmente criado no momento da instalao.

www.linux2business.com.br 7/27

Desabilitar Acesso SSH para Usurio root


Por padro, no deve ser permitido o acesso via SSH para o usurio root. Para bloquear este acesso necessrio incluir ou alterar as seguintes linhas no arquivo /etc/ssh/sshd_config, conforme apresentado abaixo:
PermitRootLogin no AllowUsers sysadmin

Para que as alteraes sejam ativadas preciso reiniciar o servio SSH:


# service sshd restart

Obs.: Este procedimento SOMENTE deve ser realizado aps a criao de pelo menos um usurio, normalmente criado no momento da instalao.

SNMP
Para o servio de monitoramento do servidor, devemos instalar o pacote net-snmp atravs do YUM. Em seguida, deve-se criar o arquivo snmpd.conf, no diretrio /etc/snmp, com o seguinte contedo:
com2sec local com2sec local 127.0.0.1/32 192.168.0.39/32 local local local .1 any noauth exact all 80 none none private linux2business

group MyROGroup v1 group MyROGroup v2c group MyROGroup usm view all included

access MyROGroup ""

syslocation Linux2Business syscontact System Admin <sysadmin@linux2business.com.br>

Obs.: O endereo IP 192.168.0.39 deve ser substitudo pelo endereo do seu servidor de monitoramento via SNMP. Por fim, devemos iniciar o servio SNMP:
# service snmpd start

E habilitar para que o servio seja sempre iniciado junto com o sistema operacional:
# chkconfig snmpd on

SUDO
Para esta funcionalidade, deve-se instalar o pacote sudo atravs do YUM. Com o comando visudo, que altera o arquivo /etc/sudoers, devemos adicionar os seguintes parmetros para o usurio 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 configurao especfica do sudo a ser realizada. Com a configurao acima o usurio sysadmin ter o poder de alterar a senha do usurio administrator, reiniciar e desligar o servidor. Outros comandos podem ser configurados, porm devem estar de acordo com a poltica 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

Atravs

arquivos de exemplo, disponveis no diretrio /usr/share/doc/bind<verso>/sample, ser configurado um servidor de nomes (DNS) utilizado tanto para a rede interna quanto externa e posteriormente configurado um novo servidor secundrio (Slave). Como o servidor ser executado em um ambiente restrito, ou seja, uma jaula chroot, toda configurao ser criada dentro dos diretrios /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 version "/var/named"; "data/cache_dump.db"; "data/named_stats.txt"; "data/named_mem_stats.txt"; "BIND";

dos

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 parmetros importantes e que merecem uma informao a mais so:


listen-on

Configura em quais interfaces de rede e porta o servio DNS ficar funcionando; Especifica os endereos IP dos servidores DNS que esto autorizados a receber as informaes das zonas. Normalmente so os servidores DNS Escravos; Especifica os endereos IP que possuem permisso para utilizar o servio DNS; Especifica os endereos IP que podem atualizar as informaes das zonas. Normalmente utilizado em DNS Dinmicos; Determina a possibilidade ou no de realizar consultas recursivas, ou seja, de outros domnios. Normalmente esta opo habilitada somente internamente.

allow_transfer

allow_query

allow_update

recursion

Com os arquivos de configurao do DNS criados, vamos agora criar os arquivos de zona para os domnios, tanto para a rede interna quanto externa. Os arquivos esto 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 NS MX 10 linux2business.br. fw ns1 web mail ns2 base proxy ntp www webmail ldap ldap2 smtp A A A A A A A A CNAME CNAME CNAME CNAME CNAME CNAME ns1.linux2business.br. ns2.linux2business.br. mail.linux2business.br. 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) NS NS MX 10 linux2business.org.br. fw ns1 www mail ns2 base ntp webmail ldap ldap2 A A A A A A A CNAME CNAME CNAME CNAME ns1.linux2business.org.br. ns2.linux2business.org.br. mail.linux2business.org.br. 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) NS NS MX 10 linux2business.br. fw ns1 www mail ns2 base webmail ldap ldap2 A A A A A A A CNAME CNAME CNAME ns1.linux2business.br. ns2.linux2business.br. mail.linux2business.br. 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 ) NS NS MX 10 linux2business.org.br. fw ns1 www mail ns2 base webmail ldap ldap2 A A A A A A A CNAME CNAME CNAME

; expire (seconds) ; minimum (seconds) ns1.linux2business.org.br. ns2.linux2business.org.br. mail.linux2business.org.br. 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 simblicos para os arquivos criados dentro do ambiente chroot, seno alguns comandos de verificao do DNS, como named-checkconf e named-checkzone, no iro 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 servio para que seja iniciado junto com o sistema operacional:
# chkconfig named on

Os procedimentos de instalao e configurao do DNS Escravo (Slave) so praticamente os mesmos utilizados para configurar o DNS Mestre (Master), sendo necessrio 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 version

"data/named_mem_stats.txt"; "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 simblico para o arquivo /var/named/chroot/etc/named.conf. Os arquivos /etc/named.root.hints e /etc/named.rfc1912.zones so idnticos ao utilizado no servidor DNS primrio.

www.linux2business.com.br 17/27

DHCP
Instalar o pacote dhcp, atravs do YUM:
# yum install dhcp

Para configurar o servio 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 option option option option domain-name domain-name-servers ntp-servers time-offset 255.255.255.0; 172.16.0.255; 172.16.0.1; "linux2business.br"; 172.16.0.1; 172.16.0.1; -10800; # Brazil East

range dynamic-bootp 172.16.0.50 172.16.0.100; }

www.linux2business.com.br 18/27

Proxy
Instalar o pacote squid, atravs 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 vlidas, ou seja que no so comentrios e tambm no so linhas em branco, deve-se utilizar o comando grep ^[^#$] /etc/squid/squid.conf. A configurao acima bem simples, liberando o acesso a qualquer estao que tenha um endereo IP dentro da rede 172.16.0.0/24. Qualquer regra de bloqueio que for adicionada a configurao 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, necessrio adicionar uma ACL com o parmetro Safe_ports com a porta necessria, por exemplo, acl Safe_ports port 81. Por fim, uma breve explicao sobre os parmetros cache_mem e cache_dir, onde o primeiro deve ser configurado com aproximadamente 25% da memria RAM total do servidor, porm comum encontrar na Internet pessoas indicando valores de at 75% da memria RAM. No parmetro cache_dir, o tamanho do cache (terceiro valor, logo aps a definio do diretrio) depende do tamanho disponvel na partio /var, lembrando que cada 1GB de tamanho representa um consumo de 10MB da memria RAM. Um detalhe importante, a configurao do Squid apresentada acima no 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, porm se for necessrio, este pacote pode ser instalado via YUM, atravs do comando abaixo:
# yum install iptables

Para configurar as regras de firewall deve-se criar o script firewall no diretrio /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 servios existentes na rede e tambm as necessidades de cada estrutura de servidores. Normalmente prefiro criar regras bem explcitas, indicando quais servidores ou redes tem acesso determinados servios. Uma vez criado o script, deve-se configurar as permisses corretas e habilit-lo para iniciar com o sistema operacional:
# chmod a+x /etc/init.d/firewall # chkconfig firewall on

Uma outra opo para configurar as regras do Firewall utilizar o Shorewall (http://www.shorewall.net), que facilita muito a configurao, principalmente quando a estrutura complexa e grande.

www.linux2business.com.br 25/27

Sincronizao de data e hora (NTP)


Instalar o pacote ntp, atravs do comando YUM:
# yum install ntp

Para configurar o servio 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 configurao 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 estaes de trabalho da rede local. Um detalhe importante na sincronizao da data e hora o horrio de vero, onde para funcionar corretamente, todas as estaes de trabalho precisam ter atualizado o arquivo de timezone, que determina o dia correto do incio e trmino do horrio de vero. Nas estaes com o sistema GNU/Linux, este arquivo /etc/localtime, que pode ser um link simblico para o arquivo /usr/share/zoneinfo/Brazil/East, ou uma cpia deste arquivo.

www.linux2business.com.br 26/27

Referncias

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) - Verso 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 - Captulo 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

Você também pode gostar