cloudflareではDDoSは検知されていないのに異様にphp-fpmやmariadbのCPU使用率が高いという時に調べたところ、検索荒らしと連続コメント投稿荒らしが発生していました。コメントはパスワード制にしており弾かれていたので、かえって発見が遅れてしまいました。
iptablesやfirewalldなどで海外アクセス自体を弾きたいのですが、Let’s encryptやgoogleなども弾いてしまうので、もっと簡単に対策してみます。
まず、検索対象を投稿とタイトルだけに絞ります。function.phpに以下を追加します。
/**
* 検索を「投稿のタイトルのみ」に限定する
*/
function my_search_title_only( $search, $query ) {
global $wpdb;
// 管理画面以外 かつ 検索時のみ適用
if ( $query->is_search() && $query->is_main_query() && ! is_admin() ) {
$search = '';
$q = $query->get( 's' );
if ( $q !== '' ) {
$like = '%' . $wpdb->esc_like( $q ) . '%';
$search = $wpdb->prepare( " AND ({$wpdb->posts}.post_title LIKE %s) ", $like );
}
}
return $search;
}
add_filter( 'posts_search', 'my_search_title_only', 10, 2 );
/**
* 検索対象を投稿のみに限定する
*/
function my_search_filter_post_type( $query ) {
if ( $query->is_search() && $query->is_main_query() && ! is_admin() ) {
$query->set( 'post_type', 'post' );
}
}
add_action( 'pre_get_posts', 'my_search_filter_post_type' );
次にCloudflareで検索とコメント投稿を海外からさせないようにします。
Cloudflare ダッシュボード → Security → セキュリティルール
で、ルールを作成を押します。
条件は、
フィールド:URIクエリー文 → 次を含む → replytocom
AND
フィールド: 国 → 次と等しくない → Japan
アクション: ブロック または マネージドチャレンジ
で登録します。
もう一つは
フィールド:URIクエリー文 → 次を含む → s=
AND
フィールド: 国 → 次と等しくない → Japan
アクション: ブロック または マネージドチャレンジ
にします。

30分でこのブロック数!効果てきめんです。




コメント