서버가 제대로 구성되어 있는데 왜 방화벽이 필요한가요?


59

내가 일하는 회사의 소수의 클라우드 기반 (VPS) 서버를 관리합니다.

서버는 약간의 LAMP 스택 / 인바운드 데이터 수집 (rsync)을 실행하는 최소한의 우분투 설치입니다. 데이터는 크지 만 개인, 재무 또는 이와 유사한 것은 아닙니다 (즉, 흥미롭지 않음)

분명히 사람들은 방화벽 구성 등에 대해 영원히 묻습니다 .

예를 들어 서버를 보호하기 위해 여러 가지 접근 방식을 사용합니다.

  • 비표준 포트의 ssh; 비밀번호 입력 없음, 로그인을 위해 알려진 IP의 알려진 ssh 키만
  • https 및 제한된 셸 (rssh)은 일반적으로 알려진 키 / ip에서만
  • 서버는 최소한의 최신 상태이며 정기적으로 패치됩니다
  • rkhunter, cfengine, lynis denyhosts 등과 같은 것을 모니터링에 사용하십시오.

유닉스 시스템 관리자에 대한 광범위한 경험이 있습니다. 설정에서 내가하고있는 일을 알고 있다고 확신합니다. / etc 파일을 구성합니다. 나는 방화벽과 같은 것들을 설치해야 할 강력한 요구를 느낀 적이 없다 : iptables 등

VPS의 물리적 보안 문제를 잠시 제쳐 두십시오.

큐? 나는 순진한 지 또는 fw가 제공 할 수있는 점진적 보호 여부는 학습 / 설치 노력과 서버의 추가 복잡성 (패키지, 구성 파일, 가능한 지원 등)에 가치가 있습니다.

지금까지 (터치 우드) 보안에 아무런 문제가 없었지만 그것에 대해 만족하지는 않습니다.




6
저에게 당신의 IP 주소를주고 나는 것 보여 방화벽이 필요한 이유를.
GregD

답변:


87

여러 데몬을 연결하는 데 많은 노력을 기울였으며 이미 말한 내용에서 이미 보호 한 서비스를 통해 문제가 발생할 가능성은 거의 없다고 생각합니다. 그래도 여전히 "금지 된 것을 제외하고는 모든 것이 허용됩니다"상태가되며, 데몬 후에 데몬을 찾아서 하나씩 고정 시켜서 해당 상태에서 벗어날 수 없습니다.

기본적으로 모든 것을 거부 하도록 구성된 방화벽 은 "허용되는 것을 제외하고는 모든 것이 금지되어 있습니다"모드로 이동하며 수년에 걸쳐 더 나은 것으로 나타났습니다.

시스템에 합법적 인 셸을 가진 합법적 인 사용자에게 인터넷에 대한 웹 요청을 프록시하기 위해 로컬 권한이없는 데몬을 실행하거나 포트 4662에서 파일 공유를 시작하거나 -g를 사용하여 실수로 리스너를 열 수 있습니다 ssh 포트 터널링으로 무엇을하는지 이해하지 못합니다. 또는 sendmail 설치로 인해 포트 587에서 MUA를 실행할 수 있습니다.이 포트는 포트 25에서 MTA sendail을 보호하기 위해 수행 한 모든 작업에도 불구하고 587 번 포트에서 잘못 구성되었습니다. 또는 금지해야 할 것에 대해 신중하게 생각할 때 주변에 없었기 때문에주의 깊고 신중한 보안을 우회하는 수백 가지 일이 발생할 수 있습니다.

내 요점이 보이나요? 현재, 당신은 당신이 아는 모든 것을 확보하기 위해 많은 노력을 기울였으며, 그들이 당신을 물지 않을 것 같습니다. 당신에게 물릴 수있는 것은 지금 모르거나 알지 못하는 것입니다.

DENY ANY ANY로 기본 설정되는 방화벽 은 sysadmin 방식으로, 새로운 서버에서 네트워크 리스너를 새로 열면 명시적인 권한을 부여 할 때까지 아무도 대화 할 수 없습니다 .


그것은 매우 통찰력있는 대답입니다. 특히 "모든 것이 허용됩니다 ..."에서 "모든 것이 금지되어 있습니다 ..."로 넘어가는 것에 대한 텍스트는 로컬 데몬에 대해서도 잘 설명되어 있습니다. 종종 그렇듯이-당신도 동의 할 것입니다-위험은 종종 "내부"에 있습니다
Aitch

12
(내가 조금이라도 추정 할 수 있다면, 귀하의 프로필은 귀하가 serverfault를 처음 사용한다고 제안합니다. 로컬 에티켓은 귀하가 답변에 만족할 때 기억에 도움이된다면 틱 개요를 클릭하여 수락한다는 것입니다. 물론, 당신이 이미 알고 있거나 다른, 더 나은 답변이 나오기를 기다리고 있다면, 그것은 또한 옳고 적절하며 저를 무시하십시오. 당신은 당신의 질문에 대한 답변에 완전히 만족하고, 당신은 그것을 받아들입니다.)
MadHatter

