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는 토큰에서 지정된 값을 출력하는 변수이다.

출처는 여기