2014년 12월 24일 수요일

sony 1adac 사용후기

"이어폰샵"에서 청음하다, audio technica pro700mk2를 살까, 소니 1a를 살까 하다가

아이유헤드폰이란 말에 혹해서 1adac 을 구입.

 

문제점

1. 소리를 크게 들을 시 쇳소리가 남. 찾아 보니 치찰음이라고 해서 소니 고유 문제라고함.

1adac 에서는 고쳐졌다고 하는데, 들어보면 심히 거슬림.

 

2. 요게 가장 큰 문제 안드로이드 사용시 전화가 안됨.
전화 울릴때마다 usb케이블을 제거후 받으려고 했으나, 제거해도 일정시간동안은 안됨.

 

 

1adac 사실 분들은 참고 하시길.

2014년 12월 18일 목요일

make: *** [ext/openssl/openssl.lo] Error 1

Centos 6.6 32bit
php 4.4.9
openssl-1.0.1e-30.el6_6.4.i686
openssl-devel-1.0.1e-30.el6_6.4.i686

 

php 설치 중 make 작업시 에러발생
make: *** [ext/openssl/openssl.lo] Error 1

 

여기 참고 해서 openssl.c 를 교체

 

wget http://www.softel.co.jp/blogs/tech/wordpress/wp-content/uploads/2012/10/openssl.c
cp openssl.c ext/openssl/openssl.c

 

성공

 

php 제대로 설치되었던 버젼은

openssl-0.9.7a-43.17.el4_8.6
openssl-devel-0.9.7a-43.17.el4_8.6

 

다운로드 받은 openssl.c 파일 첨부함.

openssl

DNS (bind) 설정시 중요 옵션.

recursion yes;

recursion 설정이 yes 이면 내 dns 외에 도메인에 대해서도 응답을 한다.

 

allow-query { any; };

위와 같이 설정해야 다른 DNS 서버에서 질의시 응답을 한다.

eAccelerator , APC php 최소 버젼

/usr/local/src/eaccelerator-eaccelerator-42067ac/eaccelerator.h:45:2: error: #error "eAccelerator only supports PHP 5.1 and higher"
pecl/APC requires PHP (version >= 5.1.0)

 

 

eAccelerator는 5.1 이상

APC 역시 5.1 이상.

2014년 12월 16일 화요일

인민 에어 (A34X_2457) SSD 프리징 현상 해결

인민에어라고 불리우는 한성컴퓨터의 A34X_2457 모델을 구입 후 사용하고 있다.

초반에는 별 문제 없는 것 같더니, 얼마 지나지 않아 프리징현상이 계속 발생한다.

특히 크롬을 사용중 프리징현상이 발생하였다.

한성측에 문의 하였으나, OS를 재설치하거나 내방하여 A/S를 받으라 하는데 업무용 컴퓨터라

힘든 부분이 있었다.

SSD는 구입시 기본으로 내장되어 있는 것으로 에버레스트로 돌려 보니 모델명이 SAMSUNG MZMPC128HBFU-00000 이다.

예전에 집에서 사용하는 PC에 삼성 SSD 제품을 사용하고 같은 현상이 발생한 적이 있었는데, 그 때는 삼성매지션이란 프로그램으로

펌웨어 업데이트를 통해 해당 문제를 해결한 적이 있어, 시도해 보았으나 프로그램자체에서 인식자체를 하지 않는다.

OS 재설치를 고민하던 찰라에 이런 글을 발견 하였다.

해당 글에서는 인텔 8 시리즈 SATA AHCI 컨트롤러 드라이버를 설치 하라고 나와 있는 데, 이미 한성컴퓨터 측에서 다운 받은 드라이버가 설치되어 있는 상황.

그래서 반대로 해당 드라이브를 삭제하고, 윈도우 기본 드라이버로 바꿨다.

 

결론은 성공. 작업을 한 지 약 3주 정도 된 것 같은데,  하루에 한번 이상 발생하던 프리징 현상이 사라졌다.

2014년 11월 21일 금요일

원격데스크탑 포트 번호 변경.

스누피님이 만드신 배치파일 사용으로 대부분의 서버는 포트 변경이 정상적으로 이루어 졌다.

그러나 몇몇 서버, 특히 citrix 가 설치된 서버는 조금 문제가 있었다.

1. HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TerminalServer\WinStations\RDP-Tcp\PortNumber 만 변경 해서는 적용이 되지 않았다.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp\PortNumber 도 같이 변경해 주어야 제대로 접속이 되었다.

2. citrix 같은 경우 원격데스크탑 서비스만 재 실행한다고 해서 제대로 구동되지 않는 다. 아예 재시작을 해주어야 됐음.

 

MS의 공식 fix 문서에서의 프로그램으로 실행해도 역시 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TerminalServer\WinStations\RDP-Tcp\PortNumber 만 고침. 문서상에서도 그러함.

 

다른 검색결과에서는 두개 다 변경 하는 걸로 설명되어 있는 것도 여럿 있음. 두개 값의 차이점은 모르겠음.

 

아래는 스누피님의 배치파일 내용. 주석 달음.
@echo off
echo.
echo.
echo 원격 데스크톱 포트 변경하기 by snoopy
echo 지원 OS : 윈도우 비스타, 7, 2008, 2008 R2
echo.
set /p port=포트 번호 입력 :

REM 레지스트리 위치 같은 경우 윈도우 2000 서버 역시 동일 함.
REM fDenyTSConnections 0이면 원격데스크탑 활성화, 1이면 비활성화.
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f
REM 원격데스크탑 포트 변경.
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber /t REG_DWORD /d %port% /f
REM 원격데스크탑 포트 변경, 이건 추가 하였음.
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp" /v PortNumber /t REG_DWORD /d %port% /f
if errorlevel 1 (
cls
echo.
echo.
echo 우클릭 해서 관리자 권한으로 실행해주세요.
pause>nul
exit
)
REM 윈도우 2000 같은 경우 지원하지 않는 명령어임. 해서 2000이하에서는 안됨.
netsh advfirewall firewall add rule name="원격 데스크톱 %port%" dir=in action=allow protocol=tcp localport=%port%
net stop /y TermService
net start /y TermService
echo 모든 작업이 완료되었습니다.
pause>nul
exit

 

 

2014년 11월 4일 화요일

java.net.BindException: Permission denied

centos 6.2  버젼에서 yum 으로 톰캣 설치.

80포트로 바꾸고 아래와 같은 에러 발생.

...

LifecycleException:  Protocol handler initialization failed: java.net.BindException: Permission denied

...

 

1024이하의 포트를 사용할 경우 Root 권한 밖에 안된다고 하는데, root 권한으로 실행 해도 해당 메시지가 나옴.

/etc/init.d/tomcat6 스크립트를 vi 로 열어보면

 

사용자를  tomcat으로 바꾸고 실행하는 부분이 있다.

$SU - $TOMCAT_USER -c "$TOMCAT_SCRIPT start"

 

제일 상단에 보면 TOMCAT_USER의 변수가 설정되어 있는 데, 이걸 root로 변경후 실행 하면 오류없이 제대로 동작.

 

참조

geolocation.getcurrentposition timeout 문제.

폰갭으로 감싼 웹페이지.

디바이스 : 갤탭 10.1

 

OS를 킷캣으로 바꾼 후 geolocation.getcurrentposition 제대로 동작 안 하고, timeout 됨.

안드로이드  크롬에서 역시 같은 현상.

일반 브라우저는 잘됨.

 

안되는 이유는 진짜 간단 했음.;;

 

킷캣 업데이트 후 GPS 기능을 껏다, 다시 키면 됨...;

kisa openapi 질의 내용이 부정확 합니다. error

kisa openapi 로 질의시 아래와 같은 에러가 뜸.

문자셋 때문인가 해서 euc-kr, ansi 다 바꿔 봐도 안됨.

kisa에 문의.

아래와 같이 답변.
Whois OpenAPI를 통해 질의를 주신 부분에 대해 아래와 같이 답변드립니다.

KISA에서 운영하는 OpenAPI는 KISA가 보유한 IP 및 도메인(.KR 및 .한국)에 대해 최적화 되어 있습니다.

도메인을 검색하면 형식에 맞지 않는다고 응답이 나가는 부분은 선생님께서 국가도메인(.KR 및 .한국)이 아닌 기타 도메인(.com, ,net 등)을 질의하신 것으로 보입니다.

이는 각 도메인마다 제공하는 Whois 정보가 상이하여, 타 도메인은 KISA Whois OpenAPI로 제공이 불가하오니, 이점 참고하여 주시기 바랍니다.

 
<whois>
<krdomain>
<error>
<name>naver.com</name>
<error_code>031</error_code>
<error_msg>
# KOREAN(UTF8) 질의 내용이 부정확 합니다. 아래 주소 조회 예제를 확인하신 후 조회하여 주시기 바랍니다. 도메인 네임 검색 : 예) nic.or.kr 한글 도메인 검색 : 예) 한국인터넷정보센터.kr # ENGLISH The query type is incorrect. Please see the following query examples and try again. Domain Name Search : ex) nic.or.kr - NIDA/KRNIC Whois Service -
</error_msg>
</error>
</krdomain>
</whois>

naver.co.kr 로 했더니, 제대로 가져옴.

2014년 10월 29일 수요일

INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path

서버 : centos 6.3

 

톰캣 실행시 아래와 같은 로그 나옴.

INFO: The APR based Apache Tomcat Native library which allows optimal performance in
production environments was not found on the java.library.path: /usr/lib64/gcj-4.4.7

 

INFO 라 무시해도 되지만 신경이 쓰임.




APR 이란 아파치 포터블 런타임(Apache Portable Runtime)의 약자. 톰캣을 웹서버로 사용할 때 퍼포먼스 향상을 위해 사용.

http://kenu.github.io/tomcat70/docs/apr.html




yum 으로 설치 지원이 안되서, 직접 컴파일 해야 됨.

 

컴파일 시 필요 한 것들,  yum 설치.

yum install apr apr-devel openssl-devel java-1.7.0-openjdk java-1.7.0-openjdk-devel

 

컴파일 도구 설치
yum groupinstall "Development Tools"




tomcat-native 소스 파일 컴파일.  (APR를 톰캣에서 사용하기 위한 JNI wrappers)

wget http://mirror.apache-kr.org/tomcat/tomcat-connectors/native/1.1.31/source/tomcat-native-1.1.31-src.tar.gz
tar zxvf tomcat-native-1.1.31-src.tar.gz
cd tomcat-native-1.1.31-src
cd jni/native/

./configure --with-apr=/usr/bin/apr-1-config

 

에러발생시

checking for JDK location (please wait)... checking Try to guess JDK location... configure: error: can't locate a valid JDK location

 

yum 설치한 jdk 위치 확인후

rpm -ql java-1.7.0-openjdk

 

JDK 위치 정보 옵션으로 지정후 재 설치
./configure --with-apr=/usr/bin/apr-1-config --with-java-home=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.65.x86_64/
make
make install

 

