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