리눅스 필수 보안 조치법

리눅스/Security|2015. 1. 26. 17:58
반응형

1. SUID 점검하기.(root 소유의 SetUID및 SetGID 파일들 점검

    find / -user root -perm -4000 -print (SetUID)
    find / -user root -perm -2000 -print (SetGID)
    find / -user root -perm -4000 -print -xdev

2. 파티션별 디스크사용량 점검
    df -h

3. 파일무결성 점검.

    http://weblog.websea.co.kr/tripwire/tripwire

4. 백도어 설치여부 점검.(/dev 체크 및 rootkit 점검)

    find /dev -type f -exec ls -l {} ;
    ./chkrootkit
    
5. 현재 열려진 포트 및 응답가능한 포트 점검.

    netstat -atp | grep LISTEN (사용 프로토콜 : TCP인가? 또는 UDP인가?
           사용중인 포트번호
           서버와 연결된 IP 및 도메인명
           생성 PID
           서비스중인 프로세스명
           현재 응답가능상태인가?
    lsof | grep LISTEN(현재 서비스 중인 프로세스명(데몬명)
               현재 생성중인 PID번호.
           현재 서비스중인 프로세스의 소유자
           프로토콜 버전 : Ipv4 또는 Ipv6
           TCP 또는 UDP의 여부
           응답가능 상태인가?

6. 실생중인 프로세스 및 데몬점검.(프로세스의 생성관계)

    pstree

7. 시스템 운용상황 점검.

   top -d2

8. 백업점검.

   /home2/backup/nexfor/
   /home2/backup/websea/

9. 스팸메일 점검.(메일큐 디렉토리 점검)

  /var/spool/mqueue    (동일한 날짜, 동일한 사이즈를 가진 다수 파일구분)

10. Core 점검.

 서버내에 긴급한 이상이 발생하였을 경우나 시스템의 정확한 분석을 위해
 서버의 메모리 상태를 순간적으로 dump 받는 경우의 파일
  find / -name core -exec ls -l {} ;
  
11. 파일용량 점검

 repquota -av -ag
 df -h

12. 최근 서버 접속자 점검.

  vi /var/log/secure
  last -n 10  최근 10번째까지의 접속기록을 확인.

13. 계정별 최후접속기록 점검.

           lastlog는 현재 /etc/passwd에 존재하는 모든 계정을 대상으로 하
여 언제 마지막으로
           서버에 접속을 했는가를 확인.
           Mail, adm, bin 등의 계정들은 모두 "** Never logged in **" 이라
고 되어 있는것이 정상.

  lastlog

14. 현재 서버접속자 보기

   w (telnet)
   ftpwho(ftp)

15. root명령어 사용기록 점검.

           vi /root/.bash_history  (.set nu) 
           cat /root/..bash_history | wc -l    (1000라인 이상 되어야 정상)

16. 계정별 사용명령어파일 점검.

           find / -name .bash_history -exec ls -l {} ;    (각 계정
별 .bash_history 파일의 존재여부)
           find / -name .bash_history -exec cat {} ;     (파일의 내용까
지 모두 확인해 볼 수 있음)

17. root소유자 점검(UID와 GID가 0인 사용자 점검)

           cat /etc/passwd | grep 0:0

18. 서버내에 중요한 디렉토리 점검

           /etc/xinetd.d/    (xinetd로 서비스되는 인터넷서비스 파일들이 존재하는 디렉토리)
           /etc/rc.d/           (부팅에 관계된 파일) (파일들을 복사 후 파일용량등을 비교하기) (커널패닉의원인)
           /etc/rc.d/init.d/ (부팅시에 특정 서비스나 데몬들을 시작시키는 스키립트 파일)

19. .rhosts 파일 점검

           원격에서 패스워드등의 확인과정없이 바로 접속하기 위해서 사용되는 파일
           
           find / -name .rhosts -exec ls -l {} ;
           find / -name .rhosts -exec cat {} ;

20. 메모리사용량 점검.

           free -m
           cat /proc/meminfo   (free 와 top 는 이 파일을 참조하여 보여준다.)
           top -d2

21. 중요 관리자용명령어 점검.

           아래의 명령어들을 퍼미션을 100으로 설정한다. 변경 후 퍼미션 변경여부를 확인.
           
           chmod 100 /usr/bin/top
           chmod 100 /usr/bin/pstree
           chmod 100 /usr/bin/w
           chmod 100 /bin/ps
           chmod 100 /usr/bin/who
           chmod 100 /usr/bin/find
           chmod 100 /bin/df
           chmod 100 /bin/netstat
           chmod 100 /sbin/ifconfig
           chmod 100 /usr/sbin/lsof
           chmod 100 /usr/bin/make
           chmod 100 /usr/bin/gcc
           chmod 100 /usr/bin/g++
           chmod 100 /usr/bin/c++

22. su 명령어를 이용한 root권한 사용자 점검.

           su 명령어의 사용내역을 확인할 수 있음.

           cat /var/log/messages | grep root

23. 최근 n 일전 변경된 파일 점검. (단위는 일)

           find / -ctime -1 -print | more

24. http://weblog.websea.co.kr/

25. find 를 이용한 특정파일 점검하기.

           .exec 파일찾기
           find / -name '.exec' -exec cat {} ; -print

           .forward 파일체크
           find / -name '.forward' -exec cat {} ; -print

           write 퍼미션이 있는 파일(디렉토리)찾기
           find / -type f  ( -perm -2 -o -perm -20 ) -exec ls -lg {} ;
           find / -type d ( -perm -2 -o -perm -20 ) -exec ls -ldg {} ;

           SteUID SetGID 체크하기
           find / -type f ( -perm -004000 -o -perm -002000 ) -exec ls -
lg {} ;

           /dev 체크
           find /dev -type f -exec ls -l {} ;

           소유자없는 파일 및 디렉토리 찾기
           find / -nouser -o -nogroup -print

           원격리모트 접속허용 파일(.rhosts)찾기
           find / -name .rhosts -print

           최근 변경된 파일들 찾기.(파일or디렉토리) 단위는 일
           find / -ctime -20 -type f or d

           현재 서버에서 열려진 포트 및 접근저보 점검

           netstat -an | grep LISTEN   (포트들과 열결되어 있는 실행데몬들을 확인)
           lsof | grep LISTEN   (좀 더 자세히 확인)

26. 관리자용 명령어 퍼미션 수정하기.

           chmod 100 /usr/bin/top
           chmod 100 /usrbin/pstree
           chmod 100 /usr/bin/w
           chmod 100 /bin/ps
           chmod 100 /usr/bin/who
           chmod 100 /usr/bin/find
           chmod 100 /bin/df
           chmod 100 /bin/netstat
           chmod 100 /sbin/ifconfig
           chmod 100 /usr/sbin/lsof
           chmod 100 /usr/bin/make
           chmod 100 /usr/bin/gcc
           chmod 100 /usr/bin/g++
           chmod 100 /usr/bin/c++

27. 중요한 파일퍼미션과 소유권 제한 및 점검.

           chmod 644 /etc/service
           chmod 600 /etc/xinetd
           chmod 644 /etc/mail/aliases
           chmod 600 /etc/httpd/conf/httpd.conf
           chmod 644 /var/log/wtmp
           chmod 644 /var/run/utmp
           chmod 644 /etc/motd
           chmod 644 /etc/mtab
           chmod 600 /etc/syslog.conf
           
           /etc, /usr/etc, /bin, /usr/bin, /sbin, /usr/sbin

           chmod 1777 /tmp
           chmod 1777 /var/tmp
           
28. umask 값 확인하기.

           root의 umask 값 확인하기.
           umask
           022 -->파일은 644 디렉토리는 755로 생성됨.
           027 -->파일은 640 디렉토리는 750로 생성됨.

29. /dev 에 device 파일 이외의 것이 존재하고 있는지 확인.

           find /dev -type f -exec ls -l {} ;

30. 일반사용자의 명령어 패스

           /usr/local/bin:usr/local/mysql/bin:/home/hosting/bin/
           일반사용자가 사용가능한 명령어를 모두 이것에 둠.

31. 관리자의 명령어 패스

           :/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin

           /X11:/usr/X11R6/bin:/usr/kerberos/bin:/root/bin

32. 특정 그룹만의 su 사용권한 허용하기

           vi /etc/group  (wheel구릅에 su 사용권한을 가질 유저 추가하기)
           wheel:x:10:root,cream

           vi /etc/pam.d/su (두줄 추가하기)

           auth            sufficient            /lib/security/pam_rootok.so
           auth            required                        /lib/security/pam_wheel.so allow group=wheel

           vi /var/log/message 에서 확인

33. chmod 400 /etc/shadow

34. 시스템 기본로그파일.

           /var/log/messages
           /var/log/secure
           /var/log/wtmp
           /var/run/utmp
           /var/log/lastlog

35. utmp, wtmp, lastlog 파일

           utmp파일 : 현재시스템에 접속해 있는 사용자의 정보를 가지고 있음.
           
           strings utmp | more
           
           정보 이용 명령어
           login(1), who(1), init(8), last(8), lastcomm(8)

           wtmp파일 : 처음부터 접속했던 모든 사용자의 로그인정보와 로그아웃정보를 가지고 있음.

           strings wtmp | more

           정보 이용 명령어
           login(1), who(1), init(8), last(8), lastcomm(8)

           lastlog 파일

           가장 최근에 로그인한 정보를 저장함.

           last 라는 명령어로 확인할 수 있음.

36.  패스워드 유출대처방안(웹)

           perl을 이용한 방법.


   AllowOverride FileInfo AuthConfig Limit
   Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
   Options Indexes SymLinksIfOwnerMatch IncludesNoExec ExecCGI
   Options Indexes SymLinksIfOwnerMatch IncludesNoExec
   
       Order allow,deny
       Allow from all
   
   
       Order deny,allow
       Deny from all
   


           SSI의 exec 명령어를 이용하는 방법

#    AddType text/html .shtml
#    AddHandler server-parsed .shtml

27. PortSentry를 이용한 실시간 해킹방어 구현.(잘못 사용할시 서버접속 안됨)

           tar -xvzf portsentry-1.1.tar.gz
           make linux
           make install

           /usr/local/psionic/portsentry/portsentry -tcp
           /usr/local/psionic/portsentry/portsentry -udp
           /usr/local/psionic/portsentry/portsentry -stcp
           /usr/local/psionic/portsentry/portsentry -atcp
           /usr/local/psionic/portsentry/portsentry -stdp

           vi /etc/hosts.deny 점검.

28. Chkrootkit 로 백도어 점검.

           tar -xvzf chkrootkit.tar.gz
           make sense
           ./chkrootkit     (점검명령어)

29 ping 을 이용한 DOS 공격 막는 방법.

           vi  /etc/sysctl.conf
           net.ipv4.icmp_echo_ignore_broadcasts = 1

           sysctl -w
           /etc/rc.d/init.d/network restart
           sysctl -a | grep ignore_broadcasts

30. Nmap를 이용 포트스켄 하여 해킹가능성 체크.

           nmap -sS -p80 211.42.48.110 -O -v www.armian.net
           nmap -sS -O -v 211.42.48.114


출처 : [기타] 인터넷 : IT네트워크정보보안교육센터


반응형

댓글()

리눅스 보안 팁팁팁!!

리눅스/Security|2015. 1. 26. 17:57
반응형

http://www.whangun.net/whangun/?no=109
퍼왔습니다. 프린트 하셔서 참고하세요.

============================================================

아래 내용은 인터피아측으로부터 받은 메일입니다. 
서버관리를 위해서 한번쯤 보면 도움이 될것 같아 
이곳에 올립니다. 

============================================================

이글에 대한 의문은 PART I을 작성한 분께 문의해 주시면 감사하겠습니다. 

        노영환 

PART II는 PART I에서 수정되어야 하는 부분이나 기타 관련 
내용을 당사 직원이 적은 것입니다. 

/인터넷제국 운영센터 
544-0915 




2000년 12월 2일 (주)베스트한컴 www.besthan.net에서 발표하는 
자료입니다.  다른 질문과 답은 www.koreaphp.co.kr에서 해주시기 
바랍니다. 

현재 데이터센터내의 서버들이 무차별적으로 해킹을 당하고 
있습니다.  현재로선 뚜렷한 방법이 없습니다.  다만 아래 적는 
방법을 통하여 현재 저희 서버는 다소(???) 안전하다고 생각합니다. 

데이터센터 내에 서버를 가지고 계신분들은 아래의 권고사항을 
꼭 참조하시여 아래와 같이 서버에 보안작업하시고 필요없는 
서비스나 포트는 가능한 닫아 주시고 모든 패키지를 업그레이드 
하시기 바랍니다. 

현재 해킹의 수준은 거의 모든 서버가 가능하다고 하더군요.  본 
보안수준은 절대적인 것이 아니며 단독 서버에 여러 도메인을 
보유하신 경우에는 꼭 해주실 권고합니다. 



<보안관련및 기본명령> 

1. chmod 700변경하기 

본 권한변경 목적은 계정을 통하지 않은 불법적인 접근을 막기 
위한 방법으로 가능한 필요하지 않은 파일들의 권한을 변경해 
주시기 바랍니다.  특히 suid가 걸린 파일의 경우 절대적으로 
권한변경을 해주시기 바랍니다. 

/usr/bin/finger(chmod 700 적용) <-- 서버 이용자 파악을 하지 못하게 함 
/usr/bin/nslookup(chmod 700 적용) 
/usr/bin/gcc(chmod 700 적용)  <-- 당연히 막아줘야져. 
/usr/bin/suidperl(chmod 700 적용) <--suid 걸린 파일 
/usr/bin/whereis(chmod 700 적용) 
/usr/bin/cc(chmod 700 적용)    <--- 소스 컴파일은 루트이외에 못하도록 조치 
/usr/bin/sperl5.00503(chmod 700 적용)  <--- perl중에 suid걸린 파일임 
/usr/bin/c++(chmod 700 적용) 
/usr/bin/make(chmod 700 적용) 
/usr/bin/pstree(chmod 700 적용) 
/usr/bin/rlog(chmod 700 적용) 
/usr/bin/rlogin(chmod 700 적용)  <-- 필요없는 경우에는 삭제 하시길 

/usr/bin/which(chmod 700 적용) 
/usr/bin/who(chmod 700 적용) 
/usr/bin/w(chmod 700 적용) 
/bin/mail(chmod 700 적용)  <-- 아웃룩익스프레스가 아닌 계정상에서 
                               텔넷으로 메일을 확인하지 못하게 하십시요. 
/bin/ps(chmod 700 적용) 
/etc/hosts(chmod 700 적용) 
/etc/hosts.deny(chmod 700 적용) 
/etc/hosts.allow(chmod 700 적용) 


2. anonymous ftp 막기 
#vi proftpd.conf (/etc 에 위치) 
   중략 
   에서 
  UserAlias                anonymous ftp //이부분을 주석처리 해준다. 
  wq (저장후 종료) 


3. telnet 사용막기  <--가장 추천하는 방법입니다. 
  현재 텔넷이 막힌 경우에는 해킹의 위험이 극히 줄어듭니다. 
  텔넷을 사용하시고자 하시는 분은 데이터 센터의 보안 서비스나 
  다른 방법을 사용하시기 바랍니다. 


ip 거부 
#vi hosts.deny  (/etc 에 위치) 
in.telnet:ALL 
wq (저장후 종료) 

#hosts.allow  (/etc에 위치) 
ALL:(IP 추가)      <--- 텔넷으로 들어올 아이피만 적는다. 
wq (저장후 종료) 

저장후 다음과 같이 
#/etc/rc.d/init.d/inet restart 

telnet 서비스 제공업체측 ip를 추가해야 telnet 사용가능 


4. ping 막는법  <---당연히 핑도 막아야 겟죠. 
#echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all  //ping 막기 
#echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all  //ping 열기 


5. chkconfig 사용법(부팅시 수행되는 서비스) <--중요합니다. 

#chkconfig --list (/sbin 밑에 위치) 
#chkconfig --help (참고) 

#chkconfig --level 3 sendmail off (사용방법예) 
보통 부팅의 경우 레벨3으로 부팅이 됩니다. 
그러므로 레벨3에서 필요하지 않은 데몬은 위와 같은 방법으로 
모두 꺼두시기 바랍니다. 

#chkconfig --list (하면 나오는것들) 
xfs             0:끔    1:끔    2:끔    3:끔    4:끔    5:끔    6:끔 
anacron         0:끔    1:끔    2:끔    3:끔    4:끔    5:끔    6:끔 
apmd            0:끔    1:끔    2:끔    3:끔    4:끔    5:끔    6:끔 
arpwatch        0:끔    1:끔    2:끔    3:끔    4:끔    5:끔    6:끔 
atd             0:끔    1:끔    2:끔    3:끔    4:끔    5:끔    6:끔 
keytable        0:끔    1:끔    2:켬    3:켬    4:켬    5:켬    6:끔 
gpm             0:끔    1:끔    2:끔    3:끔    4:끔    5:끔    6:끔 
inet            0:끔    1:끔    2:끔    3:켬    4:켬    5:켬    6:끔 
netfs           0:끔    1:끔    2:끔    3:끔    4:끔    5:끔    6:끔 
network         0:끔    1:끔    2:켬    3:켬    4:켬    5:켬    6:끔 
random          0:끔    1:켬    2:켬    3:켬    4:켬    5:켬    6:끔 
ipchains        0:끔    1:끔    2:끔    3:끔    4:끔    5:끔    6:끔 
pcmcia          0:끔    1:끔    2:끔    3:끔    4:끔    5:끔    6:끔 
kdcrotate       0:끔    1:끔    2:끔    3:끔    4:끔    5:끔    6:끔 
kudzu           0:끔    1:끔    2:끔    3:켬    4:켬    5:켬    6:끔 
linuxconf       0:끔    1:끔    2:끔    3:끔    4:끔    5:끔    6:끔 
lpd             0:끔    1:끔    2:끔    3:끔    4:끔    5:끔    6:끔 
nfs             0:끔    1:끔    2:끔    3:끔    4:끔    5:끔    6:끔 
nfslock         0:끔    1:끔    2:끔    3:끔    4:끔    5:끔    6:끔 
identd          0:끔    1:끔    2:끔    3:켬    4:켬    5:켬    6:끔 
portmap         0:끔    1:끔    2:끔    3:끔    4:끔    5:끔    6:끔 
rstatd          0:끔    1:끔    2:끔    3:끔    4:끔    5:끔    6:끔 
rusersd         0:끔    1:끔    2:끔    3:끔    4:끔    5:끔    6:끔 
rwalld          0:끔    1:끔    2:끔    3:끔    4:끔    5:끔    6:끔 
rwhod           0:끔    1:끔    2:끔    3:끔    4:끔    5:끔    6:끔 
sendmail        0:끔    1:끔    2:켬    3:켬    4:켬    5:켬    6:끔 
syslog          0:끔    1:끔    2:켬    3:켬    4:켬    5:켬    6:끔 
snmpd           0:끔    1:끔    2:끔    3:끔    4:끔    5:끔    6:끔 
crond           0:끔    1:끔    2:켬    3:켬    4:켬    5:켬    6:끔 
ypbind          0:끔    1:끔    2:끔    3:끔    4:끔    5:끔    6:끔 
yppasswdd       0:끔    1:끔    2:끔    3:끔    4:끔    5:끔    6:끔 
ypserv          0:끔    1:끔    2:끔    3:끔    4:끔    5:끔    6:끔 
proftpd         0:끔    1:끔    2:끔    3:켬    4:켬    5:켬    6:끔 
named           0:끔    1:끔    2:끔    3:끔    4:끔    5:끔    6:끔 

이중 켜야할것은 보통 9개정도밖에 안됩니다.  3번레벨을 
기준으로, keytable,inet, network,random,kudzu,sendmail,syslog, 
crond,proftpd 나머지는 off 시켜주는것이 바람직합니다. (자기의 
환경에 맞춰서) 

참조문서는 http://www.osfs.net/redhat/security-guide-01.doc 


6. find 관련 명령 
#find /dev -type f  // /dev/MAKEDEV만떠야함 (백도어 찾기) 
#find / -ctime -1 //하루동안 만들어진 화일 (해킹당한듯 싶으면 확인 ) 
#find / -perm -4000 // setuid 걸린 파일을 찾는 명령어 


7. /etc/inetd.conf 화일 수정 

  네트워크의 서비스를 정의하고 있는 화일로서 , 정의되어 있는 
  서비스가 많이 있다.  보안사고를 피하기 위해서는 최대한 
  필요하지 않은 서비스는 차단하는게 바람직하다.  기본적으로 , 
  telnet,ftp,pop3외의것은 주석처리 하는것이 좋다.  닫아놨는데, 
  이외의 것이 열려있다면 해킹의 가능성이 있다. 이때는 다시 
  주석처리를 하고 

  #ps -ef | grep inetd  //프로세스 확인 
  #kill -HUP PID   //리셋 
  #vi inetd.conf (/etc 에 위치) 
  telnet 
  ftp 
  pop3 
  나머지는 주석처리 
  wq (저장후 종료) 
  tip> #kill -9 PID  //프로세스 죽이기 


8.해킹이 확실한경우 대처법 

  해킹이 확실한상태에서 그냥 컴퓨터를 종료시키면, 재부팅이 
  안될수가 있다.  이것을 막기 위해, 

#/etc/rc.d/rc.SYSinit 권한을 755를 준다.  최소한 부팅은 된다. 

서버 & 보안 관련 문의 
http://www.besthan.net 또는 http://www.koreaphp.co.kr 

  해킹시 연락처 
   http://www.certcc.or.kr/ 해킹시 신고처 
   cyber 테러대응센터 02-3939-112 
   cyber 수사대       02-365-7128 

해킹 없는 세상에 살고싶은 오렌지블루였슴돠. 




PART II는 PART I에서 수정되어야 하는 부분이나 추가 되어야 할 
내용을 추가 했습니다. 보안을 위해 이문서를 참조하는 것도 좋습니다. 
그러나  서버 운영 특성상 꼭 필요한 경우도 있으나 이 제한을 걸어서 
사용할수 없는 경우가 있으니 꼭 확인후 조치를 부탁합니다. 
(이 문서를 끝까지 읽어 주시면 서버운영에 많은 도움이 될듯합니다.) 
- 문의 사항은 khsheen@inempire.com으로 해 주십시요 

설명순서는 PART I 에서 설명을 보충하고 기타 더 필요한 설명을 
추가 하겠습니다. 


<보안관련및 기본명령> 

1. chmod 700변경하기
 

첨부 명령어 
/usr/bin/top (chmod 700 적용) 
/usr/bin/find (chmod 700 적용) 

/usr/bin/lynx (chmod 700 적용) 
/usr/bin/wget(chmod 700 적용) 
--> 이두 명령어는  일반적으로 해커들이 해킹툴을 가져올때 자주쓰는 
     명령어 

shell-prompt>lynx --dump  가져올화일이 있는 url  경로 
shell-prompt>wget  가져올화일이 있는  url 경로 


/usr/bin/gcc(chmod 700 적용)  <-- 당연히 막아줘야져. 
/usr/bin/c++(chmod 700 적용) 
/usr/bin/make(chmod 700 적용) 

이 명령어를 막게 되면 일반사용자들이 C언어로 작성된 프로그램을 
컴파일하지 못하여 불평을 호소하는 경우가 있다. 

이런 경우는 이 명령어를 사용할수 있는 그룹을 설정해 주면 준다. 
(일반적으로 wheel이라는 그룹을 많이 사용함, 다른 그룹을 등록해서 
사용해도 무관) 

* example) find 명령어의 사용자를 제한 할 경우 
shell-prompt>grep wheel /etc/group 
wheel:x:10:root 

/etc/group 화일에 wheel:x:10:root 이분에 wheel이라는 그룹에 user를 
추가 한다.(khsheen이라는 user가 있을경우임) 
wheel:x:10:root,khsheen 
이러면 wheel이라는 그룹에 khsheen 이라는 user가 등록된다. 
shell-prompt>ls -la /usr/bin/find 
-rwxr-xr-x    1 root     root        54544 Feb  3  2000 /usr/bin/find* 
shell-prompt>chgrp wheel find 
shell-prompt>chmod 755 find 
shell-prompt>ls -la /usr/bin/find 
-rwxr-x---    1 root     wheel       54544 Feb  3  2000 find* 

이런식으로 설정하면 find 명령어는 root와 khsheen만 사용할수 있다. 
이 명령어를 su 명령어에도 적용하는 것을 권장함, root로 전환할 
유저 (su 명령어 사용자)를 제한 할수 있다. 


2. anonymous ftp 막기 

특정 user가 ftp 접속후 본인의 Directory 외에 다른 유저의 
Directory를 접근 못하게 할 경우 
(접근을 해서 read 권한만있어도 그 유저의 설정을 모두볼수있다.) 

*proftp를 사용하는 경우 

shell-prompt> vi /etc/proftpd.conf 
이 화일에  이 한줄을 추가한다. 
DefaultRoot                     ~ member 
shell-prompt>/etc/rc.d/init.d/proftpd  restart 

이러면 본인의 Directory외에 다른 유저의 계정은 접근 불가. 


3. telnet 사용막기 

telnet을 막는 다는 것은 특히 유저가 많은 경우는 불가능 일인것 
같다.  (특히 웹호스팅업체) 이런 경우는 ssh(Secure Shell)을 
설치해서 사용하는 것을 권장합니다. 


6. find 관련 명령어 관련 명령어 사용하기 

shell-prompt> find / -nouser  (화일에 소유자가 없는 경우의 화일) 
   일반사용자의 사용 디렉토리에서 ... 
   화일에 소유자가 없다는것은 의심을 해볼필요가 있다. 

shell-prompt> find /home/khsheen -user root 
   (일반사용자인데 root로 되어 있는 화일도 의심해볼 필요가 있다) 
                 

8. 해킹이 확실한경우 대처법 

a.우선 가장 좋은 방법은 port(랜선)를 제거하는 것이 가장 좋다. 
b.그 다음에 설치 되어 있는 해킹툴을 제거한다. 
-프로세스 확인 
  [ 이상한(필요없는) 프로세스 확인해서 설치된 위치 확인후 지우기] 

shell-prompt> kill -9 이상한 프로세스 id 

그러나 100%제거 한다는 것은 힘들것 같다. 
서버를 제 세팅하는 것을 권장한다. 

c.중요 data 백업 


9. 기타 보안에 관련된 내용 

  a.php , mysql db 지원하는 경우 
    -일반적으로 php로  mysql에 db에 접속하는 경우 php에서 
     connect하는 스크립트를 사용하는 화일을 일반적으로 Web상에 
    공개된 소스에는 화일명이 대부분 connect.inc 를 사용하는데 
    이것을 웹브라우저에 불러오게 되면 바로 읽혀 져서 mysql db접속 
    아이디와 패스워드를 알수가 있게된다. 

    이럴경우는 웹서버의 설정화일(httpd.conf)에     

    AddType application/x-httpd-php .php .html .php3 .php3  .inc 
    ~~~~~!! 
    AddType application/x-httpd-php-source .phps 

    추가하고 웹서버를 제구동한다. 
    그러면 .inc로 끝나는 화일도 php로 인식하므로 스크립트 
    노출을 막을수 있다. 
       
    또한가지 telnet ftp에 사용시 group을 같게 해주고  각 계정의 
    root Directory를 퍼미션을 705로 처리해 주면 다른 유저가 
    다른 사용자의 계정에 들어 갈수가 없다. 
    만약 755로 한다면 다른 유저에게도 읽을 권한이 생겨서 connect 
    스크립트를 읽을 수 있어  db접속 아이디/passwd를 얻을수 있다. 

b.사용자들의 passwd 
   - 등록된 user의 passwd를 자주 갱신하게 만든다. 
shell-prompt>vi /etc/login.defs 
이중 아래의 스크립트를 일정기간 설정해서 사용자들의 
        passwd를 바꾸게 만든다. 
PASS_MAX_DAYS   99999 
                 ~~~~~ 일정기간으로 잡아준다. 

c.shell 없애기 
   - 메일계정으로만 사용하는 경우(shell이 필요없는 경우)의 
     유저가 많다. 특히 웹호스팅 사용자 
     이런 경우 shell을 주지 않으면 된다. 
     shell-prompt>vipw 
     khsheen:x:500:502::/home/gdm:/bin/false 
                              ~~~~~~~~~~ 
     khsheen이라는 유저에게 shell을 부여하지 않는다.           


- 서버에 등록된 사용자가 많은 경우 사용자가 관리에 
   신경을 많이 써야 한다. last 명령을 사용하여 자주 telnet으로 
   접속하는 사용자는 history를 자주 살펴보는 것도 좋다. 
   shell-prompt> last | grep pts 
                 


d.보안패치하기 

  -서버 보안에서 가장 중요한 것이 패치이다. 
   서버에 버그가 발표되면  해커도 그것을 접한다고 생각하면 된다. 
   그래서 서버에 최신 패키지를  설치해야 하며 보안 뉴스를 빨리 
   접해야 한다. 그중 커널 업테이드등은 중요한다. 

* 커널 최신 정보 확인하기 
shell-prompt>finger @www.kernel.org 
[zeus.kernel.org] 

    The latest stable version of the Linux kernel is:     2.2.17 
                                                          ~~~~~~ 
    The latest beta version of the Linux kernel is:       2.4.0-test11 
    The latest prepatch (alpha) version *appears* to be:  2.4.0-test12-pre4 


         2. 2.  17 
        |   |    |     
        |   |    -> 몇번의 패치가 있었는지 나타낸다.     
        |   -> 안정화 버전인지 개발화 버전이지를 나타낸다. 
        |      (홀수:개발, 짝수:안정) 
        -> 획기적인 변화가 있을때 바뀐다 


그리고 기타 패키지에 대한 버그는 빨리 접하고 패치를 해야 한다. 

  http://www.redhat.com/support/errata/index.html(redhat인 경우) 

해킹관련 소식 접하기 
  http://certcc.or.kr/ (한국정보 보호센터) 
  http://www.hackersnews.org/ 
  http://www.securenews.co.kr/ 



/etc/hosts.deny에 
아래 줄을 추가하면 불법(?)적인 접속자 IP를 root에게 메일로 보고하죠~~ 

^^ 

hosts.deny 
------------------------------------------------------------------ 
ALL: ALL: spawn (/usr/sbin/safe_finger -l @%h | /bin/mail -s %d-%h root) & 
------------------------------------------------------------------

반응형

댓글()

tcpdump 로 패킷 캡쳐하고 내용 보기

리눅스/Network|2015. 1. 26. 17:54
반응형
[root@sysdocu ~]# tcpdump -i eth0 -nn -A -s 1500 dst port 888 -U -w tcpdump.log

> 888 포트로 들어오는 패킷 저장
> -w 는 파일로 쓰기. 그 앞의 -U는 디스크에 쓰기. -U 가 유용한 이유는 만약 사용하지 않을 경우
   패킷이 메모리에 적재되었다가 kill 등의 강제 종료를 수행하면 그동안 캡쳐했던 패킷은 저장이 되지 않기 때문입니다.

[root@sysdocu ~]# /usr/sbin/tcpdump -r tcpdump.log -nn -A -s 1500
> 사용했던 옵션 그대로 적을 경우 원래 출력 내용이 그대로 보이게 됩니다.


반응형

댓글()

iptables를 이용하여 지정된 ip에서만 접속하게 하려면

리눅스/Network|2015. 1. 26. 17:53
반응형

iptables은 알아두면 참유용합니다.^^;

일반적으로 레드헷 계열에서는 CentOS,Fedora 등등   setup 명령어로..
firewall부분에서 제어를 할수있는데..이곳에서는 ip관련된 제어가 되지 않고..
포트에관한 제어만 되고있습니다.

ip에대한 필터링을 하시려면..직접 해당 파일에 가셔서 해야됩니다..
일반적으로  레드헷계열에서는 
/etc/sysconfig/iptables 에 해당 필터링이 있습니다.
직접 명령어를 쳐도 iptables 필터링이 적용되지만 리붓하면, 사라지기 때문에 해당 디렉토리에 넣어놓는것이 
좋습니다. 
##   find / -name iptables 명령어로 찾아 보시기를 ... #####
(iptables 실행은 /etc/init.d/iptables start , stop으로 하실수 있습니다. 레드헷계열에 대한 적용입니다.)
답변을 드리겠습니다. 


1. iptables 를  이용하여 지정된 ip만 telnet이 접속되도록 설정.

- telnet 포트는 알고계시겠지만 23포트입니다. 지정된 ip는 192.168.6.0/24(c클래스) 로 가정하고
해당 interface는 eth0으로 가정한 상태에 명령어 입니다.

iptables -A FORWARD -i eth0  -p tcp --dport 23   -s 192.168.6.0/24 -j ACCEPT
iptables -A FORWARD -i eth0  -p tcp --dport 23 -j DROP

상기와 같이  적어 주실수 있습니다. iptables 역시 우선순위가  순차적으로적용되기 때문에..
위에 아이피는 23 포트가 열리고 나머지는 23포트가  닫히게 되어있습니다. 
-A FORWARD 뒤에 -i 는 포트 설정이 wan이냐  lan이냐에 따라  input 인지 output인지에 따라 
옵션이 -i 나 -o 로 바뀔수가 있으니 주의하시기 바랍니다. 


2. 접속할수 있는 시간은 14:00 에서 18시:00으로 제한 시킬것

이것또한 iptables에 옵션을 이용하면 가능합니다. 

iptables -A FORWARD -m time --timestart 14:00 --timestop 18:00 --days Sun,Mon,Tue,Wed,Thu,Fri,Sat -p tcp -s 192.168.6.0/24  -i eth0 --dport 23  -j ACCEPT 
iptables -A FORWARD -i eth0  -p tcp --dport 23 -j DROP

상기와 같이 적으면, time 14:00에서 시작해서 18:00까지 현 iptables이 적용하는것을 의미하고
days 는 sun~sat 즉  적용하는 날은 일요일~토요일까지 매일입니다. 원하는 요일만 적용하려면 위에 부분을  원하는 요일만 넣어 주시면됩니다.  -s 192.168.6.0/24의 의미는  sorce ip가 192.168.6.0/24 라는것을 의미합니다.밑에 DROP부분은  상기 ip를 
외하고 모든 ip의 23port를 막기 위한 옵션입니다.

iptables을 잘 이용하시면 기본적인 보안정책에 매우 유용합니다.^^;
위에서도 언급했지만 iptbles는 순차적으로 적용되기 때문에 해당 옵션의 순서가 바뀌면 모두 막히게 됩니다.
꼭  주의하시기 바랍니다. 

다른 궁금한 사항은 쪽지로 주시면, 다시 답변을 드리도록 하겠습니다.
리눅스 공부하는데 도움이 되셨으면 좋겠네요~^^;

밑에 접속 부분을 보지 못하여.. 추가 답변을 드립니다.

리눅스는 ssh(secure shell )이라는 터미널 접속이 있습니다.  기본포트는 22port입니다.
상기 포트는 sshd.conf 파일에서 변경 설정을 할수있습니다.^^;;
telnet접속은 보안상 취약하기 때문에 현재 대부분의 리눅스 서버에서는 활용을 하지 않습니다.
참조하시기 바랍니다. 감사합니다. ^^;; (  kisa 통계에 중국에서 한국으로 오는 스켄중 80(web)과 22(ssh) 포트가 80%를 차지한다는 2006년 통계자료가 있었습니다. )


[출처] 지식인 (http://kin.naver.com/detail/detail.php?d1id=1&dir_id=10202&eid=BWWzbHiX7EIRg8khrs2nk9cUO8dECM4M&qb=c3NoIMGivNMgsKG0ycfRIGlw&pid=fSur7soi5TCssckL5Clsss--263690&sid=SVCrLKaoUEkAAHbNF8c)

반응형

댓글()

IPTABLES 차단후 오픈, 오픈후 차단

리눅스/Network|2015. 1. 26. 17:53
반응형

iptables 방화벽 파일을 열어 아래와 같이 수정 합니다.


[root@sysdocu ~]# vi /etc/sysconfig/iptables

 


1. 차단 후 오픈

모든 포트를 차단한 후에 원하는 포트만 오픈하여 사용

 

# Firewall configuration written by system-config-securitylevel

# Manual customization of this file is not recommended.

*filter

:INPUT DROP [0:0]

:FORWARD DROP [0:0]

:OUTPUT ACCEPT [0:0]

:FW-INPUT - [0:0]

-A INPUT -j FW-INPUT

-A FORWARD -j FW-INPUT

-A FW-INPUT -p ALL -s 127.0.0.1 -j ACCEPT

-A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT

-A FW-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

-A FW-INPUT -p tcp -s 115.68.87.2 --dport 20 -j ACCEPT

-A FW-INPUT -p tcp -s 115.68.87.2 --dport 21 -j ACCEPT

-A FW-INPUT -p tcp --dport 22 -j ACCEPT

-A FW-INPUT -p tcp --dport 53 -j ACCEPT

-A FW-INPUT -p tcp --dport 80 -j ACCEPT

COMMIT



2. 오픈 후 차단

원하는 포트를 오픈 설정 한 후에 나머지는 차단

 

# Generated by iptables-save v1.3.5 on Fri Aug  3 13:23:20 2012

*filter

:INPUT ACCEPT [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [8:1304]

:FW-INPUT - [0:0]

-A INPUT -j FW-INPUT

-A FORWARD -j FW-INPUT

-A FW-INPUT -i lo -j ACCEPT

-A FW-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT

-A FW-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

-A FW-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

-A FW-INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT

-A FW-INPUT -j REJECT --reject-with icmp-host-prohibited    // 이외 차단

COMMIT

 

반응형

댓글()

트래픽 모니터링 프로그램 (bandwidthd)

리눅스/Network|2015. 1. 26. 17:52
반응형

트래픽 모니터링 프로그램입니다.

 

배포 사이트 : http://bandwidthd.sourceforge.net/

 

1. 설치

# cd /usr/local/src

# wget http://sourceforge.net/projects/bandwidthd/files/bandwidthd/bandwidthd%202.0.1/bandwidthd-2.0.1.tgz/download

# tar xvzf bandwidthd-2.0.1.tgz

# cd bandwidthd-2.0.1

# ./configure

# make

# make install

# rm -rf /usr/local/bandwidthd/htdocs

# cp -arp /usr/local/src/bandwidthd-2.0.1/phphtdocs /usr/local/bandwidthd/htdocs

 

2. 설정

# vi /usr/local/apache/conf/httpd.conf

설정 내용에 아래 Alias 를 추가하고 apache 를 재시작합니다.

Alias /bandwidthd /usr/local/bandwidthd/htdocs

 

<Directory "/usr/local/bandwidthd/*">
    AllowOverride All
    Options +ExecCGI
    Order allow,deny
    Allow from all
</Directory>

# /usr/local/apache/bin/apachectl restart

 

3. 구동

# /usr/local/bandwidthd/bandwidthd &

# echo "/usr/local/bandwidthd/bandwidthd &" >> /etc/rc.d/rc.local

 

4. 확인

bandwidthd 를 구동하고 어느정도의 시간을 기다린 후 도메인을 이용하여 페이지 접속을 해봅니다.

http://sysdocu.tistory.com/bandwidthd

 

반응형

댓글()

맥 미니 IP 변경 명령어

리눅스/Network|2015. 1. 26. 17:51
반응형

root 사용자로 전환 후 아래 명령어로 변경합니다.

 

networksetup -setmanual Ethernet 192.168.10.2 255.255.255.0 192.168.10.1

반응형

댓글()

e1000e 드라이버 업데이트

리눅스/Network|2015. 1. 26. 17:51
반응형

* e1000e 장치에서 에러 및 드롭패킷이 어마어마하게 많이 쌓이고

   네트웍 연결이 끊어질때 조치 방법입니다.

 

 kmod-e1000e 패키지를 ELrepo.org를 통해서 설치할 경우 해결할 수 있다.
해당 문제는 MSI-X 인터럽트가 원인이다. (on 또는 off 설정 변경으로는 해결이 되지 않는다. 그냥 문제)

* MSI-X가 뭐하는건지는 여길 확인하자. http://www.intime.kr/intime%20&%20pcie.htm

 

[1] 공인 키를 집어넣는다.
rpm --import http://elrepo.org/RPM-GPG-KEY-elrepo.org

 

[2] ELrepo 저장소를 설치한다

[2-1] Centos 5의 경우
rpm -Uvh http://elrepo.org/elrepo-release-5-3.el5.elrepo.noarch.rpm

[2-2] Centos 6의 경우
rpm -Uvh http://elrepo.org/elrepo-release-6-4.el6.elrepo.noarch.rpm

[2-3] yum check-update

 

[3] 기존 설치되어 있는 드라이버를 확인해보자 ㅇㅇ
>> lspci | grep Ether
00:19.0 Ethernet controller: Intel Corporation 82579LM Gigabit Network Connection (rev 05)
02:00.0 Ethernet controller: Intel Corporation 82574L Gigabit Network Connection

>> lsmod | grep e100
e1000e                222073  0

>> modinfo e1000e | head -6
filename:       /lib/modules/2.6.32-279.5.2.el6.x86_64/kernel/drivers/net/e1000e/e1000e.ko
version:        1.9.5-k
license:        GPL
description:    Intel(R) PRO/1000 Network Driver
author:         Intel Corporation, <linux.nics@intel.com>
srcversion:     7E202E3E3946DC1ED84530F

 

[4] 이제 kmod-e1000e를 설치. 리스트가 있는지 확인
>> yum list |grep -i e1000
kmod-e1000.x86_64 8.0.35-1.el6.elrepo elrepo
kmod-e1000e.x86_64 1.9.5-1.el6.elrepo elrepo

 

[5] 설치
>> yum -y install kmod-e1000e.x86_64

 

[6] 재부팅하고나서 다시 보면 달라져있다.
>> modinfo e1000e |head -6
filename: /lib/modules/2.6.32-220.7.1.el6.x86_64/weak-updates/e1000e/e1000e.ko
version: 1.9.5-NAPI
license: GPL
description: Intel(R) PRO/1000 Network Driver
author: Intel Corporation, <linux.nics@intel.com>
srcversion: 16A9E37B9207620F5453F5E
 

재부팅 후 조회해보면 version 옆에 NAPI 라고 뜨면 제대로 설치된 것.

 

[작성] 백성현

반응형

댓글()

iptables 나가는 IP 또는 포트 차단

리눅스/Network|2015. 1. 26. 17:51
반응형

[root@sysdocu ~]# iptables -A OUTPUT -d 192.168.10.2 -j DROP

해당 서버에서 192.168.10.2 서버로는 연결이 되지 않습니다.

 

[root@sysdocu ~]# iptables -A OUTPUT -p tcp --dport 80 -j DROP

해당 서버에서 외부 모든 서버의 80 포트로는 접속이 되지 않습니다.

 

[root@sysdocu ~]# iptables -A OUTPUT -p tcp -d 192.168.10.2 --dport 80 -j DROP

해당 서버에서 192.168.10.2 서버의 80 포트로만 접속이 되지 않습니다.

반응형

댓글()

iptables 특정 IP 및 대역 차단과 해제

리눅스/Network|2015. 1. 26. 17:51
반응형

ip차단 설정
iptables -A INPUT -s 211.224.103.138 -j DROP

 

ip대역 차단

iptables -A INPUT -t filter -s 211.224.103.0/24 -j DROP

(211.224.103.0 ~ 255까지 256개의 ip를 한꺼번에 차단한다)

 

http://www.apnic.net에서 ip 검색 후 하단에 나오는 route 정보를 입력하는 것으로도 ip 대역을 차단할 수 있다

79.182.2.55 라는 ip를 검색하면 하단부에  route: 79.182.0.0/20 이란 정보가 나온다.

 

iptables -A INPUT -s 79.182.0.0/20 -j DROP

 

ip차단 해제
iptables -D INPUT -s 211.224.103.138 -j DROP

 

웹접속 차단
iptables -A INPUT -s 211.224.103.138 -p tcp --dport 80 -j DROP

 

설정내역 보기
iptables -L

 

설정 전체 삭제
iptables -F INPUT

 

적용
service iptables save

 

[출처] aramjo's Blog | 아람조 (http://aramjo.blog.me/120069204463)

반응형

댓글()

vnstat 모니터링 (웹페이지용)

리눅스/Network|2015. 1. 26. 17:50
반응형

by Tweak on September 5, 2009 
in LinuxServers

vnStat is a network traffic monitor for Linux that keeps a log of daily network traffic for the selected interface(s). vnStat isn’t a packet sniffer. The traffic information is analyzed from the /proc -filesystem, so vnStat can be used without root permissions. However at least a 2.2.x kernel is required.

  1. Install vnStat
    wget http://humdi.net/vnstat/vnstat-1.7.tar.gz
    tar zxvf vnstat-1.7.tar.gz
    cd vnstat-1.7
    make
    make install

  2. Create databases for NICs
    vnstat -u -i eth0
    vnstat -u -i eth1

  3. Set a cronjob to check bandwidth usage
    Add a crontab job entry for vnStat.
    crontab -e
    and add the following line
    */5 * * * * /bin/vnstat -u

  4. Install the frontend
    cd /var/www/  <- DocumentRoot 디렉토리
    wget http://www.sqweek.com/sqweek/files/vnstat_php_frontend-1.4.1.tar.gz
    tar zxvf vnstat_php_frontend-1.4.1.tar.gz
    mv vnstat_php_frontend-1.4.1 vnstat

    Edit vnstat/config.php and adjust the following lines to your preference:
    $iface_list = array('eth0', 'eth1');
    $iface_title['eth0'] = 'Extern';
    $iface_title['eth1'] = 'Intern';
    $vnstat_bin = '/usr/bin/vnstat';

Finally we open our browser and type

http://yourdomain.tld/vnstat/

You should see something like this

vnstat

반응형

댓글()