설치 경로를 주지 않으면 /usr/local/apr/lib 위치로 설치됨.

 

/etc/profile 파일 제일 하단에 아래 추가
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib

 

적용
# source /etc/profile

 




 

tomcat  시작시 아래처럼 나오면 성공.

INFO: Loaded APR based Apache Tomcat Native library 1.1.31.

 

 

참조

톰캣 실행시 ...was not found on the java.library.path: /usr/lib64/gcj-4.4.7... 에러 발생.

서버 : centos 6.5 64bit

 

/usr/lib64/gcj-4.4.7 해당 위치에 파일이 있는 데도 에러남.

 

 

jdk 설치로 해결.
#jdk 찾기
yum search openJDK
#jdk 설치
yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel

 

 

참조 

2014년 10월 28일 화요일

현재 접속자 중 해외에서 접속한 사람이 있는 지 확인 하는 파워쉘 스크립트.

이 스크립트를 사용하려면 kisa에서 whois openapi key 발급 받아야 됨.


###################### Config ######################
#kisa 에서 발급받은 api key
#http://whois.kisa.or.kr/kor/whois/openAPI_KeyCre.jsp
$kisaKey = "00000000000000000000"
###################### Config ######################




###### kisa open api를 이용해 한국 아이피인지 체크 ########
function whoisKR ($IpAddress)
{
if(-not $IpAddress) {echo "input ip address"; return}

$countryCode = ""

# Do whois lookup with ARIN on the IP address, do crude error check.
$webclient = new-object System.Net.WebClient
$webclient.Encoding = [System.Text.Encoding]::UTF8
[xml][/xml] $ipxml = $webclient.DownloadString("http://whois.kisa.or.kr/openapi/ipascc.jsp?key=$kisaKey&query=$IpAddress&answer=xml")
if (-not $?) { echo "error" ; return }

$countryCode = $ipxml.whois.countryCode

if($countryCode -ne "KR")
{
return $FALSE #NOT KR
}else{
return $TRUE #KR
}

}
###### kisa open api를 이용해 한국 아이피인지 체크 ########


#whoisKR
#whoisKR "222.122.20.1"
#whoisKR "54.217.151.196"


###### MAIN
###### netstat 를 통해 외부 IP가 한국 꺼인지 아닌 지 체크. ########
###### 한국이 아니면 해당 IP를 deny 룰에 적용. ########
###### 참조 : http://www.lazywinadmin.com/2014/08/powershell-parse-this-netstatexe.html
$ForeignAddressIP = @()

# Get the output of netstat
$data = netstat -nat

# Keep only the line with the data (we remove the first lines)
$data = $data[5..$data.count]

# Each line need to be splitted and get rid of unnecessary spaces
foreach ($line in $data)
{
# Get rid of the first whitespaces, at the beginning of the line
$line = $line -replace '^\s+', ''

# Split each property on whitespaces block
$line = $line -split '\s+'

$temp = ($line[2] -split ":")[0]

#예외처리
switch ($temp)
{
"0.0.0.0" {}
"127.0.0.1" {}
"*"{}
"["{}
default {$ForeignAddressIP += $temp}
}

}


$ForeignAddressIP = $ForeignAddressIP | Sort-Object -unique
foreach( $checkIP in $ForeignAddressIP)
{
#한국이면 true, 아니면 false
if(whoisKR $checkIP)
{
'한국 IP : ' + $checkIP
}else{
'!!!!경고, 한국 IP 아님!!!! : ' + $checkIP
}
'-----------------------'

}

cmd /c pause | out-null

2014년 10월 16일 목요일

TP-LINK TL-WN725N 에러

무선 USB 어뎁터인 TP-LINK의 TL-WN725N 사용중.
SoftAP 모드 설정 중 에러 발생.

인터넷 연결 공유(ICS) 구성 실패, SoftAP에 연결할 수 있으나 인터넷 서비스 공유에는 문제가 있을 수 있습니다.

해결책.
제어판 -> 네크워크 및 인터넷 -> 네트워크 연결

Microsoft Virtual WiFi Miniport Adapter 장치를 사용함으로 변경.

드라이버 다운로드

2014년 10월 8일 수요일

HP System Management Homepage 리눅스 설치

HP System Management Homepage 리눅스 설치

HP 장비에 윈도우를 설치할 때는 smart start를 이용해서 설치 하기 때문에
"System Management Homepage" 소프트웨어가 자동으로 설치된다. (이하 smh)

리눅스는 직접 설치하기 때문에 그런거 없다.
리눅스에 shm 를 설치해 보자.



  1. 아래 사이트에 접속해서, 자신의 HP 장비를 찾는다.
    http://h20565.www2.hp.com/portal/site/hpsc

  2. Dowload option에 Get drivers, software & firmware.를 눌러 들어간다.

  3. 지원하는 OS 종류를 선택하는 데, 필자는 CentOs 5 32bit 버젼을 쓰기 때문에, "Red Hat Enterprise Linux 5 Server (x86)" 를 클릭.

  4. Software - System Management 부분으로 간다.

  5. "* RECOMMENDED * HP System Management Homepage for Linux (x86) (American, International)" 클릭

  6. Dowload 버튼을 눌러 다운을 받고, 해당 rpm 파일을 서버에 올린다.

  7. rpm 설치
    rpm -Uvh hpsmh-7.4.0-13.i386.rpm



* 찾기 힘들다면, HP 레포지토리를 이용하는 것도 좋다.

* 몇몇 서버들은 각각의 다운로드 대신에 "소프트웨어 - 서포트팩 -> 관리 구성 요소 팩"만 존재할 수도 있다.

해당 파일을 다운로드 하면 여러가지 설치파일들이 한꺼번에 들어가 있는 경우도 있다.( ex. DL380 G6)



rpm만 설치해도 smh 화면에는 들어갈수는 있는데, 뭐 볼 게 없다.

진단툴도 같이 설치해 줘야 그나마 볼만한게 나온다.

이전화면으로 돌아가서 "* RECOMMENDED * HP Insight Diagnostics Online Edition for Linux (x86 32-bit)" 도 위와 같은 방식으로 설치 한다.

smh는 설치 완료하면 자동으로 실행 된다.

실행되고 있는 지 확인.
ps aux | grep hpsmh
netstat -nat | grep :2381

진단툴까지 설치가 완료 되었으면 smh 화면으로 들어가 보자.



  1. 브라우저에서 서버의 아이피와 포트번호 2381로 접속하자.
    예: http://123.123.123.123:2381

  2. 자동으로 https로 넘어가며 경고창이 뜨는데 무시하자.  그러면 윈도우에서 보던 smh 화면을 볼수 있다.
    User Name 은 "root", Password는 "root 패스워드" 이다.

  3. 로그인을 완료하면 상단에 webapp으로 들어간다.

  4. 하단에 other agent 부분에  "HP Insight Diagnostics " 클릭.

  5. 새창이 뜨면서 장비의 상세 정보를 볼수 있다.

2014년 10월 6일 월요일

Caused by: java.lang.Exception: Connector attribute SSLCertificateFile must be defined when using SSL with APR

 APR connector  사용하면  keystore 파일을 사용할 수 없다고 한다.

Caused by: java.lang.Exception: Connector attribute SSLCertificateFile must be defined when using SSL with APR

 

 

server.xml 상단에

<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />

부분 주석처리.

ps.
cert 파일로 지정하는 법.

"index '%s.%s' or partition of such index is in unusable state"

오류 보고 -
SQL 오류: ORA-01502: index 'ORAWEB.PK_MEMBER_LOGIN_LOG' or partition of such index is in unusable state
01502. 00000 - "index '%s.%s' or partition of such index is in unusable state"
*Cause: An attempt has been made to access an index or index partition
that has been marked unusable by a direct load or by a DDL
operation
*Action: DROP the specified index, or REBUILD the specified index, or
REBUILD the unusable index partition



이렇게 리빌드.

ALTER INDEX <owner>.<name> REBUILD;





전체  INDEX 리빌드
SELECT 'alter index "ORAWEB"."' || OBJECT_NAME ||'" rebuild;' FROM USER_OBJECTS WHERE OBJECT_TYPE='INDEX';

...

alter index "ORAWEB"."PK_PAY_RES_LOG" rebuild;
alter index "ORAWEB"."PK_PRINTER" rebuild;
alter index "ORAWEB"."PK_PUSH_MESSAGE_S" rebuild;
...

ORAWEB 은 OWNER이다.

위의 select 값을 복사해서 실행.

2014년 10월 1일 수요일

ctime, mtime 차이점

리눅스를 사용하면서 변경시각과 수정시각이란 말을 들을 수 있다.

ctime : 변경 시각(change time)

mtime : 수정시각(modification time)

 

말뜻이 애매해서 비슷하게 생각되지만, 차이점이 있다.

변경(ctime)은 파일의 아이노드(inode)를 바꾸는 것이고,
수정(mtime)은 파일의 내용 자체를 바꾸는 것이다.

 

예를 들어서 aaa.txt 라는 파일이 있을 때
#chmod 755 aaa
이런 명령을 사용하면 파일내용에는 변경이 없지만, inode 값은 바뀌게 된다.

수정은
#echo aa >> aaa.txt
라고 하면 파일내용이 수정되는 것이고, timestamp 값이 변경 되게 된다.

 

그리고 또 하나는 접근 시각(access time)도 알아보자.
접근시각이란 해당 파일을 마지막으로 읽거나 쓴 시각을 말한다.
따라서 파일을 읽기만 한다면 변경시각이나 수정시각은 변하지 않고, 접근시각만 달라진다.

find 관련 문서를 찾다보면 ctime(change time):변경시각을 '생성시각(creation time)'이라고 설명하고 있는
문서가 있는데 이런 해석은 옳지 않다.

 

참고 :유닉스 파워툴

2014년 9월 18일 목요일

apache multiviews 기능

서버 이전을 했는데, 이미지를 못 불러오는 부분이 있었다.

해당 이미지를 불러오는 데, 이미지 이름으로만 불러오는 것이었다. 확장자 없이...

예를 들어 /image.jpg 를 불러 온다고 했을 때, 보통은

http://www.site.co.kr/image.jpg

이런식으로 불러온다.



그런데 저기서 확장자가 없이

http://www.site.co.kr/image

이런식으로 호출해도 이미지가 뜨는 것이다.



원인은 아파치 설정의 MultiViews 설정이었다.

아파치 문서를 찾아 보니 다음과 같다고 한다.
MultiViews를 사용하면 다음과 같은 일이 일어난다.
서버가 /some/dir/foo에 대한 요청을 받고 /some/dir/foo에 MultiViews가 동작하며 /some/dir/foo가 존재하지 않을 경우,
서버는 디렉토리에서 이름이 foo.*인 파일들을 모든 포함하는 가상의 type map을 만든다.
클라이언트가 요청한 media type과 content-encoding을 가지고 이중에 가장 적합한 것을 선택한다.

테스트 결과 대부분의 이미지는 확장자 없이도 제대로 보여 주었고, html 같은 경우도 형식만 제대로 되어 있으면 인식 되었다.

