2012년 9월 10일 월요일

qmail queue 주기적 정리,삭제 기능.

 


많은 양의 메일이 큐에 쌓일경우 아래와 같이 설정해주시면
매번 큐를 삭제하지 않고도 주기적으로 큐 정리가 가능해집니다.

#touch /var/qmail/control/queuelifetime ->> 파일 생성
 #echo "86400" > /var/qmail/control/queuelifetime       -> 큐 대기시간 하루
/etc/init.d/qmail reload     --> qmail 재로드
/var/qmail/bin/qmail-showctl  | grep life   --> 확인

 

queuelifetime 시간에 따른 재발송 회수

86400은 대략 6회정도.






How often does qmail retry to send email?

 

Each message has its own retry schedule. The longer a message remains undeliverable, the less frequently qmail tries to send it. The retry schedule is not configurable. The following table shows the retry schedule for a message that's undeliverable to a remote recipient until it bounces. Local messages use a similar, but more frequent, schedule.


















































































































































































































Delivery AttemptSecondsD-HH:MM:SS
100-00:00:00
24000-00:06:40
316000-00:26:40
436000-01:00:00
564000-01:46:40
6100000-02:46:40
7144000-04:00:00
8196000-05:26:40
9256000-07:06:40
10324000-09:00:00
11400000-11:06:40
12484000-13:26:40
13576000-16:00:00
14676000-18:46:40
15784000-21:46:40
16900001-01:00:00
171024001-04:26:40
181156001-08:06:40
191296001-12:00:00
201444001-16:06:40
211600001-20:26:40
221764002-01:00:00
231936002-05:46:40
242116002-10:46:40
252304002-16:00:00
262500002-21:26:40
272704003-03:06:40
282916003-09:00:00
293136003-15:06:40
303364003-21:26:40
313600004-04:00:00
323844004-10:46:40
334096004-17:46:40
344356005-01:00:00
354624005-08:26:40
364900005-16:06:40
375184006-00:00:00
385476006-08:06:40
395776006-16:26:40
406084007-01:00:00

2012년 9월 8일 토요일

onmouseover 삭제

 

onmouseover 기능을 해제하려고 unbind,bind,off 기능을 무쟈게 해메이다 알게 됬다.

................

한편, <td onclick=”"> 와 같이 정적으로 onclick이 설정 된것은 unbind()로 해제할수 없는데

이 경우에는 $(‘.td’).removeAttr(“onclick”); 을 사용해서 해제 해야한다.

 

제길~!!!  내 1시간.....

 

출처

2012년 8월 16일 목요일

rename을 이용한 하위 디렉토리 포함 확장자 변경.

아래 명령어는 현재 디렉토리의 하위디렉토리까지 모두

jsp확장자를 모두 php확장자로 변환하는 명령어.

find와 rename을 이용한다.
find . -name "*.jsp" -exec rename .jsp .php {} \;

2012년 8월 10일 금요일

구글 톡 chatback 배지 안되네...


블로그에 구글 토크를 설치하여 방문자와 대화 할 수 있는 서비스인

구글 톡 chatback 배지 서비스가 제대로 동작 하지 않는다.

검색해보니 나만 그런게 아닌듯...

 

2012년 8월 9일 목요일

tmp 해킹툴 삭제 스크립트

서버의 트래픽이 갑자기  100M이상 늘어나는 현상이 있었다.

서버체크를 해보니 /tmp 디렉토리에 숨김파일로 공격툴이 심어져 있고,

다른 쪽으로 공격을 하고 있었다.

일단 해당 프로세스를 죽인후 해당 파일을 삭제처리 하였다.

tmp 해킹에 대해서 검색하여, tmp 디렉토에서는 실행할  수 없게끔 설정하였다.

문제는 /tmp/.hack 이렇게 경로로 실행을 하면 실행 되지 않지만,

sh /tmp/.hack 이런 식으로 주면 실행이 가능하다.

해당 공격툴의 소유자가 nobody 인 걸로 봐서 웹을 통한 해킹인 것으로 보이는 데,

해당 문제는 다른 이유로 만질 수 있는 상태가 아니다.

tmpwatch를 이용해서 /tmp 디렉토리에서 해킹툴을 지속적으로 삭제해주도록 걸어 놨다.

몇일 간 문제가 없어 보였으나 ,  다시 트래픽이 쳐서 확인 해 보았다.

공격툴이 정상적으로 삭제 되어졌으나 문제는 메모리에 이미 로드 되어 실행이 되고 있는 상태인 것 같다.

