Hosts.deny - 리눅스 명령 - 유닉스 명령

이름

hosts_access - 호스트 액세스 제어 파일의 형식

기술

이 매뉴얼 페이지에서는 클라이언트 (호스트 이름 / 주소, 사용자 이름) 및 서버 (프로세스 이름, 호스트 이름 / 주소) 패턴을 기반으로하는 간단한 액세스 제어 언어에 대해 설명합니다. 예제는 끝에 있습니다. 참을성이없는 독자는 빠른 소개를 위해 예제 섹션으로 건너 뛰는 것이 좋습니다.

액세스 제어 언어의 확장 버전은 hosts_options (5) 문서에 설명되어 있습니다. 확장 프로그램은 -DPROCESS_OPTIONS를 사용하여 빌드함으로써 프로그램 빌드시 켜집니다.

다음 텍스트에서 daemon네트워크 데몬 프로세스의 프로세스 이름이고 client 는 서비스를 요청하는 호스트의 이름 및 / 또는 주소입니다. 네트워크 데몬 프로세스 이름은 inetd 구성 파일에 지정됩니다.

액세스 제어 파일

액세스 제어 소프트웨어는 두 개의 파일을 참조합니다 . 검색은 첫 번째 일치에서 중지됩니다.

*

/etc/hosts.allow 파일의 항목과 일치하는 (데몬, 클라이언트) 쌍이있을 때 액세스 권한이 부여됩니다.

*

그렇지 않으면, ( 데몬 , 클라이언트) 쌍이 /etc/hosts.deny 파일의 항목과 일치 할 때 액세스가 거부됩니다.

*

그렇지 않으면 액세스 권한이 부여됩니다.

존재하지 않는 액세스 제어 파일은 빈 파일 인 것처럼 처리됩니다 . 따라서 액세스 제어 파일 을 제공하지 않아 액세스 제어를 끌 수 있습니다.

접근 통제 규칙

각 액세스 제어 파일은 0 행 이상의 텍스트로 구성됩니다. 이 선은 출현 순서대로 처리됩니다. 일치가 발견되면 검색이 종료됩니다.

*

개행 문자 앞에 백 슬래시 문자가 있으면 개행 문자가 무시됩니다. 이렇게하면 긴 선을 분리하여 편집하기 쉽습니다.

*

공백 라인이나`# '문자로 시작하는 라인은 무시됩니다. 이렇게하면 테이블을 읽기 쉽게 주석과 공백을 삽입 할 수 있습니다.

*

다른 모든 줄은 다음 형식을 만족해야하며 [] 사이의 항목은 선택 사항입니다.


daemon_list : client_list [: shell_command]

daemon_list 는 하나 이상의 데몬 프로세스 이름 (argv [0] 값) 또는 와일드 카드 (아래 참조)의 목록입니다.

client_list 는 클라이언트 호스트 이름 또는 주소와 비교 될 하나 이상의 호스트 이름, 호스트 주소, 패턴 또는 와일드 카드 (아래 참조)의 목록입니다.

보다 복잡한 양식 daemon @ hostuser @ host 는 각각 서버 엔드 포인트 패턴 및 클라이언트 사용자 이름 조회에 대한 절에서 설명됩니다.

목록 요소는 공백 및 / 또는 쉼표로 구분해야합니다.

NIS (YP) 넷 그룹 조회를 제외하고 모든 액세스 제어 검사는 대소 문자를 구분하지 않습니다.

패턴

액세스 제어 언어는 다음과 같은 패턴을 구현합니다.

*

`. '로 시작하는 문자열. 캐릭터. 이름의 마지막 구성 요소가 지정된 패턴과 일치하면 호스트 이름이 일치합니다. 예를 들어, 패턴`.tue.nl '은 호스트 이름`wzv.win.tue.nl'과 일치합니다.

*

`. '로 끝나는 문자열. 캐릭터. 호스트 주소는 첫 번째 숫자 필드가 주어진 문자열과 일치하면 일치합니다. 예를 들어, 패턴`131.155. ' 아인트호벤 대학 네트워크 (거의 모든) 호스트의 주소와 일치합니다 (131.155.xx).