CentOs7 방화벽 내리기

CentOs 7 이전에는 방화벽이란 건, iptable 이였다.

아무리 iptable을 내려도 적용이 안된다.

확인 해 보니, CentOs 7 버젼부터  Firewalld 란 게 추가되어, 두개가 같이 들어있다. 최소버젼으로 설치 했는 데도 그렇다.
[root@localhost ~]# systemctl list-unit-files | grep fire
firewalld.service disabled
[root@localhost ~]# systemctl list-unit-files | grep iptables
iptables.service disabled
[root@localhost ~]#

Firewalld 은 iptables 기반으로 조작이 쉽도록 만들어진 것으로 보인다.

Firewalld는 iptables에 의존성을 가진다.

 
systemctl stop firewalld

#리부팅 뒤에도 실행 안되게끔
systemctl disable firewalld

2014년 9월 12일 금요일

모든 쿼리 로그 기록.

마리아  db, mysql 의 모든 쿼리를 쌓아놓고 분석에 이용.

 

my.cnf 에 추가
#log
general_log=1
#log_output을 FILE 로 할경우의 경로.
#general_log_file = /var/log/mysql/general_query.log
log_output=TABLE

아래의 스크립트를 하루에 한번 실행하다록 크론에 등록.

general log가 계속 쌓이는 것을 방지. 7일마다 삭제.
#!/bin/sh

id="root"
pass="PASS"

mysql -u ${id} -p${pass} -e "SET GLOBAL general_log = 'OFF'";
mysql -u ${id} -p${pass} -e "RENAME TABLE mysql.general_log TO mysql.general_log2;";
mysql -u ${id} -p${pass} -e "DELETE FROM mysql.general_log2 WHERE event_time <= NOW()-INTERVAL 7 DAY";
mysql -u ${id} -p${pass} -e "OPTIMIZE TABLE general_log2";
mysql -u ${id} -p${pass} -e "RENAME TABLE mysql.general_log2 TO mysql.general_log";
mysql -u ${id} -p${pass} -e "SET GLOBAL general_log = 'ON'";


http://stackoverflow.com/questions/9343001/is-my-mysql-general-log-table-getting-too-big

 
general_log 의 엔진이 CSV라서 해당 파일 자체를 cat, vim 등으로 그냥 볼 수 있음.

마리아DB 소켓 변경시 systemd-private-xxxx 디렉토리 안에 생성되는 문제.

마리아DB 의 socket 위치를 /tmp/mysql.sock 로 변경 하였습니다.
그랬더니, /tmp/systemd-private-xxxx/tmp/mysql.sock 으로 생성이 된다.
뭐 이렇게 해도 상관이 없으나, 클라이언트 접속시 접속이 되지 않는다.

[client]
socket=/tmp/mysql.sock

위와 같이 처리 하면 될 것 같았으나, 위처럼 하면 그냥 /tmp/mysql.sock 으로 인식된다.

centos 7버젼으로 설치 했더니, 조금 바뀐게 많다.
tmp 디렉토리의 보안이 추가 된것으로 보인다.

 
vim /lib/systemd/system/mariadb.service 
PrivateTmp=true 에서 PrivateTmp=false 로 변경.
systemctl daemon-reload
service mariadb restart

2014년 9월 5일 금요일

Mysql 4.0 -> 마리아 5.5.37 마이그레이션


  1. mysql 4.0  dump

  2. mysql 4.1.22 업그레이드

  3. mysql 5.5 업그레이드

  4. 마리아 db 설치.


mysql 4.1 버젼에서 마리아db 로 변경하는 부분은 그냥 덮어 쓰면 됨.

문제는 mysql 4.0 에서 mysql 4.1 로 업그레이드 부분.

binary로 그냥 덮어써도 되지만,  field size 가 반으로 줄어 버리기 때문에 문제가 발생 할 수 있다고 함.

그래서 dump 파일을 생성 해서 써야 함.
mysqldump -u root -ppass --opt --quick --quote-names --all-databases > allBackup.sql

-opt 옵션은 문제가 없다면 쓰는 게 좋음. 백업, 복구 시간을 엄청 단축시킴.
-quote-name 옵션은 테이블 필드명 중, sql 쿼리명이 들어가 있어서 문제를 발생시켜 넣어줌.

restore 완료후에는 mysql_install_db 를 실행 시켜줌.

아래는 마이그레이션시 사용한 스크립트.
#!/usr/bin/bash

#mysql 4.1.22 설치
#killall mysqld
echo "kill mysql"
service mysqld stop
rm -rf /usr/local/mysql/

cd /usr/local/src/mysql-4.1.22/
make install #컴파일 되어 있음. 설치만 하면 됨.
/usr/local/mysql/bin/mysql_install_db
chown -R mysql.mysql /usr/local/mysql
cp -f /usr/local/mysql/share/mysql/mysql.server /etc/init.d/mysqld
service mysqld start

#패스워드 설정
/usr/local/mysql/bin/mysqladmin password 'test01'

/usr/local/mysql/bin/mysql -uroot -ptest01 -e 'select now();' #그냥 확인용 or 복구 시간 확인.
#echo $?
#1 이면 제대로 안된거.

#덤프 복구시 필요. 안하면 에러남.
/usr/local/mysql/bin/mysql -uroot -ptest01 -e "set global max_allowed_packet=1000000000;"
/usr/local/mysql/bin/mysql -uroot -ptest01 -e "set global net_buffer_length=1000000;"
#--------------------------------------------------------------------------------------

echo "Start Restoring..."
#43번 dump 복구.
# --debug : 에러 확인용.
# -f 에러 무시 : 43번 덤프파일 duplication 에러남.
/usr/local/mysql/bin/mysql --debug -f -uroot -ptest01 < /usr/local/src/43_DB_ALL_20140820.sql

#설치시 나오는 duplication 정상.
#그외에 오류는 안 나야 됨.
#복구 끝나면 root 패스는 pass 이 됨.
#비교를 위해 test01로 설정.
/usr/local/mysql/bin/mysql -uroot -ptest01 -e 'select now();' #복구 시간 확인.
#--------------------------------------------------------------------------------------

#mysql 5.5.39 설치
#killall mysqld
service mysqld stop
cd /usr/local/src/mysql-5.5.39/
make install
cp -f /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chown -R mysql.mysql /usr/local/mysql
service mysqld start
#/usr/local/mysql/bin/mysql_fix_privilege_tables --password=pass
/usr/local/mysql/bin/mysql_upgrade --password=pass
/usr/local/mysql/bin/mysql -uroot -ppass -e 'select now();' #그냥 확인용.
chkconfig mariadb on

#마리아DB 설치 yum
service mysqld stop
service mariadb stop
ln -fs /usr/local/mysql/data/ /var/lib/mysql
yum -y remove mariadb mariadb-devel mariadb-libs mariadb-server
yum -y install mariadb mariadb-devel mariadb-libs mariadb-server
service mariadb start
mysql_upgrade --password=pass

완벽하지 않음.

마리아db 설치 완료 my.cnf 에 euckr 추가.
[mysqld]
...
#charset config
character-set-server=euckr
init_connect=SET collation_connection=euckr_korean_ci
init_connect=SET NAMES euckr
character-set-server=euckr
collation-server=euckr_korean_ci
...

2014년 8월 29일 금요일

setuid, setgid 제거.

#test 디렉토리 생성.
[root@localhost src]# mkdir test\

#확인
[root@localhost src]# ll
합계 4
drwxr-xr-x 2 root root 4096 2014-08-28 16:30 test

#setuid 퍼미션 설정
[root@localhost src]# chmod 4000 test/

#확인.
[root@localhost src]# ll
합계 4
d--S------ 2 root root 4096 2014-08-28 16:30 test

#0000 8bit로 setuid 퍼미션 제거 시도.
[root@localhost src]# chmod 0000 test/

#확인. 제거가 안됨.
[root@localhost src]# ll
합계 4
d--S------ 2 root root 4096 2014-08-28 16:30 test

#심볼링 형식으로 제거 시도.
[root@localhost src]# chmod -s test/

#확인. 제거가 이루어 짐.
[root@localhost src]# ll
합계 4
d--------- 2 root root 4096 2014-08-28 16:30 test

참고 : http://linuxg.net/how-to-set-the-setuid-and-setgid-bit-for-files-in-linux-and-unix/

ps. 참고사이트에서도  0755 같은 형태로 앞부분에 0(zeroi)를 주면 삭제된다고 나옴...; 뭐지..

2014년 8월 27일 수요일

2014년 8월 25일 월요일

심볼릭 링크를 설정시 문제점.

심볼릭 링크를 설정시
타겟을 위치를 절대경로로 만들시 하위에 새로 생성되는 문제가 있다.

아래와 같이 명령어를 실행 했다.
ln -s /usr/local/mysql/data/ /var/lib/mysql

처음에는 제대로 /usr/local/mysql/data/ 디렉토리가 /var/lib/mysql 로 제대로 생성 되었다.

다시한번 실행해보자.
아무오류 없이 명령어가 적용된다.

/var/lib/mysql 위치로 들어가 보면 data 심볼링 링크가 생긴다.

제일 마지막의 '/' 주건 안 주건 상관 없다.
/var/lib/mysql/

그냥 속편히
cd /var/lib/
ln -s /usr/local/mysql/data/ mysql

