iptables "최근" 모듈 설정

iptables "최근" 모듈 설정

모듈을 사용할 때 iptables recent여기에서 모듈 설정을 볼 수 있습니다.

$ ls -1 /sys/module/xt_recent/parameters/

특정 매개변수에 대한 설정을 나열합니다.

$ cat /sys/module/xt_recent/parameters/ip_list_tot
100

또한 모듈을 로드할 때 기본값을 변경할 수 있다는 것도 알고 있습니다.

내 질문은 목록이 크기에 도달하면 어떻게 됩니까 ip_list_tot?

모듈이 recent새 IP 주소 추가를 중지합니까, 아니면 기존 IP 주소를 "교체"하여 새 IP 주소로 교체합니까?

도움말을 확인했지만 설명을 찾을 수 없습니다.

iptables -m recent --help

ip_list_tot그리고 프로덕션 환경에서 문제가 되는 IP를 차단하고 싶은데, 적당한 크기는 어느 정도인가요? 기본 ip_list_tot크기인 100은 제게는 엄청나게 작은 것 같습니다. 이것을 로 설정하면 부정적인 부작용이 발생합니까 10'000?

답변1

읽은 후 (매우 빠르게)소스 코드, 이전 항목이 삭제되었음을 알려드립니다.

if (t->entries >= ip_list_tot) {
        e = list_entry(t->lru_list.next, struct recent_entry, lru_list);
        recent_entry_remove(t, e);
}

이 값을 늘리려면 모듈을 로드할 때 매개변수를 수동으로 설정할 수 있습니다.

~$ sudo modinfo -p xt_recent
ip_list_tot:number of IPs to remember per list (uint)
ip_list_hash_size:size of hash table used to look up IPs (uint)
ip_list_perms:permissions on /proc/net/xt_recent/* files (uint)
ip_list_uid:default owner of /proc/net/xt_recent/* files (uint)
ip_list_gid:default owning group of /proc/net/xt_recent/* files (uint)
ip_pkt_list_tot:number of packets per IP address to remember (max. 255) (uint)
~$ sudo modprobe xt_recent ip_list_tot=10000
~$ sudo cat /sys/module/xt_recent/parameters/ip_list_tot
10000

recent언로드/로드하기 전에 모듈이 사용 중이 아닌지 확인하십시오(방화벽을 비활성화하거나 최소한 일치 규칙 사용을 비활성화하십시오).

이 설정을 지속적으로 유지하려면 /etc/modprobe.d/xt_recent 아래에 다음 내용이 포함된 파일을 배치하면 됩니다.

options xt_recent ip_list_tot=10000

(이 방법은 작동하지 않을 수 있으며 배포판에 따라 조정될 수 있습니다.)

이 매개변수 값을 늘릴 경우 발생할 수 있는 성능 문제에 대해서는 말하기 어렵습니다. 이는 하드웨어, 시스템에서 실행되는 기타 작업 등에 따라 다릅니다.

여전히 소스 코드와 내 개발 배경을 읽어 보면 가장 걱정할 만한 점은 대기 시간이 발생하는 것입니다. 예를 들어 현재 테스트 중인 IP가 목록의 마지막 IP인지 여부입니다.또는목록에 없음(자주 나타날 수 있음):

static struct recent_table *recent_table_lookup(struct recent_net *recent_net,
                        const char *name)
{
    struct recent_table *t;

    list_for_each_entry(t, &recent_net->tables, list)
        if (!strcmp(t->name, name))
            return t;
    return NULL;
}

x복잡성을 고려하면 list_for_each_entry() + strcmp()`ip_list_tot̀'를 큰 값으로 설정하는 데 드는 추가 "비용"은 목록을 탐색하는 시간입니다.

최종 복잡도는 1 * x과 사이에서 다를 수 있습니다 ip_list_tot * x.

그럼에도 불구하고 커널의 연결 목록은 성능과 속도가 요구 사항이므로 매우 잘 구현되어 있다고 생각합니다.

전체적으로 가능하다면 벤치마킹을 권장합니다.

관련 정보