220 likes | 348 Views
Firewall Iptables Professor: João Paulo de Brito Gonçalves. Campus - Cachoeiro Curso Técnico de Informática. Iptables -Introdução. Os firewalls existem no Linux desde o kernel 1.1, com o ipfw , originário do BSD.
E N D
Firewall Iptables Professor: João Paulo de Brito Gonçalves Campus - Cachoeiro Curso Técnico de Informática
Iptables -Introdução • Os firewalls existem no Linux desde o kernel 1.1, com o ipfw, originário do BSD. • Esse filtro era userspace, ou seja, rodava como um programa comum no sistema, similarmente ao BIND (servidor de nomes). • Com o kernel 2.0 veio o ipfwadm, que ainda era uma ferramenta userspace e controlava as regras de filtragem do kernel. • Na versão 2.2 do kernel, veio o ipchains (ainda presente em algumas distribuições) e em 1999, veio o iptables 2, presente a partir do kernel 2.3.15.
Iptables -Introdução O iptables é um firewall nativo do Linux e que faz parte do seu kernel e por isto tem um desempenho melhor que firewalls instalados como aplicações. Com isso, ele é bastante seguro e rápido.
Cadeias e políticas-padrão • No iptables, existem tabelas de filtragem (chains), e três delas são básicas e não podem ser apagadas: INPUT, OUTPUT e FORWARD. • A chain INPUT trata dos pacotes de entrada, aqueles que chegam da rede. • A chain OUTPUT trata dos pacotes de saída, aqueles que vão para a rede. • E finalmente a chain FORWARD trata do encaminhamento de pacotes, ou seja, roteamento.
Comandos do Iptables • iptables -A adiciona uma nova regra ao fim da lista de regras • iptables -P <nome-da-cadeia> <alvo> muda a política padrão de uma cadeia, de forma que todo pacote desta cadeia ficará sujeito a esta política, caso não exista nenhuma regra anterior que se aplique a mesma. • iptables -D apaga uma regra específica da lista • iptables -L lista as regras existentes na lista. • iptables -F remove todas as entradas adicionadas na lista de regras do iptables Roteador
Alvos das regras • iptables -I Insere uma nova regra ao início da lista de regras • -j – define o alvo do pacote caso o mesmo se encaixe em uma regra. As principais ações são ACCEPT, DROP, REJECT. • ACCEPT aceita o pacote • REJECT rejeita educadamente o pacote, enviando um pacote de resposta ao emissor. • DROP o pacote simplesmente é descartado, sem aviso. • LOG Permite fazer log dos pacotes que se encaixam na regra. Roteador
Parâmetros para a filtragem de pacotes • -p – especifica o protocolo aplicado à regra. Se enquadra aos protocolos da camada de transporte, como tcp, udp e icmp • Ex: iptables - A INPUT –p tcp –j ACCEPT
Parâmetros para a filtragem de pacotes • -s – especifica a origem (source) do pacote ao qual a regra deve ser aplicada. A origem pode ser um host ou uma rede. Nesta opção geralmente utilizamos o IP seguido de sua sub-rede: • Ex: iptables –A INPUT –s 172.16.53.1 –j DROP • iptables –A INPUT –s 172.16.53.1 –j ACCEPT • Este comando descarta todo pacote de entrada vindo da origem 172.16.53.1 • O segundo comando aceita todo pacote de entrada vindo da origem 172.16.53.1
Parâmetros para a filtragem de pacotes • -d – especifica o destino do pacote (destination) ao qual a regra deve ser aplicada. Sua utilização se dá da mesma maneira que a ação –s. • Ex: iptables –A OUTPUT –d 172.16.53.1 –j DROP • iptables –A OUTPUT –d 172.16.53.1 –j ACCEPT • Este comando descarta todo pacote de saída com destino à máquina 172.16.53.1 • O segundo comando aceita todo pacote de saída com destino à máquina 172.16.53.1
Parâmetros para a filtragem de pacotes • -i – especifica a interface de entrada a ser utilizada e como um Firewall possui mais de uma interface esta regra acaba sendo muito importante para distinguir a qual interface de rede o filtro deve ser aplicado. • Ex: iptables –A INPUT –i eth0 –j DROP • O comando permite que todo pacote que entra pela interface eth0 seja selecionado para ser descartado pelas regras do firewall.
Parâmetros para a filtragem de pacotes • -o – especifica a interface de saída a ser utilizada e se aplica da mesma forma que a regra –i, mas este parâmetro é menos usado, pois normalmente nos preocupamos em impedir que o firewall aceite conexões em determinadas portas, ao invés de tentar interceptar as respostas. • Ex: iptables –A FORWARD –o eth0 –j DROP • O comando permite que todo pacote que sai pela interface eth0 seja selecionado para ser descartado pelas regras do firewall.
Parâmetros para a filtragem de pacotes • --sport – porta de origem (source port). Com esta regra é possível aplicar filtros com base na porta de origem do pacote. • Ex: iptables –A INPUT –p tcp –-sport 22 –j DROP • O comando permite que todo pacote de entrada usando o protocolo TCP e com origem na porta 22 seja descartado.
Parâmetros para a filtragem de pacotes • --dport – porta de destino (destination port) especifica a porta de destino do pacote e funciona de forma similar à regra sport. iptables –A OUTPUT –p tcp –-dport 22 –j DROP • O comando permite que todo pacote de saída usando o protocolo TCP e com destino na porta 22 seja descartado.
Parâmetros para a filtragem de pacotes • -m mac --mac-source – é a regra que permite especificar endereços MAC dentro de regras do iptables. Ele é uma forma de dificultar o uso de endereços IP falseados para ganhar acesso ao servidor, pois permite relacionar o IP ao endereço MAC da placa instalada. Não é 100% eficaz pois o endereço MAC pode ser trocado via ifconfig e ele não é válido para a camada de rede, ou seja, quando sai da rede local, ele é descartado. • iptables -A INPUT –p tcp --dport 22 –m mac --mac-source 00:1B:24:46:29:88 –j DROP
Parâmetros para a filtragem de pacotes • Comando faz com que qualquer pacote de entrada com destino na porta 22 advindo da máquina que possua MAC 00:1B:24:46:29:88 seja descartado. • iptables -A INPUT –p tcp --dport 22 –m mac --mac-source 00:1B:24:46:29:88 –j REJECT • Comando faz com que qualquer pacote de entrada com destino na porta 22 advindo da máquina que possua MAC 00:1B:24:46:29:88 seja rejeitado.
Parâmetros para a filtragem de pacotes • multiport - com o modulo multiport é possível que especifiquemos múltiplas portas a serem afetadas pela regra, sob o limite máximo de 15. • EX:iptables –A INPUT –p tcp –i eth0 –m multiport –-dport 80,25,53,110 –j DROP • Este comando indica em uma só regra por via de multiport que o firewall descartará (-J DROP) qualquer pacote que entre pela interface eth0 (-i eth0) destinado às portas 80,25, 53, 110.
Bloqueando domínios • É possível ainda permitir ou bloquear com base no domínio, tanto para entrada como para saída. Isto permite bloquear sites e programas diretamente a partir do firewall, sem precisar instalar um servidor Squid e configurá-lo. • Iptables –A OUTPUT –d www.orkut.com –j DROP • O comando impede que pacotes de saída destinados ao domínio sejam enviados, ou seja, impede que o domínio seja acessado a partir da própria máquina local. • Originalmente o iptables sabia trabalhar apenas com endereços IP. A possibilidade de criar regras baseadas em domínios são um recurso um pouco mais recente, onde o firewall faz um lookup no domínio, para saber qual o IP atual.
Salvando as regras criadas no Firewall • Toda regra criada no Iptables fica gravada em memória RAM, sendo posteriormente apagada quando o sistema é ligado ou reiniciado. • Para que o administrador de redes não seja obrigado a ter que refazer todas as regras de firewall sempre que o sistema é ligado, existe um comando do iptables que possibilita que salvemos as regras criadas em um arquivo, que depois pode ser usado para restaurar as regras no firewall. • Para então salvar as regras criadas em um arquivo, devemos usar o comando: • iptables-save > nome_do_arquivo
Salvando as regras criadas no Firewall • Após isto, o arquivo criado terá todas as regras do firewall criadas. • Em uma próxima ocasião quando o sistema for reiniciado, as regras podem ser restauradas através do comando • iptables-restore < nome_do_arquivo • Este comando acessará o arquivo e colocará em memória todas as regras que estavam gravadas no arquivo.
Roteamento no Linux • O roteamento em um sistema Linux é nativo do kernel, ou seja, ao iniciar o serviço de rede, o kernel já ativou o roteamento de pacotes. O serviço roda inicialmente de uma forma local, roteando apenas os pacotes da própria máquina. Para que o kernel possa rotear pacotes de outras máquinas é preciso dizer que ele deve fazer isso, que é feito inserindo o valor 1 no arquivo /proc/sys/net/ipv4/ip_forward.
Roteamento no Linux • Verificando o valor de ip_forward # cat /proc/sys/net/ipv4/ip_forward • Mudando o valor de ip_forward # echo 1 > /proc/sys/net/ipv4/ip_forward • Verificando o novo valor de ip_forward # cat /proc/sys/net/ipv4/ip_forward • Também é possível fazer isso, e de uma forma mais adequada, editando-se o arquivo /etc/sysctl.conf.