#!/bin/sh # Firewall com IPTables # Autor: Hermano Pereira # www.hermano.com.br # Ago/2006-Set/2011 # Fonte de pesquisa: # http://www.frozentux.net/iptables-tutorial/iptables-tutorial.html # Modificar: IFACE_IP="10.0.0.1" ####################################################################################################### # Apagar regras antigas ####################################################################################################### iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT iptables -F iptables -X ####################################################################################################### # Permitir ao servidor acessar ele mesmo ####################################################################################################### iptables -A INPUT -s 127.0.0.0/8 -j ACCEPT iptables -A OUTPUT -d 127.0.0.0/8 -j ACCEPT ip6tables -A INPUT -s ::1 -j ACCEPT ip6tables -A OUTPUT -d ::1 -j ACCEPT iptables -A INPUT -s $IFACE_IP -j ACCEPT iptables -A OUTPUT -d $IFACE_IP -j ACCEPT ####################################################################################################### # Criar Chains ####################################################################################################### # Chains para tratar dos protocolos iptables -N permitir_tcp iptables -N permitir_udp iptables -N permitir_icmp # Chains para acessos neste servidor iptables -N servidor_tcp iptables -N servidor_udp iptables -N servidor_icmp # Chains para acessos roteados por este servidor iptables -N roteador_tcp iptables -N roteador_udp iptables -N roteador_icmp ####################################################################################################### # Permitir ACESSO aos servicos deste servidor - TCP ####################################################################################################### # Exemplo SSH # iptables -A servidor_tcp -p TCP -s 10.0.0.0/24 --dport 22 -j permitir_tcp # Exemplo HTTP # iptables -A servidor_tcp -p TCP -s 10.0.0.0/24 --dport 80 -j permitir_tcp # Negar outros servicos TCPs # iptables -A servidor_tcp -p TCP -j LOG iptables -A servidor_tcp -p TCP -j DROP ####################################################################################################### # Permitir ACESSO aos servicos deste servidor - UDP ####################################################################################################### # Exemplo TFTP # iptables -A servidor_udp -p UDP -s 10.0.0.228 --dport 69 -j permitir_udp # Negar outros servicos UDP # iptables -A servidor_udp -p UDP -j LOG iptables -A servidor_udp -p UDP -j DROP ####################################################################################################### # Permitir ACESSO aos servicos deste servidor - ICMP ####################################################################################################### # Permitir echo-request iptables -A servidor_icmp -p ICMP --icmp-type 8 -j permitir_icmp # Negar outros servicos ICMP # iptables -A servidor_icmp -p ICMP -j LOG iptables -A servidor_icmp -p ICMP -j DROP ####################################################################################################### # Permitir ROTEAMENTO atraves deste servidor - TCP ####################################################################################################### # Exemplo SSH # iptables -A roteador_tcp -p TCP -s 10.0.0.0/24 -d 192.168.0.0/24 --dport 22 -j permitir_tcp # Exemplo HTTP # iptables -A roteador_tcp -p TCP -s 10.0.0.0/24 -d 192.168.0.0/24 --dport 80 -j permitir_tcp # Negar outros servicos TCPs # iptables -A roteador_tcp -p TCP -j LOG iptables -A roteador_tcp -p TCP -j DROP ####################################################################################################### # Permitir ROTEAMENTO atraves deste servidor - UDP ####################################################################################################### # Exemplo TFTP # iptables -A roteador_udp -p UDP -s 10.0.0.228 -d 192.168.1.10 --dport 69 -j permitir_udp # Negar outros servicos UDP # iptables -A roteador_udp -p UDP -j LOG iptables -A roteador_udp -p UDP -j DROP ####################################################################################################### # Permitir ROTEAMENTO atraves deste servidor - ICMP ####################################################################################################### # Permitir echo-request iptables -A roteador_icmp -p ICMP --icmp-type 8 -j permitir_icmp # Negar outros servicos ICMP # iptables -A roteador_icmp -p ICMP -j LOG iptables -A roteador_icmp -p ICMP -j DROP ####################################################################################################### # Permitir conexoes TCP ####################################################################################################### iptables -A permitir_tcp -p TCP --syn -m state --state NEW -j ACCEPT iptables -A permitir_tcp -p TCP -j REJECT ####################################################################################################### # Permitir sessoes UDP ####################################################################################################### iptables -A permitir_udp -p UDP -m state --state NEW -j ACCEPT iptables -A permitir_udp -p UDP -j REJECT ####################################################################################################### # Permitir sessoes ICMP ####################################################################################################### iptables -A permitir_icmp -p ICMP -m state --state NEW -j ACCEPT iptables -A permitir_icmp -p ICMP -j REJECT ####################################################################################################### # Aplicar as chains ####################################################################################################### # Roteamento iptables -A FORWARD -p ALL -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -p TCP -j roteador_tcp iptables -A FORWARD -p UDP -j roteador_udp iptables -A FORWARD -p ICMP -j roteador_icmp # Entrada iptables -A INPUT -p ALL -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -p TCP -j servidor_tcp iptables -A INPUT -p UDP -j servidor_udp iptables -A INPUT -p ICMP -j servidor_icmp # Saida # Importante: acessos originados por este servidor nao serao bloqueados iptables -A OUTPUT -p ALL -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT ####################################################################################################### # Arrumando policy: negando o resto ####################################################################################################### iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP ####################################################################################################### # IPv6 ainda nao sera utilizado ####################################################################################################### ip6tables -P INPUT DROP ip6tables -P OUTPUT DROP ip6tables -P FORWARD DROP ####################################################################################################### # Listando IPTABLES ####################################################################################################### iptables -L -n -v #######################################################################################################