인터넷에 연결된 서버를 재부팅해도 안전합니까?


29

구체적으로

CentOS를 실행하는 서버에 iptables 규칙 세트가 정의되어 있습니다. 네트워킹이 온라인 상태가 될 때 (머신 부팅시 또는 네트워크 서비스를 다시 시작한 후) iptables 규칙 세트가 이미 적용되어 있는지 (iptables가 시작되지 않거나 규칙 세트를 적용하지 못한 경우) 보장 할 수 있습니까? 네트워크 인터페이스가 작동하지 않습니다)?

(이것은 멍청한 질문이라는 것을 알고 있지만 가장 무질서한 DHCP NAT와 방화벽 뒤에있는 신뢰할 수있는 네트워크 이외의 서버에서 서버를 실행 한 적이 없으므로 멍청한 놈에게서 멍청한 질문을 기대하십시오.)


15
전혀 멍청한 질문이 아닙니다. 이것은 2011 년 해커들이 PlayStation 네트워크에 들어 왔을 때 24 일의 중단과 $ 15MM의 합의를 초래했습니다. 방화벽이 재부팅되면 (매월했던 것처럼) 방화벽은 몇 분 동안 크게 열렸습니다.
Chris S

@ChrisS 그것에 대해 가장 이상한 점은 누군가가 방화벽을 끄라고 제안했지만 매월 속눈썹을 치지 않았다면 네트워크를 담당하는 sysadmins가 거의 확실하게 똑똑 할 것이라고 확신합니다. 껐다가 다시 켭니다. 그러나 이들 중 어떤 조합 그것을 설명 할 지 확실하지 않습니다 .
Parthian Shot

다른 옵션은 서버가 완전히 부팅 될 때까지 (사이트에 있고 스위치 액세스 권한이있는 경우) 네트워크 스위치에서 포트를 비활성화하는 것입니다. 이것은 이상적이지는 않지만 서버에 NFS와 같은 네트워크 종속성이없는 한 제대로 작동합니다.
jftuga

@jftuga 글쎄요. 그러나 서버는 인터넷에 연결되어 있지 않으므로 솔루션이 기술적 으로이 질문에 해당하지 않습니다. 현장에 있다면 재부팅하는 동안 이더넷 케이블을 뽑을 수 있습니다. 어쨌든 근본적인 문제는 포트 차단 솔루션과 관련이 있습니다. 네트워크를 통해 공격하는 다른 컴퓨터는 로컬 방화벽에 의해 중지되지 않습니다. 라우터가 해킹 당하거나 오작동을 일으키거나 로컬 네트의 다른 사람이 손상된 경우 게임이 종료됩니다.
Parthian Shot

@jftuga 사실, 그 문제는 그것보다 훨씬 나쁩니다. 누군가 로컬 컴퓨터에서 실행할 소프트웨어를 이미 가지고 있다고 가정하지만 방화벽이 필터링을 송신한다고 가정합니다. 규칙은 나가는 패킷이 설정되거나 관련되어있는 경우에만 허용되며 들어오는 새 연결은 포트 80에만 허용된다고 말합니다. 일반적으로 권한이없는 계정에서 리버스 쉘을 막을 수 있습니다. 그러나 부팅시 연결이 시작되면 방화벽 초기화를 통해 유지됩니다. 방화벽 규칙이 변경되어야한다는 것을 의미한다고 생각하지만 쉬운 실수는 아닙니다.
Parthian Shot

답변:


18

기본적으로 시작 스크립트 순서에 따라 인터페이스가 표시되기 전에 iptables가 시작됩니다. 각 시작 스크립트에서 "chkconfig"행을 보면 활성 상태 일 때 실행 상태, 시작 순서 및 중지 순서가 표시됩니다.

iptables 규칙 세트가 제대로 적용되지 않았거나 전혀 적용되지 않은 경우 인터페이스가 표시되지 않을 것입니다.