이렇게 하면
ln: failed to create symbolic link `mysql/mysql': 파일이 있습니다
위와 같은 오류가 나온다.

심볼링 링크 삭제 시 주의점

symlinkFolder 가 심볼링 링크 파일일 경우

아래와 같이 하면 해당 파일의 하위까지 전부 지워버린다.
rm -rf symlinkFolder/

이런식으로 줘야 함.
rm symlinkFolder

2014년 8월 22일 금요일

mysql 에러 라인 출력.

mysql dump를 복구 하는데, 에러가 남.

근데, 어디서 에러가 나는 지 라인이 안나옴.

--debug  옵션을 주자.
mysql  --debug  database < database.sql

근데 에러남.

ERROR: Option 'debug' used, but is disabled

재컴파일 해야 된다고 함.
./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --with-charset=euckr --with-debug

mysql 4.1.22 버젼 이었음.

tar 압축 해제시 에러

tar 압축해제시 파일명에 특수문자가 있으면 에러가 남.

[root@backup]# tar zxvfp mysql_14-07-22_3\:48.tgz
tar (child): 원격 셸을 실행할 수 없습니다: 그런 파일이나 디렉터리가 없습니다
tar (child): mysql_14-07-22_3\:48.tgz: Cannot open: 입력/출력 오류
tar (child): Error is not recoverable: exiting now

gzip: stdin: unexpected end of file
tar: Child returned status 2
tar: Error is not recoverable: exiting now

 
해당 파일을 특수문자 없이 변경후 압축해제.
mv mysql_14-07-22_3\:48.tgz  mysql.tgz

2014년 8월 19일 화요일

mysql 4.0 to 5.1 업그레이드

frm 파일 자체를 옮겨서 시도.
실패.

mysqldump 로 시도.
mysqldump -u root-ppass -e --all-databases > DB_ALL.sql

아래와 같은 오류 발생.
ERROR 1064 (42000) at line 250: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IN smallint(6) unsigned NOT NULL default '0',
  OUT smallint(6) unsigned NOT NUL' at line 18

정상적인 쿼리이나, IN 필드명이 mysql에서 사용하는 명령어라서 에러가 발생하는 것으로 보임.

테스트로 해당 테이블 필드를 모두 '로 감싸고 실행 했더니, 정상적으로 실행됨.

필드명를 '(따옴표)로 감싸줄 필요가 있음.

--quote-names 추가.
mysqldump -u kim01 -pwjqthr01 --opt --quick --quote-names --all-databases > DB_ALL.sql

결론.
-  mysql 간의 이동이라면 --opt 옵션를 사용하자. 복구 시간이 엄청 단축된다.
- --quote-names 를 사용하자.

참조 : http://start.goodtime.co.kr/2013/03/mysqldump-sql-%ED%98%B8%ED%99%98%EC%84%B1-%EB%86%92%EC%9D%B4%EA%B8%B0/

pid 값으로 강제 종료 스크립트.

service mysqld stop으로 mysql이 죽지를 않는다.

pkill mysqld 도 안 먹는다.

killall mysqld 도 안 먹는 다.

kill -9 pid 로는 먹는다.

근데 전부 다 죽여줘야 한다.

스크립트를 찾았다. 역시 있었다.
#!/bin/bash

[ -z "$1" ] && echo "Usage : Input Process .......... Please [scriptFileName ProcessName]" && exit

process_id=`ps -ax | grep "$1" | grep -vw "grep" | grep -vw $$ | awk '{print $1}'`

if [ -z "$process_id" ];then
echo "+-------------------------------------------------------------+"
echo "Not Found Process (입력하신 프로세스를 찾지 못했습니다.) ...... Done"
echo "+-------------------------------------------------------------+"
exit
else
process_id_number=`ps -ax | grep "$1" | grep -vw "grep" | grep -vw $$ | awk '{print $1}'`

for i in ${process_id_number} ;do
kill -9 $i &> /dev/null
printf "%-40s %-s\n" "$i PID Killed" "$(echo -ne "[ \\033[01;32m OK \\033[0m ]")"
done
sleep 2;
echo "+-------------------------------------------------------------+"
echo "Process Kill OK (프로세스가 강제적으로 종료 되었습니다.) ...... Done"
echo "+-------------------------------------------------------------+"
fi

출처

2014년 8월 14일 목요일

sftp 접속 안되는 현상.

sftp 접속시 접속이 제대로 안된다.

에러메시지도 없다. 그냥 안된다.

확인 결과는 ssh 로 접속 할 때 아래처럼 에러메시지가 나오는 데, 그냥 무시하고 사용하고

있었다.
-bash: /usr/etc/jfbterm_profile: 그런 파일이나 디렉토리가 없음

ssh 는 에러메시지가 나와도 제대로 접속이 되지만, sftp 는 에러메시지가 나오면 제대로 되

지 않는다.

2014년 8월 13일 수요일

apache 2.0.x 버젼 startssl 자동.

apache 2.2.x 버젼 이상이 아닌경우 ssl 적용 아파치 실행은
./apachectl startssl

위처럼 startssl 로 실행해야 ssl 이 적용된 아파치가 실행된다.



그냥 start 만으로 ssl 이 실행되도록 스크립트를 변경하자.
vim /usr/bin/apachectl

...
case $ARGV in
start)
    $HTTPD -k start -DSSL
    ERROR=$?
    ;;
stop|restart|graceful)
    $HTTPD -k $ARGV
    ERROR=$?
    ;;
startssl|sslstart|start-SSL)
    $HTTPD -k start -DSSL
    ERROR=$?
    ;;
configtest)
    $HTTPD -t
    ERROR=$?
...



start 인수가 들어오면 원래는 $HTTPD -k $ARGV를 실행 하게끔 되어 있지만,
따로 빼내어 $HTTPD -k start -DSSL 를 실행하도록 수정 하였다.

2014년 8월 12일 화요일

oracle sql developer 소켓 에서 읽을 데이터 가 없습니다

오라클 11g express 설치.

sql developer로 접속시 소켓 에서 읽을 데이터 가 없습니다.
(GLOBAL_DBNAME = XE)

위 코드 추가하니 접속 성공

아래는 전체 listener.ora 내용
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
(PROGRAM = extproc)
)
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = XE)
(SID_NAME = XE)
(ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
)
)

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = xxx.xxx.xxx.xxx)(PORT = 1521))
)
)

DEFAULT_SERVICE_LISTENER = (XE)

2014년 8월 6일 수요일

bitnami redmine 설치 에러...

bitnami redmine 윈도우용으로 설치를 시도.

여기를 참고함.

설치 마침까지 정상적으로 나오고 index 페이지 까지 열림

index 페이지에서 Access Bitnami Redmine Stack 를 클릭해서 들어감.

Internal error 500 에러 발생.

D:\Bitnami\redmine-2.5.2-1\apps\redmine\htdocs\log\production.log 로그 확인.
ActiveRecord::StatementInvalid (Mysql2::Error: Table 'bitnami_redmine.settings' doesn't exist: SHOW FULL FIELDS FROM `settings`):
app/models/setting.rb:226:in `check_cache'
app/controllers/application_controller.rb:98:in `user_setup'

이런 에러...

mysql 확인 해보니 redmine DB 생성이 안되어 있음.

D:\Bitnami\redmine-2.5.2-1\apps\redmine\scripts>redmineini.bat 실행

중간에 에러 나옴.
rake aborted!
D:/Bitnami/redmine-2.5.2-1/apps/redmine/htdocs/db/migrate/001_setup.rb:291: inva
lid multibyte char (UTF-8)
D:/Bitnami/redmine-2.5.2-1/apps/redmine/htdocs/db/migrate/001_setup.rb:291: inva
lid multibyte char (UTF-8)
D:/Bitnami/redmine-2.5.2-1/apps/redmine/htdocs/db/migrate/001_setup.rb:291: synt
ax error, unexpected end-of-input, expecting keyword_end
:firstname => "

D:/Bitnami/redmine-2.5.2-1/apps/redmine/htdocs/db/migrate/001_setup.rb 확인 해보니,
firstname 부분에 깨진 문자가 보임.

설치시 ID, 패스워드, 이름 입력하는 부분에서 이름을 한글로 '관리자'로 설정하였는데,  그 부분인 것으로 보임.

해당 부분을 영어 'admin_first' 로 변경 후 재 실행.

제대로 설치 완료 됨.



결론 : 초기 설치시 한글 쓰지 말기를...

2014년 7월 11일 금요일

gmail에서 보낸 메일이 안 들어 올 때

gmail 보낸 메일이 들어 오지 않는다.

메일서버의 로그를 확인 해 봤도, 받았다는 로그가 보이지 않는다.

한 하루 반정도 지나니까 리턴메일이 왔다.
This is an automatically generated Delivery Status Notification

THIS IS A WARNING MESSAGE ONLY.

YOU DO NOT NEED TO RESEND YOUR MESSAGE.

Delivery to the following recipient has been delayed:

     test@test.com

Message will be retried for 2 more day(s)

Technical details of temporary failure:
Google tried to deliver your message, but it was rejected by the server for the recipient domain xxxxxxxxxxxxxx. [xxx.xxx.xxx].

The error that the other server returned was:
454 TLS missing certificate: error:0200100D:system library:fopen:Permission denied (#4.3.0)

----- Original message -----

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;

...

검색해 보니 TLS 셋팅 안되어 있어서 발생한 문제.

아마도 저번에 587 포트를 열어 놓은 적이 있는 데, 아마도 그 때문인 것 같다.
이것은 받는 메일서버에 tls 세팅이 제대로 되지 않은경우이다.
qmail 의 경우 아래와 같이 해결한다.
1. 모듈확인
#ldd /var/qmail/bin/qmail-smtpd  (명령으로 ssl 모듈이 추가되어 있는지 확인후 )
2. 키를 생성한다.
#openssl req -newkey rsa:1024 -x509 -nodes -days 3650 -out /var/qmail/control/servercert.pem -keyout /var/qmail/control/servercert.pem
키 생성시 Common Name 은 도메인명을 정확히 기록한다.

#위의 명령어 실행시 나오는 내용
Country Name (2 letter code) [GB]:KR
State or Province Name (full name) [Berkshire]:Seoul
Locality Name (eg, city) [Newbury]:Jungu
Organization Name (eg, company) [My Company Ltd]:Company
Organizational Unit Name (eg, section) []:QnA Team
Common Name (eg, your name or your server's hostname) []:서버의 설정된 도메인 명.
Email Address []:관리자 이메일


3. 권한변경
#chmod 640 /var/qmail/control/servercert.pem
4. 소유자/그룹변경
#chown vpopmail.vchkpw /var/qmail/control/servercert.pem => 혹은 (qmaild.qmail)
5. 복사
#ln -s /var/qmail/control/servercert.pem /var/qmail/control/clientcert.pem
6. ciphers 만들어주기...
#openssl ciphers > /var/qmail/control/tlsclientciphers
#openssl ciphers > /var/qmail/control/tlsserverciphers

pem 파일 내용 확인은 아래와 같다.
#openssl x509 -text -noout -in servercert.pem

메일서버를 테스트는...
#openssl s_client -crlf -starttls smtp -connect localhost:25
에러 없으면 된다...
아래도 해보자.
#telnet localhost 25
ehlo localhost
starttls

gmail에서 다시 발송 후 도착 여부 확인.
출처

2014년 7월 8일 화요일

httpd(아파치)최적화. MaxClient 값 구하기

httpd(아파치) 튜닝에서 가정 중요한 부분은

MaxClient 값과 KeepAlive 라고 본다.
그중 KeepAlive 는 정적 파일을 경우 Off, 동적 파일을 일 경우 On 이 좋다고 한다.

웬만한 httpd 서버는 php 와 연동하여 사용하기 때문에 On으로 설정하는 게 좋을 것 같다.
문제는 MaxClient 값을 어떻게 구할 것인가이다.

MaxClient 값 구하기 스크립트
#/bin/sh

TotalMem=`free -m | grep Mem: | awk {'print $2'}`
TotalMem80per=$(echo "$TotalMem*0.8"|bc)
#pa aux 의 6번째 값이 RSS 인데, 이 값을 가져옴.
TotalHttpMem=`ps aux | grep httpd | grep -v grep | awk '{print $6}' | awk '{total = total + $1} END {print total/1024}'`
httpCount=`ps aux | grep httpd | grep -v grep | wc -l`
averageHttpMem=$(echo "$TotalHttpMem / $httpCount" | bc)
MaxClient=$(echo "$TotalMem80per / $averageHttpMem" | bc)

echo "총 메모리 : " $TotalMem
echo "총 메모리의 80% : " $TotalMem80per
echo "http use mem total : "$TotalHttpMem
echo "http process count : "$httpCount
echo "http use mem average : "$averageHttpMem

echo "MaxClients   " $MaxClient

내가 세운 공식은 다음과 같다.
총메모리의 80% / httpd의 평균 메모리 사용량

서버 자체가 웹서버 전용이라면 메모리의 80%는 빼도 상관 없을 듯 하다.

참고 사이트

http://openlife.tistory.com/340
http://jjosh.tistory.com/15
https://kldp.org/node/28074
http://helloworld.naver.com/helloworld/132178

RES의 의미
RES  : 물리적인 메모리를 사용하는 크기
VIRT  : SWAP 영역에서 사용하는 메모리 + shared + swapped를 합친것

http://www.tuning-java.com/454



----

기타 찾아본 최적화 스크립트

https://github.com/gusmaskowitz/apachetuner

https://github.com/gusmaskowitz/apachebuddy.pl

http://surniaulula.com/2012/11/09/check-apache-httpd-mpm-config-limits/

bash 스크립트 사용시 주의 사항

1.if 문을 쓸 때는 아래처럼 if 다음에 꼭 한칸을 띄워줘야 한다.
if [ $checkTmp = 'y' ]

에러 : syntax error near unexpected token `then'
1. 변수를 지정할때는 = 이전,다음에 빈칸이 있으면 안된다.
TotalMem=`free -m | grep Mem: | awk {'print $2'}`

