NFS 사용 시 주의점이 무엇일까요?

wertyu의 이미지

안녕하세요.

서버 5대를 코로케이션 받고 있습니다.

2Tb짜리 S-ATA 하드 달린 장비를 파일 서버로 사용하고, NFS로 마운트하여 사용하려 합니다(읽기 쓰기 가능). 그런데 NFS는 처음 사용해 봅니다.

여기 저기 찾아 보니, NFS가 보안에 약하다고 하는데 주의할 점이 무엇인지 궁금하네요.

Fedora Core2를 사용 중이구요. 커널 버전은 2.6.5-1 입니다.

보안에 유의해야 할 점을 알려 주시면 감사하겠습니다.

그리고, portmap이 사용하는 111 번 포트만 맊아 두면 보안은 안전한 것인지요..

미리 감사드립니다.!~

mycluster의 이미지

외부서비스 아이피랑 NFS서비스 아이피를 분리하십시오. 설마, 5대의 코로케이션 장비를 NFS서버로 만들고 외부에서 그걸 NFS로 마운트 하실 생각은 아니시겠지요?

--------------------------------
윈도위의 리눅스 윈도위의 윈도우 리눅스위의 익스플로러

wertyu의 이미지

네에.~

1대가 File server가 되고, 나머지 4대 중 2대에게 하드를 나눠주려고 합니다.

호스팅 받는 업체의 스위치에서 1개 포트를 빼와서 5개만 따로 스위치로 묶여 있는 상태입니다.

처음 해 보는 것이라 두근거리네요.. 잘못 설정해서 외부에 크래킹 당하지나 않을까 하구요^^

MyCluster wrote:
외부서비스 아이피랑 NFS서비스 아이피를 분리하십시오. 설마, 5대의 코로케이션 장비를 NFS서버로 만들고 외부에서 그걸 NFS로 마운트 하실 생각은 아니시겠지요?
mycluster의 이미지

그러시면 이렇게 하시면 보안에 해결됩니다. 각각의 파일서버에 랜카드를 2개(아마 두개로 들어있을겁니다)를 설정하고, 파일서버에는 외부아이피를 주지 마시고...
NFS 클라이언트에서 마운트 할때, 내부아이피를 사용해서 마운트 하십시오. 더 확실하게 보안을 하고 싶으시면, 내부아이피를 위한 스위치를 하나더달고, 거기에는 외부에서 네트웍을 연결하지 마십시오... 이해하시겠지요?

외부연결선-외부서비스서버(웹서버1~4)---내부스위치----NFS서버

--------------------------------
윈도위의 리눅스 윈도위의 윈도우 리눅스위의 익스플로러

maindb의 이미지

한번쯤 언급하려다가 기회가 없어서 계속 미루고 있었는데
님의 글을 보고 잠깐 시간을 내어 제 경험을 이야기 하도록 하겠습니다.
참고로 전 리눅스에 대해서 그다지 고수는 아닙니다.
현재 회원 400 만이 조금 넘는 중규모의 포탈싸이트 회사에서 근무하고
있습니다.

그리고 NFS 때문에 10개월 가까이 엄청난 삽질을 했습니다.
비록 허접하지만 NFS 에 관련된 이론과 지식만큼은 자타가 공인할 정도 입니다.

몇가지 상황을 먼저 고정시켜놓겠습니다.

1. 서버의 성능(하드위에 성능)이 매우 매우.. 극도로 우수한 시스템

2. 모든 시스템은 기가비트 라인을 사용함

3. 500 만 이상의 회원과 실제 하루 80만명 이상의 유니크한 유저가 사용함.

일단 위와 같다고 가정을 합니다.

우선...

국내에... 이곳 kldp 를 포함하여 다른건 몰라도 이상하게 NFS 에 관한
자세한 자료를 찾기가 매우 힘듭니다.
설치, 설정방법과 일반적으로 보안에 취약하다.. 라는 정도의
정보들만 얻을 수 있습니다.
말 그대로 세상은 넓고 분명 사용하는 사람들도 많을텐데
왜 그럴까요? 전 일단 이 부분이 이상하다고 생각했습니다.

결론은... 바로 그 이상한 부분에 있습니다.

즉, 대규모의 서비스에는 절대 !!! 적합하지 않다는 것입니다.
그렇게 때문에 편하지만 실제 상용 서비스에는 잘 사용되지 않는 것입니다.
사실 잘 사용되지 않는것이 아니라 절대 사용해서는 안됩니다.
혹시 이 글을 읽으시는 분들중에...

'저희는 아무런 문제없이 잘 사용하고 있습니다.'

라고 말씀하시는 십중팔구 그 NFS 를 사용하는 구조에서 위 가정의 3 번에
해당되지 않기 때문입니다. 어찌보면 이건 당연한 것입니다.
그렇게 많은 사용자로 인하여 NFS 컨넥션의 구조에서 계속 읽고, 쓰기를
해야한다면 다른 방법을 택해야 하기 때문 입니다.

