web-dev-qa-db-ja.com

専用IPを指すランダムドメインをブロックする

私は自分の専用IPに行くAレコードを持つランダムなドメイン名を持っています。したがって、コンテンツを複製します。 iptablesでIPレベルでドメインを無効にできる方法はありますか?

常にHTTPSを強制するため、メインドメインにリダイレクトする。htaccessセットアップがあります。

6
mldev

仮想ホスト構成を使用して、このような状況に対処します。 Apacheでは、最初の仮想ホストは「デフォルト」仮想ホストです。メッセージで404エラーを処理するように構成します

404が見つかりません-ホスト名が認識されません

このサーバーは、foo.example.comのドキュメントを提供するように構成されていません

次に、ホスト名isが正しい場合に正しいコンテンツを提供するサイトごとに特定の仮想ホストを作成します。

以下に、404.plを使用してallリクエストを処理するデフォルトの仮想ホスト構成を示します。

<VirtualHost *:80>
    Servername localhost.localdomain
    DocumentRoot /var/www/default
    <Directory /var/www/default/>
        Require all granted
        Options +ExecCGI
        AddHandler cgi-script .pl
        RewriteEngine on
        RewriteCond $1 !-f
        RewriteRule ^(.*)$ 404.pl
        AllowOverride None
    </Directory> 
</VirtualHost>

そして、ここに404.plスクリプトがあります。これは、「hostname notrecognize」メッセージを出力するだけでなく、ほとんど正しいが正規ではないドメイン名へのリダイレクトも行います。

#!/usr/bin/Perl

use strict;

# Put the Host names you actually use in here to enable redirects
# The left side should be the "main" domain name and the right should include the TLD
# This enables redirects for alternate TLDs.
my $hostnameredirects = {
  'example' => 'example.com',
  'foo' => 'foo.example.com',
};
my $hostname = `hostname --fqdn`;
chomp $hostname;

my $server = $ENV{'SERVER_NAME'};
$server = "" if (!$server);
$server =~ s/[^\-\_\.A-Za-z0-9]//g;
$server = lc($server);
my $uri = $ENV{'REQUEST_URI'};
$uri = "" if (!$uri);
$uri =~ s/[ \r\n]+//g;
$uri = "/$uri" if ($uri !~ /^\//);

&serverNameRedirect();
&noVirtualHostError();
&show404();

sub serverNameRedirect(){
    my $domain = &removeTld($server);
    while ($domain){
        if ($hostnameredirects->{$domain}){
            &redirect('http://'.$hostnameredirects->{$domain}.$uri);
        }
        $domain =~ s/^[^\.]*[\.]?//g;
    }
}

sub removeTld(){
    my ($domain) = @_;
    $domain =~ s/\.(([^\.]+)|((([A-Za-z]{2})|com|org|net)\.[A-Za-z]{2}))$//g;
    return $domain;
}

sub redirect(){
    my ($redirect) = @_;
    my $eRedirect = &escapeHTML($redirect);
    print "Status: 301 Moved Permanently\n";
    print "Location: $redirect\n";
    print "Content-type: text/html\n";
    print "\n";
    print "<html><body><p>Moved permanently: <a href=\"$eRedirect\">$eRedirect</a></p></body></html>\n";
    exit;
}

sub show404(){
    my $eServer = &escapeHTML($server);
    &errorPage(
        '404 Not Found',
        '404 Not Found -- Hostname Not Recognized',
        "This server is not configured to serve documents for '$eServer'"
    );
}

sub noVirtualHostError(){
    if ($server !~ /^\d+\.\d+\.\d+\.\d+$/){
        return;
    }
    &errorPage(
        '400 Bad request',
        '400 Bad Request -- No Hostname Sent',
        "This server only accepts requests with a domain name, not requests for an ip address such as $server"
    );
}

sub errorPage(){
    my ($status, $title, $message) = @_;
    print STDERR "$title\n";
    print STDERR "$message\n";
    print "Status: $status\n";
    print "Content-type: text/html\n";
    print "\n";
    print "<html>\n";
    print "<head>\n";
    print "<title>$title</title>\n";
    print "</head>\n";
    print "<body>\n";
    print "<h1>$title</h1>\n";
    print "ERROR: $message\n";
    print "</body>\n";
    print "</html>\n";
    exit;
}

# Convert <, >, & and " to their HTML equivalents.
sub escapeHTML {
     my $value = $_[0];
     $value =~ s/\&/\&amp;/g;
     $value =~ s/</\&lt;/g;
     $value =~ s/>/\&gt;/g;
     $value =~ s/"/\&quot;/g;
     return $value;
}
7

コンテンツを盗むブラックハットサイトを処理するための別の適切な手段:( canonical URLs ):

<link rel="canonical" href="https://blog.example.com/green-dresses-are-awesome" />

犯罪者は、サイトの不正コピーを作成し、それを3つのサーバーでホストして、コンテンツから利益を得ることができます( Webスクレイピング 経由)。正規のリンクタグを使用すると、犯罪者が自分のドメインのみを指すようにリンクを変更しない限り役立ちます。その場合、彼と戦う方法がわかりません。

1
gavenkoa