에러 : command not found

2014년 7월 4일 금요일

smtp 서버 설치 후 현재 세션 눌렀을 때, '해당 인터페이스를 지원하지 않습 니다.' 에러

윈도우 2008 에서 smtp 서버 설치 후 현재 세션을 눌렀을 때,

 

'해당 인터페이스를 지원하지 않습니다.' 라는 에러메시지 가 띄워진다.

 

C:\Windows\System32\inetsrv>regsvr32 smtpsnap.dll
C:\Windows\System32\inetsrv>regsvr32 smtpadm.dll

 

위와 같이 dll 파일을 등록 시켜 준뒤, mmc 창을 다시 올리면 된다.

 

 

 

 

출처

2014년 7월 3일 목요일

비쥬얼svn 전체 백업 및 이전

비쥬얼svn 전체 백업

svnadmin 으로 백업 하고 복구 하는 법으로 하지 않고 그냥 Repositories 폴더만 복사해서
다른 서버로 이전했다.

1 . 새로운 서버에서 visualsvn 설치 후 서비스를 종료,
2. 새로 만들어진 Repositories 삭제.
3. 복사해 온 Repositories를 같은 위치에 붙여넣기
4. 해당 폴더의 권한에 visaulsvn admin,과 network service 를 추가.
5. visualsvn 재 시작.

2014년 7월 2일 수요일

qmail submission 추가

qmail submission 추가

외국에서 메일을 사용시 아웃룩에서 이런 에러 메시지가 발생.

outlook cannot connect to your outgoing smtp email server

검색해 보니, 외국같은 경우 25번 포트를 차단하는 경우가 많다고 한다.

그래서  부득이하게 587 포트를 열게 됬다.
cd /var/qmail/supervise

#submission 용 디렉토리 생성
mkdir qmail-smtpd-sub
mkdir qmail-smtpd-sub/log

#권한 추가
chmod +t qmail-smtpd-sub
cp ./qmail-smtpd/run ./qmail-smtpd-sub/
cp ./qmail-smtpd/log/run ./qmail-smtpd-sub/log
cp /var/qmail/bin/qmail-smtpd /var/qmail/bin/qmail-smtpd-sub

새로만든 qmail-smtpd-sub/run에 25번 포트를 587로 변경해 준다.
vi /var/qmail/supervise/qmail-smtpd-sub/run

...
/etc/tcp.smtp.cdb -u $Q_UID -g $Q_GID 0 25 \
...

/etc/tcp.smtp.cdb -u $Q_UID -g $Q_GID 0 587 \

 

서비스에 추가
ln -s /var/qmail/supervise/qmail-smtpd-sub/ /service/

이렇게 셋팅 하면 qmail을 재시작 안해도 자동으로 587 포트가 열려있다.
아웃룩에서 smtp 포트를 587 로 변경하고 테스트 해 보면 잘 된다.

참고

2014년 6월 27일 금요일

톰캣 두개 설치

톰캣 두개 설치
1. 일단 톰캣 하나는 그냥 설치.
2. 톰캣을 다운로드 받을 때, 파일 설명
zip (pgp, md5)#실행스크립트만 있다. service.bat 없음. 윈도우, 리눅스 겸용.
tar.gz (pgp, md5) # zip 파일과 동일. 압축형태만 다름
32-bit Windows zip (pgp, md5) #윈도우 컨트롤러 있음. service.bat 으로 서비스 등록 가능. 32bit
64-bit Windows zip (pgp, md5) #윈도우 컨트롤러 있음. service.bat 으로 서비스 등록 가능. 64bit
64-bit Itanium Windows zip (pgp, md5) ##윈도우 컨트롤러 있음. service.bat 으로 서비스 등록 가능. Itanium CPU 사용시
32-bit/64-bit Windows Service Installer (pgp, md5) ##윈도우 컨트롤러 있음. 실행스크립트가 없음.

자세한 사항은 여기 참조.
tomcat/bin 폴더에 catalina.bat에

제일 상단에 아래처럼 추가.
set CATALINA_HOME=D:\WAS\apache-tomcat-7.0.35
set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_43

startup.bat 이나, shutdown.bat 에는 추가 할 필요 없음.

기타 configtest.bat 등의 툴 실행시 CATALINA_HOME environment variable is not defined correctly 요런 메시지 나오면 추가해서 실행.
문제는 service에 등록 할 때 문제.
두개의 service를 이름을 다르게 해서 등록하면 한개의 서비스만 실행하면
두개의 톰캣이 모두 살아 남.

내가 원하는 것은 톰캣 한개를 죽이면 한개의 서비스만 죽는 건데, 그게 안됨.

해서 한개는 서비스로 사용해도 되지만, 두개는 안됨. 두개째는 startup.bat 파일로 실행 해 줘야 됨.

2014년 5월 23일 금요일

원격데스크탑(RDP) 공격 자동 차단 파워쉘

EvlWatcher 를 사용하여 무작위 공격에 대해서 차단을 진행 했었는데, 이게 윈도우 2012에서는 작동을 안한다.

그래서 이벤트로그를 파악하여 지정된 회수 이상 접속 실패를 발생할 시 윈도우 방화벽에 차단 등록하는 스크립트를 만들었다.
# 이벤트로그를 사용하여 특정 회수 이상 로그인 실패 아이피에 대하여 
# MY BLACKLIST 방화벽 등록
# 2014.05.22 NDH
# version 1.1


###################### Config ######################
#regex2 부분이 영문 윈도우OS 같은 경우 source network address 인가로 바꿔주면 된다.
#MyIp 부분은 내 아이피를 등록하여 내꺼는 막히지 않도록 하는 부분이고,
#deny_count 는 5회이상 접속시도 실패 로그가 있을 시 방화벽에 차단 등록하는 변수이다.
#deny_rule_name 는 윈도우 방화벽에 차단하는 해당 룰 이름이 설정되어 있어야 한다.

#English versoin Windows
#$regex2 = [regex] "Source Network Address:\t(\d+\.\d+\.\d+\.\d+)";
#Korean version Windows
$regex2 = [regex] "원본 네트워크 주소:\t(\d+\.\d+\.\d+\.\d+)";
$MyIp = "111.222.333.*";
$deny_count = 5;
$deny_rule_name = "MY BLACKLIST"
###################### Config ######################

$fw=New-object -comObject HNetCfg.FwPolicy2; # http://blogs.technet.com/b/jamesone/archive/2009/02/18/how-to-manage-the-windows-firewall-settings-with-powershell.aspx
$RuleCHK=$fw.rules | where-object {$_.name –eq $deny_rule_name}
if(!$RuleCHK){ $deny_rule_name + " rule does not generate."; exit; }


$blacklist = @();
$list ="";

$startTime = (get-date);

"-----------------------------"
"log searching Start : " + $startTime;
"-----------------------------"


$ips = get-eventlog Security | Where-Object {$_.EventID -eq 4625 } | foreach {
$m = $regex2.Match($_.Message); $ip = $m.Groups[1].Value; $ip; } | Sort-Object | Tee-Object -Variable list | Get-Unique


if($list.length -gt 0) {
foreach ( $attack_ip in $list)
{
if($attack_ip){
$myrule = $fw.Rules | where {$_.Name -eq $deny_rule_name} | select -First 1; # Potential bug here?

if (-not ($blacklist -contains $attack_ip))
{
$attack_count = ($list | Select-String $attack_ip -SimpleMatch | Measure-Object).count;
if ($attack_count -ge $deny_count) {
if (-not ($myrule.RemoteAddresses -match $attack_ip) -and -not ($attack_ip -like $MyIp))
{
"Found RDP attacking IP on 3389: " + $attack_ip + ", with count: " + $attack_count;
$blacklist = $blacklist + $attack_ip;
"Adding this IP into firewall blocklist: " + $attack_ip;
$myrule.RemoteAddresses+=(","+$attack_ip);
#echo $attack_ip >> C:\BlackListIP.txt

} else {
$attack_ip + " : Already registered IP"
}
}
}
}

}
< # $answer = read-host "`ndo you want delete security event log , yes or no" if ($answer -like "*y*" -and -not $Verbose) { Clear-EventLog -LogName Security cls "Security event log has been deleted" } else { # "`nScript terminated.`nPlease use your testing VM instead.`n" ; exit } #>


}else{
"인증 실패 이벤트 로그가 없습니다."
}

$endTime = (get-date);



"-----------------------------"
"log searching End : " + $endTime;
" 총 걸린 시간 : " + ($endTime - $startTime ) ;
".........실행 완료..........."
"-----------------------------"

regex2 부분이 영문 윈도우OS 같은 경우 source network address 인가로 바꿔주면 된다.
MyIp 부분은 내 아이피를 등록하여 내꺼는 막히지 않도록 하는 부분이고,
deny_count 는 5회이상 접속시도 실패 로그가 있을 시 방화벽에 차단 등록하는 변수이다.
deny_rule_name 는 윈도우 방화벽에 차단하는 해당 룰이 설정되어 있어야 한다. 설정하는 법은 여기

윈도우 2008,2012에서 정상 동작 확인 하였다.

 

스케쥴러 등록해서 사용.
schtasks /create /sc daily /ST 15:00 /tr "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe C:\Users\Administrator\Documents\rdp_block.ps1" /tn "RDP AUTO BLOCK"

 

ps1. 에러 발생.