*

`@ '문자로 시작하는 문자열은 NIS (이전 YP) 네트 그룹 이름으로 처리됩니다. 지정된 넷 그룹의 호스트 구성원 인 경우 호스트 이름이 일치합니다. 데몬 프로세스 이름이나 클라이언트 사용자 이름에는 Netgroup 일치가 지원되지 않습니다.

*

`nnnn / mmmm '형식의 표현식은`net / mask'쌍으로 해석됩니다. IPv4 호스트 주소는`net '이 주소와`mask'의 비트 AND와 동일한 경우 일치합니다. 예를 들어, net / mask 패턴`131.155.72.0/255.255.254.0 '은`131.155.72.0'에서`131.155.73.255 '까지의 모든 주소와 일치합니다.

*

`[n : n : n : n : n : n : n : n] / m '형식의 표현은`[net] / prefixlen'쌍으로 해석됩니다. IPv6 호스트 주소는`net '의`prefixlen'비트가 주소의`prefixlen '비트와 같으면 일치합니다. 예를 들어, [3ffe : 505 : 2 : 1 ::] / 64의 [net] / prefixlen 패턴은`3ffe : 505 : 2 : 1 :: '에서'3ffe : 505 : 2 : 1 : ffff : ffff : ffff : ffff '.

*

`/ '문자로 시작하는 문자열은 파일 이름으로 취급됩니다. 호스트 이름 또는 주소가 지정된 파일에 나열된 호스트 이름 또는 주소 패턴과 일치하면 일치합니다. 파일 형식은 공백으로 구분 된 0 개 이상의 호스트 이름 또는 주소 패턴이없는 0 개 이상의 행입니다. 파일 이름 패턴은 호스트 이름 또는 주소 패턴을 사용할 수있는 모든 위치에서 사용할 수 있습니다.

*

와일드 카드`* '와`?' 호스트 이름이나 IP 주소를 일치시키는 데 사용할 수 있습니다. 이 매칭 방법은`net / mask '매칭,`.'으로 시작하는 호스트 매칭과 함께 사용될 수 없다. 또는`. '로 끝나는 IP 주소 매칭.

와일드 카드

액세스 제어 언어는 명시 적 와일드 카드를 지원합니다.

모든

범용 와일드 카드는 항상 일치합니다.

노동 조합 지부

이름에 점 문자가 포함되지 않은 모든 호스트와 일치합니다.

알 수 없는

이름이 알려지지 않은 모든 사용자와 일치하며 이름 이나 주소를 알 수없는 호스트와 일치합니다. 이 패턴은주의해서 사용해야합니다. 임시 이름 서버 문제로 인해 호스트 이름을 사용할 수 없습니다. 소프트웨어가 어떤 유형의 네트워크와 통신하는지 알 수 없을 때 네트워크 주소를 사용할 수 없습니다.

알려진

이름이 알려진 모든 사용자와 일치하며 이름 주소가 알려져있는 호스트와 일치합니다. 이 패턴은주의해서 사용해야합니다. 임시 이름 서버 문제로 인해 호스트 이름을 사용할 수 없습니다. 소프트웨어가 어떤 유형의 네트워크와 통신하는지 알 수 없을 때 네트워크 주소를 사용할 수 없습니다.

파나도

이름이 주소와 일치하지 않는 모든 호스트와 일치합니다. tcpd가 -DPARANOID (기본 모드)로 빌드 될 때, 액세스 제어 테이블을보기 전에도 그러한 클라이언트의 요청을 삭제합니다. 그러한 요청을보다 잘 제어하려면 -DPARANOID없이 빌드하십시오.

운영자