+1 @MatHatter-방화벽이 선택이 아닌 기본적으로 보안을 제공 할 수있는 방법에 대한 설명입니다.
Coops

계산 된 위험입니다. 적어도 OpenBSD에서 pf를 활성화하면 버그가있는 커널에 35K 라인의 코드가 추가됩니다. 반면 기본 거부 및 적절한 로깅 방화벽은 IDS가 구매할 수있는 최대 규모입니다. Snort를 사용하여 나쁜 일을 찾는 것을 그만두십시오. 기계가 특별히 허용하지 않은 일을 할 때마다 알림을 받아야합니다.
Alex Holst

14

최소 권한의 원칙. 방화벽은 당신이 거기에 도착하는 데 도움이됩니다. 심층 방어 원칙. 방화벽도 도움이됩니다. 잘 디자인 된 구성은이 두 가지를 명시 적으로 의존합니다.

또 다른 것은 서버가 상용 하드웨어이거나 표준 서버 OS (Unix, NT, Linux)에서 실행되는 서버 소프트웨어를 처리하기위한 특정 하드웨어 일 가능성이 높습니다. 즉, 들어오는 트래픽을 효율적으로 처리하고 필터링하는 특수한 하드웨어가 없습니다. 서버가 가능한 모든 단일 멀티 캐스트, ICMP 패킷 또는 포트 스캔을 처리하도록 하시겠습니까?

서버가 일부 포트 (80, 443, ssl 포트, 일반적인 oracle 1521 포트, rsync 포트 등)에 대한 요청 만 물리적으로 처리하는 것이 가장 좋습니다. 예, 물론 소프트웨어 방화벽을 설정해야합니다. 서버는 해당 포트만 수신합니다. 그러나 NIC는 여전히 원치 않는 트래픽의 잔인 함을 지니고 있습니다 (조직에서 악성이거나 정상입니다). NIC가 손상되면 네트워크 경로가 서버를 통과하고 서버와 내부 클라이언트 사이의 연결 경로가 손상 될 수 있습니다. 다른 내부 서버 및 서비스.)

NIC가 손상 될뿐만 아니라, 모든 단일 패킷 또는 데이터 그램을 검사해야하기 때문에 소프트웨어 방화벽도 사용됩니다.

반면 방화벽, 특히 서브넷 가장자리에있는 방화벽 (또는 외부에서 서브넷을 분리하는 방화벽)은 해당 유형의 볼륨을 처리하기 위해 특별히 설계된 특수 하드웨어 인 경향이 있습니다.

N 개의 서버를 M 개의 방화벽 (N >> M 사용)으로 둘러 쌀 수 있습니다. 그리고 방화벽 하드웨어가 특정 포트를 향하지 않는 것을 덤프하도록 설정했습니다. 포트 스캔, ICMP 및 기타 쓰레기가 없습니다. 그런 다음 특정 기능에 따라 서버의 소프트웨어 방화벽을 미세 조정합니다.

이제 전체 블랙 아웃 가능성을 줄 였지만 (제거하지는 않음) 네트워크 분할 또는 최악의 경우 부분 실패로 줄였습니다. 따라서 공격이나 구성 오류가 발생해도 시스템 성능이 향상됩니다.

서버에 방화벽이 있기 때문에 방화벽이없는 것은 안개로 인해 시인이 120mph 이하인 상태에서 안전 벨트를 착용 한 상태에서 안전하다고 느끼는 것과 같습니다. 그런 식으로 작동하지 않습니다.


4

어떤 종류의 패킷 수준 검사를 수행하는 방화벽이없는 경우 많은 공격이있을 수 있습니다.

예를 들어 크리스마스 트리 패킷

http://en.wikipedia.org/wiki/Christmas_tree_packet

DDOS 공격은 시스템에 대해 실행될 수 있으며, 방화벽 (외부 서버보다 먼저)은 서버를 손상시키기 전에 트래픽을 중지 / 느리게하거나 종료시킵니다.

그냥 있기 때문에 당신이 서버에 금융 또는 개인 데이터가없는 당신은 '상처'받지 않습니다 의미하지 않는다. 대역폭이나 CPU 사용량에 대해 요금을 지불하거나 요금이 청구됩니다. 밤 동안 (잠자는 동안) 누군가가 미터를 가동한다고 상상해보십시오 (VOIP 스위치 제공 업체에서 발생하는 일을 보았습니다. 수백만 분의 트래픽으로 인해 밤에 사람들이 요금을 지불해야 함).

따라서 영리하고 보호 기능이 있다면 완벽하게 사용하고 소프트웨어도 마찬가지입니다. 다음 악용이 발견 될 때까지만 안전합니다. ;)


