Tag Archives: freebsd

FreeBSD 쉘에서 색 사용

사용환경: FreeBSD 6.x, tcsh 또는 bash, 윈도우용 putty 터미널.

리눅스에 비해 FreeBSD를 사용하면 기본적으로 쉘상에서 색상이 거의 안나오는데, 몇가지 설정을 하면 리눅스 부럽지 않게 화려(?)해집니다.

tcsh 사용자는 .cshrc에 아래를 적당한 위치에 추가합니다.

setenv CLICOLOR
setenv LSCOLORS Exfxcxdxbxegedabagacad

set mch = `hostname -s`
alias prompt ‘set prompt = “%{\033[1;33m%}$mch%{\033[0m%}:%{\033[1;34m%}$cwd%{\033[0m%}> “‘

첫줄은 ls에서 기본적으로 색이 출력되도록 합니다. 두번째 줄은 폴더에 할당된 색이 기본적으로 파랑색인데 putty에서 파랑색이 눈에 잘 띄지 않아서 밝은 파랑으로 바꿔주었습니다. 자세한 것은 man ls

밑에서는 쉘 prompt에 색상이 출력되도록 했습니다. 색 지정은 이 페이지를 참조했습니다.

bash 사용자라면 .profile에 아래를 등록하세요.

export CLICOLOR=1
export LSCOLORS=Exfxcxdxbxegedabagacad
export PS1=”\[\033[1;33m\]\h\033[0m\]:\[\033[1;34m\]\w\]\033[0m\]> “

이렇게 하고 이전글에서 설명했던대로 .screenrc를 설정하면 아래와 같은 화면이 나옵니다:

FreeBSD blackhole 기능

FreeBSD에서 DoS 공격을 근본적으로 막을 방법은 뾰족히 없지만 좀 느리게 만드는 방법입니다. PF(Packet Filter)로 잘 설정하고 싶지만 연결을 많이 유지하는 서버에서 PF가 성능저하가 있는거 같아서 일단 다른방법으로 대처했습니다.

man blackhole 하면 자세한 설명 볼수 있으며,

net.inet.tcp.blackhole와 net.inet.udp.blackhole을 세팅하면 됩니다.

# sysctl -w net.inet.tcp.blackhole=1
# sysctl -w net.inet.udp.blackhole=1

포트 스캔할때, 닫혀있는 포트에 대해서는 리셋(RST) 패킷이 날라가는데 이걸 아예 안보내게 합니다. tcp.blackhole의 경우 1이면 연결(SYN) 패킷에 대해서 RST를 안보내며, 2로 세팅하면 모든 패킷에 대해서 RST를 안보냅니다. UDP는 따로 연결 패킷이 없기 때문에 1로 세팅하면 닫혀있는 포트로 오는 패킷에 대해서 RST 응답을 안보내고 무시합니다.

포트스캔을 하면 없는 포트로 많은 패킷이 오기 때문에 RST 패킷이 많이 나가게 됩니다. 이럴 경우 시스템에 부하를 일으킬 소지가 있으므로, FreeBSD에서는 RST를 보낼때 1초에 200개의 RST 패킷만 보내도록 제한이 되어있습니다. 이를 넘을 경우 아래와 같은 경고 메시지가 dmesg 등에 나타납니다.

Limiting closed port RST response from 286 to 200 packets/sec
Limiting closed port RST response from 463 to 200 packets/sec

여기 IP 정보가 나오지 않기 때문에 정보를 보기 위해서는

# sysctl -w net.inet.tcp.log_in_vain=1
# sysctl -w net.inet.udp.log_in_vain=1

하지만 이렇게 하면 로깅되는 정보가 너무 상당히 때문에 시스템에 더 큰 부하를 일으킬 가능성이있습니다. 공격을 당하는 서버에서는 잠깐동안 기능을 켰다가 끄도록 아래처럼 실행하세요.

# sysctl -w net.inet.tcp.log_in_vain=1; sleep 5; sysctl -w net.inet.tcp.log_in_vain=0

위에 처럼 서버(SERVER_IP)에서 돌리고, 원격 서버(SCANNER_IP)에서 nmap을 돌려봤습니다. 스캔 당하는 SERVER_IP에서는 blackhole 기능은 끈상태입니다.

Connection attempt to TCP SERVER_IP:25 from SCANNER_IP:38947 flags:0x02
Connection attempt to TCP SERVER_IP:1723 from SCANNER_IP:38947 flags:0x02
Connection attempt to TCP SERVER_IP:3389 from SCANNER_IP:38947 flags:0x02
… (생략)
Limiting closed port RST response from 233 to 200 packets/sec
… (생략)
Limiting closed port RST response from 262 to 200 packets/sec
… (생략)
Limiting closed port RST response from 279 to 200 packets/sec

blackhole=1로 설정한 상태에서는 Limiting closed port… 메시지가 나타나지 않고, nmap의 실행속도가 많이 느려집니다. 글쓰면서 실행해봤는데 몇분이 지나도 끝나지가 않는군요. 답답해서 nmap 실행창에서 엔터를 쳤더니 다음과 같은 메시지가 나오네요. ㅎㅎ 콘솔 프로그램인데 이런거까지 신경써주는군요. ^^

Stats: 0:06:49 elapsed; 1 hosts completed (1 up), 1 undergoing SYN Stealth Scan
SYN Stealth Scan Timing: About 72.17% done; ETC: 01:59 (0:02:37 remaining)

한가지 문제가 blackhole 기능을 켜두면 원격에서 서버 모니터링할때 서버가 죽어도 응답이 바로 오지않는 문제가 있는데, PF를 통해서 포트에 따라서 선택적으로 blackhole 기능처럼 RST 보내지 않도록 설정하는것이 더 좋을거 같네요.

lighttpd 1.4.12 bug

1.4.12로 업그레이드한 후 서버가 가끔씩 죽었었는데 버그 찾아보니 해결되었네요. 1.4.11로 다운그레이드했었는데 소스 패치해서 다시 올려야겠네요. 1.4.11은 POST할때 가끔 먹통되는 버그가 있었는데, 해결은 아래 링크를 참조:

http://trac.lighttpd.net/trac/changeset/1352

FreeBSD 4.10에서 컴파일 안되는 버그도 있는데, 아래 URL을 참조:

http://trac.lighttpd.net/trac/ticket/875
http://trac.lighttpd.net/trac/changeset/1383

FreeBSD Java 바이너리

얼마전에 회사 FreeBSD 서버에 자바 프로그램을 돌려야한다고 해서, 리눅스 에뮬레이션으로 돌릴까하다가 이왕이면 컴파일하자 생각하고 소스와 패치를 수동으로 받아서 다시 컴파일 했습니다. 다행히 그전에 Sun쪽에 등록한 적이 있어서 소스 받는거는 별 문제가 없었지만, 여전히 컴파일은 무지 오래 걸리더군요.

하여튼 ports를 이용하여 설치하면서 별 문제는 발생하지 않았지만, 4시간 정도 걸린거 같네요.
설치한 버전은 /usr/ports/java/jdk14.
미리 알았더라면 FreeBSD native로 컴파일된 1.5 버전을 깔았을텐데…

http://www.freebsdfoundation.org/downloads/java.shtml

  FreeBSD 5.5  i386 JDK/JRE  package/tar
  FreeBSD 6.1  i386 JDK/JRE  package/tar
  FreeBSD 6.1  amd64 JDK/JRE  package/tar

로 제공되네요.