Found RDP attacking IP on 3389: 1.234.45.48, with count: 23
Adding this IP into firewall blocklist: 1.234.45.48
"RemoteAddresses"을(를) 설정하는 동안 예외가 발생했습니다. "배열 경계가 잘못되었습니다. (예외가 발생한 HRESULT: 0x800706C6)"
위치 D:\관리프로그램\rdp_block.ps1:56 문자:37
+ $myrule. <<<< RemoteAddresses+=(","+$attack_ip);
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : PropertyAssignmentException

RemoteAddresses가 1000가 넘어가니 위의 에러 발생.

 

ps2. netsh.exe advfirewall firewall set rule name="$deny_rule_name" new remoteip="1.34.248.103/255.255.255.255,1.93.2.152/255.255.255.255,1.93.4.12/255.255.255.255,.." 이런식으로 추가 하려고 했으나,
잘못된 IP 주소 또는 주소 키워드를 지정했습니다. << 에러 발생.

결론.RemoteAddresses 가 1000개 이상 넘어 갈 수 없음.

 

ps.2016.05.25

remoteip 등록을 ip range로 등록시 대략 300개 정도를 추가하면 아래 오류가 나온다.
지정한 IP 주소 또는 주소 키워드가 올바르지 않습니다.

역시 limit이 있는 걸로 확인.

깃허브에 한번 등록 해봄.

2014년 5월 12일 월요일

bind slave zone 파일을 txt로 지정

bind를 최신으로 업그레이드를 했더니, slave의 zone 파일을 binary로 만들어 버린다.

named.conf 옵션에 아래와 같이 추가 해 주면 텍스트로 나온다.
options {
...
masterfile-format text;
...
}

출처

bind raw format 보는 스크립트

bind 9.9.0 버젼 부터 slave dns의 zone 파일이 raw binary format으로 만들어진다.
해서 cat 명령으로 보면 이상한 내용이 보인다.

named-compilezone 명령어로 볼수 있는데, 이 좀 귀찮게 되어 있어 스크립트로 만든다.
#!/bin/sh

zoneDir=/var/named/chroot/var/named/slaves/

if [ $# != 1 ] ; then
echo "Error domain name is not defined e.g. showzone domain.org.uk"
exit 0
fi

/usr/sbin/named-compilezone -f raw -F text -o /tmp/myzone $1 ${zoneDir}$1.zone
cat /tmp/myzone
rm -rf /tmp/myzone

아예 binary 로 생성되는 것을 txt로 바꾸려면 여기

참조

2014년 4월 29일 화요일

윈도우 배치 split 명령어

윈도우 커맨드로 원하는 결과 값만 결과값을 나타내기

예를 들어 dir 명령어를 치면 다음과 같이 나온다.

2014-02-21 오후 11:13 <DIR> Contacts
2014-04-26 오후 02:04 <DIR> Desktop
2014-04-29 오전 09:57 <DIR> Documents
2014-04-29 오후 01:05 <DIR> Downloads

여기서 해당 날짜와 시간만 구하고 싶을 때는 다음과 같이 적어 넣는다.
for /f "tokens=1,2,3 delims= " %i in ('dir') do @echo %i %j %k

출력결과 :

2014-04-09 오전 09:42
2014-04-08 오후 06:15
2014-04-08 오후 09:03
2014-03-21 오전 08:57
2014-03-20 오후 04:47
2014-03-20 오후 04:30

사용법은 delims로 나눌 기준을 구한다. 위에서는  (공백)으로 처리 했다.

tokens는 delims로 나눴을 때 몇번째 값을 출력할 지를 설정.

위에서는 1,2,3 을 설정했으므로 공백 기준 첫번째는 '날짜'이고, 다음은 '오후',  세번째는 '시간' 되겠다.

('dir') 부분은 명령어를 나타내고, %i %j %k는 토큰에서 지정된 값을 출력하는 변수이다.

출처는 여기

crontab -e 명령어 사용시 소소한 팁

crontab -e 명령어로 크론 적용 후 :w 로 저장을 하면 적용이 안됨.

반드시 :wq 로 저장 후 나가 줘야 크론 적용이 됨.

안 나오면 크론 실행도 안됨.

윈도우 2008 공유 폴더 방화벽 정책

2008에서 공유 폴더를 사용 할 시 필요한 부분

1. 방화벽 정책. 여기를 참조

[Netlogon 서비스(NP-In)] 부분을 활성화 하고
"파일 및 프린터 공유"

"네트워크 검색"



위의 단어로 시작되는 모든 정책(인바운드/아웃바운드)은 비활성화 한다.

(불필요한 정책 비활성화)



2.  네트워크 연결관리 에서 '로컬 영역 연결' 오른쪽 클릭, 속성 클릭.


여기서 Micorsoft 네트워크용 파일 및 프린터 공유와 Microsoft Networks용 클라이언트를 체크 해준다.


물론 기존에 건드리지 않았으면 기본적으로 체크 되어 있다.


이거 땜에 3시간 날림.;;

2014년 4월 28일 월요일

snmpd 로그 비활성화

/var/log/message 로그에 snmpd 로그가 가득차서 다른 것들을 보기가 힘들다.

Apr 27 16:13:18 backup snmpd[6170]: Connection from UDP: [111.222.333.444]:50082->[222.222.222.222]

그래서 snmpd 로그를 비활성화 해보자.

방법은 여기서 찾았다.

 







































LOG LEVELDESCRIPTION
0Emergencies – System is unusable
1Alerts – Immediate action needed
2Critical – Critical conditions
3Errors – Error conditions
4Warnings – Warning conditions
5Notifications – Informational messages
6Informational – Normal but significant conditions
7Debugging – Debugging messages

 

로깅하는 레벨을 낮추는 법이다.

해당 블로그에서는 /etc/init.d/snmpd 실행파일을 직접 수정한다.

 

나는 /etc/sysconfig/snmpd 옵션파일을 수정하기로 했다.  위의 스크립트에서도 먼저 옵션파일을 확인하고 나서

옵션파일에 설정이 안되어 있을 때만 작동하기 때문에 우선권이 있다.

 

옵션파일에 다음과 같이 주고 snmpd 를 재시작 하면 끝.~
OPTIONS="-LS0-4d -Lf /dev/null -p /var/run/snmpd.pid"

2014년 4월 24일 목요일

qmail 발송 테스트 (qmail-inject example)

qmail 이 정상적으로 동작하는 지 테스트 해 보기.
$ /var/qmail/bin/qmail-inject <<EOM 
To: test@test.com
Subject: Test

This is a test message
EOM


printf 'To: test@test.com\nSubject: Test\n\nThis is a test message' | /var/qmail/bin/qmail-inject


위와 같이 하면 발송은 제대로 하나 스팸으로 분류될 가능성이 높다.
스팸 분류함을 한번 뒤져 보자.

2014년 4월 17일 목요일

압축을 풀지 않고 tar 파일 내용 확인하는 법__tgz 파일 보기__(펌)

안녕하십니까?

이규성입니다.

gzipped tar 파일..

abc.tar.gz 파일의 내용을 확인하려면

gzip으로 먼저 압축을 풀고 tar -tvf를 이용하여

파일의 내용을 확인해야 하는 번거로움이 있습니다.

이 번거로움을 피하기 위하여 한가지 팁이 있었으니...

바로 '-'를 이용하는 겁니다.
gzip -dc abc.tar.gz | tar -tvf -

이렇게 입력을 하면 gzip은 압축파일을 실제로 풀지 않고

그 내용을 표준출력으로 출력하게 됩니다. 그 내용을 파이프로

잡아 -를 이용하여 그 내용에 대해 tar를 실행하게 됩니다.

파일시스템 공간이 부족할 때 압축을 풀면 디스크풀이 날 경우

유용할 것입니다.

UnixStory by pgclks.

출처

HeartBleed(하트블리드) openssl 취약점은 윈도우 iis 에 영향이 있나?

윈도우의 iis 에도 heartbleed 취약점이 적용 되는 지 궁금했다.
윈도우에서 오픈ssl 을 사용안하니, 별 상관은 없을 거라 생각은 되지만 명확하지 않다.

오픈ssl 대신에 어떠한 모듈을 사용하는 지도 알지 못 했다.

구글링 해 봤다.

마이크로 소프트 블로그에 해당 내용이 올라와 있다.

요약하면...

1. 윈도우 및 iis 는 해당 취약 점에 영향이 없다.

2. 윈도우는 오픈ssl 이 아닌 자체 암호화 모듈을 사용한다.

3. 윈도우에 아파치를 돌리는 경우 취약 할 수 있다.

맞게 번역 한 지 모르겠지만, 대략 그런 뜻인듯..

윈도우에서 아파치를 돌리는 경우 확인 법

2014년 4월 14일 월요일

아파치 ssl 설정이 여러개 일 때 구동시 비밀번호 자동 입력.

기존에 ssl 인증서가 한개의 도메인일 경우는 pass.sh 파일을 아래와 같이 하면 되었다.
#!/bin/sh
echo "password"



만약 설정된 ssl이 여러개일 경우는 다음과 같이 하면 된다.

#!/bin/sh
#포트 번호 순서대로 줘야 함.

case "$1" in

'test1.co.kr:443')

echo "passowrd1"

;;

'test4.co.kr:447')

echo "password4"

;;

'test5.co.kr:453')

echo "password5"

;;

esac

2014년 3월 18일 화요일

ls 옵션별 정리

많이 쓰는 옵션들.

 

ls 옵션별 정리
ls -lrt : 시간별 출력. 가장 오래된 파일이 제일 먼저 출력됨. (mtime기준
ls -lt : 시간별 출력. 가장 최근 파일이 제일 먼저 출력. (mtime 기준
ls -lh : 용량 단위 표시
ls -1 : 한줄에 한파일만 보여주기
ls -lS : 파일 용량 기준. 가장 큰 파일이 제일 먼저 출력
ls -lSr : 파일 용량 기준. 가장 작은 파일이 제일먼저 출력.

 

 

출처

2014년 3월 12일 수요일

Registration error: INVALID_SENDER

인터넷으로 받은 GCM 전송 예제 코드에 SENDER ID 부분을 Project Id를 넣으라고 되어있어서

그대로 하면 Registration error: INVALID_SENDER 이런 에러가 발생

Project Id가 아닌 Project Number(Sender ID)를 넣어 줘야 정상동작함.

2014년 3월 11일 화요일

자꾸 헷갈리는 DNS 개념 정리

1-10. DNS 용어정의 : DNS의 종류

 

DNS종류는 도메인을 관리하는 네임서버(Master, Slave)와 Cache DNS가 있다.





1. 네임서버
1.1 Master server

1) Master server (O)  라고 불리우며,   Primary Server(X), 1차(X) 라고 하지는 않기로 하자.

2) 도메인에 대한 주된 host파일을 유지, 호스트 정보의 변경 및 추가 가능 ,Master server는 하나를 권장함.

 

1.2  Slave server

1) Master에 설정된 도메인 정보를 받아옴 (zone transfer)

2) Master Server에 대한 백업은 아니다.

3) 여럿 존재 가능.

4)  .kr의 Slave들

b.dns.kr, c.dns.kr, d.dns.kr, e.dns.kr, f.dns.kr, g.dns.kr

