Sun Java System Messaging Server 6.3 관리 설명서

19.4 과도한 IP 주소 연결을 Metermaid를 사용하여 제한—예

이 예에서는 MeterMaid를 사용하여 분당 10개 연결로 IP 주소를 억제합니다. 참고로, 매핑 파일에서 이와 동일한 conn_throttle.so 설정은 다음과 같습니다.


PORT_ACCESS
   *|*|*|*|*  $C$|INTERNAL_IP;$3|$Y$E
   *|*|*|*|*  $C$[/opt/SUNWmsgsr/lib/conn_throttle.so,throttle,$3,10]\
$N421$ Connection$ declined$ at$ this$ time$E
   *          $YEXTERNAL

PORT_ACCESS 매핑 테이블은 외부 연결의 경우 분당 10개 이하의 속도로 제한하도록 conn_throttle.so를 구현합니다.

두 기술의 근본적인 차이점 중 하나는 MeterMaid가 억제를 위해 속도 제한과 같은 세부 정보를 직접 매핑 테이블에 구성하지 않고 configutil 매개 변수를 이 설정에 사용한다는 것입니다. 이 예에 대해서는 아래에서 설명합니다.

  1. 시스템 중 하나를 MeterMaid 서버 호스트로 지정합니다.

    이 시스템에서 다음 configutil 매개 변수를 설정합니다.


    local.metermaid.enable -v TRUE 

    클라이언트와 MeterMaid 서버 간의 통신을 확인하는 데 사용되는 인증 비밀번호를 설정합니다.


    configutil -o metermaid.config.secret -v password
    
  2. 억제 테이블을 정의합니다.

    MeterMaid의 억제 동작은 작동 특성을 정의하는 명명된 억제 테이블에 의해 결정됩니다. 분당 10개 연결의 속도로 억제하는 테이블을 정의하려면 다음 매개 변수를 설정합니다.


    configutil -o metermaid.table.ext_throttle.data_type -v ipv4
    configutil -o metermaid.table.ext_throttle.quota -v 10

    ext_throttle은 억제 테이블의 이름입니다. ipv4는 데이터 유형 Internet Protocol 버전 4 주소 표현입니다. 10은 할당량(연결 한도)입니다.

  3. MeterMaid 시스템에서 MeterMaid를 시작합니다.


    # start-msg metermaid
  4. MTA가 MeterMaid를 사용하여 억제를 수행하는 시스템에서 MeterMaid 호스트와 비밀번호를 지정합니다.

    이는 필수 항목입니다.


    configutil -o metermaid.config.secret -v MeterMaid_Password
    configutil -o metermaid.config.serverhost -v name_or_ipaddress_of_MetermaidHost
    
  5. MeterMaid PORT_ACCESS 테이블을 설정합니다.

    이 테이블은 동등한 conn_throttle.so 설정과 비슷합니다.


    PORT_ACCESS
    
       *|*|*|*|*  $C$|INTERNAL_IP;$3|$Y$E
       *|*|*|*|*  $C$:A$[/opt/SUNWmsgsr/lib/check_metermaid.so,throttle,\
    ext_throttle,$3] $N421$ Connection$ declined$ at$ this$ time$E
       *          $YEXTERNAL

    첫 번째 행은 연결을 시도하는 IP 주소가 내부 주소인지 확인합니다. 내부 주소인 경우 연결을 허용합니다. 두 번째 행은 MeterMaid를 통해 IP 주소를 실행하며, 너무 자주 연결한 경우 연결을 거부합니다. 세 번째 행은 그 밖의 다른 연결을 허용하지만 EXTERNAL이라는 플래그를 지정합니다.

    check_metermaid.so에 대한 이 호출은 conn_throttle.so에 대한 콜아웃과 유사합니다. check_metermaid.so의 함수가 동일합니다. throttle과 해당 인수는 단지 metermaid.tabletablename을 사용하여 구성한 테이블 이름과 검사할 IP 주소($3)입니다. conn_throttle.so처럼 이 함수도 metermaid.table.ext_throttle.quota에서 지정한 한도에 도달하면 success를 반환합니다. 따라서 매핑 항목 행의 나머지가 처리될 수 있으며, 원격 SMTP 클라이언트에게 메시지(421 SMTP 코드, 임시 부정 완료, 이 시점에 허용되지 않는 연결)가 보내지고 디스패처는 연결 종료를 지시받습니다.

    $:A 때문에 이 행은 디스패처로부터 호출되는 경우에만 처리됩니다. 이 설정이 없으면 check_metermaid.so에 대한 호출은 PORT_ACCESS 매핑 테이블 검사도 수행하는 tcp_smtp_server프로세스의 컨텍스트에서도 발생합니다. 따라서 MeterMaid는 받는 연결 각각을 두 번씩 계산합니다.

이는 conn_throttle.so를 대체하도록 MeterMaid를 설정하는 기본 구성입니다. 이 항목에 대한 자세한 내용은 10.3.2 매핑 작업 18.3.4 PORT_ACCESS 매핑 테이블을 참조하십시오.

19.4.1 기타 유용한 MeterMaid 옵션

경우에 따라서는 두 가지 추가 구성 옵션이 유용할 수 있습니다. conn_throttle.so 공유 라이브러리에는 throttle_p 함수도 있습니다. 이 함수는 기본 60초를 넘은 기간 동안 결과를 적용하여 한도를 초과한 연결을 축소합니다. MeterMaid에서도 MeterMaid 서버 시스템에 다음 옵션을 구성하여 이와 동일한 동작을 사용할 수 있습니다.


configutil -o metermaid.table.ext_throttle.options -v penalize

그러면 metermaid.table.ext_throttle.quota에 설정된 값을 초과하는 연결 시도에 대해 연결을 축소할 수 있도록 ext_throttle 테이블의 동작이 변경됩니다.

또 다른 옵션은 많은 수의 연결을 수신하는 시스템과 관련 있습니다. MeterMaid는 분산 MTA 환경 전반에 걸쳐 연결 추적이 가능하므로, MeterMaid의 내부 메모리 내장 데이터베이스에 보존되는 연결 수 제한이 MTA 환경의 전체 볼륨에 충분하지 않을 수 있습니다. 기본값은 테이블당 1000개 항목이지만, MTA 환경 전체에 걸쳐 분당 연결 1000개를 초과할 것으로 예상된다면 다음 구성 옵션을 통해 이 값을 늘릴 수 있습니다.


configutil -o metermaid.table.ext_throttle.max_entries -v max_entries

60초 동안 max_entries에 도달하더라도 MeterMaid는 가장 오래되고 덜 쓰인 항목을 자동 삭제합니다. 따라서 더 자주 연결되는 시스템은 MeterMaid 테이블에 남아 계산에 포함되므로 효과적인 억제를 수행하기에 충분한 정보가 유지됩니다.