의도 된 사용은 다음과 같은 형태이다 :`list_1 EXCEPT list_2 '; 이 구문은 list_2 와 일치하지 않는 한 list_1 과 일치하는 모든 것을 찾습니다 . EXCEPT 연산자는 daemon_lists 및 client_lists에서 사용할 수 있습니다. EXCEPT 연산자는 중첩 될 수 있습니다 : 제어 언어가 괄호 사용을 허용하면 'EXCEPT b EXCEPT c'는`(EXCEPT (b EXCEPT c)) '로 구문 분석됩니다.

쉘 명령

첫 번째로 일치하는 액세스 제어 규칙에 쉘 명령이 들어 있으면 해당 명령 에 % 대체가 적용됩니다 (다음 절 참조). 결과는 표준 입력, 출력 및 오류가 / dev / null에 연결된 / bin / sh 하위 프로세스에 의해 실행됩니다. 명령이 끝날 때까지 기다리지 않으려면 명령 끝에 '&'를 지정하십시오.

쉘 명령은 inetd의 PATH 설정에 의존하면 안됩니다. 대신 절대 경로 이름을 사용하거나 명시 적 PATH = whatever 문으로 시작해야합니다.

hosts_options (5) 문서는 쉘 명령 필드를 다른 호환되지 않는 방식으로 사용하는 대체 언어를 설명합니다.

% 확장

쉘 명령에서 다음과 같은 확장을 사용할 수 있습니다.

% a (% A)

클라이언트 (서버) 호스트 주소.

%기음

클라이언트 정보 : 사용 가능한 정보의 양에 따라 user @ host, user @ address, 호스트 이름 또는 주소.

%디

디먼 프로세스 이름 (argv [0] 값).

% h (% H)

호스트 이름을 사용할 수없는 경우 클라이언트 (서버) 호스트 이름 또는 주소.

% n (% N)

클라이언트 (서버) 호스트 이름 (또는 "알 수 없음"또는 "편집증").

%피

디먼 프로세스 ID.

%에스

서버 정보 : 사용 가능한 정보의 양에 따라 daemon @ host, daemon @ address 또는 단지 데몬 이름.

%유

클라이언트 사용자 이름 (또는 "알 수 없음").

%%

단일 '%'문자로 확장됩니다.

셸을 혼동시킬 수있는 % 확장의 문자는 밑줄로 대체됩니다.

서버 종점 패턴

클라이언트가 연결된 네트워크 주소로 클라이언트를 구별하려면 다음 형식의 패턴을 사용하십시오.


process_name @ host_pattern : client_list ...

