혜화 - 대학로

머리에 털나고 처음으로 혜화역의 대학로 거리로 갔다.
참 재미있었다 ㅎㅎㅎㅎ

각종 공연들의 소개가 난무하고 공연보라고 홍보를 하며
대학생들의 활기찬 모습을 보니 정말 보기 좋았다.
개인적으로 공연을 많이 보고싶어서 관심이 많았는데
같이 볼사람만 생기면 자주 와서 공연을 보고 싶다 ㅎ

근데 재미있는 광경이 나왔다.


티비에서만 보던 길거리 공연이였다 ㅎㅎ
길거리서 갑자기 소리를 지르며 노래를 하고 말하는 맨트도 참 재미있었다.


나중에는 사람들이 벌떼처럼 몰려서 길거리 공연을 즐겻다.
두분들의 꽁트와 음악들이 참 재미있고 놀라운 광경이였다 ㅎ
익숙한 사람들은 그러려니 하겠지만
처음 보게된 나는 정말 인상깊게 보았다.
앞으로도 대학로를 자주 가고싶다는?ㅎ


아는 사람이 쇼핑몰 오픈했다
참 대단하다...
나도 생각만 했지 진짜로 도전은 안했는데
작게나마 일단 시작하여 꿈을 꾸는 모습이 좋다.

내가 구입하는 일이 생긴다면 한번 구입해야겠다 ㅋ

http://honeylook.co.kr/

=============================================
master server 설정

my.cnf 추가
[mysqld]
log-bin=mysql-bin
server-id=1


mysql 접속
mysql -uroot -p

slave서버에서 접속하는 유저에게 권한부여
grant replication slave on *.* to '유저명'@'슬레이브IP' identified by '비번';
확인
select * from user where user='replication';
select * from user where user='replication'\G;

*************************** 2. row ***************************
                 Host: 211.115.127.228
                 User: replication
             Password: *EAB9E57CC91EDA4B72ABCB63E05D2A8FD113BFE4
          Select_priv: N
          Insert_priv: N
          Update_priv: N
          Delete_priv: N
          Create_priv: N
            Drop_priv: N
          Reload_priv: N
        Shutdown_priv: N
         Process_priv: N
            File_priv: N
           Grant_priv: N
      References_priv: N
           Index_priv: N
           Alter_priv: N
         Show_db_priv: N
           Super_priv: N
Create_tmp_table_priv: N
     Lock_tables_priv: N
         Execute_priv: N
      Repl_slave_priv: Y
     Repl_client_priv: N
     Create_view_priv: N
       Show_view_priv: N
  Create_routine_priv: N
   Alter_routine_priv: N
     Create_user_priv: N
             ssl_type:
           ssl_cipher:
          x509_issuer:
         x509_subject:
        max_questions: 0
          max_updates: 0
      max_connections: 0
 max_user_connections: 0
2 rows in set (0.00 sec)


권한 리로드
flush privileges;

마스터 상태확인
show master status;

+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000006 |      261 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

mysql나가기
exit;

mysql재시작 한다.
/etc/init.d/mysqld restart

---------------------------------------------

slave server 설정

master의 디비를 백업하여 slave의 디비에 복원하여 똑같은 디비상태로 만든다.

my.cnf 추가
[mysqld]
log-bin=mysql-bin
server-id=2
master-host=마스터아이피주소
master-port=3306
master-user=유저명
master-password=비밀번호
replicate_do_db=디비명


마스터 정보변경 할 수도 있다.

mysql접속
mysql -uroot -p

slave stop;

CHANGE MASTER TO
MASTER_HOST='마스터IP',
MASTER_USER='유저명',
MASTER_PASSWORD='패스워드',
MASTER_LOG_FILE='mysql-bin.000027같은 로그파일명',
MASTER_LOG_POS=4;

start slave;

확인
show slave status;
show slave status\G;