2. Cache only Server

도메인에 대한 authority data를 가지지 않고 resolving 처리를 위해서만 사용.

일반적으로 ISP DNS가 cache DNS이다.  예) KT 168.126.63.1 외

출처: http://cafe.naver.com/dnspro/896

 

 

이게 가장 헷갈리는 데, 마스터 슬레이브 서버 개념

 

마스터 서버가 다운되면 서비스가 되지 않는다!!!

출처:http://cafe.naver.com/dnspro/12592

 

 

 

2014년 3월 8일 토요일

리눅스 swap 의 적절한 용량 설정.

예전부터 리눅스 설치시 swap의 용량은 메모리의 두배라는 공식을 전해 들었다.

현재에 와서는 메모리가 16G, 32G라는 대용량으로 사용된다.

그러면 swap 용량은 32G, 64G?

조금 말이 안되는 것 같은 생각들어서 대강 swap 을 설치 해서 사용하다, 오라클의 공식문서에서 해당 내용이 있어서 적어본다.



Available RAMSwap Space Required
256 MB3 times the size of RAM
Between 256 MB and 512 MB2 times the size of RAM
Between 512 MB and 2 GB1.5 times the size of RAM
Between 2 GB and 16 GBEqual to the size of RAM
More than 16 GB16 GB

2014년 3월 4일 화요일

.classpath (액세스가 거부되었습니다)

맥에서 가져온 소스를 윈도우 이클립스에서 임포트 시키면 '.classpath (액세스가 거부되었습니다)' 이런 메시지가 나온다,.

해당 파일이 숨김 지정되어 있어서 그렇단다.
해당파일의 오른쪽 클릭 , 속성에서 없애려고 했지만, 숨김 체크박스가 비활성화 되어있다.
해당 파일이 시스템 파일로 되어 있어서 그렇다.

cmd 창을 연다. 해당 파일이 있는 폴더로 간다.
D:\src\android>attrib .project
A SH D:\src\android\.project

D:\src\android>
D:\src\android>attrib -S -H .project

D:\src\android>attrib .project
A D:\src\android\.project

2014년 2월 27일 목요일

리눅스 history 시간 보기

history 명령어로 지나간 명령어를 확인 가능하다.

그런데 해당 명령어를 언제 입력했는 지는 안 나온다.

참 궁금하다.

특히, 서버 다운 됬을 때, 셧다운 명령어 쳐 놓고서 발뺌하는 인간들이 있을 때...

참 궁금하다.

 
export HISTTIMEFORMAT="%F %T "
history
export HISTTIMEFORMAT=""

2014년 2월 26일 수요일

아웃룩 대용량 첨부파일 보낼 시 멈춤, 뻗어버리는 증상.

아웃룩 2007을 사용하고 있다.

메일을 보낸다. 첨부파일 70M 짜리를 넣었다.

아웃룩이 뻗어 버렸다.

삭제도 안된다.

GG...

해결책을 제시해 주신 분이 계신다~!!!.

1. 랜선을 분리한다.

2. 작업관리자에서 OUTLOOK 프로세스를 종료한다.

3. 아웃룩을 다시 실행하고, 해당 메일을 삭제한다.

지식인 ㄳ;

2014년 2월 14일 금요일

mssql sa와 administrator 윈도우 인증 모두 막힌 경우 패스워드 변경

실수로 sa 계정을 막고,  administrator 계정을 삭제해 버렸다.

이 말은 관리자 권한으로 mssql에 접속 할 수 없다는 말.

검색 봤더니 죄다 윈도우 인증 계정으로 들어가서 바꾸라는 말 밖에 없다.

여기서 내 문제와 같은 경우를 찾을 수 있었다.

mssql 2012를 사용중인데, 해당 내용으로 들어가면 시작매개변수를 변경 할 수 없게끔 되어있다.

cmd 창을 열고 명령어로 단일 사용자 모드로 실행 하였다.
net stop mssqlserver
#net start mssqlserver /m
net start mssqlserver /f

실행 옵션을 /m 으로 주고 실행하면

로그온트리거에 기록이 남아서 필터링이 되지만 '서버가 단일 사용자 모드에 있으므로 지금은 한 관리자만 연결할 수...' 이런 에러를 뱉어 내지만,

/f 를 주면 로그온트리거에도 걸리지 않는다고 한다.

/f   -- 강제모드 실행. 최소 구성으로 실행. 단일 사용자 모드

매우 유용한 정보~!! 감사~

2014년 2월 11일 화요일

PING 체크 배치 스크립트

ip_list.txt 안에 아이피를 넣어 놓고 스크립트를 실행하면 result.txt 파일로 결과를 생성한다.
@echo off
setlocal enabledelayedexpansion

REM http://stackoverflow.com/questions/12408673/how-to-ping-multiple-servers-and-return-ip-address-and-hostnames-using-batch-scr
REM result.txt파일은 없어도 됨.
REM ip_list.txt 파일은 있어야 됨.

set OUTPUT_FILE=result.txt
>nul copy nul %OUTPUT_FILE%
for /f %%i in (ip_list.txt) do (
    set SERVER_ADDRESS=ADDRESS N/A
    for /f "tokens=1,2,3" %%x in ('ping -n 1 %%i ^&^& echo SERVER_IS_UP') do (
    		echo %%i is checking...
        if %%x==Pinging set SERVER_ADDRESS=%%y
        if %%x==Reply set SERVER_ADDRESS=%%z
        if %%x==SERVER_IS_UP (set SERVER_STATE=UP) else (set SERVER_STATE=DOWN)
    )
    echo %%i [!SERVER_ADDRESS::=!] is !SERVER_STATE! >>%OUTPUT_FILE%
)

2014년 2월 5일 수요일

윈도우 리부팅 되었던 날짜 확인.

Windows NT 4.0 서비스 팩 4를 설치하면 시스템 시작 시간과 종료 시간이 기록되고 아래와 같은 이벤트 ID와 함께 이벤트 로그에도 이들 시간이 기록됩니다.

  • 이벤트 6005는 이벤트 로그 서비스가 시작되었음을 알리기 위해 부팅할 때 기록됩니다.

  • 이벤트 6006은 정상 종료(Clean Shutdown) 시 기록됩니다.

  • 이벤트 6008은 비정상 종료(Dirty Shutdown) 시 기록됩니다.

  • 이벤트 6009는 부팅할 때마다 기록되며 운영 체제 버전, 빌드 번호, 서비스 팩 수준 및 기타 시스템 관련 정보를 표시합니다.


이들 이벤트 ID는 정보 제공 목적으로만 기록됩니다.

http://support.microsoft.com/kb/196452/ko

http://blogs.technet.com/b/sankim/archive/2008/02/12/eventlog-6008.aspx

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

참고

이벤트 ID : 41

원본 : Kernel-Power

메시지 : 시스템이 비정상적으로 종료된 후 다시 부팅되었습니다. 이 오류는 시스템이 응답을 멈추었거나 손상되었거나 예기치 않게 전원 공급이 중단되면 발생할 수 있습니다.

 

내용을 보면 기본적으로  오버클록킹, 메모리, 전원, 과열 문제를 확인 하라고 한다. 내가 발생한 상황은 위의 경우에 해당하지 않고, 어플리케이션 문제로 보인다.

 

컴퓨터가 이벤트 ID 41에 보고되지 않은 BugcheckCode 값을 포함하는 중지 오류를 생상하는 경우 컴퓨터의 다시 시작 동작을 수정하십시오. 이렇게 하려면 다음과 같이 하십시오.

  1. 내 컴퓨터를 마우스 오른쪽 단추로 클릭한 다음 속성을 클릭합니다.

  2. 고급 시스템 설정을 클릭합니다.

  3. 고급 탭을 클릭합니다.

  4. 시작 및 복구 섹션에서 설정을 클릭합니다.

  5. 자동 시작 확인란의 선택을 취소합니다.

2014년 1월 28일 화요일

원격데스크탑 ctrl+alt+del ( 컨트롤 알트 델)

원격데스크탑을 실행하는 경우, 예기치 못한 상황에 의해 explorer가 pending에 빠지는 경우가 있다..

이 경우 taskbar등이 살아 있다면 task manager를 쉽게 띄울 수 있겠지만, explorer가 이상이 생기는 경우 대부분은 taskbar도 제어불능 상태에 빠진다.

이 때 ctrl+alt+del을 누르면 로컬 PC의 Taskmgr이 뜨게 되므로 제어가 불가능해 진다.

이 때는 ctrl+alt+end 를 누르면 원격데스크탑의 taskmgr을 실행할 수 있게 된다.


[출처] 원격 컨트롤 알트 델|작성자 위더

found SPF/SPF record but no SPF/TXT record found, add matching type TXT record

bind 를 9.9.3-P1 로 업그레이드 하면 서 이런 에러가 발생

found SPF/SPF record but no SPF/TXT record found, add matching type TXT record

검색해보니 zone 파일에서 spf 설정이 조금 변경 됬다. 기존의 TXT 외에 SPF 로도 설정 해 주어야 한다.
@ IN TXT "v=spf1 ip4:111.222.333.444 ip4:111.222.333.555 -all"
@ IN SPF "v=spf1 ip4:111.222.333.444 ip4:111.222.333.555 -all"



출처

원격데스크탑,MSSQL 공격 자동 차단 스크립트

원격데스크탑 과 mssql 의 기본 포트를 바꾸지 않는 이상, BRUTE FORCE 공격이 지속적으로 들어온다.

해당 포트를 바꾸는 게 가장 최선이지만, 사정상 바꾸기 힘든 경우는 이벤트로그를 보고 해당 IP를 차단하는 방법 밖에 없다.

리눅스 같은 경우 fail2ban 이라는 훌륭한 오픈소스가 존재하여 사용가능 하나 윈도우 같은 경우 그런 프로그램이 없다.

소스포지에서 검색 해보면 비슷한 프로그램들이 나오나, 동작도 제대로 안 되고 에러 투성이 프로그램들만 있어서 사용할 수 있는 게 없다.

물론 상용프로램은 제외.

RDP 공격 같은 경우 EvlWatcher 라는 프로그램이 있는데, 아주 잘 동작 된다.

주의 할점은 관리자 권한으로 설치 해야 서비스 등록 및 방화벽 룰 셋팅이 제대로 설정 된다.

그러나 MSSQL BRUTE FORCE 공격은 따로 막아 주지 않아 조금 아쉽다.

ps.2014.05.21 윈도우2012에서는 동작을 안한다.

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

그러다 파워셀 스크립트로 해당 기능을 수행 할 수 있지 않을 까 해서 검색 해 보니, 역시 있었다.

해당 스크립트를 약간 변형 하여 mssql 도 막을 수 있게끔 처리 하였다.

이 스크립트는 이벤트 로그 기록을 참조하여 현재 접속 중인 아이피만 확인 한다.
#$regex1,$regex2값을 서버 아이피로 변경한다.
#예를 들어 서버 아이피가 222.222.222.222 이면
# $regex1 = [regex] "222\.222\.222\.(?:222|51):3389\s+(\d+\.\d+\.\d+\.\d+)";
#제일 마지막은 or 연산이기 때문에 신경 안써도 된다. 한개만 들어가도 됨.

