{"id":637,"date":"2013-10-10T17:43:26","date_gmt":"2013-10-10T20:43:26","guid":{"rendered":"http:\/\/www.viazap.com.br\/?p=637"},"modified":"2013-10-10T17:43:26","modified_gmt":"2013-10-10T20:43:26","slug":"estrutura-do-iptables","status":"publish","type":"post","link":"https:\/\/blog.clusterweb.com.br\/?p=637","title":{"rendered":"Estrutura do Iptables"},"content":{"rendered":"<table width=\"100%\" border=\"0\" cellspacing=\"3\" cellpadding=\"3\">\n<tbody>\n<tr>\n<td colspan=\"2\"><b>Introdu\u00e7\u00e3o: o que esperar deste artigo<\/b><\/p>\n<div>Ao contr\u00e1rio de outros artigos e tutoriais sobre\u00a0<i>iptables<\/i>, este n\u00e3o se disp\u00f5e a ensinar sua sintaxe, como construir regras e como bloquear este ou aquele tipo de pacote. Artigos meus futuros poder\u00e3o passear por este caminho, muito embora j\u00e1 se tenha muito material na Internet sobre isto.<\/p>\n<p>Ele se destina a explicar a origem dos termos &#8220;tabelas&#8221; do iptables, o que \u00e9 e para que servem as tabelas nat, filter e mangle. Onde, ou seja, em qual tabela se deve colocar as regras para este ou aquele objetivo.<\/p>\n<p>Este artigo aproveita tamb\u00e9m para esclarecer algumas diferen\u00e7as interessantes, como para que serve o REJECT e qual a diferen\u00e7a dele para o DROP?<\/p>\n<p>Algumas defini\u00e7\u00f5es ser\u00e3o relevantes e merecem serem citadas antes da leitura:<\/p>\n<p>Quando falo de &#8220;n\u00edvel&#8221; no artigo (ex: n\u00edvel de Enlace) estou me referindo ao modelo de camadas TCP\/IP, composto por apenas QUATRO camadas e n\u00e3o SETE como no modelo OSI. No modelo TCP as camadas s\u00e3o o ENLACE, onde se tem na sua imensa maioria o padr\u00e3o de rede Ethernet como refer\u00eancia:<\/p>\n<ul>\n<li>O n\u00edvel de REDE, respons\u00e1vel pelo roteamento, onde se tem o IP na sua vers\u00e3o 4 como mais significativo;<\/li>\n<li>O n\u00edvel de TRANSPORTE, com seus pacotes UDP e TCP, dentre outros;<\/li>\n<li>O o n\u00edvel de aplica\u00e7\u00e3o, com os protocolos FTP, HTTP, etc;<\/li>\n<li>O n\u00edvel F\u00cdSICO n\u00e3o faz parte do modelo de camadas TCP\/IP, pois \u00e9 restrito ao fabricante da placa.<\/li>\n<\/ul>\n<p><!--more--><br \/>\nEm termos de nomenclatura geralmente se generaliza chamando tudo de pacote. Por\u00e9m, quando se quer deixar mais espec\u00edfico em qual n\u00edvel estamos lidando, pode-se se usar a nomenclatura &#8220;quadro&#8221; para o n\u00edvel de Enlace, &#8220;datagrama&#8221; ip para o n\u00edvel de rede e &#8220;pacote&#8221; para o de transporte (sendo que o TCP muitas vezes usam a palavra &#8220;segmento&#8221;). Na aplica\u00e7\u00e3o o que tem s\u00e3o dados.<\/p>\n<p>Mas como o iptables atua em princ\u00edpio nas camadas de rede, ip de origem ou de destino, e na de transporte (porta origem e destino), o pacote pode ser considerado, neste artigo, como um termo gen\u00e9rico (OBS: \u00e9 certo que o iptables tamb\u00e9m permite atuar no enlace e at\u00e9 mesmo na aplica\u00e7\u00e3o, com os devidos m\u00f3dulos adicionados).<\/p>\n<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\"><b>Por onde passa um datagrama<\/b><\/p>\n<div>O\u00a0<i>iptables<\/i>, presente no\u00a0<i>Linux<\/i>\u00a0a partir do kernel 2.4, usa o conceito de &#8220;ganchos&#8221; do\u00a0<i>netfilter<\/i>, permitindo avaliar um datagrama em alguns pontos dentro do kernel.<\/p>\n<p><center><a href=\"http:\/\/img.vivaolinux.com.br\/imagens\/artigos\/comunidade\/1183593519.figura1.png\" target=\"_new\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" src=\"http:\/\/img.vivaolinux.com.br\/imagens\/artigos\/comunidade\/thumb_1183593519.figura1.png\" width=\"400\" height=\"253\" border=\"0\" \/><\/a><\/center><\/p>\n<p>Conforme pode ser observado na Figura 1, um datagrama IP dentro do kernel do Linux passa por v\u00e1rias etapas. Basicamente um datagrama IP \u00e9 de um dentre tr\u00eas tipos:<\/p>\n<ol>\n<li>O datagrama chegou por uma de suas interfaces, o n\u00edvel de enlace viu o seu\u00a0<i>mac address<\/i>\u00a0no quadro ethernet. Contudo o datagrama n\u00e3o \u00e9 destinado ao n\u00famero IP desta m\u00e1quina. Se a m\u00e1quina n\u00e3o for configurada para atuar como roteador, o datagrama \u00e9 descartado. Se a m\u00e1quina estiver atuando como roteador, o datagrama deve ser roteado por ela.<\/li>\n<li>O datagrama chegou por uma de suas interfaces, o n\u00edvel de enlace viu o seu\u00a0<i>mac address<\/i>\u00a0no quadro ethernet e ele \u00e9 destinado ao IP desta m\u00e1quina, logo deve ser entregue a um de seus processos locais (se for HTTP, por exemplo, deve ser entregue ao apache).<\/li>\n<li>O datagrama IP foi gerado por um de seus processos locais, por um cliente de email por exemplo, e deve ser repassado a outra m\u00e1quina.<br \/>\nCada datagrama passa por uma etapa de roteamento, onde o kernel decide para onde ele vai. Nesta etapa \u00e9 que s\u00e3o consultadas, se for o caso, as tabelas de roteamento. Os do tipo 1 devem serem roteados para fora da m\u00e1quina, que no caso deve estar atuando como roteador, sendo que na etapa de roteamento o kernel decide qual o pr\u00f3ximo ponto de rota que deve ser usada. Se for para o IP desta m\u00e1quina, \u00e9 o roteamento que verifica isto (isto \u00e9, recebe o datagrama, v\u00ea que \u00e9 local e entrega ao n\u00edvel de transporte, que ir\u00e1 repass\u00e1-lo ao processo correspondente).<\/p>\n<p>Da mesma forma, pacotes os gerados por processos locais tamb\u00e9m passam pelo roteamento para serem encaminhados. Logo, todos os datagramas passam, de uma forma ou de outra, pela etapa de roteamento.<\/p>\n<p>Caso ele precise ser repassado a outra m\u00e1quina (somente se ela estiver atuando como roteador IP), a etapa de &#8220;repasse de pacotes&#8221; realiza as altera\u00e7\u00f5es necess\u00e1rias, como a reescrita total do cabe\u00e7alho de enlace (trocando o MAC origem para o seu), atualiza\u00e7\u00e3o do TTL, etc. Evidente que isto ap\u00f3s a decis\u00e3o de roteamento, pois a escrita do cabe\u00e7alho de enlace leva em conta o destino.<\/li>\n<\/ol>\n<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\"><b>Ganchos do netfilter<\/b><\/p>\n<div>O\u00a0<i>netfilter<\/i>\u00a0introduziu &#8220;ganchos&#8221;, pontos ao longo do ciclo de vida de um datagrama onde o mesmo pode ser avaliado por regras de firewall. A Figura 2 destaca estes pontos.<\/p>\n<p><center><a href=\"http:\/\/img.vivaolinux.com.br\/imagens\/artigos\/comunidade\/1183593729.figura2.png\" target=\"_new\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" src=\"http:\/\/img.vivaolinux.com.br\/imagens\/artigos\/comunidade\/thumb_1183593729.figura2.png\" width=\"400\" height=\"237\" border=\"0\" \/><\/a><\/center><\/p>\n<p>Pode-se observar pela Figura 2, que:<\/p>\n<ul>\n<li>Um datagrama destinado ao processo local:\n<ul>\n<li>Pode ser capturado para avalia\u00e7\u00e3o ao entrar na Interface, pelo gancho 1, chamado pelo kernel de PREROUTING.<\/li>\n<li>Pode ser capturado para avalia\u00e7\u00e3o pelo gancho 4, chamado pelo kernel de INPUT.<\/li>\n<\/ul>\n<\/li>\n<li>Um datagrama gerado por um processo local:\n<ul>\n<li>Pode ser capturado para avalia\u00e7\u00e3o pelo gancho 5, chamado pelo kernel de OUTPUT.<\/li>\n<li>Pode ser capturado para avalia\u00e7\u00e3o pelo gancho 3, chamado de POSTROUTING.<\/li>\n<\/ul>\n<\/li>\n<li>Um datagrama que esteja apenas passando por esta m\u00e1quina, n\u00e3o gerada e n\u00e3o destinada ao ip ela:\n<ul>\n<li>Pode ser capturado para avalia\u00e7\u00e3o ao entrar na Interface, pelo gancho 1, chamado pelo kernel de PREROUTING.<\/li>\n<li>Pode ser capturado para avalia\u00e7\u00e3o pelo gancho 2, chamado pelo kernel de FORWARD.<\/li>\n<li>Pode ser capturado para avalia\u00e7\u00e3o pelo gancho 3, chamado de POSTROUTING.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Por existirem estes ganchos e a possibilidade de avaliar um datagrama e tomar decis\u00f5es de firewall sobre ele nestes pontos, o iptables introduz filas de regras (listas) nestes pontos. Cada gancho pode possuir um ou mais conjuntos de regras.<\/p>\n<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\"><b>Enfim, as tabelas<\/b><\/p>\n<div>Ao todo s\u00e3o tr\u00eas as tabelas mais importantes do\u00a0<i>iptables<\/i>:<\/p>\n<ul>\n<li>filter<\/li>\n<li>nat<\/li>\n<li>mangle<\/li>\n<\/ul>\n<p>A tabela\u00a0<i>filter<\/i>\u00a0deve conter apenas regras que determinam se um pacote deve ser aceito ou n\u00e3o. Nesta tabela n\u00e3o \u00e9 poss\u00edvel colocar regras para alterar algum par\u00e2metro, como ip ou porta.<\/p>\n<p>A tabela\u00a0<i>nat<\/i>\u00a0serve para realizar opera\u00e7\u00f5es de tradu\u00e7\u00e3o sobre IP e\/ou porta, tanto de origem como de destino, muito embora tamb\u00e9m permita recus\u00e1-lo (n\u00e3o ser\u00e1 abordada neste artigo).<\/p>\n<p>Por fim a tabela\u00a0<i>mangle<\/i>\u00a0serve para realizar altera\u00e7\u00f5es mais profundas e bizarras nos pacotes, como alterar o TTL, TOS, etc (n\u00e3o ser\u00e1 abordada neste artigo).<\/p>\n<p>As a\u00e7\u00f5es operadas sobre um pacote basicamente podem ser recus\u00e1-lo ou deix\u00e1-lo passar, mas o iptables possui v\u00e1rias maneiras de &#8220;recusar&#8221; e ainda permite realizar logs. Como dito, opera\u00e7\u00f5es de altera\u00e7\u00e3o de pacotes, seja IP ou porta, n\u00e3o pode ser realizada na tabela filter, mas sim na nat ou mangle.<\/p>\n<p>Em termos de filtragem, para impedir que pacotes que n\u00e3o queremos entrem na m\u00e1quina, \u00e9 a tabela filter que nos interessa.<\/p>\n<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\"><b>A tabela filter<\/b><\/p>\n<div>Entram nesta tabela o conjunto de regras com finalidades gerais, como bloquear, negar, realizar logs. As regras existentes nesta tabela n\u00e3o tem poder de alterar as configura\u00e7\u00f5es dos pacotes. Basicamente todas as regras de filtragem est\u00e3o nesta tabela, pois ela \u00e9 de uso geral.<\/p>\n<p>Para inserir uma regra em uma lista, pode-se usar -A para APPEND, inserindo-a no final, ou -I para INSERT, inserindo-a NO IN\u00cdCIO (a sintaxe profunda das regras n\u00e3o \u00e9 o foco deste artigo).<\/p>\n<p>A tabela filter possui tr\u00eas conjuntos de regras, ou seja, tr\u00eas listas sendo que cada uma delas est\u00e1 associada a um gancho:<\/p>\n<ul>\n<li>INPUT: esta fila de regras recebe este nome justamente por ser aplicada aos pacotes na posi\u00e7\u00e3o do gancho 4. Logo apenas os pacotes destinados ao ip da m\u00e1quina atual ser\u00e3o avaliados por eventuais regras existentes nesta tabela. Sintaticamente para inserir regras nesta lista usa-se os par\u00e2metros de iptables (o comando est\u00e1 incompleto):\n<p><i>iptables -t filter -A INPUT [regra]<\/i><\/li>\n<li>OUTPUT: esta fila de regras recebe este nome justamente por atuar no gancho 5 (tamb\u00e9m chamado pelo kernel de OUTPUT). Logo ser\u00e3o avaliados pelas regras presentes nesta lista apenas os pacotes originados por processos locais da m\u00e1quina. Sintaticamente para inserir uma regra nesta lista usa-se o comando:\n<p><i>iptables -t filter -A OUTPUT [regra]<\/i><\/li>\n<li>FORWARD: esta fila de regras recebe este nome justamente por atuar no gancho 2 (tamb\u00e9m chamado pelo kernel de FORWARD). Logo ser\u00e3o avaliados por estas regras os pacotes que est\u00e3o sendo repassados por esta m\u00e1quina, n\u00e3o s\u00e3o para ela e nem originados por ela. Sintaticamente para inserir uma regra nesta lista usa-se o comando:\n<p><i>iptables -t filter -A FORWARD [regra]<\/i><\/li>\n<\/ul>\n<p>A tabela filter \u00e9 a tabela b\u00e1sica do iptables e s\u00e3o em suas listas que devem ser inseridas regras de filtragens gerais, que n\u00e3o s\u00e3o complexas, como proibir ou permitir ips, portas, etc. Na Figura 3 pode ser observado a atua\u00e7\u00e3o do conjunto de regras desta tabela sobre os ganchos.<\/p>\n<p><center><a href=\"http:\/\/img.vivaolinux.com.br\/imagens\/artigos\/comunidade\/1183594291.figura3.png\" target=\"_new\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" src=\"http:\/\/img.vivaolinux.com.br\/imagens\/artigos\/comunidade\/thumb_1183594291.figura3.png\" width=\"400\" height=\"360\" border=\"0\" \/><\/a><\/center><\/p>\n<p>Cada regra pode realizar uma determinada a\u00e7\u00e3o ao pacote (representado graficamente por -j), sendo que na filter as seguintes a\u00e7\u00f5es s\u00e3o poss\u00edveis:<\/p>\n<ul>\n<li>REJECT: o pacote, uma vez que casou com a regra, \u00e9 rejeitado. Demais regras existentes s\u00e3o ignoradas e o pacote definitivamente j\u00e1 teve seu destino selado: ser\u00e1 descartado. Se for usado REJECT o remetente do pacote ser\u00e1 avisado com uma mensagem de erro, normalmente um ICMP de &#8220;porta inating\u00edvel&#8221; (mas o iptables permite ao usu\u00e1rio mudar o tipo de retorno se ele quiser). Em termos de seguran\u00e7a pode n\u00e3o ser interessante devolver uma resposta ao remetente, pois isto iria inevitavelmente dar a conhecer a ele o n\u00famero IP do firewall.<\/li>\n<li>DROP: o DROP tem o mesmo efeito do REJECT e a mesma aplica\u00e7\u00e3o, com a diferen\u00e7a de que n\u00e3o \u00e9 retornado nenhuma mensagem de erro ao remetente (ele n\u00e3o saber\u00e1 o que aconteceu com o pacote). Em se tratando de FORWARD (repasse) pode ser conveniente usar DROP ao inv\u00e9s de REJECT para que um poss\u00edvel atacante n\u00e3o saiba o IP do firewall que rejeitou o seu pacote. Mas isto deve ser bem analisado, pois se o remetente n\u00e3o souber o que ocorreu, ele poder\u00e1 ficar ainda tentando v\u00e1rias vezes at\u00e9 desistir por time out. Se o teu firewall \u00e9 o roteador principal, n\u00e3o tem porque escond\u00ea-lo, pois ele \u00e9 um ponto de rota mesmo. Mas se ele for transparente (atuando em modo bridge), a\u00ed pode ser uma boa estrat\u00e9gia n\u00e3o dar nada ao remetente.<\/li>\n<li>ACCEPT: Aceita um pacote, deixando que ele siga o seu percurso. O ACCEPT, como os anteriores, causa o t\u00e9rmino de teste nesta tabela, ou seja, o pacote j\u00e1 foi aceito e n\u00e3o ser\u00e1 mais testado por nenhuma outra regra posterior nesta tabela (mas ainda poder\u00e1 ser testado por outra tabela, como pela mangle ou nat, por exemplo. Acredito que o \u00fanico exemplo onde isto possa acontecer \u00e9 ele ser ACEITO no filter FORWARD, mas ser DROPADO no nat POSTROUTING, j\u00e1 que o nat tem tamb\u00e9m o poder de realizar DROP).<\/li>\n<li>LOG: realiza um log deste pacote no sistema (geralmente no \/var\/log\/syslog ou messages). Ao contr\u00e1rio das demais a\u00e7\u00f5es (DROP, ACCEPT e REJECT), ao aplicar um log no pacote o mesmo ainda continua sendo testado pelas regras seguintes da fila atual. Uma a\u00e7\u00e3o do tipo LOG n\u00e3o causa o t\u00e9rmino do teste. Caso seja do interesse do usu\u00e1rio ele pode configurar uma mensagem de log que aparecer\u00e1 nos logs facilitando a an\u00e1lise.<\/li>\n<\/ul>\n<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\"><b>Conclus\u00e3o<\/b><\/p>\n<div>Este artigo teve como motiva\u00e7\u00e3o apenas mostrar a estrutura interna do\u00a0<i>iptables<\/i>\u00a0e n\u00e3o ensinar a escrever regras sintaticamente corretas e poderosas.<\/p>\n<p>Atrav\u00e9s do entendimento correto de como o iptables atua, pode-se determinar onde e de que forma pacotes devem ser filtrados:<\/p>\n<ul>\n<li>Se estou configurando um firewall pessoal, na minha m\u00e1quina desktop ou no meu servidor, sendo que ela n\u00e3o \u00e9 roteador: as regras para filtrar o conte\u00fado dever\u00e3o ir na tabela filter, na lista INPUT para filtrar o que est\u00e1 entrando na minha m\u00e1quina, destinada ao IP dela e na tabela filter, lista OUTPUT para os pacotes gerados pela minha m\u00e1quina.<\/li>\n<li>Se estou configurando um firewall de rede, que filtra todo o conte\u00fado que entra e sai da minha rede para o mundo: as regras ir\u00e3o todas na tabela filter, lista FORWARD. Para representar o destino (est\u00e1 entrando ou est\u00e1 saindo) posso usar o par\u00e2metro -i interface ou -o interface (o FORWARD \u00e9 o \u00fanico que permite -i e -o na mesma regra, querendo dizer, se estiver entrando por aqui e saindo por ali&#8230;).<\/li>\n<li>Se meu firewall \u00e9 um firewall de rede, mas tamb\u00e9m possui alguns servi\u00e7os nele, como proxy ou de email, devo inserir regras tando no filter INPUT\/OUTPUT para definir a pol\u00edtica dele enquanto servidor, como no filter FORWARD para proteger minha rede. Regras adicionadas no filter FORWARD n\u00e3o atuam sobre pacotes destinados ao n\u00famero IP de uma m\u00e1quina.<\/li>\n<li>Se desejo alterar caracter\u00edsticas de ip ou porta, trocando-as, devo usar a tabela nat e para isto preciso aguardar o pr\u00f3ximo artigo. \ud83d\ude00<\/li>\n<li><\/li>\n<\/ul>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n","protected":false},"excerpt":{"rendered":"<p>Introdu\u00e7\u00e3o: o que esperar deste artigo Ao contr\u00e1rio de outros artigos e tutoriais sobre\u00a0iptables, este n\u00e3o se disp\u00f5e a ensinar sua sintaxe, como construir regras e como bloquear este ou aquele tipo de pacote. Artigos meus futuros poder\u00e3o passear por este caminho, muito embora j\u00e1 se tenha muito material na Internet sobre isto. Ele se [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1,79,42,51,68,271],"tags":[366,373,117],"class_list":["post-637","post","type-post","status-publish","format-standard","hentry","category-viazap","category-firewall","category-leitura-recomendada","category-linux-linuxrs","category-redes-2","category-seguranca-2","tag-do","tag-estrutura","tag-iptables"],"_links":{"self":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/637","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=637"}],"version-history":[{"count":2,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/637\/revisions"}],"predecessor-version":[{"id":639,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/637\/revisions\/639"}],"wp:attachment":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=637"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=637"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=637"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}