*************************** 1. row ***************************
             Slave_IO_State: Waiting for master to send event
                Master_Host: 121.254.231.163
                Master_User: replication
                Master_Port: 3306
              Connect_Retry: 60
            Master_Log_File: mysql-bin.000006
        Read_Master_Log_Pos: 424
             Relay_Log_File: mysqld-relay-bin.000013
              Relay_Log_Pos: 561
      Relay_Master_Log_File: mysql-bin.000006
           Slave_IO_Running: Yes
          Slave_SQL_Running: Yes
            Replicate_Do_DB: replication
        Replicate_Ignore_DB:
         Replicate_Do_Table:
     Replicate_Ignore_Table:
    Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
                 Last_Errno: 0
                 Last_Error:
               Skip_Counter: 0
        Exec_Master_Log_Pos: 424
            Relay_Log_Space: 561
            Until_Condition: None
             Until_Log_File:
              Until_Log_Pos: 0
         Master_SSL_Allowed: No
         Master_SSL_CA_File:
         Master_SSL_CA_Path:
            Master_SSL_Cert:
          Master_SSL_Cipher:
             Master_SSL_Key:
      Seconds_Behind_Master: 0
1 row in set (0.00 sec)


mysql나가기
exit;

mysql 재시작
/etc/init.d/mysqld restart

 

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


find . -user [user] -exec chown [user].[group] {} \;
==> 해당 uid를 찾아 변경한다.

find . -type f -exec chmod 700 {} \;
현위치의 파일타입의 권한을 변경
find . -type d -exec chmod 600 {} \;
현위치의 디렉토리타입의 권한을 변경

find ./ -name "*" -exec grep -H hack {} \;
find ./ -type f -print | xargs grep -H "hack" /dev/null
find ./ -type f -exec grep 'hack' {} /dev/null \;
egrep -r hack *

==> hack 이라는 단어가 들어가는 문자포함 파일을 찾는다
    세번째가 좀 좋음.


find / -user 427 -print

==> uid가 427인 파일들 찾음


find / -cmin -5

==> 최근 5분안에 생성되거나 업데이트된 파일을 보여준다.


find / -perm -0002 -type d -print

==> 일반유저가 쓰기권한이 있는 디렉토리를 보여준다.

find / -perm -0002 -type f -print

==> 일반유저가 쓰기권한이 있는 파일를 보여준다.


find / -nouser -o -nogroup -print

==> 유저나 그룹이 없는 파일을 보여준다.


find / -mtime 2 -o -ctime 2

==> 지난 2일 사이에 변경된 파일을 보여준다.

손혁진


1. kill 해야할 서비스

apmd
cups
xntpd
portmap
sound
netfs
rstatd / rusersd / rwhod / rwalld 
bootparamd
squid
yppasswdd
ypserv
dhcpd
atd
pcmcia
snmpd
routed
lpd
mars-nwe
nfs
amd
ypbind
xfs
innd
linuxconf


apmd : laptop의 전원관리에 필요
cups : 프린트 시스템이로 삭제
xntpd : network time protocol 사용 안하니 삭제
portmap : R로 시작하는 서비스의 포트 맵핑시켜주는 서비스  보안상 삭제한다.
sound : 사운드 지원이므로 삭제
netfs : nfs 클라이언트가 nfs 서버 마우트시 사용되므로 삭제
rstatd / rusersd / rwhod / rwalld  :  R로 시작하는 서비스 인증과정이 취약하고 remote에서 실행하므로 서비스 하지 않는다.
bootparamd : 하드나 플로피 등 부팅 수단이 없을때 사용하는 것으로 서비스 안함.
squid : squid 프록시 서버를 가동시 설정하므로 이용안하면 삭제
yppasswdd : NIS서버에 사용되는 것으로 필요없다.
ypserv : NIS서버에 사용되는 것으로 필요없다.
dhcpd : dhcp에 사용되는 것으로 이용안하면 필요없음
atd : 예약 서비스로 cron이 있으므로 삭제
pcmcia : 노트북에 사용되는 것으로 삭제
routed : 라우터가 아닌 일반 서버에서는 삭제
lpd : 프린트 서버가 아니면 삭제
mars-nwe : netware 에 쓰이는 파일이나 프린트 서버에 사용되는 것으로 삭제함
nfs : nfs 이용시 놔두고 아니면 삭제
amd : 오토마운트 데몬으로 보안 취양석있으므로 사용 안하면 삭제
ypbind : NIS에 사용, 이용 안하면 삭제함.
xfs : X font server 로 x-windows사용 안하면  삭제한다.
innd : News서비스 사용시 이용되므로 삭제
linuxconf : 원격지 브라우저를 통해 리눅스 시스템의 설정변경하는것으로 보안상 않좋으니 삭제한다.

2. 명령어 권한 제한

chmod 700 명령어
- root만 사용하게 하고 일반사용자는 제한시킨다.
/tmp와 같은 악성파일업로드하여 공격하는 경우가 있는데
업로드 하여도 압축을 못풀도록 tar나 unzip의 파일권한을 700으로 하면 되겠다.
단, 일반 사용자 모두 명령어 사용을 못하니 주의
wget 도 700으로 하여 파일을 다운 못받도록 제한한다.

파일을 변조하는 경우도 있는데 파일속성을 주어 변경하지 못하게 하는 방법도 있다.
i옵션 속성을 주어 변경이 안되도록 지정
lsattr 을 통해 속성 확인
적용 : chattr +i 명령어
해제 : chattr -i 명령어
모두해제 : chattr -suSiadAc 명령어파일
***이 명령어는 ext2 파일시스템 개발자가 개발하였으며 ext2, ext3에서만 잘 작동한다.

change
gpasswd
wall
chfn
chsh
newgrp
write
at
usernetctl
userhelper
mount
umount
lockdev
ping
traceroute
passwd
crontab

3. yum을 통한 최신 업데이트

yum update -y

4. 커널 파라미터 값을 최적화

/etc/sysctl.conf 파일에서 설정한다

확인 : sysctl -a
질의 : sysctl -n
변수 특정값 설정 : sysctl -w
적용 : sysctl -p

특별한 시스템이 아니라면 파라메터값을 다음과 같이 정의한다.
0 = off   /  1 = On

echo "1" > /proc/sys/net/ipv4/tcp_syncookies
syn 플루딩 공격대응으로 킨다

echo "0" > /proc/sys/net/ipv4/tcp_timestamps
불필요함으로 off

echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
smurd 공격에 악용되므로 broadcasts 주소를 통한 icmp echo에 대해 응답하지 않는다.

echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route
스푸핑을 막기위해 라오트 패킷허용을 막음.

echo "0" > /proc/sys/net/ipv4/ip_forward
다른 시스템으로 패킷이 포워딩되지 않도록한다.

echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects
imcp redirects 허용하지 않는다.

echo "1" > /proc/sys/net/ipv4/conf/all/log_martians
스푸핑된 파일이나 소스라우팅, 리다이렉트 패킷에 대한 로그를 남긴다.

echo -e "32768\t61000" > /proc/sys/net/ipv4/ip_local_port_range
시스템 로그포트의 범위를 지정

echo "1024" > /proc/sys/net/ipv4/tcp_max_syn_backlog
syn플루딩 공격과 관련설정
backlog queue 사이즈를 늘려 공격대응

위 설정은 리부팅시 초기화 되므로 /etc/rc.local 에 내용을 추가하여 리부팅시 바로 적용을 하던가
아니면 /etc/sysctl.conf 에다가 설정을 한다.

http://www.frozentux.net/documents/ipsysctl-tutorial/
여기서 여러 파라메터값을 참조하면 되겠다.

손혁진

 

====원격에서 rsync로 백업당기기(로그인 동기화걸기)=====

** 서버 두대를 트러스트 관계로 만들기(백업서버와 웹서버를 운용중에 있다.)**

     - 백업서버에서 인증키를 생성한다.
 
 #/usr/bin/ssh-keygen -t dsa
  Generating public/private dsa key pair.
  Enter file in which to save the key (/root/.ssh/id_dsa):   Enter
  Enter passphrase (empty for no passphrase):   Enter
  Enter same passphrase again:   Enter
  Your identification has been saved in /root/.ssh/id_dsa.
  Your public key has been saved in /root/.ssh/id_dsa.pub.
  The key fingerprint is:
  a5:41:46:fe:37:f5:54:1c:3f:7b:f3:63:16:ea:34:fd root@www.rickinc.com
    
     - 백업서버에서 생성한 dsa키를 복사해서 웹서버로 전송한다.
 
 #/usr/bin/scp .ssh/id_dsa.pub root@192.168.0.100:
  The authenticity of host 'rickinc.com (192.168.0.100)' can't be established.
  RSA key fingerprint is 0c:99:a2:e4:1b:2f:fc:b2:46:f5:a6:b5:cd:12:2a:ec.
  Are you sure you want to continue connecting (yes/no)? yes
  Warning: Permanently added 'rickinc.com,192.168.0.100' (RSA) to the list of known hosts.
  root@192.168.0.100's password:  (서버 계정의 패스워드 입력)
  id_dsa.pub           100% |*********************************************************************************|   608       00:00   


      - 웹서버의 /root에 보면 백업서버의 인증키가 있을 것이다.(id_dsa.pub)
 #cd /root
 #ls -al
 #cd /root/.ssh
 #mv /root/id_dsa.pub
 #/bin/cat id_dsa.pub > .ssh/authorized_keys (파일을 열어서 잘 실행되었는지도 확인해 본다.)
 
     - 보안을 위해서 사용한 인증키 파일을 삭제하고 키가 저장된 파일의 퍼미션을 변경해 준다.
 #rm -f id_dsa.pub

 #chmod 700 .ssh

 #chmod 644 .ssh/authorized_keys
 
      - 로그인 없이 동기화가 잘 되는지 rsync명령어로 확인 해 본다.
                                        원격 서버            원격지 폴더     저장될곳 
  #rsync -avrz -e ssh root@192.168.0.100:/home/smartidc /data
        (192.168.0.100번의 smartidc 폴더를 내서버의 /data에 동기화 시킨다) 


      - 백업서버에서 웹서버의 데이터를 당겨오는 rsync 스크립트 예제이다

 #!/bin/sh

 export LANG="en_US"
 PATH=/bin:/usr/bin
 DATE=`date +%F-%a`
 DAY=`date +%a`

 ### 원격지 실제IP 입력   ###
 REMOTE_IP1=192.168.0.100
 ### 백업서버 저장될위치 입력 ###
 REMOTE_DIR=/backup/$REMOTE_IP1

 ### 백업될 디렉토리 입력 ###
 BACKUP_1=/home
 BACKUP_2=/data/cgallery

 for BACKUP in $BACKUP_1 $BACKUP_2
 do
   rsync -avrz --delete -e ssh $REMOTE_IP1:$BACKUP $REMOTE_DIR || exit 1
 done


리눅스 설치후 삭제해야 할 패키지

anacron apmd at dhcpcd dosfstools eject hotplug ipchains ksymoops kudzu lokkit mailcap pciutils pump raidtools redhat-ogos
redhat-release setserial


anacron
apmd
at
dhcpcd
dosfstools
eject
hotplug
ipchains
ksymoops
kudzu
lokkit
mailcap
pciutils
pump
raidtools     리눅스 소프트웨어 레이드 설정시 사용   
redhat-logos
redhat-release
setserial    시리얼포트정보 알려줌

위 패키지들은 구버전 리눅스에 사용되는 것으로 확인후 삭제한다.
용도에 따라 필요한 경우도 있음

------------------------------------------------------------------------------------

불필요 문서 삭제

rm -f /usr/share/doc/*


------------------------------------------------------------------------------------

리눅스 ctrl+alt+del 키를 이용한 부팅 막기

vim /etc/inittab 에서 다음을 주석처리

#ca::ctrlaltdel:/sbin/shutdown -t3 -r now

------------------------------------------------------------------------------------


리눅스 .bash_history 에 저장되는 명령어 라인을 제한하기

vim /etc/profile

HISTSIZE=10
원하는 라인 수 만큼 설정

HISTFILESIZE=0
=> 로그아웃시 .bash_history 파일을 삭제하게하여 침입자가 로그인 안된상태에서 해당파일을 사용못하게한다.

------------------------------------------------------------------------------------

suid / sgud  가 설정된 파일

 

s비트가 설정된 모든파일 찾기
=> find / -type f \( -perm -04000 -o -perm -02000 \) \-exec ls -lg {} \;
만약 파일시스템이 더 있다면
=> find / \ (! -fstype nfs -o -prune \) -type f ( -perm -04000 -o -perm -02000 \) -exec ls -l {} /;

s비트 설정 해제하기

chmod a-s /usr/bin/
                   chage gpasswd wall chfn chsh newgrp write
          /usr/sbin/
                    usernetctl traceroute
          /bin/
               mount umount ping
          /sbin/
         netreport


------------------------------------------------------------------------------------

숨김파일 찾기

find / -name ".." -print -xdev

find / -name ".*" -print -xdev | cat -v


외부에서 쓰기권한 허용된 파일 찾기

find / -type f \( -perm -2 -o -perm -20 \) -exec ls -lg {} \;


외부에서 쓰기권한 허용된 디렉토리 찾기

find / -type d \( -perm -2 -o -perm -20 \) -exec ls -ldg {} \;

소유자 없는 파일 찾기

find / -nouser -o -nogroup

------------------------------------------------------------------------------------

 


mod_security 룰 설정 내용

<IfModule mod_security.c>
# Turn the filtering engine On or Off
SecFilterEngine On   # => 엔진 사용유무 설정

# Change Server: string
SecServerSignature " Microsoft-IIS/5.0"
# httpd.conf 에서 ServerTokens Prod 이용
# The audit engine works independently and can be turned On or Off on the per-server or
# on the per-directory basis. "On" will log everything,"DynamicOrRelevant" will log dynamic
# requests or violations, and "RelevantOnly" will only log policy violations
SecAuditEngine RelevantOnly
# => 비정상적인 것에 대하서 판결하겠다

# The name of the audit log file
SecAuditLog logs/audit_log
# => 로그를 어디에 저장할 것인가 로그 저장경로

# Should mod_security inspect POST payloads
SecFilterScanPOST On
# => post로 오는것도 필터링을 할 것인지 설정

# Action to take by default
SecFilterDefaultAction "deny,log,status:403"
# => 디폴트 액션 - 필터링 방법 " 차단하고 로그를 남기고 403에러를 내겠다"

SecFilterSelective REQUEST_METHOD "!(GET|POST|HEAD)" deny,log,status:403
# => 리퀘스트 메소드가 get post head 가 아닌경우 차단하고 로그 남기고 403에러를 낸다.


# Require Content-Length to be provided with
# every POST request
SecFilterSelective REQUEST_METHOD "^POST$" chain
SecFilterSelective HTTP_Content-Length "^$"
SecFilterSelective ARG_username admin chain
SecFilterSelective REMOTE_ADDR "!^211.47.64.5$“
SecFilterSelective REMOTE_ADDR "^127.0.0.1$" nolog,allow
SecFilterSelective THE_REQUEST "wget "
SecFilterSelective THE_REQUEST “lynx”
SecFilterSelective THE_REQUEST "mkdir"
SecFilterSelective THE_REQUEST "/tmp"
SecFilterSelective THE_REQUEST "/bin"
SecFilterSelective THE_REQUEST "/admin_/" log,pass
SecFilterSelective THE_REQUEST "/₩.bash_history"
# WEB-CGI bash access
SecFilterSelective THE_REQUEST "/bash" log,pass
SecFilterSelective THE_REQUEST "awstats" chain
SecFilterSelective ARGS "(pluginmode|loadplugin|debug|configdir|perl|cgi|chmod|exec|print)"

 


SecFilterSelective OUTPUT "Fatal error:" deny,status:500
# => 서버측 기반 프로그램 실행시 Fatal error 가 나오면 차단을 하고 500에러를 낸다
#    비정상 sql문이나 장애발생시 에러메세지를 통하여 페이지를 보여주지 않고 500에러로 출력

ErrorDocument 500 /php-fatal-error.html
SecFilterOutputMimeTypes "(null) text/html text/plain"
# output은 html이나 txt만 모니터링하도록 설정


<Location /cgi-bin/FormMail>
# Reject request where the value of parameter "recipient"
# does not end with "@test.com"
SecFilterSelective ARG_recipient "!@test.com$">
# => 폼메일에서 @test.com 이 아니면 차단을 한다
</Location>


SecUploadDir /tmp
SecUploadKeepFiles On
SecUploadApprovescript /full/path/to/the/script.sh  # => 바이러스 체크 스크립트지정
# 업로드되는 파일에 대해 바이러스 체크등

SecFilter "delete[[:space:]]+from"
SecFilter "insert[[:space:]]+into"
SecFilter "select.+from“
SecFilter "drop[[:space:]]table"
</IfModule>


http://www.samplesite.com/login.php?username=admin';
DROP%20TABLE%20users--

+ Recent posts