예 :
chkconfig: 2345 08 92
이 줄은 해당 서비스가 런레벨 2, 3, 4 및 5에서 활성화되고 8에서 시작하여 92에서 중지됨을 나타냅니다. "start"값이 큰 항목은이 스크립트가 완료된 후에 만 ​​시작됩니다. 그러나이 스크립트 오류는 완료된 것으로 간주되며 다운 스트림 스크립트 실행을 방해하지 않습니다.

이 답변은 CentOS 6 및 이전 버전에 적용되며 반드시 CentOS 7에는 해당되지 않습니다. 7에 대해이 질문에 대한 답변을 충분히 개인적으로 조사하지 않았습니다.


1
+1 그리고 ... 입안에 선물용 말을 보지 않는 것이 도움이되기 때문에 도움이 되겠지만 ... 서비스에 의존성 질서를 부여하는 표준 방법을 알고 싶을 때 체인 초기에 후속 항목이 시작되지 않습니까? 그리고 만약 누군가가 네트워크 인터페이스가 "선박과 함께 내려갈 것"이라는 방화벽을 망칠 수 있다면? 이상적으로, 나는 누군가가 방화벽을 DoS하는 데 0 일이 걸린 상황에서도 모든 것이 안전하게 실패하기를 원합니다.
Parthian Shot

5
SysV 시작 스크립트 (예 : CentOS 6 및 이전 버전)에는 좋은 방법이 없습니다. CentOS 7은 원하는대로 종속성을 수행합니다. B가 A에 의존하고 A가 실패하면 B가 시작되지 않습니다. 7, 의존성을 사용하기 위해 systemctl list-dependencies --all(방금 30 초 전에 맨 페이지를 보았습니다).
John

그 뉴스는 약간 실망 스럽지만 (현재 6 세입니다) 적어도 init 스크립트를 수정하는 것은 상당히 끔찍한 일이라는 것을 알고 있습니다.
Parthian Shot

5
init 스크립트 수정에 매우주의하십시오. 그렇게하면 침입 탐지 소프트웨어에 잘못된 경보가 발생할 수 있으며 initscripts패키지가 업데이트 된 경우 (예 : 에라타 릴리스) 수정 사항을 덮어 씁니다 . 나는 그렇게하지 않는 것이 좋습니다.
John

아직 IDS를 설정하지 않았으므로 현재 잘못된 경보는 문제가되지 않습니다 (서버가 아직 가동 중이 아니며 배포 할 준비가 거의 없습니다.이 질문은 내 준비의 일부입니다. 그러나 나는 HIDS를 넣을 것입니다). 가능한 한 조심해야하며 init 설정의 핵심 부분을 수동으로 수정하지 않는 방법이 있다면 분명히하고 있습니다.
Parthian Shot

1

CentOS에서 ifup-post 옵션을 사용할 수도 있습니다.

/ etc / sysconfig / network-scripts / ifup-post

SLIP 장치를 제외한 네트워크 장치가 나타나면 호출됩니다. / etc / sysconfig / network-scripts / ifup-routes를 호출하여 해당 장치에 의존하는 고정 경로를 불러옵니다. / etc / sysconfig / network-scripts / ifup-aliases를 호출하여 해당 장치의 별칭을 불러옵니다. 호스트 이름이 설정되어 있지 않고 해당 장치의 IP에 대한 호스트 이름을 찾을 수있는 경우 호스트 이름을 설정합니다. 네트워크 이벤트 알림을 요청한 모든 프로그램에 SIGIO를 보냅니다.

필요에 따라 네임 서비스 구성을 수정하고 임의의 스크립트를 호출하는 등의 확장이 가능합니다.

이 스크립트는 위 (ifup-route 및 ifup-aliases) 이후에 실행되며 ifup-local을 찾습니다.

if [ -x /sbin/ifup-local ]; then
   /sbin/ifup-local ${DEVICE}
fi

따라서이 파일을 작성하고 iptables-restore를 사용하여 iptables를 다시 호출하는지 확인할 수 있습니다.

iptables-restore < /etc/sysconfig/iptables

1

약간의 부록 : 다음에 서버를 부팅 할 때 필요한 규칙이 있는지 확인하려면 다음을 저장하십시오.

sudo sh -c "iptables-save > /etc/iptables.rules"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.