보통 문서나, 많은 분들이 막연히 NFS 의 단정을 이야기 하라면
'보안에 약하다', 'NFS LOCK 에 걸려 시스템이 먹통이 된다'
라고 말씀합니다.

우선 보안 부분은 그리 크게 신경을 쓰실 필요가 없습니다.
최근의 NFS 는 상당히 좋아졌습니다.
NFS 의 단점을 이야기 하면서 보안,보안.... 많은 분들이 이야기 하시는데
사실 이건 별개의 문제입니다.

궁극적인 문제는 바로 'NFS LOCK 에 걸려 시스템이 먹통이 된다' 입니다.
일단 이렇게 되면 10번중의 9번은 reboot 도 못합니다.
말 그대로 reset 이나 전원을 내렸다가 다시 켜야 합니다.

NFS 를 사용하면서 NFS LOCK 으로 시스템이 먹통이 된적이 없으신 분들은
이것 또한 당연히 위 가정에서 3번에 해당되지 않습니다.

NFS 의 연결방법은 UDP 와 TCP 방법이 있습니다.
커널 레벨의 NFS 에 TCP 연결에 옵션에서 적당한 버퍼를 준다고 하더라도
실제 대규모 서비스에는 적당하지 않습니다.
적당하지 않다는 표현보다는 솔직히 하루에도 몇번씩 계속 죽는 것을
경험해야 합니다.

제 아무리 좋은 시스템에 아무리 좋은 네트워크 환경이라도
실제 대규모 서비스에서의 NFS 는 그야말로 쥐약입니다.
위에서도 잠시 언급을 했듯이 사실 NFS 는 대규모 온라인 서비스를
위하여 개발된 것이 아니기 때문에 이건 당연한 것입니다.
대규모 서비스를 원하면서 NFS 를 사용한다는 것 자체가 어떻게 보면
미련한 생각입니다.

그나마 레드햇 엔터프라이즈 리눅스의 경우에는 2~3주 버티더군요.
이것만으로도 보아 레드햇 엔터프라이즈 리눅스의 경우에는
확실히 커널부터 시작해서 여기저기 손을 많이 댄 것이라고 생각이 됩니다.
하지만 이것도... 언제 죽을지 몰라 잠도 제대로 자지 못하고 뜬눈으로
늦게 까지 밤을 새운적이 많았습니다.

결론은...

NFS 로 연결되어 사용하는 파티션에 읽기 쓰기가 매우 빈번한 경우
NFS 는 고생으로 가는 지름길을 택하는 것입니다.

님께서 사용하시려는 용도가 어떠한 용도로 사용되어지는지 신중히
생각하시기 바랍니다.
만약 그다지 빈번한 읽기 쓰기가 아니라면 걱정은 안하셔도 됩니다.
아주 잘 작동됩니다.

또한, 님께서 걱정하시는 보안문제는 사실 NFS 의 문제라고 생각하실
필요가 없을 정도로 이제는 충분히(!) 안정적 입니다.
NFS 의 보안을 신경쓸바에는 시스템의 보안에 신경을 쓰시는 것이
효율적일 것입니다.


여기서 잠깐... 그렇다면....

대규모 서비스를 위해서.. 한 시스템에서 여러 시스템에 분산된
디스크를 NFS 처럼 편하게 마운트하여 한 시스템에서 액세스 할 수 있는
방법은 무엇이 있을까?

네, 해결책이 있습니다.

바로 Storage 개념을 도입하면 됩니다. 하지만 비용이 많이 듭니다.

그렇다면 저 비용으로 방법이 없을까? 있습니다.

그것은 바로 iSCSI 입니다.

현재 저희 회사가 지금 iSCSI 를 사용하고 있습니다.
NFS 는 도저히 답이 안나오고 Storage 를 도입하자니 돈이 너무 많이 들고...
해서... 결정을 내린것이 iSCSI 인데 현재까지 ( 3개월 정도 ) 아무런
문제없이 잘 사용하고 있습니다.
(사실 iSCSI 는 그다지 저렴하지 않습니다.)

횡설수설 적어 놓은 제 글때문에 머리가 아프시지 않으셨으면 합니다.
그냥... NFS 때문에 하도 많이 고생을 해서 조금이나마 도움을 드리고
싶어서 생각나는 대로 마구 적었습니다.


ps. NFS 를 사용하게 된 이유는 바로 대용량 웹 메일 때문이었습니다.
현재 iSCSI 로 아주 잘 사용하고 있습니다.

wertyu의 이미지

답변 주신 두 분 너무 감사드립니다.! (__)

wertyu의 이미지

그럼 하나만 질문 드릴게요~

저희 사이트는 유료 사이트라 올 해 회원 1만명 목표로 하고 있습니다.

다행이 사용자가 적은데, 유료 사이트라 장애가 생기면 난감하기도 하구요^^

