Instalação e configuração de servidor DHCP + DNS + Firewall da LAN + Debian Squeeze
- Domínio que vamos utilizar: douglasqsantos.com.br
- Faixa de ip: 192.168.1.0/24
- Ip do Servidor: 192.168.1.35
Prepare o seu sistema com o seguinte script http://wiki.douglasqsantos.com.br/doku.php/confinicialsqueeze_en para que não falte nenhum pacote ou configuração.
Vamos atualizar os repositórios e fazer um upgrade do sistema
aptitude update && aptitude dist-upgrade -y
Agora vamos instalar o bind
aptitude install bind9 dnsutils -y
Agora vamos parar ele para fazer algumas manutenções
/etc/init.d/bind9 stop
Vamos criar os diretorios necessários
mkdir -p /var/lib/named/etc mkdir -p /var/lib/named/dev mkdir -p /var/lib/named/var/log mkdir -p /var/lib/named/var/cache/bind mkdir -p /var/lib/named/var/cache/bind/dynamic mkdir -p /var/lib/named/var/run/bind/run mknod /var/lib/named/dev/null c 1 3 mknod /var/lib/named/dev/random c 1 8 mknod /var/lib/named/dev/zero c 1 8
Vamos acertar as permissões
chmod 666 /var/lib/named/dev/{null,random,zero} chown -R bind:bind /var/lib/named/var/*
Vamos acertar a localização dos diretórios e as permissões
mv /etc/bind /var/lib/named/etc ln -sf /var/lib/named/etc/bind /etc/bind cp /etc/localtime /var/lib/named/etc chown -R bind:bind /var/lib/named/etc/bind chown -R root:bind /var/lib/named/var/cache/bind/dynamic chmod -R 775 /var/lib/named/var/cache/bind/dynamic
Vamos fazer backup do arquivo de configuração
cp -Rfa /etc/default/bind9{,.bkp}
Vamos informar para o bind aonde fica a jaula
vim /etc/default/bind9 RESOLVCONF=yes OPTIONS="-u bind -t /var/lib/named"
Acertando o arquivo que controla a consulta de dns
vim /etc/resolv.conf domain douglasqsantos.com.br nameserver 192.168.1.35
Gerando a chave para o DHCP poder atualizar as zonas de DNS
cd /etc/bind/ dnssec-keygen -r /dev/urandom -a hmac-md5 -b 128 -n USER dhcpupdate
Agora vamos visualizar o conteudo da nossa chave, vamos utilizar ela no arquivo de zonas e no arquivo de configuração do DHCP.
cat /etc/bind/K*.key dhcpupdate. IN KEY 0 3 157 +AxtjQ+EUNBCD2JfPyA/UA==
Vamos acertar algumas opções do bind
vim /etc/bind/named.conf.options #/etc/bind/named.conf.options options { directory "/var/cache/bind"; managed-keys-directory "/var/cache/bind/dynamic"; auth-nxdomain no; listen-on-v6 { any; }; listen-on { 127.0.0.1/32; 192.168.1.0/24; }; allow-query { any; }; recursion no; version "Nao Disponivel"; ### Habilita DNSSEC ### dnssec-enable no; dnssec-validation no; dnssec-lookaside auto; }; #Controles include "/etc/bind/rndc.key"; controls { inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { rndc-key; }; }; #LOGS logging { channel xfer-log { file "/var/log/named.log"; print-category yes; print-severity yes; print-time yes; severity info; }; category xfer-in { xfer-log; }; category xfer-out { xfer-log; }; category notify { xfer-log; }; channel update-debug { file "/var/log/named-update-debug.log"; severity debug 3; print-category yes; print-severity yes; print-time yes; }; channel security-info { file "/var/log/named-auth-info.log"; severity info; print-category yes; print-severity yes; print-time yes; }; category update { update-debug; }; category security { security-info; }; };
Vamos acertar as referências de arquivos para o bind
vim /etc/bind/named.conf include "/etc/bind/named.conf.options"; include "/etc/bind/named.conf.local"; include "/etc/bind/named.conf.internal-zones";
Criando o arquivo que vai conter as zonas internas
vim /etc/bind/named.conf.internal-zones #Definindo quem vão ser os nossos hosts internos, ex: a nossa rede e a maquina local acl "internal_hosts" { 192.168.1.0/24; 127.0.0.1/32; }; #Definição da View interna view "internal" { #Definindo quais clientes vão poder consultar essa view match-clients { internal_hosts; }; #O nossos clientes da view interna vão poder efetuar consultas recursivas recursion yes; #Zonas hint aonde temos as definições dos root masters zone "." { type hint; file "/etc/bind/db.root"; }; #Zonas internas zone "localhost" { type master; file "/etc/bind/db.local"; }; zone "127.in-addr.arpa" { type master; file "/etc/bind/db.127"; }; zone "0.in-addr.arpa" { type master; file "/etc/bind/db.0"; }; zone "255.in-addr.arpa" { type master; file "/etc/bind/db.255"; }; #As consultas para o dominio douglasqsantos.com.br vamos mandar para o servidor ns1 e ns2 zone "douglasqsantos.com.br" { type forward; forwarders { 192.168.1.30; 192.168.1.31; }; }; #Dominios locais zone "douglasqsantos.com.br" { type master; file "db.douglasqsantos.com.br.internal"; allow-transfer { none; }; allow-update { key dhcpupdate; }; }; #Zona reversa do dominio na rede 192.168.1.0/24 zone "1.168.192.in-addr.arpa" { type master; file "db.1.168.192.internal"; allow-transfer { none; }; allow-update { key dhcpupdate; }; }; #Chave para sincronismo entre dhcp e dns que visualizamos com o cat /etc/bind/K*.key key "dhcpupdate" { algorithm hmac-md5; secret "+AxtjQ+EUNBCD2JfPyA/UA=="; }; };
Criando a zona interna do domínio
vim /var/lib/named/var/cache/bind/db.douglasqsantos.com.br.internal $TTL 86400 @ IN SOA dns.douglasqsantos.com.br. root.dns.douglasqsantos.com.br. ( 2013011301 ; Serial 3600 ; Refresh 1800 ; Retry 1209600 ; Expire 3600 ) ; Minimum ; @ IN NS douglasqsantos.com.br. douglasqsantos.com.br. IN TXT "v=spf1 a mx ip4:192.168.1.0/24 -all" mail.douglasqsantos.com.br IN TXT "v=spf1 a -all" @ IN NS ns1.douglasqsantos.com.br. @ IN NS ns2.douglasqsantos.com.br. @ IN MX 0 mail.douglasqsantos.com.br. ;NAME SERVERS @ IN A 192.168.1.35 ns1 IN A 192.168.1.35 ns2 IN A 192.168.1.35 dns IN A 192.168.1.35 ldap IN A 192.168.1.35 ldap2 IN A 192.168.1.35 kdc1 IN A 192.168.1.35 kdc2 IN A 192.168.1.35 ;MAIL SERVERS mail IN A 192.168.1.35 imap IN CNAME mail pop IN CNAME mail smtp IN CNAME mail webmail IN CNAME mail ;WEB SERVERS www IN A 192.168.1.35 ftp IN CNAME www mailadmin IN CNAME www ; Dominio Kerberos _kerberos IN TXT "douglasqsantos.com.br" _kerberos.srv IN TXT "douglasqsantos.com.br" _kerberos._tcp IN SRV 10 1 88 ldap.douglasqsantos.com.br. _kerberos._udp IN SRV 10 1 88 ldap.douglasqsantos.com.br. _kerberos-adm._tcp IN SRV 10 1 749 ldap.douglasqsantos.com.br. _kerberos-master._udp IN SRV 0 0 88 ldap.douglasqsantos.com.br. _kpasswd._udp IN SRV 10 1 464 ldap.douglasqsantos.com.br. _ldap._tcp IN SRV 10 1 389 ldap.douglasqsantos.com.br. ; Busca de Informações de LDAP e Samba _ldap_dc IN TXT "dc=douglasqsantos,dc=com,dc=br" _samba_pdc_domain IN TXT "DOUGLASQSANTOS" _samba_pdc_ip_address IN TXT "192.168.1.35"
Agora vamos criar a zona inversa
vim /var/lib/named/var/cache/bind/db.1.168.192.internal $TTL 86400 @ IN SOA dns.douglasqsantos.com.br. root.dns.douglasqsantos.com.br. ( 2013130101 ; Serial 3600 ; Refresh 1800 ; Retry 604800 ; Expire 3600 ) ; Minimum ; @ IN NS douglasqsantos.com.br. @ IN NS ns1.douglasqsantos.com.br. @ IN NS ns2.douglasqsantos.com.br. @ IN MX 0 mail.douglasqsantos.com.br. ;NAME SERVERS 35 IN PTR douglasqsantos.com.br. 35 IN PTR ns1.douglasqsantos.com.br. 35 IN PTR ns2.douglasqsantos.com.br. 35 IN PTR dns.douglasqsantos.com.br. ;LDAP e Kerberos 35 IN PTR ldap.douglasqsantos.com.br. 35 IN PTR ldap2.douglasqsantos.com.br. 35 IN PTR kdc1.douglasqsantos.com.br. 35 IN PTR kdc2.douglasqsantos.com.br. ;MAIL SERVERS 35 IN PTR mail.douglasqsantos.com.br. ;WEB SERVERS 35 IN PTR www.douglasqsantos.com.br.
Agora vamos reiniciar o nosso bind
/etc/init.d/bind9 restart
Vamos testar uma consulta
nslookup www Server: 192.168.1.35 Address: 192.168.1.35#53 Name: www.douglasqsantos.com.br Address: 192.168.1.35
Vamos testar o reverso
host 192.168.1.35 35.1.168.192.in-addr.arpa domain name pointer dns.douglasqsantos.com.br. 35.1.168.192.in-addr.arpa domain name pointer ns1.douglasqsantos.com.br. 35.1.168.192.in-addr.arpa domain name pointer ns2.douglasqsantos.com.br. 35.1.168.192.in-addr.arpa domain name pointer www.douglasqsantos.com.br. 35.1.168.192.in-addr.arpa domain name pointer kdc1.douglasqsantos.com.br. 35.1.168.192.in-addr.arpa domain name pointer kdc2.douglasqsantos.com.br. 35.1.168.192.in-addr.arpa domain name pointer ldap.douglasqsantos.com.br. 35.1.168.192.in-addr.arpa domain name pointer mail.douglasqsantos.com.br. 35.1.168.192.in-addr.arpa domain name pointer ldap2.douglasqsantos.com.br. 35.1.168.192.in-addr.arpa domain name pointer douglasqsantos.com.br.
Vamos testar o reverso agora pelo dig
dig -x 192.168.1.35 ; <<>> DiG 9.7.3 <<>> -x 192.168.1.35 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62752 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 10, AUTHORITY: 3, ADDITIONAL: 3 ;; QUESTION SECTION: ;35.1.168.192.in-addr.arpa. IN PTR ;; ANSWER SECTION: 35.1.168.192.in-addr.arpa. 86400 IN PTR kdc1.douglasqsantos.com.br. 35.1.168.192.in-addr.arpa. 86400 IN PTR kdc2.douglasqsantos.com.br. 35.1.168.192.in-addr.arpa. 86400 IN PTR ldap.douglasqsantos.com.br. 35.1.168.192.in-addr.arpa. 86400 IN PTR mail.douglasqsantos.com.br. 35.1.168.192.in-addr.arpa. 86400 IN PTR ldap2.douglasqsantos.com.br. 35.1.168.192.in-addr.arpa. 86400 IN PTR dns.douglasqsantos.com.br. 35.1.168.192.in-addr.arpa. 86400 IN PTR douglasqsantos.com.br. 35.1.168.192.in-addr.arpa. 86400 IN PTR ns1.douglasqsantos.com.br. 35.1.168.192.in-addr.arpa. 86400 IN PTR ns2.douglasqsantos.com.br. 35.1.168.192.in-addr.arpa. 86400 IN PTR www.douglasqsantos.com.br. ;; AUTHORITY SECTION: 1.168.192.in-addr.arpa. 86400 IN NS ns1.douglasqsantos.com.br. 1.168.192.in-addr.arpa. 86400 IN NS ns2.douglasqsantos.com.br. 1.168.192.in-addr.arpa. 86400 IN NS douglasqsantos.com.br. ;; ADDITIONAL SECTION: douglasqsantos.com.br. 86400 IN A 192.168.1.35 ns1.douglasqsantos.com.br. 86400 IN A 192.168.1.35 ns2.douglasqsantos.com.br. 86400 IN A 192.168.1.35 ;; Query time: 0 msec ;; SERVER: 192.168.1.35#53(192.168.1.35) ;; WHEN: Sun Jan 13 21:02:43 2013 ;; MSG SIZE rcvd: 325
Instalação e Configuração do DHCP
Agora vamos instalar o servidor DHCP
aptitude install isc-dhcp-server -y
Vai ocorrer um erro a respeito da interface de rede mais isso vamos corrigir mais a frente
Agora vamos fazer o backup do arquivo do dhcpd
cp -Rfa /etc/dhcp/dhcpd.conf{,.bkp}Vamos editar o arquivo de configuração do dhcp server
vim /etc/dhcp/dhcpd.conf #Definindo o dominio option domain-name "douglasqsantos.com.br"; #Definindo os servidores de DNS option domain-name-servers 192.168.1.35, 192.168.1.30; #Definindo o servidor de NetBios(WINS) option netbios-name-servers 192.168.1.35; #Definindo o tipo de netbios option netbios-node-type 8; #Defindo o broadcast da nossa rede option broadcast-address 192.168.1.255; #Defindo que o servidor é autoritativo para a rede authoritative; #Estilo de atualização do servidor DNS, este metodo vai ser o padrão de atualização do dns #ele gera um registro (RR) TXT nos arquivos de zonas do DNS e os atualiza ddns-update-style interim; #Força o servidor dhcp fazer atualizações para os endereços ips estáticos update-static-leases on; #Defindo o tipo de log que vai ser enviado para o syslog log-facility local7; #Defindo a chave de atualização entre o dhcp e o dns a chave que visualizamos com cat /etc/bind/K*.key key dhcpupdate { algorithm hmac-md5; secret +AxtjQ+EUNBCD2JfPyA/UA==; } #defindo a zona que vamos efetuar atualizações zone douglasqsantos.com.br. { primary 127.0.0.1; key dhcpupdate; } #definindo a zona que vamos efetuar atualizações para reverso zone 1.168.192.in-addr.arpa. { primary 127.0.0.1; key dhcpupdate; } #Tempo de emprestimo de um ip default-lease-time 600; #tempo maximo de emprestimo de um ip max-lease-time 7200; #Declaração da sub-net subnet 192.168.1.0 netmask 255.255.255.0 { #Declaração do range de ips disponiveis para emprestimo range 192.168.1.100 192.168.1.200; #Define qual a subrede para este escopo option subnet-mask 255.255.255.0; #define qual o router para esse escopo option routers 192.168.1.35; } #Fim do escopo #Definindo um ip fixo host douglas-xp { hardware ethernet 08:00:27:CE:16:56; fixed-address 192.168.1.21; }
Definir em qual interface o dhcp vai trabalhar
vim /etc/default/isc-dhcp-server [...] INTERFACES="eth0"
Agora vamos fazer um ajuste no rsyslog
echo "local7.debug /var/log/dhcpd.log" >> /etc/rsyslog.conf
Agora vamos reiniciar o rsyslog
/etc/init.d/rsyslog restart
Agora vamos subir o servidor de dhcp
/etc/init.d/isc-dhcp-server restart Stopping ISC DHCP server: dhcpd failed! Starting ISC DHCP server: dhcpd.
Podemos acompanhar o trabalho do dhcp em /var/log/dhcpd.log
tail -f /var/log/dhcpd.log Jan 13 21:14:25 fw-lan dhcpd: Copyright 2004-2010 Internet Systems Consortium. Jan 13 21:14:25 fw-lan dhcpd: All rights reserved. Jan 13 21:14:25 fw-lan dhcpd: For info, please visit https://www.isc.org/software/dhcp/ Jan 13 21:14:25 fw-lan dhcpd: Internet Systems Consortium DHCP Server 4.1.1-P1 Jan 13 21:14:25 fw-lan dhcpd: Copyright 2004-2010 Internet Systems Consortium. Jan 13 21:14:25 fw-lan dhcpd: All rights reserved. Jan 13 21:14:25 fw-lan dhcpd: For info, please visit https://www.isc.org/software/dhcp/ Jan 13 21:14:25 fw-lan dhcpd: Wrote 0 deleted host decls to leases file. Jan 13 21:14:25 fw-lan dhcpd: Wrote 0 new dynamic host decls to leases file. Jan 13 21:14:25 fw-lan dhcpd: Wrote 0 leases to leases file.
Vamos ver um exemplo de maquina que pegou o ip e foi registrada no DNS
tail -f /var/log/dhcpd.log Jan 13 21:15:11 fw-lan dhcpd: DHCPDISCOVER from 08:00:27:ce:16:56 via eth0 Jan 13 21:15:11 fw-lan dhcpd: DHCPOFFER on 192.168.1.21 to 08:00:27:ce:16:56 via eth0 Jan 13 21:15:11 fw-lan dhcpd: Added new forward map from xp.douglasqsantos.com.br to 192.168.1.21 Jan 13 21:15:11 fw-lan dhcpd: added reverse map from 21.1.168.192.in-addr.arpa. to xp.douglasqsantos.com.br Jan 13 21:15:11 fw-lan dhcpd: DHCPREQUEST for 192.168.1.21 (192.168.1.35) from 08:00:27:ce:16:56 via eth0 Jan 13 21:15:11 fw-lan dhcpd: DHCPACK on 192.168.1.21 to 08:00:27:ce:16:56 via eth0
Note que o cliente pegou um ip e foi registrado como xp.douglasqsantos.com.br
Agora vamos testar o dns para ver se esta resolvendo mesmo
nslookup xp.douglasqsantos.com.br Server: 192.168.1.35 Address: 192.168.1.35#53 Name: xp.douglasqsantos.com.br Address: 192.168.1.21
Agora vamos testar o reverso desta maquina
dig -x 192.168.1.21 ; <<>> DiG 9.7.3 <<>> -x 192.168.1.21 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49744 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 3 ;; QUESTION SECTION: ;21.1.168.192.in-addr.arpa. IN PTR ;; ANSWER SECTION: 21.1.168.192.in-addr.arpa. 300 IN PTR xp.douglasqsantos.com.br. ;; AUTHORITY SECTION: 1.168.192.in-addr.arpa. 86400 IN NS ns2.douglasqsantos.com.br. 1.168.192.in-addr.arpa. 86400 IN NS douglasqsantos.com.br. 1.168.192.in-addr.arpa. 86400 IN NS ns1.douglasqsantos.com.br. ;; ADDITIONAL SECTION: douglasqsantos.com.br. 86400 IN A 192.168.1.35 ns1.douglasqsantos.com.br. 86400 IN A 192.168.1.35 ns2.douglasqsantos.com.br. 86400 IN A 192.168.1.35 ;; Query time: 0 msec ;; SERVER: 192.168.1.35#53(192.168.1.35) ;; WHEN: Sun Jan 13 21:16:46 2013 ;; MSG SIZE rcvd: 168
Como pode ser notado temos agora o DHCP trabalhando em conjunto com o DNS
Configuração do Firewall
Aqui vamos precisar habilitar o roteamento de pacotes no servidor
Vamos avisar o kernel que queremos habilitar o roteamento
sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g' /etc/sysctl.conf
Agora vamos habilitar o roteamento manualmente, porém ele vai subir no boot do sistema
sysctl -p
Agora vamos criar um diretório para armazenar os arquivos que vão conter as nossas politicas e os ips liberados
mkdir -p /etc/firewall
Agora vamos criar o arquivo que vai conter os ips que vão ter acesso full a internet
vim /etc/firewall/ips_liberados #ARQUIVO PARA DEFINICAO DOS IPS QUE TERÃO ACESSO FULL NA INTERNET #INSERIR UM IP POR LINHA #IP DA DIRETORIA 192.168.1.21 #IP GERENTE DE VENDAS 192.168.1.160 #IP TI 192.168.1.170
Agora vamos criar o arquivo que vai conter as politicas de ping
vi /etc/firewall/politicas_ping #ARQUIVO DE CONFIGURACAO PARA AS POLITICAS DE PING #INFORMAR UMA POLITICA POR LINHA INPUT FORWARD OUTPUT
Agora vamos criar o arquivo que vai conter as politicas de ataque
vim /etc/firewall/politicas_ataques #ARQUIVO PARA DEFINICAO DAS POLITICAS CONTRA ATAQUES #INSERIR CADA POLITICA EM UMA LINHA INPUT FORWARD OUTPUT
Agora vamos criar o arquivo que vai conter as politicas de DNS
vim /etc/firewall/politicas_dns #ARQUIVO DE CONTROLE DAS POLITICAS PARA DNS #INSIRA UMA CHAIN POR LINHA INPUT FORWARD OUTPUT
Caso tenha mais de uma rede podemos liberar da seguinte forma
vim /etc/firewall/redes #REDE FINANCEIRO 10.100.0.0/24 #REDE CONTABILIDADE 10.101.0.0/24 #REDE VENDAS 10.102.0.0/24
Agora vamos criar o script de Firewall que vai ler as nossas regras
vim /etc/init.d/rc.firewall #!/bin/sh ### BEGIN INIT INFO # Provides: rc.firewall # Required-Start: $network $remote_fs $syslog # Required-Stop: $network $remote_fs $syslog # Should-Start: $named # Should-Stop: $named # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Firewall # Description: Regras de firewall para a rede interna # última atualização 13/01/2013 por Douglas. ### END INIT INFO ### CORES UTILIZADAS NO SCRIPT ### GREY="\033[01;30m" RED="\033[01;31m" GREEN="\033[01;32m" YELLOW="\033[01;33m" BLUE="\033[01;34m" PURPLE="\033[01;35m" CYAN="\033[01;36m" WHITE="\033[01;37m" CLOSE="\033[m" ### Comandos ### IPTABLES=$(which iptables) MODPROBE=$(which modprobe) COM="-m comment --comment" ### PORTAS ### DNS_PORT="53" ### CAMINHO DAS VARIAVEIS DO IPV4 NO KERNEL ### PSNI=/proc/sys/net/ipv4 ### LIMITA OS PINGS ### MAX_TAM="512" MAX_SEG="1" ### CAMINHO DAS REGRAS ### REGRAS=/etc/firewall/ IPS_LIBERADOS=${REGRAS}ips_liberados CHAINS_DNS=${REGRAS}politicas_dns CHAINS_PING=${REGRAS}politicas_ping CHAINS_ATAQUES=${REGRAS}politicas_ataques REDES=${REGRAS}redes ### OPCOES DO KERNEL ### ### HABILITA REPASSE DE PACOTES ### echo 1 > $PSNI/ip_forward # HABILITAR PROTECAO CONTRA SYNFLOOD echo 1 > $PSNI/tcp_syncookies # HABILITAR VERIFICACAO DE ROTA DE ORIGEM (PROTECAO P/ IP SPOOFING) for RP in $PSNI/conf/*/rp_filter ; do echo 1 > $RP ; done # CONTROLE DE ICMP echo 0 > $PSNI/icmp_echo_ignore_all echo 1 > $PSNI/icmp_echo_ignore_broadcasts ### CARREGANDO MODULOS ### ${MODPROBE} ip_conntrack ${MODPROBE} ip_conntrack_ftp ${MODPROBE} ip_nat_ftp ${MODPROBE} ip_conntrack_irc ${MODPROBE} ip_nat_irc ### DEFININDO ALGUNS ENDEREÇOS DE REDE ### LO='127.0.0.0/8' # Endereco de Loopback LAN='192.168.1.0/24' # Rede interna da empresa (IP/Mascara) IF_INT='eth0' # Placa de rede ligada na rede interna case $1 in start) echo "${GREEN}[ Iniciando Firewall ]${CLOSE}" ### APAGANDO REGRAS EXISTENTES ### ${IPTABLES} -t filter -F ${IPTABLES} -t nat -F ${IPTABLES} -t mangle -F ${IPTABLES} -t filter -X ${IPTABLES} -t nat -X ${IPTABLES} -t mangle -X ### DEFININDO POLITICA PADRAO ACCEPT ### ${IPTABLES} -P INPUT ACCEPT ${IPTABLES} -P FORWARD ACCEPT ${IPTABLES} -P OUTPUT ACCEPT ### DEFININDO POLITICA PADRAO DROP ### # ${IPTABLES} -P INPUT DROP # ${IPTABLES} -P FORWARD DROP # ${IPTABLES} -P OUTPUT ACCEPT ### LIBERAR LOOPBACK ### ${IPTABLES} -A INPUT -s ${LO} -j ACCEPT ${COM} "Liberando conexoes da ${LO}" ${IPTABLES} -A OUTPUT -s ${LO} -j ACCEPT ${COM} "Liberando conexoes da ${LO}" ### LIBERAR SSH ### ${IPTABLES} -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT ${COM} "Libera acesso a porta 22" ### LIBERAR CONECTIVIDADE SOCIAL DA CAIXA ECONOMICA ### ${IPTABLES} -A FORWARD -s ${LAN} -d 10.101.0.0/24 -j ACCEPT ${COM} "Libera conectividade social" ${IPTABLES} -t nat -A PREROUTING -s ${LAN} -d 200.201.174.0/24 -j RETURN ${COM} "Libera conectividade social" ${IPTABLES} -t nat -A PREROUTING -p tcp -d 200.201.160.0/24 --dport 2631 -j ACCEPT ${IPTABLES} -A FORWARD -p tcp -d 200.201.160.0/24 --dport 2631 -j ACCEPT ${IPTABLES} -t nat -A PREROUTING -p tcp -d 200.201.160.0/24 --dport 80 -j ACCEPT ${IPTABLES} -A FORWARD -p tcp -d 200.201.160.0/24 --dport 80 -j ACCEPT ${IPTABLES} -t nat -A PREROUTING -p tcp -d 200.201.166.0/24 --dport 80 -j ACCEPT ${IPTABLES} -A FORWARD -p tcp -d 200.201.166.0/24 --dport 80 -j ACCEPT ### LIBERAR RETORNO DE CONEXOES ### ${IPTABLES} -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT ${IPTABLES} -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT ${IPTABLES} -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT ### LIBERAR REDES DESCOMENTE AS LINHAS ABAIXO CASO TENHA MAIS DE UMA REDE QUE DESEJA LIBERAR ### # for END in $(cat ${REDES} | grep -v "^#") # do # ${IPTABLES} -A FORWARD -s ${END} -j ACCEPT ${COM} "LIBERA REDES TI" # ${IPTABLES} -t nat -A POSTROUTING -s ${END} -j MASQUERADE ${COM} "LIBERA REDES TI" # done ### REDIRECT DE PORTA ### ${IPTABLES} -A PREROUTING -t nat -p tcp -m tcp -s ${LAN} --dport 8081 -j REDIRECT --to-port 3128 ${COM} "Redireciona porta 8081 para 3128" ### LIBERAR ALGUNS IPS PARA DIRETORIA, GERENCIA, TI ### for END in $(cat ${IPS_LIBERADOS} | grep -v "^#") do ${IPTABLES} -A FORWARD -m iprange --src-range ${END} -j ACCEPT ${COM} "LIBERA IPS" ${IPTABLES} -t nat -A POSTROUTING -m iprange --src-range ${END} -j MASQUERADE ${COM} "LIBERA IPS" done ### BLOQUEANDO IPS PARA BLOQUEAR IPS PODEMOS INSERIR ELES ABAIXO SEPARADOS POR ESPAÇO ### #BLOQ_IPS="10.0.0.159 10.0.0.10 10.0.0.51 10.0.0.52 10.0.0.54 10.0.0.56 10.0.0.57 10.0.0.58 10.0.0.60" #for BLOQUEIO in ${BLOQ_IPS} #do # ${IPTABLES} -I INPUT -s ${BLOQUEIO} -j DROP ${COM} "Bloqueio de maquinas especificas" #done ### CASO QUEIRA LIBERAR ALGUMAS ESTAÇOES PODEMOS LIBERAR ELAS ABAIXO SEPARANDO POR ESPAÇO ### # Define os IPs das máquinas que serão liberadas (separadas por espaco) # |Nerso | Xerox |Xerox |Xerox |Jose |Monitor Erp #HOST_IPS="10.0.0.9 10.0.0.150 10.0.0.152 10.0.0.153 10.0.0.101 10.0.1.205 10.0.0.239 10.0.1.167" # #for HOSTIPS in $TI_IPS $HOST_IPS #do # ${IPTABLES} -A FORWARD -s $HOSTIPS -j ACCEPT ${COM} "Libera maquinas especiais" # ${IPTABLES} -A PREROUTING -t nat -s $HOSTIPS -j RETURN ${COM} "Libera maquinas especiais" #done ### BLOQUEAR ALGUMAS PORTAS ### ### DEFINE ALGUMAS PORTAS QUE SERÃO BLOQUEADAS (SEPARADAS POR ESPACO) ### #PORT_BLOQ="3128 8080 8081 80 443" # #for PORTBLOQ in $PORT_BLOQ #do #${IPTABLES} -A FORWARD -p tcp -m tcp --dport $PORTBLOQ -j DROP ${COM} "Bloqueia a porta ${PORTBLOQ}" #done ### LIBERAR CAMERAS DE MONITORAMENTO PODEMOS DESCOMENTAR AS LINHAS ABAIXO### #CAP_IP1="192.168.1.220" #CAM_PORTS1="4077,8080" #${IPTABLES} -A FORWARD -p tcp -m multiport --dports ${CAM_PORTS1} -d ${CAP_IP1} -j ACCEPT ${COM} "Libera camera de monitoramento 01" #${IPTABLES} -A PREROUTING -t nat -i ${IF_EXT} -p tcp -m multiport --dports ${CAM_PORTS1} -j DNAT --to ${CAP_IP1} ${COM} "Libera camera de monitoramento 01" ### BLOQUEAR ALGUMAS PORTAS USE AS REGRAS ABAIXO CASO UTILIZE PROXY ### ### DEFINE ALGUMAS PORTAS QUE SERÃO BLOQUEADAS (SEPARADAS POR ESPACO) ### #PORT_BLOQ="3128 8080 8081 80 443" # #for PORTBLOQ in $PORT_BLOQ #do # ${IPTABLES} -A FORWARD -p tcp -m tcp --dport $PORTBLOQ -j DROP ${COM} "Bloqueia a porta ${PORTBLOQ}" #done ### LIBERAR ACESSOS AO PROGRAMA RAIS CASO UTILIZE DESCOMENTE AS LINHAS ABAIXO ### #${IPTABLES} -A FORWARD -p tcp -m tcp -d 161.148.185.46/32 --dport 3007 -j ACCEPT #${IPTABLES} -t nat -A PREROUTING -i eth0 -p tcp -m tcp -d 161.148.185.46/32 --dport 3007 -j RETURN #${IPTABLES} -t nat -A POSTROUTING -o eth0 -p tcp -m tcp -d 161.148.185.46/32 --dport 3007 -j MASQUERADE ### LIBERAR ACESSO DA REDE LOCAL PARA O SERVIDOR ### ${IPTABLES} -A INPUT -s ${LAN} -j ACCEPT ${COM} "Libera rede ${LAN}" ### LIBERA SANTANDER NAO FUNCIONA COM PROXY CASO TENHA PROBLEMAS COM O SANTANDER DESCOMENTE AS LINHAS ABAIXO### #${IPTABLES} -A FORWARD -d 200.220.178.3 -j ACCEPT #${IPTABLES} -A FORWARD -d 200.220.179.4 -j ACCEPT #${IPTABLES} -A FORWARD -d 200.220.187.4 -j ACCEPT #${IPTABLES} -A FORWARD -d 200.220.186.3 -j ACCEPT #${IPTABLES} -A FORWARD -d 200.220.187.18 -j ACCEPT ### CONTROLE DOS PINGS (ICMP) ### for END in $(cat ${CHAINS_PING} | grep -v "^#") do ${IPTABLES} -A ${END} -p icmp -j DROP -m length --length ${MAX_TAM}: ${COM} "RESTRICAO AO TAMANHO DOS ECHOS A 512BYTES" ${IPTABLES} -A ${END} -p icmp --icmp-type 0 -m limit --limit ${MAX_SEG}/s -j ACCEPT ${COM} "ECHO REPLY RETORNO" ${IPTABLES} -A ${END} -p icmp --icmp-type 8 -m limit --limit ${MAX_SEG}/s -j ACCEPT ${COM} "ECHO REQUEST SOLICITACAO" done #### ALGUMAS PROTECOES ADICIONAIS ### ### PROTECAO CONTRA SYN-FLOOD ### ${IPTABLES} -A INPUT -p tcp -m tcp --tcp-flags ALL FIN,URG,PSH -j DROP ${COM} "Protecao contra syn-flood" ${IPTABLES} -A INPUT -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP ${COM} "Protecao contra syn-flood" ${IPTABLES} -A INPUT -p tcp -m tcp --tcp-flags SYN,FIN SYN,FIN -j DROP ${COM} "Protecao contra syn-flood" ${IPTABLES} -A INPUT -p tcp -m tcp --tcp-flags ALL NONE -j DROP ${COM} "Protecao contra syn-flood" ${IPTABLES} -A INPUT -p tcp -m tcp --sport 0 --tcp-flags FIN,SYN,RST,ACK SYN -j DROP ${COM} "Protecao contra syn-flood" ${IPTABLES} -A FORWARD -p tcp --syn -m limit --limit 2/s -j ACCEPT ${COM} "Protecao contra syn-flood" ### PROTECAO CONTRA PING DA MORTE ### ${IPTABLES} -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT ${COM} "Protecao contra DOS" ### PROTECAO CONTRA PORT SCANNERS ### ${IPTABLES} -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT ${COM} "Protecao contra Port Scanners" ### NEGAR IDENT ### ${IPTABLES} -A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset ${COM} "Nega Identidade" ${IPTABLES} -A FORWARD -p tcp --dport 113 -j REJECT --reject-with tcp-reset ${COM} "Nega Identidade" ### RESET EM CONEXOES PARA PORTAS DESCONHECODAS ### ${IPTABLES} -A INPUT -p tcp -j REJECT --reject-with tcp-reset ${COM} "Reseta conexoes em portas desconhecidas" ### HABILITANDO MASQUERADE DA REDE INTERNA ### ${IPTABLES} -A POSTROUTING -t nat -s ${LAN} -j MASQUERADE ${COM} "Masquerade da Rede" echo "${GREEN}[ Firewall Iniciado ]${CLOSE}" ;; stop) echo "${RED}[ Parando Firewall ... ]${CLOSE}" ### APAGANDO REGRAS EXISTENTES ### ${IPTABLES} -t filter -F ${IPTABLES} -t nat -F ${IPTABLES} -t mangle -F ${IPTABLES} -t filter -X ${IPTABLES} -t nat -X ${IPTABLES} -t mangle -X ### DEFININDO POLITICA PADRAO ACCEPT ### ${IPTABLES} -P INPUT ACCEPT ${IPTABLES} -P FORWARD ACCEPT ${IPTABLES} -P OUTPUT ACCEPT ### FAZENDO NAT DA REDE ### ${IPTABLES} -t nat -A POSTROUTING -s ${LAN} -j MASQUERADE ${COM} "Masquerade da Rede" echo "${RED}[ Firewall Parado ]${CLOSE}" ;; status) echo "${RED}########################################################################################"; echo "*******************************Table Filter*********************************************${CLOSE}"; ${IPTABLES} -t filter -L -n echo "${RED}########################################################################################"; echo "********************************Table Nat***********************************************${CLOSE}"; ${IPTABLES} -t nat -L -n ;; restart) $0 stop $0 start ;; *) echo "${RED}Opcoes Validas:(start|stop|restart|status)${CLOSE}" ;; esac
Agora vamos dar permissão de execução em nosso script
chmod +x /etc/init.d/rc.firewall
Agora vamos colocar ele na inicialização do servidor
insserv -f -v rc.firewall
Agora vamos testar o nosso script
/etc/init.d/rc.firewall restart [ Parando Firewall ... ] [ Firewall Parado ] [ Iniciando Firewall ] [ Firewall Iniciado ]