프로세스를 확인 하면 [sh] <defunct> 이렇게 나오는 부분이 있는 데, 역시나 삭제된 해킹툴이다.

해서 /tmp 디렉토리에서 실행되는 프로그램은 죽여버리고, 삭제 시키는 스크립트를 만들었다.

----------------
#/bin/sh

while (( 1 ))
do

for f in `find /tmp/ -type f | grep -v "sess_*"`
do

if [ "$f" != "." ] && [ "$f" != ".." ] && [ "$f" != ".ICE-unix" ] && [ "$f" != ".font-unix" ]
then
if [ -e $f ]
then

#echo $f' is file'
lsof $f | sed '1d' | awk '{print $2}' | xargs kill -9
rm -rf $f
fi
fi

done
sleep 5
done

해당 프로그램을 실행하면 5초 마다 실행 되도록 작성 해 놓았다.

부하는 그리 크지 않는 듯 하나, 루프를 돌리기 싫다면, while 부분을 삭제하고 크론으로 등록하여 사용해도 좋을 듯하다.

윈도우 2008에서 Windows Defender 설치

윈도우 서버의 기본 보안 프로그램인 Windows Defender를 설치해서 사용할 수 있다.

윈도우2008부터는 Windows Defender가 기본으로 제공되므로 따로 설치할 필요가 없다.

근데 어디에서도 Windows Defender를 찾을 수가 없다.

따로 설치 파일을 받아서 설치하려고 해도 이미 설치되어 있다고 하며 설치가 안된다.

서버관리자에서 기능추가에서 데스크탑 경험을 설치하면 된다.

 

http://linhost.info/2009/05/ask-the-admin-how-do-i-install-windows-defender-on-windows-server-2008/

logparser를 이용한 mssql sa 공격 차단하기

sqler.com에서 '이벤트 뷰어 sa 로그인 시도 ip차단 시키는 방법.'를 보고 만들었다.

sqler.com에 있는 배치파일이 제대로 작동 되면 그냥 썼으면 좋았으련만...

이것저것 다 적용하려고 하니 너무 방대해 지는 것 같아서 그냥 사용하려고 한다.

logparser가 기본적으로 깔려있어야 실행 된다.

안에 내용물은 배치파일 3개, sql문 1개인데

배치파일은 그냥 만들던거 집어넣은 거고, v3버젼을 사용하면 된다.

sql파일은 mssql 사용포트를 자동으로 가져오려고 하다보니 집어 넣게 됬다.

sa_attack_deny
@echo off
REM @echo on
REM @echo off 화면에 출력되지 않게 함
CLS

REM #########################
REM blog.netchk.com
REM #########################

REM 자동으로 체크 하도록 변경.
REM #############################################설정정보
REM sql 사용 포트
REM SET sql_port=1433
REM logParser 경로. \를 붙여서 넣어야 함
REM SET logParser="%ProgramFiles%\Log Parser 2.2\LogParser.exe"
REM os 버젼 2003 이면 1, 2008이면 2
REM SET os_version=2003
REM #############################################

:start

REM ################################# 언어 확인 START
set Key="HKEY_CURRENT_USER\Control Panel\International"
for /F "tokens=3" %%a in ('reg query %Key% ^| find /i "sLang"') do set os_lang=%%a
REM echo Language is %os_lang%
REM KOR 이라고 나옴.

IF /I %os_lang% == KOR (
SET findName=이름
SET query_type=클라이언트:
) else (
SET findName=Name
SET query_type=client:
)
REM ################################# 언어 확인 END

REM ################################# sql port 확인 START
IF NOT EXIST PORT.sql (
echo port.sql 파일이 없습니다.
ECHO mssql 포트 번호를 확인 할 수 없습니다.
GOTO exit
)
for /f "tokens=3 delims=:" %%i in ('sqlcmd -S . -i PORT.sql') do set sql_port=%%i
REM echo %sql_port%
REM ################################# sql port 확인 END

REM ################################# 32,64bit 확인하고 programFiles 위치 체크 START
if "%ProgramFiles(x86)%XXX"=="XXX" (
REM echo 32-bit
set flatform=32
set ProgRoot="%ProgramFiles%"
) else (
set ProgRoot="%ProgramFiles(x86)%"
set flatform=64
)
for /f "delims=" %%a in (%ProgRoot%) do set ProgRoot=%%~a
REM echo %ProgRoot%
set logParser="%ProgRoot%\Log Parser 2.2\LogParser.exe"
REM ################################# 32,64bit 확인하고 programFiles 위치 체크 END

