[워드프레스] .htaccess 설정을 사용하여 스팸댓글 차단하기

By | 2023-12-10

워드프레스는 블로그를 만들어 운영할 수 있는 매우 강력한 컨텐츠 관리도구(CMS)다. 하지만 그에 따른 부작용으로 블로그의 포스트에 달라붙는 스팸댓글의 피해도 발생하게 된다. 블로그에 포스트를 작성하면서 성장시키다 보면 어김없이 스팸댓글이 달리게 된다. 앞의 포스트에서 스팸댓글을 휴지통으로 보내거나 승인받은 후에 게시되도록 하는 방법을 포스팅했다. 이 방법을 사용하면 대부분의 스팸댓글이 곧바로 게시되지 않고 승인을 해주어야만 보여지게 되며 스팸댓글이 확실하다면 곧바로 휴지통으로 들어가도록 할 수 있다.

그러나 승인대기중인 스팸댓글을 휴지통으로 보낸 다음 휴지통을 비우는 수고를 감수해야 한다. 그리고 그 때마다 똑같은 스팸댓글이 반복적으로 달린것을 보면 지긋지긋한 마음마저 들게된다. 그렇다면 아예 스팸댓글이 확실한 글들은 댓글작성을 아예 차단하는 방법은 없을까?

가장 편한방법은 스팸댓글을 차단해주는 워드프레스의 플러그인을 사용하는 방법이다. 하지만 좀 쓸만하다 싶은 플러그인은 끊임없이 유료버전을 구매하라는 압력을 넣는데..이게 좀 참아주기 힘들만큼 짜증나기도 한다. 그래서 워드프레스의 플러인을 사용하지 않고 직접 차단을 해보기로 했다.

아파치 웹서버의 .htaccess 파일을 통해 IP 차단하기

.htaccess 파일의 ACL, 즉 Access Control List라 불리는 IP를 기준으로 접근을 통제하는 기술을 사용하면 스팸댓글을 작성하는 IP를 블로그에 아예 접근하지 못하도록 차단할 수 있다.

. htaccess 파일은 기본적으로 /var/www/html 디렉토리에 위치한다. (이 위치는 Apache 웹서버의 설치 방법에 따라 조금씩 다를 수 있다.)

이 파일을 vi 등 편집기로 연다음 다음과 같이 IP 주소를 입력한다.

.htaccess 파일에 추가한 스팸댓글 작성 IP 접근차단 정책
<Files *> ~ </Files> 사이에 추가한 스팸댓글 작성 IP 대역 접근차단 정책

위 화면처럼 <Files *> 지시자 라인부터 </Files>까지를 추가하거나 이미 있다면 지시자 시작과 끝 라인을 제외한 본문 내용만 추가해주면 된다. 스팸댓글을 작성하는 IP가 5.188.210.100 번이라면 “deny from 5.18.210.0/24” 와 같이 스팸댓글을 작성하는 IP를 기준으로 맨 끝자리의 IP를 0/24 로 바꿔 넣으면 된다. 이렇게 바꿔 넣는 이유는 종종 IP 끝자리만 다른 IP로 바꿔 다시 스팸댓글 작성을 시도하는 경우가 많기 때문이다.

그렇게 스팸댓글 IP를 추가한 다음 저장하고 Apache 웹서버를 재실행하면 된다.

그렇다면 워드프레스에 스팸댓글을 작성하는 IP를 어떻게 확인해야할까? 그건 바로 워드프레스의 댓글 목록과 워드프레스 DB에 직접 접속해 통계를 내는 방법으로 확인할 수 있다.

워드프레스 관리자페이지에서 스팸댓글을 휴지통에 넣기

먼저 워드프레스의 관리자페이지에서 스팸댓글을 휴지통으로 이동시킨다. 워드프레스의 댓글목록을 보면 아래 화면처럼 IP주소가 보인다.

댓글 중 스팸댓글을 찾아 아래 화면처럼 휴지통 링크를 찾아 눌러준다. 그러면 해당 댓글은 휴지통으로 들어간다.

모든 댓글을 휴지통으로 보냈다면 이제 워드프레스의 DB에 직접 접속해서 작업을 해야 한다.

워드프레스의 DB에서 댓글 목록보기

워드프레스를 직접 설치했다며 당연히 DB에 직접 접속할 수 있으며 워드프레스 호스팅 서비스를 사용한다면 DB에 직접 접속을 지원하는 경우도 있다. 가능하다면 다음과 같이 DBeaver와 같은 도구를 통해 접속한다.

워드프레스의 포스트에 달린 댓글은 모두 wp_comments 라는 테이블에 저장된다. 이 댓글의 목록은 위 화면처럼 SELECT라는 SQL 문을 통해 조회할 수 있다.

select * from wp_comments;

그리고 최근에 달린 댓글을 조회할 때는 다음과 같은 SQL 문을 사용해 조회할 수 있다. comment_ID 칼럼의 값이 클 수록 최근에 작성된 댓글이다.

select comment_ID, comment_author, comment_author_IP, comment_date, comment_approved, comment_content
from wp_comments
order by comment_ID desc

이 SQL문을 실행시키면 다음과 같은 화면을 볼 수 있다.

comment_ID가 큰 댓글부터 보인다는 것을 알 수 있으며 comment_author_IP 컬럼에 댓글을 작성한 IP를 확인할 수 있다는 것도 알 수 있다. 그리고 휴지통으로 보낸 댓글은 comment_approved 컬럼의 값이 “trash”로 되어 있다는 것도 확인이 가능하다. 이 값이 1 이면 승인된 댓글이고 화면에는 보이지 않지만 0일 경우 승인 대기중이다.

이제 다음의 SQL 문을 실행해서 휴지통으로 보낸 댓글들을 comment_author_IP의 값이 동일한 댓글들을 모아 그룹을 지은 다음 그룹별로(동일한 IP의 댓글) 개수를 카운트하여 표시하도록 한다. 그리고 개수가 많은 IP주소부터 표시한다.

select comment_author_IP, count(*) as ct from wp_comments
where comment_approved = 'trash'
group by comment_author_IP
order by ct desc

이 SQL 문을 실행하면 다음과 같은 화면을 볼 수 있다.

이제 이 IP 주소를 .htaccess 파일의 <Files *> 과 </Files> 사이에 추가해주면 된다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다