###################### Config ######################
$regex1 = [regex] "111\.222\.333\.(?:140|51):3389\s+(\d+\.\d+\.\d+\.\d+)";
$regex2 = [regex] "원본 네트워크 주소:\t(\d+\.\d+\.\d+\.\d+)";

$regex1_mssql = [regex] "111\.222\.333\.(?:140|51):1433\s+(\d+\.\d+\.\d+\.\d+)";
$regex2_mssql = [regex] "클라이언트: (\d+\.\d+\.\d+\.\d+)";

$MyIp = "123.123.123.123"; #현재 내가 접속한 IP 차단하지 않는다.
$deny_count = 5; #임계값
$loop_time = 30; #loop_time 마다 재 실행.(초)
###################### Config ######################

$tick = 0;
"Start to run at: " + (get-date);

while($True) {
$blacklist = @();

#Port 3389 RDP
"Running... (tick:" + $tick + ")"; $tick+=1;

$a = @()
netstat -no | Select-String ":3389" | ? { $m = $regex1.Match($_);
$ip = $m.Groups[1].Value; if ($m.Success -and $ip -ne $MyIp) {$a = $a + $ip;} }

if ($a.count -gt 0) {
$ips = get-eventlog Security -Newest 1000 | Where-Object {$_.EventID -eq 4625 } | foreach {
$m = $regex2.Match($_.Message); $ip = $m.Groups[1].Value; $ip; } | Sort-Object | Tee-Object -Variable list | Get-Unique

foreach ($ip in $a) { if ($ips -contains $ip) {
if (-not ($blacklist -contains $ip)) {
$attack_count = ($list | Select-String $ip -SimpleMatch | Measure-Object).count;
"Found RDP attacking IP on 3389: " + $ip + ", with count: " + $attack_count;
if ($attack_count -ge $deny_count) {$blacklist = $blacklist + $ip;}
}
}
}
}

#Port 1433 MSSQL

$a = @()
netstat -no | Select-String ":1433" | ? { $m = $regex1_mssql.Match($_);
$ip = $m.Groups[1].Value;
if ($m.Success -and $ip -ne $MyIp) {$a = $a + $ip;} }

if ($a.count -gt 0) {
$ips = get-eventlog Application -Newest 1000 | Where-Object {$_.EventID -eq 18456 -and ($_.Message -like "*sa*" ) } | foreach {
$m = $regex2_mssql.Match($_.Message); $ip = $m.Groups[1].Value; $ip; echo $m; } | Sort-Object | Tee-Object -Variable list | Get-Unique

foreach ($ip in $a) { if ($ips -contains $ip) {
if (-not ($blacklist -contains $ip)) {
$attack_count = ($list | Select-String $ip -SimpleMatch | Measure-Object).count;
"Found MSSQL attacking IP on 1433: " + $ip + ", with count: " + $attack_count;
if ($attack_count -ge $deny_count) {$blacklist = $blacklist + $ip;}
}
}
}
}

<# 주석처리. 사용안함. 미 테스트
#FTP
$MyFtpLogFile1 = "";
$now = (Get-Date).AddMinutes(-5); #check only last 5 mins.
#Get-EventLog has built-in switch for EventID, Message, Time, etc. but using any of these it will be VERY slow.
$count = (Get-EventLog Security -Newest 1000 | Where-Object {$_.EventID -eq 4625 -and $_.Message -match "Logon Type:\s+8" -and
$_.TimeGenerated.CompareTo($now) -gt 0} | Measure-Object).count;
if ($count -gt 50) #threshold
{
$ips = @();
$ips1 = dir "C:\inetpub\logs\LogFiles\FPTSVC2" | Sort-Object -Property LastWriteTime -Descending
| select -First 1 | gc | select -Last 200 | where {$_ -match "An\+error\+occured\+during\+the\+authentication\+process."}
| Select-String -Pattern "(\d+\.\d+\.\d+\.\d+)" | select -ExpandProperty Matches | select -ExpandProperty value | Group-Object
| where {$_.Count -ge 10} | select -ExpandProperty Name;

$ips2 = dir "C:\inetpub\logs\LogFiles\FTPSVC3" | Sort-Object -Property LastWriteTime -Descending
| select -First 1 | gc | select -Last 200 | where {$_ -match "An\+error\+occured\+during\+the\+authentication\+process."}
| Select-String -Pattern "(\d+\.\d+\.\d+\.\d+)" | select -ExpandProperty Matches | select -ExpandProperty value | Group-Object
| where {$_.Count -ge 10} | select -ExpandProperty Name;
$ips += $ips1; $ips += $ips2; $ips = $ips | where {$_ -ne "10.0.0.1"} | Sort-Object | Get-Unique;

foreach ($ip in $ips) {
if (-not ($blacklist -contains $ip)) {
"Found attacking IP on FTP: " + $ip;
$blacklist = $blacklist + $ip;
}
}
}
#>

#Firewall change

<# $current = (netsh advfirewall firewall show rule name="MY BLACKLIST" | where {$_ -match "RemoteIP"}).replace("RemoteIP:", "").replace(" ","").replace("/255.255.255.255",""); #inside $current there is no \r or \n need remove. foreach ($ip in $blacklist) { if (-not ($current -match $ip) -and -not ($ip -like "10.0.0.*")) {"Adding this IP into firewall blocklist: " + $ip; $c= 'netsh advfirewall firewall set rule name="MY BLACKLIST" new RemoteIP="{0},{1}"' -f $ip, $current; Invoke-Expression $c; } } #>

foreach ($ip in $blacklist) {

$fw=New-object -comObject HNetCfg.FwPolicy2; # http://blogs.technet.com/b/jamesone/archive/2009/02/18/how-to-manage-the-windows-firewall-settings-with-powershell.aspx
$myrule = $fw.Rules | where {$_.Name -eq "MY BLACKLIST"} | select -First 1; # Potential bug here?

if (-not ($myrule.RemoteAddresses -match $ip) -and -not ($ip -like "123.123.123.*"))
{"Adding this IP into firewall blocklist: " + $ip;
$myrule.RemoteAddresses+=(","+$ip);
#echo $ip > C:\BlackListIP.txt
}
}

"__________________________________________________________________________________"
Wait-Event -Timeout $loop_time #pause 30 secs

} # end of top while loop.

해당 코드를 Windows PowerShell ISE 실행하여 붙여넣고 실행하면 된다.
실행하기 전에 자기에게 맡게 IP,포트번호 등의 셋팅을 해야 하며, 윈도우 방화벽 규칙(MY BLACKLIST)이 추가 되어 있어야 한다.

 

#등록된 IP 전부를 deny 시키는 방화벽 룰 생성.
netsh advfirewall firewall add rule name="MY BLACKLIST" dir=in action=block localip=any remoteip=107.160.158.70

 107.160.158.70 아이피는 미국 어태커 IP.

 

1. 2008에서만 검증 확인. 2012에서도 가능 할 것으로 보임
2. 2003이하에서는 방화벽 동작 방식이 아예 달라서 사용 할 수 가 없다.
3. MY BLACKLIST 이름으로 차단 규칙 추가해야 한다.
4. FTP 스크립트는 테스트 안 해봄
5. 이벤트 로그가 있어야 하며, 현재 사용자가 계속 공격을 시도하고 있어야지 차단목록에 등록된다.
6. 공격자가 접속을 시도하는 상황에서만 차단 동작을 한다.

해당 스크립트를 저장하여 사용할 경우

오류: 이 시스템에서 스크립트를 실행할 수 없으므로 <Script name> 파일을 로드할 수 없습니다.  라는 메시지가 나타난다.

이럴 경우 파워셀을 관리자 권한으로 실행 후 아래의 명령어를 실행하면 된다.

Set-ExecutionPolicy RemoteSigned

출처

auto_blocking.ps1

2014년 1월 10일 금요일

리눅스 snmpd 설치 및 설정

//설치
yum install net-snmp

//부팅시 실행
chkconfig snmpd on

//부팅시 실행 확인
chkconfig --list | grep snmpd

//snmpd 실행
service snmpd start

기존것은 snmpd.conf.org로 변경해놓고
vim /etc/snmp/snmpd.conf


#community name 설정. localhost는 public
#111.222.333.444 IP와 111.111.111.0/24 대역은 community name을 password 라고 지정.
com2sec local_id localhost public
com2sec reno_id 111.222.333.444 password
com2sec reno_id 111.111.111.0/24 password

####
#위에서 설정한 local_id와 reno_id를 각각 local_group와 reno_group로 그룹에 매핑.
#securityModel은 v1과 v2c를 사용. v3는 생략
# groupName securityModel securityName
group local_group v1 local_id
group local_group v2c local_id
group reno_group v1 reno_id
group reno_group v2c reno_id

####
# snmpd의 권한설정. 다 필요없고 전부 준다. (.1)
# Third, create a view for us to let the group have rights to:
# Make at least snmpwalk -v 1 localhost -c public system fast again.
# name incl/excl subtree mask(optional)
view all included .1
#view systemview included .1V
#view systemview included .1.3.6.1.2.1.25.1.1

####
# Finally, grant the group read-only access to the systemview view.
# group context sec.model sec.level prefix read write notif
access local_group "" any noauth exact all none none
access reno_group "" any noauth exact all none none

방화벽에서 snmp:tcp, snmp:udp 둘다 열어주자

2014년 1월 9일 목요일

jquery 하단 고정. stickyFooter

function stickyFooter(){
jQuery("#footer").css({position: "absolute",top:($(window).scrollTop()+$(window).height()-$("#footer").height())+"px",left:0px;});
}

jQuery(function(){
stickyFooter();

jQuery(window)
.scroll(stickyFooter)
.resize(stickyFooter);
});


전부 되는 지는 테스트 못해봄.

2014년 1월 8일 수요일

리눅스 트래픽 체크(sulinux 툴)

#!/bin/bash
if [ "$1" == "" ] ; then
echo "사용법 : $0 장치명 [delay]"
echo "예) $0 eth0 3 "
exit 1
fi
if [ "$2" == "" ] ; then delay=3 ; else delay=$2 ; fi

echo "시간 : 수신(Kbit/Sec) / 송신(Kbit/Sec)"
while ( true ) ; do
rx1=`grep $1 /proc/net/dev | awk '{print $1}' | sed 's/.*://'`
tx1=`grep $1 /proc/net/dev | awk '{print $9}'`
sleep $delay
rx2=`grep $1 /proc/net/dev | awk '{print $1}' | sed 's/.*://'`
tx2=`grep $1 /proc/net/dev | awk '{print $9}'`

# 1024/8 == 128
rx3=$(((rx2-rx1)/128/delay))
tx3=$(((tx2-tx1)/128/delay))

echo "`date '+%k:%M:%S'` : $rx3 / $tx3"
done