secure/mod_security

웹 방화벽 mod_security

C/H 2015. 3. 19. 19:22

우부투 Apache

# 설치
apt-get install libapache2-modsecurity
# 설치 확인
apachectl -M | grep --color security
# 룰 설정, 상황에 따라 수정
mv /etc/modsecurity/modsecurity.conf{-recommended,}
# 아파치 재시작
service apache2 reload

우분투 NGINX




modesecurity 설정

sudo vi /etc/modsecurity/modsecurity.conf
# SecRuleEngine DetectionOnly 를 찾은 후 아래 On으로 변경
SecRuleEngine On

# SecResponseBodyAccess On 을 찾아서 아래 Off 설정
# 본문 버퍼링 여부확인, On일 경우 로그파일 크기가 증가하니 데이터 유출, 검출 및 보호가 필요한 경우에만 필수로 적용
SecResponseBodyAccess Off

# 웹에서 게시 할 수 있는 데이터 제한
# SecRequestBodyLimit : 최대 POST데이터 크기 지정, 413 에러 사용, 파일업로드가 없을 경우 값을 작게설정.
# SecRequestBodyNoFilesLimit : SecRequestBodyLimit 와 유사한 기능이지만, 실용성이 낮다. POST데이터의 최소 사이즈 제한
SecRequestBodyLimit 13107200 #12.5MB
SecRequestBodyNoFilesLimit 131072 #128KB

# SecRequestBodyInMemoryLimit : 서버 성능에 영향을 미치는 설정. 
# 본문 데이터가 사용가능한 메모리 지정, 메모리가 여유가 있다면 유용한 설정이다.
SecRequestBodyInMemoryLimit 131072 #128KB

SQL Injection 테스트

<html>
<body>
<!?php
if(isset($_POST['login']))
{
	$username = $_POST['username'];
	$password = $_POST['password'];
	$con = mysqli_connect('localhost','root','password','sample');
	$result = mysqli_query($con, "SELECT * FROM `users` WHERE username='$username' AND password='$password'");
	if(mysqli_num_rows($result) == 0)
		echo 'Invalid username or password';
	else
		echo '<h1>Logged in</h1><p>A Secret for you....</p>';
}
else
{
?>
  <form action="" method="post">
  Username: <input type="text" name="username"/><br />
  Password: <input type="password" name="password"/><br />
  <input type="submit" name="login" value="Login"/>
  </form>
<!?php
}
?-->
</body>
</html>

테스트를 위한 설정(Apache)

sudo vi /etc/apache2/mods-enabled/mod-security.conf
#   지시자 사이에 아래 정보를 확인한다.
Include "/usr/share/modsecurity-crs/*.conf"
Include "/usr/share/modsecurity-crs/activated_rules/*.conf"
# 아래 3개의 룰을 참고하거나 activated_rules 에 복사하거나 링크를 걸어서 사용하면된다.
# /usr/share/modsecurity-crs/base_rules
# /usr/share/modsecurity-crs/optional_rules
# /usr/share/modsecurity-crs/experimental_rules

cd /usr/share/modsecurity-crs/activated_rules/
ln -s /usr/share/modsecurity-crs/base_rules/modsecurity_crs_41_sql_injection_attacks.conf .

# 아파치 재시작
service apache2 reload
반응형