세이박스

[보안] 서버 설치 후 기본적으로 해야할 보안 사항을 간단하게 정리 해보겠습니다.

서버,보안
1. 서버패치 주기적으로 설치
서버 패치는 항상 주기적으로 해주셔야겠죠!
윈도우 서버의 경우 윈도우업데이트 기능이 있으며 리눅스의 경우 yum으로 편리하게 업데이트 가능하죠
yum -y upgrade

2. 비번 주기적으로 변경
루트 뿐만 아니라 일반 개정 까지 주기적으로 변경 해주시는게 좋습니다.
요즘, 같은 네트워크 대역의 서버 또는 라우트 등의 장비등이 해킹 당하면 지나 다니는 모든 패킷을 수집하여 관리자 개정등을 분석하여 접속하게 됩니다.
따라서, 주기적으로 변경 한다면 수집된 개정이 이전 개정이라 접속 못하게 되겠죠.
어디까지나 조금이라도 피해를 줄이기 위해선 변경 해주시는게 좋습니다.

3. OS 방화벽 및 포트 설정
윈도우든 리눅스든 OS 자체에 방화벽이 있습니다.
원리는 포트를 막느냐 열어 주느냐 정도 이지만 불필요한 포트를 막아 두므로써 취약한 서비스를 통해 공격 받는것을 최소화 할 수 있겠죠
리눅스의 경우
setup > Firewall.... 항목에서 방화벽 레벨을 high로 하시고 열어줄 port를 추가로 지정 해주시는게 좋습니다.
이때 포트는 기본 포트를 이용하시지 마시고 5자리 정도로 만들어 주세요!
예로 FTP의 경우 21포트 이지만 21포트는 막고 21123 처럼 5자리로 열어주시는게 좋습니다.
telnet 23 사용 하지 마시고 SSH 사용하시되 기본 포트인 22을 5자리로 변경해서 이용하세요.
기타 웹서비스를 하신다면 80포트는 기본 사용 하셔야겠죠.
외 DB를 이용하신다면 MySQL의 경우 3306 포트를 열어 두셔야겠죠.
물로 MySQL역시 포트를 변경 할 수 있습니다.
기본 포트를 그대로 이용하기 보다는 5자리 이상으로 변경해서 사용하시는게 좋습니다.
이유는 대부분 해킹 프로그램이 포트를 스켄할때 기본 포트 부터 스켄하며 높은 숫자로 갈수록 스켄하는 시간이 많이 걸리므로 그만큼 노출될 확률도 적어 집니다.

4. 라우팅테이블
라이우팅 테이블을 통해서 특정 공격 IP등을 차단하거나 허용하는 방식을 이용하세요!
만약 특정 서버에서만 접속을 하면 되는 서버라고 한다면 모든 IP를 다 막고 해당IP만 허용한다던지 하면 아주 좋겠죠.
글데 라우팅 테이블 관련된 건 자세히는 모르겠네요.
그냥 라우팅 관련해서 보안 할 필요가 있다고 들은적이 있어서 ^^;

5. 패턴분석차단
방어의 기본은 분석입니다.
분석을 위해선 로그를 쌓아야 분석하겠죠!
웹의 경우 아파치 로그, DB 의 DB로그 등등 서버는 여러가지의 로그들을 남기고 있습니다.
그리고, 프로그램을 추가로 설치하여 다양한 로그를 기록 하고 분석 할수 있습니다.

6. 웹로그 분석 차단
웹방화벽이 없다면 웹로그를 면밀히 분석해서 특정 스크립트를 웹소스에서 차단 하거나 특정 페이지를 특정IP가 지속적으로 요청하지 않는지 등 분석후 차단 적용 합니다.

7. 취약점 분석툴 설치 분석
서버의 취약점을 분석해주는 툴 프로그램을 설치 하셔서 내 서버의 어떤 취약점이 있는지 리포트를 통해서 점검 하셔서 보안 하시기 바랍니다.

8. 포토 50000~65000 사이로 설정
위에서 말한바 있듯이 포트 범위를 5만~6만5천 사이로 설정 해서 이용하세요.


이외에도 보안해야할 사항이 많고 많지만 제가 서버를 설치후 운영하면서 나름 보안하고 있는 사항입니다.
하지만, 위와 같이 힘들게 보안을 해도 뚤리게 마련입니다.
해커들은 나날이 발전하고 있으니깐요.
제생각엔 보안 담당자들 보다 해커들이 항상 우위를 차지 하고 있는 것 같습니다.
그러니, 언제든지 내가 관리하고 있는 서버는 뚤릴수 있다라는 생각으로 보안에 신경을 써야 겠습니다.
전 기획부터 개발까지 맡으면서도 서버 100여대를 혼자서 모두 관리 하고 있습니다.
그중에서도 가장 힘든게 서버 보안 인듯 하네요!
아무튼 보안 담당자님들 화이팅 입니다.

위 글은 세이박스에서 작성한 글이므로 마음껏 퍼가셔도 되지만 출처는 반드시 남겨 주세요!

자바스크립트 <a href 클릭시 팝업 띄우기 및 클릭한 URL 값 받아오기

