안녕하세요.

유지보수하고있는 업체의 회원의 디비를 해킹당하여 사이버경찰서에 신고 후 진흥원에서 조사까지 받게되면서의 과정에 대해서 나중에는 실수를 하지 않고, 정보를 공유하여 다들 안전한 관리를 하기위해 리눅스 서버의 최소 보안 관리에 설정을 알려드립니다.

 

1. 로그 기록

 :: 웹 로그, 디비 로그는 최소 6개월~1년치는 저장이 기본으로 되어있지만, 리눅스 서버 설치시에는 기본으로 한달로 셋팅 되어있을 겁니다. 해당 로그 기록은 6개월로 변경을하여 서버에 저장하여 해킹 시점 전후의 로그파일을 유지해야합니다.

 

/etc/logrotate.conf 

weekly >> monthly

rotate 4 >> rotate 6

 

tip. 6개월치를 롤링하겠다는 설정입니다. (웹서버 로그를 6개월치를 저장하기위함)

btmp, messages, secure, dmesg, utmp, wtmp등 여러가지 설정도 기간을 늘려야하겠지만 당장 중요한 웹서버 로그를 늘리시는것이 중요합니다.

 

 

2. 방화벽

 :: 기본적으로 iptables를 통하여 기본 방화벽을 구성하실텐데, 꼭 필요한 port만 오픈을 하셔야합니다.

 

/etc/sysconfig/iptables

-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 10888 -j ACCEPT 

..

 

3. ssh port 변경

 :: 기본적으로 ssh port는 22번이지만 다른 port를 열어서 사용하셔야합니다.

 

/etc/sshd/etc/ssh/sshd_config

Port 22 >> Port 10888

 

4. https 사이트로 변경

 :: http사이트라면 https 인증서를 구매하셔서 https로만 통신하게 변경해야 합니다.

 

/etc/httpd/conf.d/ssl.conf

SSLCertificateFile ...

SSLCertificateKeyFile ... 

SSLCACertificateFile ...

 

5. sw/hw 침입탐지시스템 침입방지시스템 확인.

  :: 기본적인 호스팅 서버를 사용하고 있어서 앞단에 침입탐지시스템이나 방지시스템이 없는 상황이였습니다.

해당을 보완하기위하여 서버에 접근하였을때 관리자에게 문자를 주도록 스크립트를 하나짜서 sw적인 시스템을 추가하였습니다. 

 

php 스크립트로 간단하게 작업하였고 방법은 crontab에 1분마다 해당 스크립트를 실행하여 리눅스 명령어인 w를 호출하여 해당 서버에 접근한 사람이 있다면 문자를 보내고, 로그를 남기게 해놓았습니다.

해당 스크립트라 필요하시면 댓글로 남겨주세요.

 

6. 5번까지는 서버 관련된 설정이였다면 6번부터는 UI에 관련된부분입니다. 해당 부분은 간단하게 열거하겠습니다.

 6.1. 관리자 페이지 2차 인증(핸드폰)

 6.2. 관리자 페이지 접근 제어(아이피)

 6.3. 웹셀 업로드시 확장자 체크(이미지 업로드 'input type=file' )

 6.4. 비이상 행위 3회 이상 접근차단

 6.5. 관리자 접근 로그

 6.6. 파라미터 변조 방지(mysql escape)

 6.7. 에디터를 사용중이라면 xssclean 적용

 

 

끝으로 개인정보침해시 벌금이 나오는건 둘째치고, 어느정도 보완을 통해 선처가 가능한 부분이고, 그전에 적용을 하면 더 좋은 상황이될것입니다. 그리고 제일 중요한것은 해킹당했다고 의심이 된다면 모든 회원에게 메일이나 문자를 통해 알려야만합니다. 제일 중요한 부분이니 이부분을 놓치시면 안됩니다.

 * 개인정보는 암호화도 중요합니다.

 

보완할것은 많겠지만 기본적인 보완은 이정도로만 진행하셔도 크게 문제가 없을것이라고 판단되며 제가 겪은일이기때문에 알려드립니다...

 

모두 안전하게 개인정보 보호 하세요.

도움이 필요하면 댓글 남겨주세요.

'linux' 카테고리의 다른 글

tshark 명령어가 먹지 않을 때(wireshark .2.2.4)  (0) 2017.07.06

안녕하세요.

mysql은 주기적으로 실행하는 스케줄러 기능이 존재합니다.

저는 주기적으로 삭제하기위해서 해당 스케줄러를 등록하여 사용중에 있는데 해당 방법을 알려드립니다.

 

#스케줄러 등록 방법

CREATE EVENT IF NOT EXISTS TEST_DELETE
    ON SCHEDULE
       EVERY 1 minute  // day,hour,minute,secode등 지정할수있습니다.
    ON COMPLETION NOT PRESERVE
    ENABLE
    COMMENT "삭제"
    DO 
    delete from test where ...

 

해당 mysql에 등록하면 test 디비를 1분마다 지우게되는 스크립트입니다. 해당 do 밑에다가 조건을 주어 삭제를 하게되면 데몬 및 crontab을 안통해서도 삭제가 가능합니다.

 

 

#스케줄러가 동작안 할 경우

SELECT @@event_scheduler;  --> 확인하여 off 라면

//설정 on

SET GLOBAL event_scheduler = 'ON';

 

간단하게 스케줄러를 등록하여 삭제, 등록, 수정을 할 수 있습니다.

 

감사합니다.

안녕하세요.

mysql에서 메모리 DB를 이용해야할 경우가 생겨 테스트를 진행하는겸 설정방법을 알려드리려고합니다.

 

mysql 테이블의 type을 memory로 변경하면 간단하게 사용하실 수 있습니다.

단점은 메모리에 올리기때문에 mysql이 재시작한다거나, 꺼지게되면 날라가게됩니다. (휘발성)

 

기본적으로 테이블의 타입은 InnoDB나 myisam디비를 사용하실텐데요, memory로 타입을 변경하여 성능 체크를 해보았습니다.

 

무한루프를 통하여 insert를 진행하였는데요,

 

간단하게 php 스크립트를 짜서 테스트하였습니다. (insert_test.php)

<?

 while(true){

  $query_ = "insert into test(field1,field2)values(now(), rand(..");

  mysqli_query($query);

 }

?>

해당 스크립트를 통해 innodb와 insert 성능 차이를 해본 결과

 

1초에 memory Type 3~4천개 정도가 들어가며, innodb는 15~30개선으로 들어가는것을 확인하였습니다.

성능 차이는 확실하나, 해당 memory 테이블의 max row는 max_heap_table_size=1G에 20만정도 래코드를 등록가능하였습니다.

 

 

+ Recent posts