AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-537128

TRW's questions

Martin Hope
TRW
Asked: 2024-11-05 15:48:35 +0800 CST

Nginx fecha a conexão

  • 4

Estou executando um pacote nginx padrão no Debian Bookworm. Normalmente, estou apenas usando as conexões HTTPS para esse serviço e está tudo bem. O padrão para a porta HTTP 80 é um redirecionamento para o protocolo HTTPS.

server {
  listen 80 default_server;
  listen [::]:80 default_server;
  server_tokens off;

  return 301 https://$host$request_uri;

  access_log /var/log/nginx/access.log;
  error_log /var/log/nginx/error.log error;
}

// vhosts with listen 443 configs omited here, they work

Tenho um cliente IoT que não fala HTTPS. Então, configurei-o para usar HTTP para enviar dados do sensor para uma url de hook no servidor Nginx. Adicionei um VHost para esse domínio local xyz, que não encaminha a solicitação para HTTPS, mas a processa com HTTP simples.

server {
  listen 80;
  listen [::]:80;
  server_name xyz;
  server_tokens off;

  location / {
    root /var/www/html/;
  }

  access_log /var/log/nginx/access.log;
  error_log /var/log/nginx/error.log error;
}

// vhosts with listen 443 configs omited here, they work

Mas essa solicitação nunca é processada pelo Nginx.

Usando curl, estou recebendo esta resposta

