데비안 서버를 보호하기 위해 어떤 단계를 수행합니까? [닫은]


66

인터넷에 직접 연결된 데비안 서버를 설치하고 있습니다. 분명히 나는 ​​그것을 가능한 한 안전하게 만들고 싶다. 아이디어를 보호하기 위해 아이디어를 추가하고 사용하는 프로그램을 추가하십시오.

이 질문의 일부를 방화벽으로 무엇을 사용하는지 다루고 싶습니다. 그냥 iptables를 수동으로 구성하거나하는 데 도움이되는 소프트웨어의 어떤 종류를 사용합니까? 가장 좋은 방법은 무엇입니까? 모든 것을 차단하고 필요한 것만 허용합니까? 이 주제에 대한 초보자를위한 좋은 자습서가 있습니까?

SSH 포트를 변경합니까? Fail2Ban 과 같은 소프트웨어를 사용하여 무차별 공격을 방지합니까?



1
나는 사람들이 자아의 iptables를 구성하거나 fireHOL 같은 일부 소프트웨어를 사용하고 있는지 woundering되었다), 데비안하지 않는 UFW 우분투는이
Thomaschaaf

나는 항상 iptables 규칙을 직접 작성하는 경향이 있습니다. 나는 모든 조각, 크리스마스 패킷 등을 떨어 뜨리는 것과 같은 보일러 플레이트를 가지고 있습니다. 그 이상은 시스템에 따라 다르며 일반적으로 매우 작습니다. iptables (btw)를 사용할 때 조각을 떨어 뜨릴만큼 스트레스를 줄 수 없습니다. 내가 아직 연구하지 않은 이유 때문에 iptables는 첫 번째 조각 만 검사하고 나머지는 맹목적으로 검사하지 않고 전달합니다. 내 생각에 그것은 파편을 책임으로 만듭니다.
Scott Pack

3
음 ... 데비안에는 ufw가 있습니다. packages.debian.org/ufw
womble

답변:


50

의무 사항 :

  • 전문가 모드로 시스템 설치, 필요한 패키지 만
  • iptables'input에 기본 정책으로 방화벽을 작성하십시오 : drop, SSH, HTTP 또는 지정된 서버가 실행중인 다른 항목에 대한 액세스 허용
  • SSH 용 Fail2Ban [경우에 따라 FTP / HTTP / 기타]
  • 루트 로그인 비활성화, 일반 사용자 및 sudo를 사용하여 강제 실행
  • 커스텀 커널 [오래된 습관]
  • 예정된 시스템 업그레이드

편집증 수준에 따라 추가로 :

  • 허용되는 두 대상 / 포트를 제외한 출력에 대한 정책 삭제
  • integrit파일 시스템웨어의 일부가 수정되지 않았는지 확인하기 위해 (예 : Tripsum을 기계 외부에 유지) Tripwire
  • 적어도 외부에서 시스템의 nmap으로 예약 검사
  • 알 수없는 패턴에 대한 자동 로그 검사
  • chkrootkit의 예정된 실행
  • /etc/passwd새로운 사용자를 추가 하는 것은 불변의 속성 이므로 약간 더 어렵습니다
  • noexec로 마운트 된 / tmp
  • 포트 노커 또는 SSH 포트를 여는 다른 비표준 방법 (예 : 웹 서버에서 '비밀'웹 페이지를 방문하면 페이지를 본 IP 주소에서 제한된 시간 동안 들어오는 SSH 연결을 허용합니다. 연결되면 -m state --satete ESTABLISHED단일 SSH 세션을 사용하는 한 패킷 흐름을 허용해야합니다.]

내가하지는 않지만 말이되는 것 :

  • 커널의 grsecurity
  • 시스템이 손상 될 때 로그를 덮어 쓸 수없는 원격 syslog
  • SSH 로그인에 대한 경고
  • rkhunter를 구성하고 때때로 실행되도록 설정

4
이 모든 작업을 수행 한 후 시스템에 대해 BASTILLE을 실행하여 다른 것을 찾으십시오. 또한 시스템의 전체 보어, 안전하지 않은 검사 Nessus 검사를 수행하는 것이 좋습니다. 그런 다음 경고하는 내용을 수정하십시오.
Scott Pack