말씀해 주신 iSCSI를 오늘 처음 들어서, 검색해 보니 현재 사용 제품은 N모사 제품만 있나 봅니다.

저희는 S-ATA로 2Tb를 만드는데, 약 2,000만원 들었거든요...

iSCSI를 구축하려면 비용은 얼마나 들까요.
상용 제품 안 사고 리눅스로 구현할 수는 없을까요?

나중에 장애가 심각해 지면, iSCSI로 옮겨야 할텐데...

iSCSI를 소개하는 글은 많은데, 실제 구축하는 방법에 관한 글은 별로 없네요. 참고 자료라도 더 찾아 보겠습니다.

감사합니다.~

maindb의 이미지

저도 님과 같이 걱정이 되었는데 iSCSI 의외로
간단합니다.

카드꽂고 드라이버 설치하고
설치된 시스템의 iSCSI 에 IP 할당하면 그걸로
끝 입니다. ^^;

님께서 질문하신 내용에 대한 현실적인 답변을
드리자면 올해안에 1만명이라면 글쎄요.
가능할 것 같습니다.

저희는 이미 사용자 300 만명이 넘는 상황에서
웹메일 서비스를 붙이려고 하다가 이러한 사태가
벌이지게 된 것입니다

올해안에 1만명 목표라면 한번 NFS 를 도전해
보시기 바랍니다.

NFS 는 반드시 TCP 연결을 하셔야 하구요.
NFS 로 연결하려는 시스템들은 따로 랜카드를
장착하여 내부아이피로 연결하시기 바랍니다.
오로지 NFS 통신에만 사용되어져야 하는 인터페이스가
필요하니까요.

그리고 레드햇 엔터프라이즈 리눅스 3.0 AS 를
사용하시기 바랍니다.
이놈의 NFS 때문에 리눅스 배포본만 정말 엄청나게
바꿔가며 별짓 다해봤습니다.

확실히 레드햇 엔터프라이즈는 그 돈값을 합니다.
이건 확실히 믿으셔도 됩니다.

S-ATA로 2Tb를 만드는데, 약 2,000만원 이라면
저렴한 편이군요.
확실히 시간이 지나면 지날수록 가격이 내려가네요.
저희는 2001 년에 클럽 서비스
때문에 xxxx 으로부터 32TB E-IDE Storage 를
엄청난 가격을 주고 구입했었죠.

덕분에 사용자가 늘어 이제 중견 포탈로 들어서기
일보 직전 입니다.

그리고 iSCSI 구축에 관한 비용은
넵x 에 직접 문의하시는 것이 좋을 겁니다.
한국 지사 홈페이지가 있으니 나중에 슬슬 옮겨야 할
때가 오면 한번 전화 문의해 보세요 :)

wkpark의 이미지

maindb wrote:

...
궁극적인 문제는 바로 'NFS LOCK 에 걸려 시스템이 먹통이 된다' 입니다.
일단 이렇게 되면 10번중의 9번은 reboot 도 못합니다.
말 그대로 reset 이나 전원을 내렸다가 다시 켜야 합니다.

NFS 를 사용하면서 NFS LOCK 으로 시스템이 먹통이 된적이 없으신 분들은
이것 또한 당연히 위 가정에서 3번에 해당되지 않습니다.
...


리눅스 커널 버전이 어떻게 되나요? rsize wsize는 당연히 늘리셨을 것이라고
생각되지만 이것고 연관되어 있을 것이라고 생각되는데, 커널 2.5.x버전 이후로는 rsize/wsize제한이 없어졌다고 합니다. (NFS FAQ B7참조)
또, nfs마운트할 때 sync옵션은 당연히 주셨겠지만... (NFS FAQ B8 )
maindb wrote:

...
그나마 레드햇 엔터프라이즈 리눅스의 경우에는 2~3주 버티더군요.
이것만으로도 보아 레드햇 엔터프라이즈 리눅스의 경우에는
확실히 커널부터 시작해서 여기저기 손을 많이 댄 것이라고 생각이 됩니다.
하지만 이것도... 언제 죽을지 몰라 잠도 제대로 자지 못하고 뜬눈으로
늦게 까지 밤을 새운적이 많았습니다.
...

엔터프라이즈 리눅스가 잘 되었었다... 라면
http://www.netapp.com/tech_library/3183.html
http://www.netapp.com/tech_library/3189.html
위 링크를 참조하시면 RH 엔터프라이즈 리눅스는 "NFS uncached I/O patch"와 관련되어 있다고 추측할 수 있고, 이와 관련된 패치는 커널 2.6.x(?)의 "CONFIG_NFS_DIRECTIO" 라는 커널 옵션으로 포함되어 있고, 레드헷 9에도 포함되어 있군요.
(NFS를 캐쉬하지 않게 하는 옵션은 솔라리스에도 있다고 합니다.)

참조: http://nfs.sourceforge.net/

온갖 참된 삶은 만남이다 --Martin Buber

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.