기계가 다른 인터넷 호스트 이름을 가진 다른 인터넷 주소를 가지고있을 때 이들과 같은 패턴을 사용할 수 있습니다. 서비스 제공 업체는이 기능을 사용하여 다른 조직에 속할 수도있는 인터넷 이름이있는 FTP, GOPHER 또는 WWW 보관소를 제공 할 수 있습니다. hosts_options (5) 문서의`twist '옵션을 참고하십시오. 일부 시스템 (Solaris, FreeBSD)은 하나의 물리적 인터페이스에 둘 이상의 인터넷 주소를 가질 수 있습니다. 다른 시스템에서는 전용 네트워크 주소 공간에있는 SLIP 또는 PPP 의사 인터페이스에 의존해야 할 수도 있습니다.

host_pattern은 client_list 컨텍스트의 호스트 이름 및 주소와 동일한 구문 규칙을 따릅니다. 일반적으로 서버 종점 정보는 연결 지향 서비스에서만 사용할 수 있습니다.

클라이언트 사용자 이름 찾아보기

클라이언트 호스트가 RFC 931 프로토콜 또는 그 자손 중 하나 (TAP, IDENT, RFC 1413)를 지원하면 래퍼 프로그램은 연결 소유자에 대한 추가 정보를 검색 할 수 있습니다. 클라이언트 사용자 이름 정보 (사용 가능한 경우)는 클라이언트 호스트 이름과 함께 기록되며 다음과 같은 패턴을 일치시키는 데 사용할 수 있습니다.


daemon_list : ... user_pattern @ host_pattern ...

데몬 래퍼는 컴파일 타임에 규칙 기반 사용자 이름 조회 (기본값)를 수행하도록 구성하거나 클라이언트 호스트에 항상 질의 할 수 있습니다. 규칙 기반 사용자 이름 조회의 경우 위의 규칙은 daemon_listhost_pattern이 모두 일치 할 때만 사용자 이름 조회를 발생 시킵니다 .

사용자 패턴은 데몬 프로세스 패턴과 동일한 구문을 가지므로 동일한 와일드 카드가 적용됩니다 (netgroup 구성원은 지원되지 않음). 하지만 사용자 이름 조회를 사용해서는 안됩니다.

*

클라이언트 사용자 이름 정보는 대부분 필요할 때 (예 : 클라이언트 시스템이 손상된 경우) 신뢰할 수 없습니다. 일반적으로 ALL과 (UN) KNOWN이 의미있는 유일한 사용자 이름 패턴입니다.

*

사용자 이름 검색은 TCP 기반 서비스에서만 가능하며 클라이언트 호스트가 적절한 데몬을 실행하는 경우에만 가능합니다. 다른 모든 경우에 결과는 "알 수 없음"입니다.

*

잘 알려진 UNIX 커널 버그로 인해 사용자 이름 조회가 방화벽에 의해 차단 될 때 서비스가 손실 될 수 있습니다. 래퍼 README 문서는 커널에이 버그가 있는지 알아 보는 절차를 설명합니다.

*

사용자 이름 조회는 UNIX가 아닌 사용자가 눈에 띄게 지연 될 수 있습니다. 사용자 이름 조회의 기본 제한 시간은 10 초입니다. 느린 네트워크는 처리하기에는 너무 짧지 만 PC 사용자를 괴롭히는 데는 충분하지 않습니다.

선택적 사용자 이름 조회는 마지막 문제를 완화 할 수 있습니다. 예를 들어 다음과 같은 규칙이 있습니다.


daemon_list : @pcnetgroup ALL @ ALL

사용자 이름 조회를 수행하지 않고 pc netgroup의 구성원과 일치하지만 다른 모든 시스템에서 사용자 이름 조회를 수행합니다.

검색 공격에 대한 공격

많은 TCP / IP 구현의 시퀀스 번호 생성기의 결함으로 인해 침입자는 신뢰할 수있는 호스트를 쉽게 흉내낼 수 있으며 예를 들어 원격 셸 서비스를 통해 침입 할 수 있습니다. IDENT (RFC931 등) 서비스는 그러한 호스트 주소 및 다른 호스트 주소 스푸핑 공격을 탐지하는 데 사용될 수 있습니다.

래퍼는 클라이언트 요청을 수락하기 전에 IDENT 서비스를 사용하여 클라이언트가 요청을 전혀 보내지 않았 음을 알 수 있습니다. 클라이언트 호스트가 IDENT 서비스를 제공하면 부정적인 IDENT 조회 결과 (클라이언트가`UNKNOWN @ host '와 일치 함)는 호스트 스푸핑 공격의 강력한 증거입니다.