13
커스텀 커널을 컴파일한다고해서 실제로 무엇을하고 있는지 알지 않는 한 보안상의 이점은 없습니다. 패키지 관리 시스템에 넣지 않으면 최신 상태로 유지하지 않아도되므로 보안 성이 떨어집니다.
Adam Gibbins

3
모호함을 통한 보안 -1. 그렇지 않으면 괜찮은 대답.
dwc

@ 아담-예, 나는 여전히 필요한 부분으로 만 구성된 모 놀리 식 커널을 선호한다는 것을 알고 있습니다. 그것은 아마도 매우 후진이지만, 나는 그것을합니다. @dwc-그것은 단지 착빙 또는 불쾌한 냄새 나는 물건 더미 위에 체리라고 말하는 하나의 추가 단계입니다.
pQd

1
그리고 당신은 스와 sudo를하지 의미 -
LapTop006

18

컴퓨터 방화벽에 대한 참고 사항 ...

  • 블랙리스트가 아닌 화이트리스트를 사용하십시오. 즉, 모든 것을 차단하고 필요한 것만 허용하고 다른 모든 것을 거부하십시오.
  • GUI / ncurses 또는 방화벽 작성 작업을 시도하는 소프트웨어를 사용하지 마십시오. 그렇게하면 소프트웨어가 사용자를 대신하여 가정 할 수있게됩니다. 이러한 위험을 감수 할 필요가 없어야합니다. 확실하지 않은 경우 직접 구성하고 사용 중지하십시오. 필요한 경우 빨리 찾을 수 있습니다. 시스템이 이미 실행중인 시스템이고 트래픽을 방해 할 수없는 경우 (실수로 차단하여) tcpdump (파일로 덤프)를 실행하고 샘플을 가져 와서 나중에 조사한 다음 무엇이 유효한지, 무엇이 아닌지를 알아냅니다.
  • 개인적으로 비표준 포트에서 서비스를 실행하는 데 아무런 요점도 보이지 않습니다. 요즘 포트 22에서 무언가가 실행 중이기 때문에 도구가 너무 멍청하지 않다고 가정해야합니다. 예를 들어 amap, 및 nmap의의 -A옵션을 선택합니다. 예를 들어, 다음은 공격자 OpenSSH가 자신이 실행중인 정확한 버전을 공격자에게 알리면 공격을 찾을 수 있습니다. 정확한 버전입니다. 그런 것들을 숨기면 더 힘들어 질 것입니다.
    [root @ ud-olis-1 uhtbin] # 텔넷 로컬 호스트 22
    127.0.0.1 시도 중 ...
    localhost.localdomain (127.0.0.1)에 연결되었습니다.
    이스케이프 문자는 '^]'입니다.
    SSH-2.0-OpenSSH_3.9p1
  • 모든 공공 서비스를 최신 상태로 유지하고 최신 보안 패치로 패치하십시오.
  • 최소한 게이트웨이 서버 자체에 데이터를 저장하지 마십시오. 최소한이 시스템에 침입 할 때 시간을 벌면 서비스는 한두 시간 정도 손실되지만 데이터는 손실되지 않습니다.

결론은 100 % 안전한 제품을 만드는 데 절대 성공하지 못할 것입니다. 단지 불가능합니다. 따라서 목표는 가능한 한 안전하게 만드는 것입니다. 시스템을 파괴하는 데 너무 많은 노력을 기울이면 충분하고 가장 유리합니다. script-kiddies는 다음 시스템으로 넘어갈 것입니다.

  • iptables 모든 Linux 시스템을 사용하는 방법이지만 직접 구성하십시오.

공개 표준을 기반으로하지 않는 "보안 소프트웨어"를 사용하지 마십시오. 제대로 작성되지 않았으며 해킹 될 것입니다 ( "if"가 아니라 "when"). 공개 소스 및 공개 프로토콜은 공개적으로 조사 할 수 있으며 성숙하고 신뢰할 수있는 제품이되기 위해 수렴됩니다. 폐쇄 소스 소프트웨어는 주로 얼마나 큰지 / 보안-A-제품의 저자 자신감에 의존 그들이 지구 - 전체 눈의 대 눈 소수의 예 - 그것은 생각합니다.

희망이 있습니다 :)