REM ################################# log parser 확인 START
ECHO.
echo log parser 가 설치되었는지 확인합니다.
if not exist %logParser% (
echo logParser가 설치되어 있지 않거나 경로가 틀립니다.
echo Log Parser 설정된 경로 : %logParser%
echo http://www.microsoft.com/en-us/download/details.aspx?id=24659
pause
goto exit
) else (
echo 설치확인.
)
REM ################################# log parser 확인 END

ECHO.
echo wevtutil 프로그램이 있는 지 확인합니다.
if exist %SystemRoot%\system32\wevtutil.exe (
echo wevtutil 확인.
) else (
echo 이벤트 로그를 삭제 하기 위해서는 wevtutil 이 필요합니다.
echo 이벤트 로그를 삭제 하지 않고 진행합니다.
timeout /t 2 /nobreak

)

echo system 확인 결과 입니다.
echo OS Language : %os_lang%
REM echo OS version : %os_version%
echo OS platform : %flatform%
echo mssql port : %sql_port%

:start_ip_sec
echo ---------------------------에러 메시지 설명 ------------------------------
echo 1. ... 필터 목록이 이미 있습니다.라는 메시지는 정상입니다.
echo.
echo 2. 파일 temp.txt을(를) 찾을 수 없습니다. 라는 메시지는
echo 새로운 공격로그가 없을 경우 나타납니다.
echo.
echo 3. 이름이 '3'인 규칙이 정책 ...생략... 이미 있습니다. 메시지 역시 정상입니다.
echo --------------------------------------------------------------------------------
echo.

timeout /t 5 /nobreak
ECHO.

REM 차단 시작
echo.
echo 아이피 차단을를 진행합니다.
echo.
echo.

REM 로컬룰지정
netsh ipsec static set store location=local

REM 최초 룰정책 생성
netsh ipsec static add policy name=sql_sa_attack_ip_deny_list description="이벤트로그를 이용한 sa 공격시도 아이피 차단--blog.netchk.com NDH" assign=yes

REM 필터리스트 추가
netsh ipsec static add filterlist name=ip_deny
netsh ipsec static add filterlist name=Local

REM 허용/거부룰 설정
netsh ipsec static add filteraction name=Permit action=Permit
netsh ipsec static add filteraction name=Block action=Block

echo.
echo.

REM 이벤트로그 중 sql sa 계정 공격 아이피만 가져오는 쿼리. temp.txt로 생성
REM

%logParser% -i:evt -o:nat -q:on "SELECT DISTINCT TRIM(EXTRACT_TOKEN(EXTRACT_TOKEN(Strings,1,'%query_type%'),0,']')) AS ip INTO temp.txt FROM application WHERE EventID='18456' AND Strings LIKE '%%sa%%'"

REM temp.txt 저장된 정보를 라인단위로 읽어 'ip_deny' 이름으로 작성된 netsh ipsec에 등록하기 위해 event_netsh ipsec_deny.bat 파일로 만든다 or 실행.
REM /f 옵션 : 파일을 읽어드림

REM bat 파일로 만듬
REM for /f %%i in (temp.txt) do @echo netsh ipsec static add filter filterlist="ip_deny" srcaddr=%%i dstaddr=me description="SQL SA접속시도 자동차단 : %date% %time% 등록" protocol=tcp srcport=0 dstport=%sql_port%>>reg_netsh ipsec_deny.bat
REM 바로 실행
for /f %%i in (temp.txt) do netsh ipsec static add filter filterlist="ip_deny" srcaddr=%%i dstaddr=me description="SQL SA접속시도 자동차단 : %date% %time% 등록" protocol=tcp srcport=0 dstport=%sql_port%

REM temp.txt 삭제
del /q temp.txt

echo.
echo.

REM 로컬트래픽허용
netsh ipsec static add filter filterlist=Local srcaddr=me dstaddr=localhost dstmask=255.255.255.0 protocol=ANY mirrored=yes

REM 필터룰 추가
netsh ipsec static add rule name=3 policy=sql_sa_attack_ip_deny_list filter=ip_deny filteraction=Block
netsh ipsec static add rule name=1 policy=sql_sa_attack_ip_deny_list filter=Local filteraction=Permit

REM 차단 끝

:del_app_evt
REM wevtutil 있어야 함.이벤트로그 삭제
REM wevtutil cl application

pause
goto exit

:exit
CLS
echo 프로그램을 종료합니다.
pause

ps.만든지  일주일 정도 지났는 데, 파워쉘로 더 간단하고 logparser 설치 할 필요도 없이 만들 수 있다는 걸 알게 됬다..;