아파치 보안 강화를 위한 업로드 크기 제한 설정, 이미지 도용 방지, 그리고 접근 제어 설정 방법에 대해 알아보자.
1. 업로드 크기 제한 설정
Apache의 LimitRequestBody 지시어를 사용하면 파일을 업로드할 때 크기 제한할 수 있다. 아래는 파일 업로드 크기를 10,000바이트로 제한하는 설정이다.
<Directory "/var/www/html/uploads">
LimitRequestBody 10000
</Directory>
설정한 것보다 더 큰 파일을 업로드하면 Apache는 기본적으로 에러 메시지를 표시하게 된다. 이를 커스터마이징하고 싶다면 ErrorDocument 413를 사용할 수 있으며, 아래와 같이 특정 스크립트를 작성하여 403에러를 413 Request Entity Too Large로 반환할 수도 있다.
SetEnvIf Content-Length "^[1-9][0-9]{4,}" upload_too_large=1
<Location /upload>
Order Deny,Allow
Deny from env=upload_too_large
ErrorDocument 403 /cgi-bin/script-403-to-413
</Location>
2. 외부 사이트에서의 이미지 링크 차단 (핫링크 방지)
다른 외부 사이트에서 내 서버에 있는 이미지를 링크를 사용해 가져다 쓰는 경우가 있다. 이런 경우 서버 부하가 많이 발생하게 되어 운영 중인 웹서비스의 속도가 떨어지게 되고, 네트워크 대역폭을 낭비하게 된다.
이를 방지하기 위해서는 httpd.conf 파일의 섹션 내에서 아래의 설정이 필요하다. 이미지 파일에 대한 요청이 내 서버에서 온 링크가 아닌 경우에는 403 Forbidden 상태로 거부되며, 해당 이미지를 링크한다고 하더라도 표시되지 않게 해준다.
<Directory "/path/to/images">
<FilesMatch "\.(jpg|jpeg|gif|png)$">
SetEnvIfNoCase Referer "^http://([^/]*\.)?myweb.com/" local_referrer=1
Order Allow,Deny
Allow from env=local_referrer
</FilesMatch>
</Directory>
- <Directory> : 대상 디렉토리 설정
- <FilesMatch> : 특정 파일 확장자에 대한 설정
- SetEnvIfNoCase는 요청 헤더의 Referer 필드를 검사함. (Referer 필드는 요청이 발생한 웹 페이지의 URL을 의미)
- 조건을 충족하면 Allow, 그렇지 않으면 Deny
- local_referrer 환경 변수가 설정된 요청 (즉, Referer가 myweb.com으로 시작하는 요청)에 대해서는 접근을 허용
위의 예시처럼 요청이 거부되는 대신, 원하는 이미지가 표시되게 설정 할 수도 있다. 이를 통해 사용자에게 도용된 이미지라는 것을 알려줄 수 있어 더 효과적이다.
SetEnvIfNoCase Referer "^http://([^/]*\.)?myweb.com/" local_referrer=1
RewriteCond "%{ENV:local_referer}" "!=1"
RewriteRule ".*" "/Deny100x100.png" [L]
3. 특정 네트워크 접근 허용 및 비밀번호 설정
아파치에서 Satisfy 지시어를 사용하면 특정 네트워크만 접근할 수 있도록 허용하거나, 사용자가 특정 리소스에 접근하기 전에 비밀번호를 입력하도록 설정할 수 있다. 만약 조건을 충족하지 않으면 403 Forbidden 에러가 반환된다.
<Directory /www/htdocs/sensitive>
# 모든 제한을 적용
Satisfy All
# 접속 시 비밀번호를 입력하도록 설정
AuthType Basic
AuthName Sensitive
AuthUserFile /www/passwords/users
AuthGroupFile /www/passwords/groups
Require group test
# 특정 네트워크만 접근 허용
Order deny,allow
Deny from all
Allow from 192.168.1
</Directory>
- 사용자가 test그룹에 속하고, 192.168.1 대역인 경우에만 접속 가능
- Satisfy All : 모든 접근 제어 조건이 충족되어야만 접근 가능
- AuthType : 인증 유형 설정 (평문으로 전송하는 Basic방식과 비밀번호를 해시하여 전송하는 방식인 Digest가 있다.)
추가로, Apache 2.4 버전에서는 해당 문법이 변경되었다. 이전 버전에서는 Order, Allow from, Deny from를 사용하여 접근 제어를 설정했지만, Apache 2.4에서는 Require 지시어로 통합하여 사용한다.
<Directory /www/htdocs/sensitive>
<RequireAll>
Require group test
Require ip 192.168.1
</RequireAll>
</Directory>
'SW > WEB WAS' 카테고리의 다른 글
[Apache] 아파치 에러 페이지 설정 방법 (0) | 2024.09.24 |
---|---|
[Apache] OpenSSL을 사용한 자체 서명된 인증서 발급 및 적용 (0) | 2024.09.21 |
[Apache] 아파치 Alias, Redirect, Rewrite 설정 살펴보기 (1) | 2024.09.18 |
[Apache] mod_vhost_alias와 mod_rewrite (0) | 2024.09.17 |
[Apache] Virtual Hosts 종류 알아보기 (0) | 2024.09.14 |