웹프로그램
사용자가 <a href="">링크</a> 로 된 링크를 클릭시 이동하고자 하는 URL을 알아내거나 클릭한 페이지로 이동하기전 자신이 원하는 행동을 하고자 할때 다음과 같이 사용자 이벤트 메시지를 잡아 낼 수 있다.

다음 소스는 사용자가 링크를 클릭시 자신이 원하는 곳으로 새창을 띄운뒤 다시 부모창으로 포커스를 이동한다음 원래 클릭해서 이동하고자 한 곳을 보여주는 내용 입니다.
목적은 홈페이지 모든 소스에 클릭시 원하는 곳으로 띄운뒤 새로운 창을 띄워야 하는 기능을 추가할려고 하다 보니 아래와 같이 구현하게 되었음.
이렇게 해서 굳이 사이트 코딩을 일일이 변경 해주지 않아도 원하는 영역에 이벤트 기능을 넣을수 있음.

<html>
<script language="JavaScript">
function linkclick() {
 var e = arguments[0] || event;
 var target = e.target || e.srcElement;
 if(target.tagName.toLowerCase() == "a") { //클릭한 곳이 <a 태그인지 확인
  window.open("새창 URL","_blank"); //팝업을 새창으로 띄우기 이외에도 원하는 이벤트처리
  window.focus(); //새창이 뜬뒤 포커스를 다시 본창으로 오도록 처리
 }
}
</script>
<body onClick="linkclick()">
<a href="a.html">a</a>
<a href="b.html">b</a>
<a href="c.html">c</a>
</body>
</html>

참고: 간혹 포커스가 다시 부모창으로 안돌아올 경우 새창 페이지에도 다음과 같이 추가해주면 확실하게 포커스가 돌아온다.
<html>
<body onLoad="opener.focus()">
</body>
</html>

위 기능을 응용하면 마우스를 스크롤 움직인다던지 특정 <input 박스를 클릭한다던지 어떠한 사용자 액션이라도 감지 하여 원하는 이벤트를 실행할 수 있습니다.
위 와 같은 기능으로 로그를 잡고자 할때에도 유용하게 쓰이겠죠.
페이지중에서 사용자가 어디를 클릭하는지 감지 하고자 할때

 if(target.tagName.toLowerCase() == "a") { //클릭한 곳이 <a 태그인지 확인
  alert(target);
 }

위 소스의 target은 사용자가 클릭한 URL을 담고 있으므로 target정보를 저장할 수 있으니 접속자 패턴을 분석하는데 용이할듯.
아마도 통계 분석해주는 사이트에서 보통 스크립트 한줄 삽입하는데 이와 같은 원리로 로그를 잡는것 같다. ^^

위 글은 세이박스에서 직접 작성한 것으로 퍼가실 경우 반드시 출처와 함께 남기시길 바랍니다.
출처 : 세이박스 http://saybox.tistory.com/468

mysql 로그 지우기

데이타베이스

mysql datadir 로 지정되어있는 폴더를 정확히 확인하신 후 아래와 같이 하시기 바랍니다.

 datadir 이 /usr/local/mysql/var 일 경우 예입니다.

 /usr/local/mysql/share/mysql.server stop

 /usr/local/mysql/var/ 디렉토리에 bin-log 파일을 삭제하시면 되는데 형식은
 아래와 같습니다.

 -bin 패턴이 불어있는 파일을 rm 으로 삭제하시기 바랍니다.
 
 rm -f *-bin*

 /usr/local/mysql/share/mysql.server start

위에 있는 글중에서

/usr/local/mysql/share/mysql.server stop
부분과
/usr/local/mysql/share/mysql.server start
부분에 있는 명령어들은 설정에 따라 틀릴 것이다.
무조건 따라 하다간 서버가 남아 나질 않을 것이니 자신의 서버에 맞게 명령어를 내리자
그리고
rm -f *-bin*
부분에서 *-bin*은 문제가 있는명령어이다
보통 도메인-bin.00001같이 되어 있는것을 저렇게 지울수도 있지만
현재 사용중인 도메인-bin.index 파일도 삭제 될수 있기 때문에
들어가서 하나하나 삭제 하는것이 낳을 것이다.
 
잠깐!! 문제가 발생 하였다.
현재 *-bin* 파일의 index 파일의 안을 vi 롭 보면 지워야할 파일이름이 있을 것이다.
이와 같은 경우 index 파일의 안의 이름을 지워줘야 정상적으로 mysql이 작동 될것이다.

mysql로그 보기

데이타베이스

usr/local/mysql/bin/mysqlbinlog -uroot -pxxxx -r host명-bin.001 > test.txt

mysql 로그 삭제 (호스트명-bin.001 )

데이타베이스
*-bin.* 은 mysql 의 replication 기능을 사용하기 위한 binary file 입니다.

즉 replication 기능을 사용하지 않으시다면 삭제해도 상관없습니다.

만약 이 로그들을 생성시키지 않고 싶으시다면 /etc/my.cnf 에 보시면

-----------------------------------------------------------------
# Start logging
log-bin
server-id      = 1
-----------------------------------------------------------------

라는 설정이 있을 겁니다. 이 2줄을 모두 주석 처리 해 주시고 mysql 을 재시작 하시면 됩니다.

3.23 에서 새로 생긴 기능이죠.


MySQL Replication :
http://www.oops.org/?t=lecture&sb=mysql&n=1