# curl -v http://localhost/
*   Trying 127.0.0.1:80...
* Connected to localhost (127.0.0.1) port 80 (#0)
> GET / HTTP/1.1
> Host: localhost
> User-Agent: curl/7.88.1
> Accept: */*
> 
* Received HTTP/0.9 when not allowed
* Closing connection 0
curl: (1) Received HTTP/0.9 when not allowed

(Info: Nginx está escutando em todos os dispositivos, nenhum firewall está ativo, quando paro o serviço, a porta é fechada no Linux...).

Não há nenhuma mensagem de log de erro nem no journald, nem nos logs de acesso ou de erro do nginx.

Então tentei fazer o hardcore telnetna porta 80 e obtive um resultado mais estranho:

# telnet localhost 80
Trying ::1...
Connected to localhost.
Escape character is '^]'.
GET / HTTP/1.1
Connection closed by foreign host.

Para esclarecer, eu digitei GET / HTTP/1.1\nsem uma segunda linha vazia, apenas um "enter". Quando eu digito algo que não é compatível com HTTP, como uma string aleatória, o servidor responde com ??.

Então, logo após a primeira linha, o Nginx está fechando a conexão (a resposta HTTP/0.9 vem do próprio curl).

Como não consegui definir o Host:cabeçalho na solicitação telnet, essa solicitação nunca verifica nenhuma configuração de host virtual e presumo que o cliente curl tenha o mesmo problema. Ele tenta enviar todos os cabeçalhos para o soquete, mas a resposta Nginx já está lá.

Não tenho ideia do que está errado. O servidor deve pelo menos esperar pelo Host-header antes de fechar a conexão. O /etc/nginx/nginx.confnão é alterado.

De acordo com nginx -ta configuração está ok, o servidor responde normalmente em curl -v https://localhost/. A configuração SSL etc. é omitida aqui. Está funcionando.

nginx
  • 1 respostas
  • 140 Views
Martin Hope
TRW
Asked: 2021-07-30 08:53:20 +0800 CST

Wireguard Site2Site com escritório móvel

  • 0

Tenho redes conectadas com Wireguard.

Lan1:
  10.240.0.0/24
  via 10.100.1.1/32 on public static ip A.B.C.D/32

Lan2:
  192.168.0.0/24
  via 10.100.1.6/32 on dynamic ip from provider

A rede 10.240.0.0 é uma rede wireguard (wg0) em vários servidores públicos e um servidor é um "gateway" com uma interface wg1 especial com 10.100.1.1. Assim, posso acessar do gateway todos os nós da rede 192.168.0.0. Na Lan2 é uma rede local clássica com alguns servidores. Também nesse peer eu posso alcançar todos os nós atrás de Lan1.

Agora eu quero adicionar um novo par em algum lugar "selvagem" - um escritório móvel. O usuário deve ter acesso a Lan1 e Lan2 ao mesmo tempo, por exemplo, chegar a 10.240.0.0/24 e 192.168.0.0/24. O peer em si é um telefone celular com cliente Wireguard como exemplo.

Gateway Lan1 wg1.conf

[Interface]
Address = 10.100.1.1/32
...

PostUp   = iptables  -A FORWARD -i %i -j ACCEPT; iptables  -A FORWARD -o %i -j ACCEPT; iptables  -t nat -A POSTROUTING -o eth0 -j MASQUERADE;
PostDown = iptables  -D FORWARD -i %i -j ACCEPT; iptables  -D FORWARD -o %i -j ACCEPT; iptables  -t nat -D POSTROUTING -o eth0 -j MASQUERADE;

# road-warrior
[Peer]
PublicKey = ...
AllowedIps = 10.100.1.2/32

# Lan2 gateway
[Peer]
PublicKey = ...
AllowedIps = 10.100.1.6/32, 192.168.0.0/24

E o host Lan2

[Interface]
Address = 10.100.1.6/32
...

PostUp   = iptables  -A FORWARD -i %i -j ACCEPT; iptables  -A FORWARD -o %i -j ACCEPT; iptables  -t nat -A POSTROUTING -o ens18 -j MASQUERADE
PostDown = iptables  -D FORWARD -i %i -j ACCEPT; iptables  -D FORWARD -o %i -j ACCEPT; iptables  -t nat -D POSTROUTING -o ens18 -j MASQUERADE

# lan1_gate
[Peer]
PublicKey = ...
EndPoint = fqdn:port
AllowedIPs = 10.100.1.1/32, 10.240.0.0/24

Só consigo definir (no meu entendimento) nesse celular o peer do gateway lan1, pois não tenho acesso ao lan2_gateway mas quero rotear todo o tráfego von 192.168.0.0 sobre lan1_gateway para lan2_gateway

[Interface]
Address = 10.100.1.2/32
...

[Peer]
PublicKey = ...
EndPoint = fqdn:port
AllowedIPs = 10.100.1.1/32, 192.168.0.0/24, 10.240.0.0/24

Quando conecto o road warrior com lan1, consigo chegar a 10.240.0.0/24 mas não a 192.168.0.0. O que está errado? Preciso de outra regra de encaminhamento em lan1_gate para encaminhar o tráfego de 192.168.0.0 para 10.100.1.6? Isso já deveria estar feito.

#> ip r s
default via 172.31.1.1 dev eth0 onlink
...
10.100.1.2 dev wg1 scope link 
10.100.1.6 dev wg1 scope link 
...
10.240.0.4 dev wg0 scope link 
10.240.0.5 dev wg0 scope link 
...
172.31.1.1 dev eth0 proto kernel scope link src A.B.C.D 
192.168.10.0/24 dev wg1 scope link 

Alguma ideia?

wireguard
  • 1 respostas
  • 64 Views
Martin Hope
TRW
Asked: 2021-02-02 01:44:35 +0800 CST

Dovecot Proxy com Lua ou?

  • 1

Eu criei um proxy Dovecot que envia usuários para back-ends específicos com base em seu domínio. O domínio A vai para o servidor A e o domínio B vai para o servidor B, etc. A lista de domínios não é estática, mas não muda muito. Isso funciona totalmente bem com um sql de driver passdb e uma instrução SQL simples como:

password_query = SELECT 
    NULL as password, 
    'y' as nopassword, 
    'y' as proxy, 
    NULL as destuser, 
    'y' as proxy_nopipelining, 
    host, 
    'y' as nodelay, 
    'y' as nologin, 
    'any-cert' as 'starttls' 
  FROM proxy_domain WHERE domain = '%d';

A configuração do dovecot contém:

passdb {
  args = /etc/dovecot/sql.conf
  driver = sql
}

userdb {
  args = static uid=5000 gid=5000 home=/dev/null
  driver = static
}

Meu "problema" não é realmente um problema - mas... Eu preciso instalar e executar um servidor Mysql/MariaDB apenas para este trabalho e acho que deve haver uma maneira mais fácil de resolver o host para um domínio específico. Uma instalação postfix paralela usa um mapa de transporte simples para fazer o mesmo trabalho. Eu não preciso de um servidor SQL para essa pesquisa simples.

Eu pensei sobre o passdb do Dovecot Lua ou o passdb estático , mas não consigo encontrar nenhum exemplo útil para combinar um domínio com um host com Lua ou como retornar todos os parâmetros necessários?

Então eu instalei o pacote debian dovecot-auth-lua.

Eu tentei com:

passdb {
  driver = lua
  args = file=/etc/dovecot/passdb.lua blocking=yes
  default_fields = password=NULL nopassword=y proxy=y destuser=NULL proxy_nopipelining=y nodelay=y nologin=y starttls=any-cert
}

O bloqueio aqui é necessário? É operação somente leitura, ou?

O roteiro Lua:

local database = "/etc/dovecot/backends"

function auth_passdb_lookup(req)
 for line in io.lines(database) do
   for domain, host in string.gmatch(line, "(.+)%s(.+)") do
     if (domain == req.domain) then
       return dovecot.auth.PASSDB_RESULT_OK, "host=" .. host
     end
   end
 end
 return dovecot.auth.PASSDB_RESULT_USER_UNKNOWN, ""
end

e, claro, o arquivo de backends com <domain> <host>por linha.

Mas eu tenho um erro no proxy

pam_unix(dovecot:auth): check pass; user unknown
pam_unix(dovecot:auth): authentication failure; logname= uid=0 euid=0 tty=dovecot ruser=user@domain rhost=<my-ip>
pam(user@domain,ip,<id>): pam_authenticate() failed: Authentication failure (Password mismatch?)

O que isto significa? Não tenho certeza - mas é, porque eu retorno "NULL" em alguns deles. Quando eu removo os dois atributos passworde destusertem o mesmo efeito.

dovecot
  • 1 respostas
  • 270 Views
Martin Hope
TRW
Asked: 2020-11-10 06:36:24 +0800 CST

Adicionar verificação de serviço ao agente na infraestrutura Icinga Master-Satellite-Agent

  • 0

Tenho um ambiente assim:

  • mestre
  • alguns satélites atribuídos ao mestre
  • muitos agentes atribuídos aos satélites e alguns atribuídos ao mestre (sem um satélite).

Todos os sistemas estão prontos e a configuração da PKI está concluída. Além disso, a maioria das verificações padrão (apt, disco, cpu) está em execução e posso ver o estado atual no mestre. Agora comecei a implementar verificações personalizadas (como check_eth para monitorar o tráfego de rede). Publiquei o script para todos os hosts e defini também em todos os hosts o comando:

object CheckCommand "check_eth" {
  import "plugin-check-command"
  command = [ "/usr/bin/sudo", PluginDir + "/check_eth" ]
 
  arguments       = {
   "-w" = {
      value                     = "$eth_warning$"
      description               = "Percent free/used when to warn"
      required                  = true
    }
    "-c" = {
      value                     = "$eth_critical$"
      description               = "Percent free/used when critical"
      required                  = true
    }
    "-i" = {
      value                     = "$eth_interface$"
      description               = "Given network interface"
      required                  = true
    }
  }

  vars.eth_interface  = "enp0s31f6"
  vars.eth_warning  = "2048G"
  vars.eth_critical = "4096G"
}

Eu posso executar o script em todos os hosts. No Master, os satélites e todos os hosts que atribuíram diretamente ao master a resposta da verificação são visíveis. Em todos os hosts com parent=satellite o estado é UNKNOWN. E esse é o meu problema... por quê?

O objeto host é como:

# master: /etc/icinga2/zones.conf

object Endpoint "monitor.domain" {
}

object Zone "master" {
  endpoints = [ "monitor.domain" ]
}

object Endpoint "satellite1.domain" {
    host = "<ip>"
    port = "<port>"
}

object Zone "satellite1.domain" {
    parent = "master"
    endpoints = [ "satellite1.domain" ]
}

A configuração do satélite fica assim:

# master: /etc/icinga2/zones.d/satellite1.domain/hosts.conf

object Host "satellite1.domain" {
    import "generic-host"
    check_command = "hostalive"
    zone = "master"

    address = "<ipv4>"
    address6 = "<ipv6>"
    
    vars.agent_endpoint = name
    ...
}

object Host "agent1.domain" {
    import "generic-host"
    check_command = "hostalive"
    zone = "satellite1.domain"

    address = "<ipv4>"
    address6 = "<ipv6>"
    
    vars.agent_endpoint = name
    ...
}
...

A zona incl. endpoint dentro do satélite também é definido no mestre:

# master: /etc/icinga2/zones.d/satellite1.domain/zones.conf
object Zone "agent1.domain" {
    parent = "satellite1.domain"
    endpoints = [ "agent1.domain" ]
}

object Endpoint "agent1.domain" {
    host = "<ip>"
    port = "<port>"
}

E agora a aplicação do comando ao host (também definido no master)

# master: /etc/icinga2/zones.d/satellite1.domain/services.conf

apply Service "Network Traffic" {
  import "generic-service"

  check_command = "check_eth"
  command_endpoint = host_name

  assign where host.name == "satellite1.domain"
}

apply Service "Network Traffic" {
  import "generic-service"

  check_command = "check_eth"
  command_endpoint = host_name

  assign where host.name == "agent1.domain"
}

O que eu sinto falta?

icinga2
  • 1 respostas
  • 350 Views
Martin Hope
TRW
Asked: 2020-10-21 06:24:20 +0800 CST

Roteamento de proteção de fio de wg1 para wg0

  • 1

Tenho duas redes configuradas com Wireguard. wg0 é para servidores e wg1 para usuários de VPN. Quando um usuário VPN em wg1 deseja acessar a rede wg0, os pacotes devem ser roteadores em um dos servidores wg0 (o portão VPN).

wg0.conf no gateway VPN e em todos os servidores com interface wg0

[Interface]
Address = 10.1.0.15
ListenPort = 51820
PrivateKey = privatekey1

# node23
[Peer]
PublicKey = pubkey
AllowedIps = 10.1.0.23
Endpoint = node23.fqdn:51820

# node24
[Peer]
PublicKey = pubkey
AllowedIps = 10.1.0.24
Endpoint = node24:51820

# node25
[Peer]
PublicKey = pubkey
AllowedIps = 10.1.0.25
Endpoint = node25.fqdn:51820
...

wg1.conf no gateway VPN

[Interface]
Address = 10.100.0.1/32
ListenPort = 51810
PrivateKey = privatekey2

PostUp   = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

# user1    [Peer]
PublicKey = pubkey
AllowedIps =  10.100.0.2/32
...

E estes são os usuários wg1.conf (na verdade wg0 porque eles não têm um endereço 10.1.0.0)

[Interface]
Address = 10.100.0.2/32
ListenPort = 21841
PrivateKey = myprivatekey

[Peer]
PublicKey = pubkey
EndPoint = vpngate.fqdn:51810
AllowedIPs = 0.0.0.0/0

PersistentKeepalive = 25

Então, no próprio portão VPN eu posso executar curl -v http://10.1.0.23/e estou recebendo uma resposta dentro da rede wg0. Ping funciona para. Eu posso alcançar todos os servidores dentro da rede. O mesmo com wg1-client e wg1-server. Também posso navegar na Internet através do portão VPN. Mas quando tento chamar do meu wg1-client um wg0-server como o curl -v http://10.1.0.23/qual deve ser rota (eu acho) através do vpn-gate e de lá via wg1 -> wg0 não há resposta.

O que eu sinto falta?

wireguard
  • 1 respostas
  • 1106 Views
Martin Hope
TRW
Asked: 2020-08-26 07:03:00 +0800 CST

Pombal como Proxy com submissão

  • 0

Na minha infraestrutura tenho vários servidores de correio (mailcow) atendendo diferentes domínios por instância. Eu quero construir um proxy de correio na frente deles para reduzir o número de IPs usados ​​por serviço e permitir que os clientes tenham seus próprios nomes de domínio em suas predefinições de cliente de qualquer maneira.

SMTP como MTA é tratado de forma diferente. As mensagens recebidas via Postfix são tratadas por um servidor central (porque os registros MX não são visíveis para o cliente). Então esse não é meu problema.

Então eu configurei um proxy de e-mail baseado no Dovecot no Debian Buster com a seguinte configuração:

ssl_cert = </etc/dovecot/ssl/default.pem
ssl_key = </etc/dovecot/ssl/default.key

# just an example for different domains via SNI
local_name mail.domain1.tld {
  ssl_cert = </etc/dovecot/ssl/mail.domain1.tld.pem
  ssl_key = </etc/dovecot/ssl/mail.domain1.tld.key
}

# just an example for different domains via SNI
local_name mail.domain2.tld {
  ssl_cert = </etc/dovecot/ssl/mail.domain2.tld.pem
  ssl_key = </etc/dovecot/ssl/mail.domain2.tld.key
}

auth_cache_size = 4 k
disable_plaintext_auth = no

passdb {
  args = /etc/dovecot/sql.conf
  driver = sql
}
protocols = "imap pop3 submission"
service auth {
  user = root
}
userdb {
  args = static uid=5000 gid=5000 home=/dev/null
  driver = static
}

E o sql.conf é

## SQL passdb configuration
driver = mysql

# Database options
connect = host=localhost dbname=dovecot user=dovecot password=dovecot

# Query
password_query = SELECT NULL AS password, NULL AS destuser, host, 'Y' AS nologin, 'Y' AS nodelay, 'Y' AS nopassword, 'Y' AS proxy, 'any-cert' AS `ssl` FROM proxy_domain WHERE domain = '%d'
# eof

O banco de dados contém:

CREATE TABLE `proxy_domain` (
  `domain` varchar(255) NOT NULL,
  `host` varchar(255) NOT NULL,
  PRIMARY KEY (`domain`)
);

insert into proxy_domain (domain, host) values ('domain1.tld','mailhost1');
insert into proxy_domain (domain, host) values ('domain2.tld','mailhost2');

Este é mais ou menos o exemplo de

  • proxy: https://wiki1.dovecot.org/HowTo/ImapProxy (última atualização em 2011 com parâmetros de configuração muito antigos)
  • SNI: https://wiki.dovecot.org/SSL/DovecotConfiguration

Os serviços IMAP e POP3 estão no ar e com

openssl s_client -connect ac-hcn0002.acoby.net:993

Eu sou capaz de fazer login e também o SNI está funcionando bem. O back-end é acessível via SSL. Com starttls (110, 143, 587) apenas o primeiro certificado é apresentado. Tudo bem e aceitável, porque eu não recomendaria isso ao cliente.

Mas agora submissão (e depois peneira).

Questão 1:

Dovecot é capaz de abrir 587 para submissão. Isso só está disponível via STARTTLS. Mas o proxy tenta se comunicar para envio no sistema back-end direto com SSL na porta 587 (o que não está correto, eu acho - deve começar simples e fazer STARTTLS). Eu acho que isso acontece, porque o passdb retorna global SSL=any-cert. Isso é um inseto? Posso substituir esse comportamento para 587? E talvez exista uma maneira de enviar o certificado correto com STARTTLS (em vez do padrão/primeiro)?

Questão 2:

Em seguida, a porta 465. Dovecot também pode abrir a porta de envio 465/SSL no meu caso para encaminhar todas as mensagens autenticadas para a porta de envio 465 no back-end. Mas como posso configurar isso? Não encontrei nenhum exemplo.

Conheço a infraestrutura de correio com proxy dovecot e a solução com postfix - mas não tenho certeza, se a resposta com o dovecot-socket está funcionando neste cenário e não quero instalar um postfix apenas para envio, quando Dovecot pode lidar com isso fora da caixa.

reverse-proxy dovecot smtp-auth
  • 1 respostas
  • 1540 Views
Martin Hope
TRW
Asked: 2020-01-16 02:21:12 +0800 CST

Gerencie o Ansible Inventory com hosts e vars dinâmicos e estáticos

  • 1

Gostaria de saber qual seria uma boa solução para gerenciar um ambiente com uma combinação de hosts dinâmicos e estáticos e vars e grupos.

Estou pensando em uma combinação de hosts físicos em um datacenter com uma combinação de tarefas específicas (nó de banco de dados físico) mais Hosts Proxmox gerenciando algumas VMs dinâmicas, juntamente com alguns provedores de nuvem para gerenciar novas VMs em alguma situação, onde o desempenho físico é não é suficiente (terceirizar picos de desempenho).

Nesse caso - um inventário dinâmico é uma boa prática. Claro que existem alguns plugins para AWS, Hetzner, etc. Mas é possível combinar isso com entradas estáticas?

Eu construo um banco de dados com todas as entradas e scripts que atualizam a lista de VMs em nuvem por solicitação no banco de dados. Todos os hosts dinâmicos, juntamente com os hosts estáticos e algumas vars de grupo, as vars de host são armazenadas no banco de dados. E há um webservice que gera o inventário dinâmico JSON que um script python carrega e que é usado como um inventário dinâmico em meus playbooks.

Minha pergunta é - eu sou o único com esse tipo de configuração? Quando penso em uma empresa com alguns hosts VMWare juntamente com um número dinâmico de VMs nesses hosts mais alguns outros sistemas físicos, seria "claro" que deveria haver algum tipo de "ferramenta" ou ajuda para essa configuração. Mas até onde posso ver, existe um inventário estático (YAML, INI) ou um inventário dinâmico (JSON). Mas todo administrador desenvolve seu próprio banco de dados de inventário dinâmico? Ou existe um determinado "produto" ou "projeto" de software? Ou é uma prática "melhor" ter estoques diferentes para ambientes "estáticos" e "dinâmicos"?

ansible
  • 1 respostas
  • 616 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve