Carbylamine Obfuscate PHP Encoder
출처 : https://code.google.com/p/carbylamine
절대 풀어볼수 없다는 Carbylamine 인코더 소스를 가지고 만들었기 때문에
decoder 는 제공할수 없습니다 ‘ㅅ’a
실행 하면 별도의 php 인코딩 페이지로 이동합니다 (_ _);;
워드프레스에는 html 이나 form 은 여기 넣는데 php 못넣겠어요.(어렵어렵.)
Carbylamine Obfuscate PHP Encoder
출처 : https://code.google.com/p/carbylamine
절대 풀어볼수 없다는 Carbylamine 인코더 소스를 가지고 만들었기 때문에
decoder 는 제공할수 없습니다 ‘ㅅ’a
실행 하면 별도의 php 인코딩 페이지로 이동합니다 (_ _);;
워드프레스에는 html 이나 form 은 여기 넣는데 php 못넣겠어요.(어렵어렵.)
음 php 프로그래머의 실수에 따라 DB사용을 하지 않으나 장시간 sleep이 나는 경우가 있다.
뭐 프로그램 짜다보면 그럴수 있을것이다 =3=a
서버 관리자 입장에서는 서버 메모리에 부담을 주고 sleep 프로세스의 과다 접속에 의해 my.cnf에서 설정된
max connctions 값 에 의해 추가 신규 접속이 불가능한 상황을 방지 해야 한다.
그리하여 이러한 스크립트를 만들었습니다 🙂 – (mysql.close()가 제대로 되지 않는 경우를 상정.)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
#!/bin/bash ######################################################################################################### # SQL 슬립쿼리 자동 킬 스크립트 # # - 로그 파일 위치 : /var/log/mysql_autometic_kill.log # # - 타겟아이디를 지정하는 이유는 ssh 접속 mysql 실행하고 있는 유져가 짤릴수도 있기 때문이다. # # # # last updated 2015.08.17 made in san0123a@naver.com # ######################################################################################################### ### 대상 아이디 및 슬립 시간에 따라 자동으로 kill 을 한다 ############################################### sleep_time="500" # 정리 시간 지정 500초 all_user_target="Y" # 모든 유져 대상 (Y/N) target_id=( account1 account2 account3 account4 NULL ) # 대상 계정 지정 array ######################################################################################################### mysql_path="/usr/local/mysql/bin/mysql" dbpa="mysql루트패스워드" # pid 생성 중복실행을 방지 ######################################################## if [[ -s $0.pid ]];then exist_pid=`cat $0.pid` if [[ -z `ps -e|grep "^$exist_pid "` ]];then rm -f $0.pid;exec_confirm="Y" else exec_confirm="N";echo -e "\e[1;32mShell has already running...\e[0m";fi else exec_confirm="Y";fi if [[ $exec_confirm == "Y" ]];then echo $$ > $0.pid ################################################################################### /bin/rm -f /tmp/kill_list.tmp /tmp/kill_list.sql find /var/log/ -name 'mysql_autometic_kill.log' -size +20000k -type f -exec cp /dev/null {} \; for i in `$mysql_path -uroot -p$dbpa mysql -s -N -e "SHOW FULL PROCESSLIST;"|awk '{print $1":"$4":"$5":"$6}'` do process_id=`echo $i|cut -d: -f 1` database=`echo $i|cut -d: -f 2` command=`echo $i|cut -d: -f 3` work_times=`echo $i|cut -d: -f 4` if [[ $all_user_target == "Y" ]];then kill_go="Y" elif [[ $all_user_target == "N" ]];then kill_go="N" for i2 in ${target_id[@]};do if [[ $i2 == $database ]];then kill_go="Y";fi;done fi if [[ $kill_go == "Y" ]];then if [[ $work_times -gt $sleep_time ]];then echo "kill $process_id;" >> /tmp/kill_list.sql echo " -> $process_id / $database / $work_times" >> /tmp/kill_list.tmp ((kills++)) fi;fi done if [[ -e /tmp/kill_list.txt ]];then stime=`date +"%Y/%m/%d %H:%M"` echo "$stime // $kills - sleep query kill." >> /var/log/mysql_autometic_kill.log cat /tmp/kill_list.tmp >> /var/log/mysql_autometic_kill.log;rm -f /tmp/kill_list.tmp echo "" >> /var/log/mysql_autometic_kill.log $mysql_path -uroot -p$dbpa < /tmp/kill_list.sql;rm -f /tmp/kill_list.sql fi ################################################################################### rm -f $0.pid fi # pid 생성 중복실행을 방지 - END ################################################## |
all_user_target 값을 Y로 해두면 모든 계정에 대해 kill을 수행합니다만.
ssh 접속해서 mysql 작업하면서 장시간 가만히 있으면 강제적으로 프로세스 종료 까지 될수 있습니다.
그래서 all_user_target=”N” 으로 하고 문제시 되는 계정만 target_id 에 설정하여 운용하도록 합니다. ‘ㅅ’a
PS. pconnect 를 사용하면 일반 connect 으로 사용하도록 유도 하고, log 테이블이 커졋다면 일정부분 날려서 정리를 해야 할꺼고 사양이 부족하다면 사양 업그레이드를 하거나 DB query cache 를 구현 하는 방법으로 해결 해야 할꺼 같다 ‘ ‘a 이 스크립트는 임시 방편일 뿐이다.
dovecot, sendmail, proftpd, pure-ftpd 를 위한 개인인증서 발급 혹은 갱신용 스크립트 이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
#!/bin/bash check_cert="/etc/pki/tls/certs/sendmail.pem" make_cert() { cd /etc/pki/tls/certs ln -s /etc/pki/tls/certs /etc/ssl/private 2>/dev/null ssl_cnf_temp="/tmp/openssl_temp.cnf" echo "KR" > $ssl_cnf_temp echo "Seoul" >> $ssl_cnf_temp echo "Seoul" >> $ssl_cnf_temp echo "company_name" >> $ssl_cnf_temp echo "system_engineer_team" >> $ssl_cnf_temp echo "$HOSTNAME" >> $ssl_cnf_temp echo "engineer@xxxxxxx.com" >> $ssl_cnf_temp make sendmail.pem < /tmp/openssl_temp.cnf 2>/dev/null # sendmail.pem cat sendmail.pem > pure-ftpd.pem # pure-ftpd.pem openssl req `locale -c LC_CTYPE -k|grep -q charmap.*UTF-8 && echo -utf8` \ -newkey rsa:2048 -keyout /etc/ssl/private/proftpd.key \ -nodes -x509 -days 365 -out /etc/ssl/private/proftpd.crt \ -set_serial 0 < $ssl_cnf_temp 2>/dev/null # proftpd.key, proftpd.crt cd /etc/mail make /etc/init.d/sendmail restart /etc/init.d/dovecot restart rm -f $ssl_cnf_temp } if [[ -e $check_cert ]];then cert_expire=`openssl x509 -noout -text -in $check_cert|awk '/Not After :/{print $4,$5,$7}'` cert_expire_date=`date +"%Y%m%d" -d "$cert_expire"` two_weeks_after=`date +"%Y%m%d" -d "2 weeks"` if [[ $two_weeks_after -gt $cert_expire_date ]];then make_cert; fi else make_cert; fi |
스크립트 설명 : sendmail.pem 인증서의 만료일 2주 미만으로 남았거나 인증서가 없으면 생성해준다.
cron 에 등록하여 일주일에 한번 정도씩 돌려주면 개인인증서 갱신 걱정 없이 사용할 수 있겠다.
vi /etc/cron.weekly/public_cert_make.sh 이런 위치에 넣어두면 일주일에 한번씩 돈다 ‘ㅅ’a
chmod 700 /etc/cron.weekly/public_cert_make.sh 해둬야 돈다 . 잊지 말자.
아래 설정값은 플레인 로그인을 막는 설정이 아니다.
LOGIN PLAIN, TLS 둘다 활성화 하는 옵션들 이다.
1. dovecot – STARTTLS 설정( /etc/dovecot/conf.d/10-ssl.conf )
1 2 3 4 |
ssl = yes ssl_cert = </etc/pki/tls/certs/sendmail.pem ssl_key = </etc/pki/tls/certs/sendmail.pem ssl_ca = </etc/pki/tls/certs/ca-bundle.crt |
평문 패스워드 막는건 /etc/dovecot/conf.d/10-auth.conf 파일의 disable_plaintext_auth 옵션이다.
2. sendmail – STARTTLS 설정( /etc/mail/sendmail.mc )
1 2 |
~]# cd /etc/mail ~]# vi sendmail.mc |
1 2 3 4 5 6 7 |
define(`confCACERT_PATH', `/etc/pki/tls/certs')dnl define(`confCACERT', `/etc/pki/tls/certs/ca-bundle.crt')dnl define(`confSERVER_CERT', `/etc/pki/tls/certs/sendmail.pem')dnl define(`confSERVER_KEY', `/etc/pki/tls/certs/sendmail.pem')dnl DAEMON_OPTIONS(`Port=smtps, Name=TLSMTA, M=s')dnl dnl define(`confAUTH_OPTIONS', `A p')dnl |
confAUTH_OPTIONS 는 주석 처리 해버린다 ‘ㅅ’a
1 2 |
~]# make ~]# /etc/init.d/sendmail restart |
평문 패스워드 막는건 define(confAUTH_OPTIONS',
A p’)dnl 이렇게 주석 제거 하고 하면 된다.
( TLS연결 테스트 : https://starttls.info ) 혹은 아래 명령어.
1 2 |
~]# openssl s_client -starttls smtp -connect localhost:25 ~]# openssl s_client -starttls pop3 -connect localhost:110 |
3. proftpd – FTP over TLS 설정( /etc/proftpd.conf )
1 2 3 4 5 6 7 8 9 |
<IfModule mod_tls.c> TLSEngine on TLSProtocol SSLv23 TLSOptions NoCertRequest AllowClientRenegotiations TLSRSACertificateFile /etc/pki/tls/certs/proftpd.crt TLSRSACertificateKeyFile /etc/pki/tls/certs/proftpd.key TLSVerifyClient on TLSRequired off </IfModule> |
평문 패스워드 막는건 TLSRequired 값을 on 으로 하면 된다.
4. pure-ftpd – FTP over TLS 설정( /etc/pure-ftpd/pure-ftpd.conf )
1 |
TLS 1 |
평문 패스워드 막는건 TLS 값을 2 으로 하면 된다.
/etc/sysconfig/i18n 에서 서버인코딩을 설정을 한다.
1 2 3 4 |
LANG="ko_KR.UTF-8" SUPPORTED="ko_KR.UTF-8:ko_KR.eucKR:ko_KR:ko:en_US.iso885915:en_US:en" SYSFONT="lat0-sun16" SYSFONTACM="iso15" |
만약 euckr을 선호 한다면 LANG=”ko_KR.eucKR” 을 지정하면 된다.
하지만 왠만하면 UTF8을 쓰도록하자 표준이 변경된지 몇년째인가?
TIP1. utf8로 설정하고 재접속을 하면 엔지니어의 친구인 sar 명령어를 쳤을때 시간이 안나온다.
아래의 명령어로 시간표시를 영국형태로 표시하도록 하자 ‘ㅅ’a 그리곤 재접속.
1 |
~]# echo 'alias sar="LC_TIME=en_UK.utf8 sar"' >> /etc/bashrc |
~]# sar
Linux 2.6.32-504.30.3.el6.x86_64 (localhost.localdomain) 08/04/15 _x86_64_ (8 CPU)
00:00:01 CPU %user %nice %system %iowait %steal %idle
00:10:01 all 0.04 0.00 0.03 0.11 0.00 99.82
00:20:01 all 0.03 0.00 0.03 0.08 0.00 99.87
00:30:01 all 0.02 0.00 0.02 0.07 0.00 99.88
00:40:01 all 0.03 0.00 0.03 0.10 0.00 99.84
00:50:01 all 0.03 0.00 0.03 0.14 0.00 99.81
01:00:01 all 0.02 0.00 0.03 0.16 0.00 99.79
01:10:01 all 0.05 0.00 0.02 0.15 0.00 99.78
TIP2. UTF-8 설정시 vi 로 열었을때 한글이 깨져 보이는거 해결.
1 2 |
~]# echo 'set fileencodings=utf-8,euc-kr' >> /etc/vimrc ~]# echo 'alias vi=vim' >> /etc/bashrc |
TIP3. SecureCRT 에서는 설정을 이렇게 바꾸어 준다 ‘ㅅ’a
Tip4. CentOS7의 경우 /etc/sysconfig/i18n 이 삭제가 되었다.
1 2 3 4 5 6 7 8 |
~]# locale LANG=ko_KR.UTF-8 ... ... ... ~]# echo $LANG ko_KR.UTF-8 |
언어셋 변경 방법은 /etc/locale.conf 을 수정하거나 아래와 같은 명령어로 수정한다.
1 |
~]# localectl set-locale LANG=ko_KR.UTF-8 |
1. pure-ftpd 다운로드 : http://download.pureftpd.org/pub/pure-ftpd/releases/
2. 압축 해제, 컴파일 및 selinux 끄기
1 2 3 4 5 6 7 8 9 10 |
~]# cd /opt ~]# tar xfzp pure-ftpd-1.0.36.tar.gz ~]# cd pure-ftpd-1.0.36 ~]# ./configure --with-altlog --with-language=english --with-rfc2640 --with-ftpwho --with=tls --without-ldap --without-mysql --without-pgsql ~]# make && make install ~]# setsebool -P ftpd_use_passive_mode on ~]# setsebool -P ftp_home_dir on ~]# setenforce 0 |
3. /etc/pam.d/ftp 설정
1 2 3 4 5 6 7 |
#%PAM-1.0 auth required pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed auth include system-auth auth required pam_shells.so account include system-auth session include system-auth session required pam_loginuid.so |
4. TLS 통신 활성화를 위한 퍼블릭키 생성.
1 2 |
~]# ln -s /etc/pki/tls/certs /etc/ssl/private ~]# openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/pki/tls/certs/pure-ftpd.pem -out /etc/pki/tls/certs/pure-ftpd.pem |
5. /etc/pure-ftpd/pure-ftpd.conf 설정
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
############################################################ # # # Configuration file for pure-ftpd wrappers # # # ############################################################ ChrootEveryone yes BrokenClientsCompatibility no MaxClientsNumber 50 Daemonize yes MaxClientsPerIP 8 DontResolve yes MaxIdleTime 15 UnixAuthentication yes LimitRecursion 10000 8 AnonymousCanCreateDirs no MaxLoad 4 Bind ,21 PassivePortRange 40003 40103 AntiWarez yes AnonymousOnly no NoAnonymous yes AnonymousCantUpload yes MaxDiskUsage 99 Umask 133:022 MinUID 500 UseFtpUsers no AllowUserFXP no AllowAnonymousFXP no AllowDotFiles yes VerboseLog no SyslogFacility ftp PIDFile /var/run/pure-ftpd.pid AltLog w3c:/var/log/xferlog CustomerProof yes TLS 1 FileSystemCharset utf8 ClientCharset cp949 #UserBandwidth 8 #PAMAuthentication yes #UserRatio 1 10 #ForcePassiveIP 192.168.0.1 #TrustedIP 10.1.1.1 #AnonymousRatio 1 10 #AnonymousBandwidth 8 #DisplayDotFiles yes #ProhibitDotFilesWrite yes #ProhibitDotFilesRead yes #LogPID yes #NoChmod yes #KeepAllFiles yes #CreateHomeDir yes #Quota 1000:10 #CallUploadScript yes #NoRename yes #PerUserLimits 3:20 #NoTruncate yes #IPV4Only yes #IPV6Only yes |
36번째줄 설정은 서버 인코딩셋에 따라 euckr 으로 지정해야 할수 있다.
echo $LANG 로 서버 인코딩셋을 확인하거나 /etc/stsconfig/i18n 을 확인하거나 수정 후에 맞추어 준다.
6. pure-ftpd 명령어 생성
1 2 3 |
~]# touch /etc/init.d/pure-ftpd ~]# chmod 700 /etc/init.d/pure-ftpd ~]# vi /etc/init.d/pure-ftpd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
#!/bin/bash # Startup script for the pure-ftpd FTP Server $Revision: 1.1 $ # chkconfig: - 85 15 # description: Pure-FTPd is an FTP server daemon based upon Troll-FTPd # processname: pure-ftpd # pidfile: /var/run/pure-ftpd.pid # config: /etc/pure-ftpd/pure-ftpd.conf # Source function library. . /etc/init.d/functions # Source networking configuration. . /etc/sysconfig/network # Check that networking is configured. [ ${NETWORKING} = "no" ] && exit 0 RETVAL=0 prog="pure-ftpd" # Path to the pure-ftp binaries. fullpath=/usr/local/sbin/pure-ftpd pureftpwho=/usr/local/sbin/pure-ftpwho pure_config=/etc/pure-ftpd/pure-ftpd.conf pure_launch_script=/usr/local/sbin/pure-config.pl start() { echo -n $"Starting $prog: " daemon "$pure_launch_script $pure_config --daemonize > /dev/null" RETVAL=$? [ $RETVAL = 0 ] && touch /var/lock/subsys/pure-ftpd echo } stop() { echo -n $"Stopping $prog: " killproc pure-ftpd RETVAL=$? [ $RETVAL = 0 ] && rm -f /var/lock/subsys/pure-ftpd echo } # See how we were called. case "$1" in start) start ;; stop) stop ;; restart) stop start ;; reload) echo -n $"Reloading $prog: " killproc pure-ftpd -HUP RETVAL=$? echo ;; condrestart) if [ -f /var/lock/subsys/pure-ftpd ] ; then stop # avoid race sleep 3 start fi ;; status) status pure-ftpd RETVAL=$? if [ -f $pureftpwho ] && [ $RETVAL -eq 0 ] ; then $pureftpwho fi ;; *) echo $"Usage: pure-ftpd {start|stop|restart|reload|condrestart|status}" RETVAL=1 esac exit $RETVAL |
7. 데몬 시작 및 chkconfig 등록.
1 2 |
~]# /etc/init.d/pure-ftpd start ~]# chkconfig --level 2345 pure-ftpd on |