Seu domínio está em plataforma Windows e você precisa bloquear um IP para que ele não acesse seu site? Veja agora como bloquear IP através do web.config.

Tabela de conteúdos do artigo:

Como bloquear IP através do web.config

Em primeiro lugar, você precisa acessar o FTP do seu domínio. Para domínios em ambiente Windows sugerimos o FileZilla.

Caso não lembre da sua senha de FTP, altere-a pelo Painel Sites.

Após logar no FTP, localize o arquivo web.config e edite da seguinte forma (lembrando que os comandos devem ser feitos dentro da tag “system.webServer”):

<location path="Default Web Site">
   <system.webServer>
      <security>
         <ipSecurity>
            <add ipAddress="172.16.100.27" />
         </ipSecurity>
      </security>
   </system.webServer>
</location>


Basta alterar o IP 172.16.100.27 pelo IP que você deseja bloquear.

Se há mais IPs a serem bloqueados, basta adicionar outra linha e assim por diante.

Mas atenção: Não é recomendado deixar que o web.config tenha mais de 100 linhas de código, principalmente quando é usado para bloqueios.


Outra opção para este tipo de bloqueio é o seguinte script:

<rules>
<rule name="RequestBlockingRule" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
<match url="*" />
<conditions logicalGrouping="MatchAny">
<add input="{REMOTE_ADDR}" pattern="172.16.100.27" />
</conditions>
<action type="AbortRequest" />
</rule> 

Como bloquear um range de IP

Se você deseja bloquear um bloco inteiro de IP, você pode utilizar a seguinte regra:

<location path="Default Web Site">
   <system.webServer>
      <security>
         <ipSecurity>
            <add ipAddress="172.16.0.0" subnetMask="255.255.0.0" />
         </ipSecurity>
      </security>
   </system.webServer>
</location>

Por ser uma máscara de rede classe B, esta regra bloqueia todos os IPs desde 172.16.0.1 até 172.16.255.254.

Da mesma forma como o exemplo anterior, basta adicionar outra linha para bloquear outro range de IPs.

Bloquear tudo e liberar alguns IPs

Por outro lado, se você deseja bloquear totalmente o acesso e liberar apenas o seu IP, por exemplo, você pode usar a regra a seguir.

Neste exemplo estamos bloqueando todos e liberando apenas os IPs 172.16.1.10 e 192.168.10.198:

<security>
   <ipSecurity allowUnlisted="false">
     <add ipAddress="172.16.1.10" allowed="true"/>
     <add ipAddress="192.168.10.198" allowed="true"/>
   </ipSecurity>
</security>


A utilização deste script é mais conveniente para algum diretório específico que você queira restringir o acesso. Por exemplo: http://dominio.com.br/sistema

Aqui também pode ser adicionado mais linhas para liberar mais IPs, se desejar.

Bloqueando Crawlers (bots)

Caso você esteja sofrendo com lentidões em seu site/aplicação, é interessante que você aplique um filtro em seu web.config para bloquear botnets, como este exemplo abaixo:

<rewrite>
	<rules>
		<rule name="Abuse User Agents Blocking" stopProcessing="true">
			<match url=".*" ignoreCase="false"/>
				<conditions logicalGrouping="MatchAny">
		<add input="{HTTP_USER_AGENT}" pattern="^.*(adscanner|ahrefsbot|alphabot|applebot|AhrefsBot|awariosmartbot|bingpreview|blexbot|borneobot|coccocbot-image|com.tinyspeck.chatlyio|duckduckbot-https|e.ventures\ investment\ crawler|garlikcrawler|gather\ analyze\ provide|gluten\ free\ crawler|googlebot-image|healthcheckbot|http\ banner\ detection|hubspot\ links\ crawler|hypestat|internet-structure-research-project-bot|iodc;\ odysseus|ips-agent|lightspeedsystemscrawler|linkdexbot|mail.ru_bot|masscan|masscan|megaindex.ru|mj12bot|msnbot|netcraftsurveyagent|netestate\ ne\ crawler|netsystemsresearch|nimbostratus-bot|nsrbot|obot|petalbot|plukkie|probethenet|riddler|safednsbot|seekport\ crawler|semanticscholarbot|SemrushBot|semrushbot-ba|seokicks-robot|serpstatbot|slack-imgproxy|slackbot|slackbot-linkexpanding|sogou\ web\ spider|startmebot|surdotlybot|telegrambot|tpradstxtcrawler|trendsmapresolver|tweetmemebot|unfurlist|xovibot|yahoo!\ slurp|yandexmobilebot|Yandex|ZoominfoBot|bingbot|DotBot).*$"/>
				</conditions>
		<action type="CustomResponse" statusCode="403" statusReason="Forbidden" statusDescription="Forbidden"/>
		</rule>
	</rules>
</rewrite>