"... 적은 수의 눈 대 지구의 눈이 가득." -충분한 "기업"이 이것을 실현하기를 원하지만 모호성을 통한 보안이 가장 따르는 추세 인 것 같습니다. 예. 비표준 포트에서 ssh와 같은 서비스를 실행하면 결정된 공격자가 멀어지지 않습니다. 그러나이 스크립트를 사용하면 포트 22의 IP 주소 범위에 대해 사전 공격을 실행하는 스크립트 키드를 멀리 할 수 ​​있습니다.
L0neRanger

12
  • 루트 로그인 비활성화
  • 비밀번호로 로그인 비활성화 (공개 키로 만 로그인 허용)
  • SSH 포트 변경
  • 거부 호스트 사용 (또는 유사)

  • 자신의 iptbles 스크립트 작성 (허용 할 내용을 정확하게 제어하고 다른 모든 항목을 삭제할 수 있음)

  • SSL / TLS 보안 통신을 강제로 사용하고 유효하고 만료되지 않은 서명 된 인증서가 있는지 확인하십시오.

  • 모든 외부 서비스에 대해 엄격한 인증서 확인을 설정합니다 (예 : 다른 컴퓨터에서 LDAP 서버로 사용자를 인증 할 때)

당신은 암호 인증을 비활성화하는 공감대를 얻습니다.
derobert


6

일반적인 출발점 으로 보안 모범 사례를 종합적으로 정리 한 인터넷 보안 센터 (Center for Internet Security) 의 벤치 마크 / 가이드를 따릅니다 . 데비안 벤치 마크가 언젠가 업데이트 된 것 같지는 않지만 단계에 대한 일반적인 개요는 다음과 같습니다.

  • 최신 OS 패치 / 패키지 적용
  • 시스템 / 커널 / 프로세스 계정을 활성화합니다.
  • MAC을 활성화합니다 (예 : SELinux 또는 AppArmor).
  • 호스트 기반 방화벽 (iptables)을 활성화하십시오.
  • APT sources.list를 확인하십시오 (키가 올 바르고 소스를 신뢰할 수 있음).
  • 네트워크 서비스를 최소화하고 필요하지 않은 모든 것을 비활성화하고 방화벽을 차단하십시오.
  • 시스템 액세스를 추가로 제한하려면 TCPWrapper를 사용하십시오.
  • 암호화 된 네트워크 프로토콜 만 사용하고 암호화되지 않은 서비스 (telnet, ftp 등)를 비활성화하십시오.
  • SSH에 대한 원격 액세스 만 구성하십시오.
  • 사용자 로그인 비밀번호를 비활성화하고 키 기반 인증이 필요합니다.
  • 파일 시스템 공유를 비활성화합니다 (NFS, SMB).
  • 원격 / 중앙 집중식 시스템 로깅을 활성화하고 정기적으로 로그를 검토하십시오!
  • BIOS / 펌웨어 수준 암호를 설정하십시오.
  • 부트 로더 비밀번호를 설정하십시오.
  • 시스템 백업을 구성하고, 재해 복구 계획을 세우고, 백업이 유효한지, 직원이 재해 복구 절차를 알고 있는지 테스트하십시오!

CISecurity 벤치 마크에서 시스템에 구현할 특정 명령 및 구성 파일을 포함하여 이러한 모든 다양한 설정에 대한 많은 리소스가 있습니다.


5

기계를 인터넷에 직접 연결하지 않는 것이 좋습니다. 기기와 인터넷 사이에 방화벽을 설치하십시오. 이를 통해 서버에 더 많은 부하를주지 않고 보안 및 네트워크 모니터링을 수행 할 수 있습니다. 개인적으로, 네트워크 및 기능 세분화는 종종 네트워크 문제 해결을 단순화하는 경우가 종종 있지만 추가 복잡성으로 인해 분석이 더 어려워집니다.

가장 안전하지만 가장 성가신 방화벽 정책은 모든 것을 거부하고 허용해야하는 트래픽 만 명시 적으로 허용하는 것입니다. 네트워크를 변경해야 할 때 방화벽 정책을 자주 업데이트해야하기 때문에 이는 성가신 일입니다.

또한 서버에서 일종의 인터페이스 방화벽을 사용하는 것이 좋습니다. 심층 방어가 핵심입니다. 관리 관련 서비스에 비표준 포트를 사용해도 문제가되지 않습니다. fail2ban은 괜찮습니다. 더 많은 아이디어를 찾으려면 Serverfault의 보안 응용 프로그램에 대한보다 구체적인 질문을 찾으십시오.