긍정적 인 IDENT 조회 결과 (클라이언트가`KNOWN @ host '와 일치 함)는 신뢰할 만합니다. 침입자가 클라이언트 연결과 IDENT 조회를 스푸핑 할 수는 있지만 클라이언트 연결 만 스푸핑하는 것보다 훨씬 어렵습니다. 클라이언트의 IDENT 서버가 거짓말을하고있을 수도 있습니다.

참고 : IDENT 조회는 UDP 서비스에서 작동하지 않습니다.

사용 예

이 언어는 유연성이 뛰어나므로 다양한 유형의 액세스 제어 정책을 최소한의 소란으로 표현할 수 있습니다. 언어가 두 개의 액세스 제어 표를 사용하지만 가장 공통된 정책은 테이블 중 하나를 사소하거나 공백으로 구현할 수 있습니다.

아래 예제를 읽을 때 테이블을 거부하기 전에 허용 테이블을 스캔하고, 일치하는 항목이 발견되면 검색을 종료하며, 일치하는 항목이 전혀 발견되지 않으면 액세스가 허용된다는 것을 인식하는 것이 중요합니다.

예에서는 호스트 및 도메인 이름을 사용합니다. 임시 네임 서버 검색 실패의 영향을 줄이기 위해 주소 및 / 또는 네트워크 / 넷 마스크 정보를 포함시켜 개선 할 수 있습니다.

대부분 폐쇄 됨

이 경우 기본적으로 액세스가 거부됩니다. 명시 적으로 권한이 부여 된 호스트 만 액세스가 허용됩니다.

기본 정책 (액세스 없음)은 사소한 거부 파일로 구현됩니다.

/etc/hosts.deny : ALL : ALL

이것은 허용 파일의 항목에 의한 액세스가 허용되지 않는 한 모든 호스트에 대한 모든 서비스를 거부합니다.

명시 적으로 권한이 부여 된 호스트는 허용 파일에 나열됩니다. 예 :

/etc/hosts.allow : ALL : LOCAL @some_netgroup
ALL : .foobar.edu 제외 terminalerver.foobar.edu

첫 번째 규칙은 로컬 도메인에있는 호스트 (호스트 이름에 '.'가 없음)와 some_netgroup 넷 그룹의 구성원으로부터 액세스를 허용합니다. 두 번째 규칙은 terminalserver.foobar.edu를 제외하고 foobar.edu 도메인의 모든 호스트에서 액세스를 허용합니다 (선행 점을 확인하십시오).

대부분 열림

여기서는 기본적으로 액세스 권한이 부여됩니다. 명시 적으로 지정된 호스트 만 서비스가 거부됩니다.

기본 정책 (액세스 허용)은 allow 파일을 중복되도록 만들어 생략 할 수 있습니다. 명시 적으로 권한이 부여되지 않은 호스트는 거부 파일에 나열됩니다. 예 :

/etc/hosts.deny : ALL : some.host.name, .some.domain
모두 제외하고 in.fingerd : other.host.name, .other.domain

첫 번째 규칙은 일부 호스트와 도메인에서 모든 서비스를 거부합니다. 두 번째 규칙은 여전히 ​​다른 호스트 및 도메인의 핑거 요청을 허용합니다.

부츠 트랩

다음 예는 로컬 도메인의 호스트에서 tftp 요청을 허용합니다 (선행 점을주의하십시오). 다른 호스트의 요청이 거부되었습니다. 요청한 파일 대신 핑거 프로브가 문제가되는 호스트로 전송됩니다. 결과가 수퍼 유저에게 메일로 전송됩니다.

/etc/hosts.allow :

in.tftpd : LOCAL, .my.domain /etc/hosts.deny : in.tftpd : ALL : spawn (/ some / where / safe_finger -l @ % h | \ / usr / ucb / mail -s % d- % h 루트) &

safe_finger 명령은 tcpd 랩퍼와 함께 제공되며 적절한 위치에 설치해야합니다. 원격 핑거 서버가 전송 한 데이터로 인한 피해를 제한합니다. 표준 핑거 명령보다 더 나은 보호 기능을 제공합니다.

% h (클라이언트 호스트) 및 % d (서비스 이름) 시퀀스의 확장은 쉘 명령에 대한 절에서 설명됩니다.

경고 : 무한 핑거 루프를 준비하지 않는 한, 핑거 데몬을 부비로 다루지 마십시오.

네트워크 방화벽 시스템에서이 트릭을 더 많이 수행 할 수 있습니다. 일반적인 네트워크 방화벽은 외부 세계에 한정된 일련의 서비스만을 제공합니다. 다른 모든 서비스는 위의 tftp 예제와 마찬가지로 "도청"될 수 있습니다. 결과는 우수한 조기 경보 시스템입니다.

중요 : man 명령 ( % man )을 사용하여 특정 컴퓨터에서 명령이 어떻게 사용되는지보십시오.

관련 기사