2

방화벽을 사용하지 않고 최소 권한의 원칙을 시행 할 수 있다면 아마도 필요하지 않을 것입니다. 내 관점에서 방화벽을 사용하지 않고 보안 시스템을 구축하려면 더 많은 노력이 필요하며 매우 게으르다. 단일 구성을 사용하여 전송 레벨에서 권한을 분리 할 수있을 때 다른 도구 및 많은 구성 파일을 사용하여 TCP 연결을 제한해야하는 이유는 무엇입니까?


1
단일 구성에 대한 좋은 지적, 오류의 여지가 적습니다. 나는 가능한 한 게으르다는 것에 동의합니다! cfengine은 많은 구성 파일의 문제를 부분적으로 완화하기 위해 이러한 복잡성 중 일부를 제거합니다 ....... 물론 작성되는 규칙만큼 좋습니다. 따라서 대부분의 구성 파일을 보조 장벽으로 "기본"(또는 그와 비슷한 수준)으로 유지하고 방화벽은 (적어도 계층 적 관점에서) 주요 관심사로 둡니다.
Aitch

2
나는 처음에 PoLP에 대해 상향 투표를 한 다음 게으름에 대해 하향 투표했다. 방화벽은 소유자를 느슨하게 만들 수있는 도구가 아닙니다. 공격자가 방화벽을 통과하면 (결국 무언가를 열어야 함) iptables를 끌 수 있으므로 공격 영역을 강화해야합니다. 시스템이 속한 곳에 게으름을 적용하십시오 : 시스템을 가능한 한 경 사진 곳이 없도록하십시오. 따라서 오랫동안 시스템을 고칠 필요가 없습니다.
Marcin

@Marcin 방화벽을 사용하지 않고 시스템을 보호하려면 포괄적 인 위협 모델을 먼저 만들어야합니다. 방화벽은 잘 알려져 있고 잘 설명 된 위협 모델을 의미하므로 모든 호스트에 대해 처음부터 새로 만들 필요는 없습니다. 물론 우리가 군용 보안에 대해 이야기한다면 선택의 여지가 없으며 공식적인 위협 모델을 만들어야합니다.
Alex

1

방화벽은 또한 원치 않는 패킷이 서버에 도달하지 못하게 차단할 수 있습니다. 개별 서버 수준에서 처리하는 대신 방화벽에서 처리 할 수 ​​있습니다. 이 모든 구성 활동을 여러 서버 대신 단일 방화벽에서 유지할 수 있습니다.

예를 들어 공격자가 외부 IP를 제어하고 원치 않는 패킷으로 서버를 제거하고 서버에 미치는 영향을 완화하려는 경우 영향을받는 각 서버에서 악성 패킷을 삭제하도록 구성 할 수 있습니다 방화벽에서 변경하면 모든 서버가 보호됩니다. 방화벽이 있으면 반응 시간이 단축되었습니다.


또한이 작업을 수행하면 방화벽이 구성됩니다. 방화벽은 각 서버에 있습니다.
mfinni

1

귀하 또는 다른 누군가가 언젠가 서버 설정에서 오류를 일으킬 수 있고, 그 다음 방화벽은 누군가를 막을 수있는 두 번째 기회를 제공합니다. 우리는 완벽하지 않으며, 오류를 발생시키기 때문에 약간의 "필요하지 않은"보험이 가치가 있습니다 .

( 서버 의 동일한 OS 에서 방화벽을 실행하지 마십시오. 그렇지 않으면 OS의 단일 버그입니다 .... 나는 공통점이 많기 때문에 모든 버전의 Unix를 동일한 OS로 간주합니다)


탁월한 혼합 플랫폼 (OS 및 하드웨어)이 핵심입니다.
DutchUncle

1

방화벽은 트래픽 조작에 집중되어 있습니다. 그들은 빨리하고 자원을 가지고 있습니다. 그리고 트래픽을 필터링하기 위해 서버 리소스를 낭비하지 마십시오 (disk io / proc time / etc). 서버 환경에서 일부 보안을 구성해야하지만 모든 트래픽 검사 및 바이러스 검색 등은 특수 서버를 수행해야합니다.


-2

해킹 당하고 방화벽이없는 경우 걱정할 것입니다. 해커는 서버의 다른 포트를 열 수 있습니다. 또한 컨설턴트가 정리 및 감사를 수행하게되면 가장 먼저 "WHAT?!?! 방화벽이 없습니다!"라고 말합니다. 그러면 화상을 입을 수 있습니다.


-1 약간의 감각 주의적 대답 + 실제로 건설적이지 않습니다.
Coops

2
서버가 손상되면 방화벽이 고장난 보조가 단순히 비활성화 할 때 반드시 도움이되지는 않습니다! 고지 사항, 질문은 별도의 하드웨어 방화벽이 아닌 iptables를 사용하여 언급했습니다.
Bryan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.