보안은 두 명의 등산객과 곰에 대한 농담과 같습니다. 하나는 완벽한 보안을 달성 할 수 없지만 다른 사람들보다 더 어려운 목표가되는 것이 도움이됩니다.


좋은 답변을 얻으려면 +1하십시오. 기본 거부는 올바르게 접근하면 관리하기가 성가신 것이 아니라는 점을 지적해야합니다. 확실히 당신은 당신이 무엇을 허용하는지 알아야합니다. 실제로 이것은 정책 설명으로 일반 언어로 작성해야합니다. 정상적인 작업으로 수행하지 않으면 관리자로 작업을 수행하지 않는 것입니다. 그렇다면 방화벽 규칙을 업데이트하는 것은 간단합니다.
dwc

아주 좋은 지적입니다. 모든 조직에는 명확한 언어 보안 정책 설명이 있어야합니다. 조직의 요구가 변경되면 정책 설명을 업데이트해야합니다. 관리자 만이 방화벽 규칙 구현 및 CYA를 계획하는 경우, 스마트 관리자는 조직 관리가 보안에 대해 생각할 필요가없는 경우에도 이러한 정책 설명을 유지합니다.
pcapademic

4

어떤 사람들은 Sebianing Debian Manual을 지적했습니다 . 이것은 군사 요건을 제외한 모든 것에 완벽하게 적합해야합니다.

많은 사람들은 말도 안되는 편집증이 시원하거나 전문적이거나 무언가라고 생각합니다. 그건 아니 그것은 단지, 짜증나는 다른 관리자 및 노골적인 억압 사용자를위한. 당신이 추천 할 것들 대부분은 편집증 관리자에게 유용하다고 생각하는 가짜 바쁜 작업이지만 실제로 보안 위반은 시스템이 충분히 업데이트되지 않았거나 내부 소스에서 발생할 수 있기 때문에 실제로 도움이되지 않습니다.

즉, 인터넷의 어떤 것보다 로컬 네트워크의 어떤 것도 믿지 않는 것이 나의 신조 중 하나라고 생각합니다. 따라서 로컬 네트워크에서도 인증이 필요하도록 모든 것을 구성합니다. IPsec을 사용하여 모든 컴퓨터 사이의 모든 트래픽을 암호화하고 인증합니다.

모든 서버의 전체 디스크 암호화로 변환하는 중입니다.

사용하는 서비스 만 설치합니다. 방화벽이 없습니다. 인증이 필요한 서비스를 구성하거나 프로그램 자체 구성 또는 TCP 래퍼에 의해 특정 IP로 제한합니다. iptables를 사용하여 차단해야 할 유일한 것은 memcached구성 파일이 없었고 TCP 래퍼를 사용하지 않았기 때문입니다.

본인의 계정에 임의로 생성 된 올바른 비밀번호를 사용 하고 비밀번호를 모르는 사용자를 유지하기 위해 SSH 서버 (및 기타 모든 서비스)를 신뢰합니다. fail2ban로그 파일을위한 공간이 제한된 사용자를위한 것입니다 (IMO). (신뢰할 수있는 충분한 암호가 있어야합니다.)


3

www.debian.org/doc/manuals/securing-debian-howto/에서이 유용한 방법을 살펴보십시오.

개인적으로 ssh 포트를 변경하고 fail2ban + denyhosts를 사용합니다. 그리고 필요하지 않은 모든 것을 차단합니다. 많이 차단할수록 걱정할 필요가 없습니다.


4
어. "SSH 포트 변경"까지 왔습니다. 아무 소용이 없다. 특히 시간이 충분하지 않은 joe schmoe가 포트를 스캔하여 포트 SSH가 실행중인 포트를 즉시 찾을 수없는 경우에는 그렇지 않습니다. 연결하자마자 서비스 이름과 서버 버전을 선언합니다.
매트 시몬스

3
네, 누구든지 당신을 포트 스캔하고 올바른 포트를 찾을 수 있다는 것을 알고 있습니다. 그러나 대부분의 공격은 기본 포트에 있습니다. 포트를 변경하여 통계를 얻으십시오.
Vihang D
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.