100,000개 이상의 개별 IP 주소를 차단하는 방법
소개
의 떻게많수차까니를 차단합니까?IP address웹 응용 프로그램/서버에서 다운로드할 수 있습니다.은 분히그은쉽할수있다니습게것명에서 쉽게 할 수 있습니다.PHP 언어 또는다프래밍언어그로른언▁any▁program어▁or.
$ipList = []; // array list or from database
if (in_array(getIP(), $ipList)) {
// Log IP & Access information
header("https://www.google.com.ng/search?q=fool"); // redirect
exit(); // exit
}
는사용을 사용합니다.htaccess
order allow,deny
deny from 123.45.6.7
deny from 012.34.5.
# .... the list continues
allow from all
이슈들
- 전체를 차단하려고 합니다.
100k plus individual IPs것은 아니다.subnets - 이러한 IP를 차단하기 전에 사용자가 PHP에 접근하는 것을 피하려고 합니다.
- 100000 이상은 1.5 이상입니다.은 MB에 해야 할 정보가 많으면 .
htaccess - IP 데이터베이스는 여전히 증가하고 있으며... 더 많은 값을 동적으로 추가해야 합니다.
- 에서
iptables100000 이상은 말도 안 되는 소리입니다(잘못되었을 수 있음).
바보 같은 생각
order allow,deny
deny from database <-------- Not sure if this is possible
allow from all
질문.
- 에 합니까?
htaccessany 이데이스베터 (Redis, Crunchbase, Mongo, MySQL 또는 Sqlite)에서 목록을 가져오려면... - 운영 환경에서 이러한 문제를 관리할 수 있는 가시적인 솔루션이 있습니까?
- 좋은 은 가장좋해은책결은▁is라는 것을 있습니다.
Block the IPs at the firewall level으로 추가할 수 있는 ?
마침내.
제 접근 방식이 완전히 틀릴 수도 있습니다. 스팸 발송자와 봇넷이 증가하고 있기 때문에 제가 원하는 것은 가시적인 해결책입니다.
제발 이것은 아무 상관이 없습니다.DOS공격은 단순한...
갱신하다
- 방화벽: Cisco PIX 515UR
차단할 IP 주소 목록을 텍스트 파일에 보관하거나 dbm 해시 파일로 변환한 다음 mod_rewrite의RewriteMap서버/vhost 구성에서 이를 설정해야 합니다.htaccess 파일에서 맵을 초기화할 수 없습니다.
RewriteEngine On
RewriteMap deny_ips txt:/path/to/deny_ips.txt
RewriteCond ${deny_ips:%{REMOTE_ADDR}|0} !=0
RewriteRule ^ - [L,F]
/path/to/deny_ips.txt 파일은 다음과 같습니다.
12.34.56.78 1
11.22.33.44 1
etc.
기본적으로 거부할 IP와 공백은 "1"입니다.이 텍스트 파일의 IP를 사용하면 서버가 403 금지 메시지를 반환합니다.속도를 높이려면 다음을 사용할 수 있습니다.httxt2dbm을 sodbm 해를생다매정음의다로 합니다.
RewriteMap deny_ips dbm:/path/to/deny_ips.dbm
많은 IP와 함께 mod_rewrite를 이렇게 사용하는 것이 어떤 성능에 영향을 주는지는 잘 모르겠지만 Linux 아래에서 3Ghz i686에서 실행되는 apache 2.2에 대한 빠른 벤치마크 테스트는 목록에 있는 5개의 IP와 102418 사이의 차이는 무시할 수 있습니다.ab의 결과에 따르면, 그것들은 거의 같습니다.
구체적인 질문 해결:
데이터베이스(Redis, Crunchbase, Mongo, MySQL 또는 Sqlite)에서 목록을 가져오는 ht 액세스가 가능합니까?
다시 쓰기 맵을 사용하여 "prg" 맵 유형을 사용하여 매핑 유형에 대한 외부 프로그램을 실행할 수 있습니다.그런 다음 펄, php 등의 스크립트를 작성하여 데이터베이스와 대화하여 IP 주소를 조회할 수 있습니다.또한 "주의" 아래에 나열된 주의 사항에 유의하십시오.그런 다음 다른 지도처럼 이 지도를 사용합니다.RewriteCond ${deny_ips:%{REMOTE_ADDR}|0} !=0이렇게 하면 기본적으로 모든 요청에 대한 병목 현상이 발생합니다.데이터베이스와 대화하는 데 가장 적합한 솔루션이 아닙니다.
그러나 apache 2.4에는 mod_dbd를 통해 쿼리를 만들 수 있는 dbd/fastdbd 맵 유형이 있습니다.이것이 훨씬 더 나은 옵션이며 mod_dbd 모듈은 데이터베이스 연결, 풀 연결 등을 관리합니다.따라서 지도 정의는 다음과 같습니다.
RewriteMap deny_ips "fastdbd:SELECT active FROM deny_ips WHERE source = %s"
두 개의 열 "source"(IP 주소)와 "active"(활성인 경우 1, 비활성인 경우 0)가 있는 테이블 "deny_ips"가 있다고 가정합니다.
운영 환경에서 이러한 문제를 관리할 수 있는 가시적인 솔루션이 있습니까?
차단된 모든 IP를 데이터베이스에 저장하는 경우 데이터베이스 테이블의 내용을 관리해야 합니다.dbm 맵 유형을 사용하는 경우 perl에 dbm 파일 관리를 위한 DBI가 있는 것으로 알고 있으므로 거부 목록에서 IP 항목을 추가/제거할 수 있습니다.한 번도 사용해 본 적이 없어서 딱히 뭐라고는 할 수 없습니다.무계층 텍스트 파일을 관리하는 것은 훨씬 더 까다로울 것입니다. 특히 항목을 제거하고 추가하려는 경우에는 더욱 그렇습니다.데이터베이스와 apache 2.4의 mod_dbd를 사용하는 것 외에는 이러한 솔루션 중 어떤 것도 즉시 사용할 수 있거나 운영 준비가 되어 있지 않다고 생각합니다.맞춤형 작업이 필요할 것입니다.
방화벽 수준에서 IP를 차단하는 것이 가장 좋은 해결책임을 알고 있습니다. 방화벽에 IP를 실용적으로 추가/제거할 수 있는 방법이 있습니까?
IP 테이블의 경우 베타로 표시된 펄 인터페이스가 있지만, 저는 사용해 본 적이 없습니다.libliptc가 있지만 netfilter의 FAQ에 따르면:
규칙 추가/제거를 위한 C/C++ API가 있습니까?
불행하게도 답은 "아니오"입니다.
이제 여러분은 '하지만 libiptc는 어떤가요?'라고 생각할 수 있습니다.메일링 목록에서 여러 번 지적했듯이 libiptc는 공개 인터페이스로 사용되지 않았습니다.우리는 안정적인 인터페이스를 보장하지 않으며, 리눅스 패킷 필터링의 다음 단계에서 제거할 계획입니다.libiptc는 어찌됐든 합리적으로 사용하기에는 너무 낮은 레이어입니다.
우리는 그러한 API가 근본적으로 부족하다는 것을 잘 알고 있으며, 그 상황을 개선하기 위해 노력하고 있습니다.그 전까지는 system()을 사용하거나 iptables-restore의 stdin으로 파이프를 여는 것이 좋습니다.후자가 당신에게 더 나은 성능을 제공할 것입니다.
따라서 API 안정성이 없다면 libiptc 솔루션이 얼마나 실행 가능한지 모르겠습니다.
다른 관점
안녕하세요. 8KB 길이의 데이터 청크 2개에 2바이트씩 접근하여 주소가 차단되었는지 확인할 수 있습니다.네, 저는 진지합니다.설명하는 데 시간이 조금 걸리니 조금만 참아주세요.
이론
IP 주소는 주소, 실제로는 4바이트 번호입니다.
문제는, 만약 우리가 비트 위치를 해결할 수 있다면 어떨까 하는 것입니다.
답: 자, 우리는.
2^32 = 4 Giga Bits
공간을 주소 지정하는 데 시간이 걸립니다.
4Gb/8 = 512 Mega Bytes
할당의아야! 하지만 걱정하지 마세요, 우리는 ipverse의 모든 것을 차단하지 않을 것이고 512MB는 과장입니다.
이를 통해 솔루션으로 가는 길을 열 수 있습니다.
릴리푸티안 케이스
0에서 65535 사이의 IP 주소만 존재하는 릴리푸티안 세계를 생각해 보세요.따라서 주소는 0.1 또는 42.42에서 255.255까지입니다.
이제 세계의 왕은 여러 L-IP(릴리푸트 IP) 주소를 차단하려고 합니다.
먼저 그는 256 * 256 비트 길이의 가상 2D 비트 맵을 구축합니다. 이 맵은 다음을 포함합니다.
64 K Bits = 8 K Bytes.
예를 들어, 그는 그가 왕이기 때문에 싫어하는 끔찍한 "혁명" 사이트를 차단하기로 결정합니다. 주소는 56.28입니다.
Address = (56 * 256) + 28 = 14364.(bit position in whole map)
Byte in map = floor(14364 / 8) = 1795.
Bit position= 14364 % 8 = 4.(modulus)
그는 지도 파일을 열고 1795번째 바이트에 액세스하여 비트 4(|16)를 설정한 다음 사이트를 차단됨으로 표시하기 위해 다시 씁니다.
스크립트가 56.28을 볼 때 동일한 계산을 수행하여 비트를 확인하고 설정된 경우 주소를 차단합니다.
이제 이 이야기의 교훈은 무엇일까요?자, 우리는 이 릴리푸티안 구조를 사용할 수 있습니다.
관행
리얼 월드 케이스
512MB 파일을 할당하는 것은 좋은 선택이 아니기 때문에 "필요할 때 사용" 방식으로 릴리푸티안 사례를 실제 환경에 적용할 수 있습니다.
다음과 같은 항목이 있는 BLOCKS라는 데이터베이스 테이블을 생각해 보십시오.
IpHead(key): unsigned 16 bit integer,
Map : 8KB BLOB(fixed size),
EntryCount : unsigned 16 bit integer.
이름이 BASE인 아래 구조를 가진 하나의 항목만 있는 다른 테이블
Map : 8KB BLOB(fixed size).
이제 수신 주소가 56.28.10.2라고 가정해 보겠습니다.
스크립트가 BASE 테이블에 액세스하여 맵을 가져옵니다.
상위 IP 번호 56.28을 검색합니다.
Address = (56 * 256) + 28 = 14364.(bit position in whole map)
Byte in map = floor(14364 / 8) = 1795.
Bit position= 14364 % 8 = 4.(modulus)
지도에서 바이트 1795 비트 4를 봅니다.
비트를 설정하지 않으면 추가 작업이 필요하지 않습니다. 즉, 56.28.0.0 - 56.28.255.255 범위에 차단된 IP 주소가 없습니다.
비트가 설정된 경우 스크립트는 BLOCKs 테이블에 액세스합니다.
상위 IP 번호는 56.28로 14364를 제공하므로 스크립트는 인덱스 IpHead = 14364로 BLOCK 테이블을 쿼리합니다.레코드를 가져옵니다.레코드는 BASE에 표시되어 있으므로 존재해야 합니다.
이 스크립트는 하위 IP 주소에 대한 계산을 수행합니다.
Address = (10 * 256) + 2 = 2562.(bit position in whole map)
Byte in map = floor(2562 / 8) = 320.
Bit position= 2562 % 8 = 2.(modulus)
그런 다음 필드 맵의 바이트 320의 비트 2를 보고 주소가 차단되었는지 확인합니다.
잘했어요!
Q1: BASE를 사용하는 이유는 14364로 BLOCK을 직접 쿼리할 수 있습니다.
A1: 예, 가능하지만 BTREE가 데이터베이스 서버를 검색하는 것보다 BASE 맵 검색이 더 빠릅니다.
Q2: BLOCKs 테이블의 EntryCount 필드의 용도는 무엇입니까?
A2: 동일한 레코드에서 맵 필드에서 차단된 IP 주소 수입니다.따라서 IP의 차단을 해제하고 EntryCount가 0에 도달하면 블록 레코드가 필요하지 않습니다.삭제할 수 있으며 BASE 맵의 해당 비트가 설정 해제됩니다.
IMHO 이 접근법은 번개같이 빠를 것입니다.또한 블롭 할당은 레코드당 8K입니다.DB 서버는 별도의 파일에 블롭을 저장하므로 4K, 8K 또는 4K 페이징의 배수가 있는 파일 시스템이 빠르게 반응합니다.
차단된 주소가 너무 분산된 경우
데이터베이스 BLOCKs 테이블이 불필요하게 증가하는 것이 문제입니다.
그러나 이러한 경우에는 2097152바이트 = 2MB에 해당하는 16777216비트 길이의 256*256*256비트 큐브를 사용할 수 있습니다.
이전 예에서 상위 IP 해결은 다음과 같습니다.
(56 * 65536)+(28 * 256)+10
따라서 BASE는 DB 테이블 레코드 대신 2MB 파일이 되고, 이 레코드는 열림(열림 등)을 통해 비트 주소가 지정됩니다(예: fsek, 전체 파일 내용을 읽지 않음, 불필요). 그런 다음 아래 구조의 BLOCK 테이블에 액세스합니다.
IpHead(key): unsigned 32 bit integer, (only 24 bit is used)
Map : 32 unsigned 8 bit integers(char maybe),(256 bit fixed)
EntryCount : unsigned 8 bit integer.
다음은 비트플레인 8K 버전의 블록 검사를 위한 php 예제 코드입니다.
측면 참고:이 스크립트는 여러 호출 등을 제거하여 추가로 최적화할 수 있습니다.하지만 이해하기 쉽게 하기 위해 이렇게 쓰여 있습니다.
<?
define('BLOCK_ON_ERROR', true); // WARNING if true errors block everyone
$shost = 'hosturl';
$suser = 'username';
$spass = 'password';
$sdbip = 'database';
$slink = null;
$slink = mysqli_connect($shost, $suser, $spass, $sdbip);
if (! $slink) {
$blocked = BLOCK_ON_ERROR;
} else {
$blocked = isBlocked();
mysqli_close($slink); // clean, tidy...
}
if ($blocked) {
// do what ever you want when blocked
} else {
// do what ever you want when not blocked
}
exit(0);
function getUserIp() {
$st = array(
'HTTP_CLIENT_IP',
'REMOTE_ADDR',
'HTTP_X_FORWARDED_FOR'
);
foreach ( $st as $v )
if (! empty($_SERVER[$v]))
return ($_SERVER[$v]);
return ("");
}
function ipToArray($ip) {
$ip = explode('.', $ip);
foreach ( $ip as $k => $v )
$ip[$k] = intval($v);
return ($ip);
}
function calculateBitPos($IpH, $IpL) {
$BitAdr = ($IpH * 256) + $IpL;
$BytAdr = floor($BitAdr / 8);
$BitOfs = $BitAdr % 8;
$BitMask = 1;
$BitMask = $BitMask << $BitOfs;
return (array(
'bytePos' => $BytAdr,
'bitMask' => $BitMask
));
}
function getBaseMap($link) {
$q = 'SELECT * FROM BASE WHERE id = 0';
$r = mysqli_query($link, $q);
if (! $r)
return (null);
$m = mysqli_fetch_assoc($r);
mysqli_free_result($r);
return ($m['map']);
}
function getBlocksMap($link, $IpHead) {
$q = "SELECT * FROM BLOCKS WHERE IpHead = $IpHead";
$r = mysqli_query($link, $q);
if (! $r)
return (null);
$m = mysqli_fetch_assoc($r);
mysqli_free_result($r);
return ($m['map']);
}
function isBlocked() {
global $slink;
$ip = getUserIp();
if($ip == "")
return (BLOCK_ON_ERROR);
$ip = ipToArray($ip);
// here you can embed preliminary checks like ip[0] = 10 exit(0)
// for unblocking or blocking address range 10 or 192 or 127 etc....
// Look at base table base record.
// map is a php string, which in fact is a good byte array
$map = getBaseMap($slink);
if (! $map)
return (BLOCK_ON_ERROR);
$p = calculateBitPos($ip[0], $ip[1]);
$c = ord($map[$p['bytePos']]);
if (($c & $p['bitMask']) == 0)
return (false); // No address blocked
// Look at blocks table related record
$map = getBlocksMap($slink, $p[0]);
if (! $map)
return (BLOCK_ON_ERROR);
$p = calculateBitPos($ip[2], $ip[3]);
$c = ord($map[$p['bytePos']]);
return (($c & $p['bitMask']) != 0);
}
?>
이것이 도움이 되길 바랍니다.
자세한 내용에 대해 질문이 있으시면 기꺼이 답변드리겠습니다.
iptables 및 ipset를 사용하여 트래픽이 www 서버에 도달하기 전에 트래픽을 차단합니다.
웹 서버가 동일한 시스템에 있다고 가정하고 INPUT 체인의 필터 테이블에서 블랙리스트에 있는 IP 트래픽을 탐지합니다.라우터에서 IP를 차단하는 경우 FORWARD 체인을 사용합니다.
먼저 ipset을 만듭니다.
ipset create ip_blacklist hash:ip
IP는 다음을 통해 추가할 수 있습니다.
ipset add ip_blacklist xxx.xxx.xxx.xxx
ipset 일치 규칙을 ipset 테이블에 추가합니다(모든 패킷이 ipset과 일치하는 DROP).
iptables --table filter --insert INPUT --match set --match-set ip_blacklist src -j DROP
이렇게 하면 www 서버 이전에 블랙리스트에 있는 트래픽이 중지됩니다.
편집: 기본 최대 크기를 조회할 기회가 있었는데 65536이므로 100000개 이상의 항목을 지원하도록 조정해야 합니다.
ipset create ip_blacklist hash:ip maxelem 120000
해시 크기를 조정할 수도 있습니다.
ipset create ip_blacklist hash:ip maxelem 120000 hashsize 16384이어야 함2의 거듭제곱)
ipset 조회는 시스템에 거의 영향을 미치지 않습니다(약 45,000개 항목).인터넷에는 수많은 테스트 사례가 있습니다.세트의 메모리는 제한 요소입니다.
PHP가 아닌 외부 방화벽으로 이 작업을 수행해야 합니다.저는 pfSense나 PF를 추천합니다.저는 그것을 전에 사용해 본 적이 있는데 그것은 매우 사용하기 쉽고, 매우 직관적이며, 매우 강력합니다.최고의 sys-admin을 선택합니다.FreeBSD에서 실행하고 있지만 OpenBSD에서도 잘 작동합니다.나는 리눅스 사람이기 때문에 이런 말을 하는 것이 괴롭지만, 리눅스에서 실행하려고 하지 마세요.BSD는 쉽고 빠르게 알아낼 수 있습니다.
pfSense의 훌륭한 기능은 스크립트를 사용하여 구성하고 LAN의 모든 구성 요소만 구성할 수 있도록 단일 네트워크 인터페이스에 대한 구성 액세스를 제한하는 기능입니다.또한 실수로 자신의 액세스를 차단하지 않도록 몇 가지 ID10T 수준 기능이 있습니다.
또한 많은 스팸 발송자가 Tor와 같은 것을 사용하여 IP를 빠르게 전환할 수 있다는 것을 알아야 합니다.이 문제를 해결하려면 노드를 종료하는 것으로 알려진 주소를 블록 목록에 포함해야 합니다(이 목록은 다양한 위치에서 사용할 수 있음).
코드를 통해 추가/제거하는 방법을 원한다면 거부 호스트를 살펴보십시오.코드를 통해 IP 목록을 유지 관리하거나 원하는 위치에서 읽을 소스를 패치할 수 있습니다.
ipset라는 이름의 netfilter가 있는 프로젝트가 있으므로 목록에 ip를 추가하거나 제거할 수 있으며 이 목록에 대한 규칙을 생성하면 됩니다.
IP를 차단하는 경우 방화벽 수준에서 이 작업을 수행해야 합니다. 환영받지 못하는 IP 주소의 사용자가 시스템에 너무 많이 침입하지 않도록 해야 합니다.따라서 데이터베이스를 쿼리하고 그에 따라 방화벽 구성 파일을 수정하는 bash 스크립트를 작성하는 것이 좋습니다(이것은 당신이 당신의 웹 데이터베이스에 저장된 IP 주소를 활용하는 솔루션을 원한다고 가정합니다). 그러한 정보를 저장하기에 더 좋은 장소가 있을 수 있습니다.
편집: @Populus가 제안한 것처럼 IP 주소를 PHP 수준에서 블랙리스트에 추가하려면 PHP에서 시스템 호출을 사용하는 방법에 대한 설명서가 있습니다. http://php.net/manual/en/function.system.php
iptables를 사용하는 경우 블랙리스트에 IP 주소를 추가하기 위해 사용해야 하는 명령은 다음과 같습니다. http://www.cyberciti.biz/faq/linux-iptables-drop/
나는 길을 알아요.
당신이 이 질문의 첫머리에서 언급했듯이 php.에 의한 것입니다.
$ipList = []; // array list or from database
if (in_array(getIP(), $ipList)) {
// Log IP & Access information
header("https://www.google.com.ng/search?q=fool"); // redirect
exit(); // exit
}
잠깐만요.하지만 잠시만 기다려 주세요.
당신이 this.is 을 하고 싶어하는 이유는 중요하지 않습니다.하지만 왜 이런 상황에서.
제 말은 왜 당신이 php에 접근하는 것을 피하려고 합니까? 속도 때문입니까? 아니면 단지 예방 때문입니까? 일부 을 보기 .입니다.일부 ip가 php에 접근하는 것을 피하는 유일한 이유가 내용을 보기 위한 .http 테마인 경우.
그래서 생각이 나서 이렇게 제안합니다.
하나의 진입점을 사용합니다.
저는 이 솔루션으로 작업했습니다.
먼저 간단한 ht 액세스로 모든 요청을 진입점이라는 한 페이지로 보냅니다.(index.dll과 같은)
테니 가 요청하면 알려드립니다. 그래서 사용자가 요청할 때.
mysite.com/some/path/page.php or anything
htaccess는 url을 변경하지 않고 다음과 같은 것을 실행할 것입니다. 그래서 사용자는 아무것도 느끼지 못할 것입니다.
mysite.com/index.php?r=some/path/page.php
따라서 모든 요청은 $_GET['r'] 매개 변수가 다른 하나의 요청이 되었습니다. 따라서 모든 요청에 대해 index.php가 실행됩니다.그리고 이제 우리는 인덱스에서 이것과 같은 것을 할 수 있습니다.
$ipList = []; // array list or from database
if (in_array(getIP(), $ipList)) {
// Log IP & Access information
header("https://www.google.com.ng/search?q=fool"); // redirect
exit(); // exit
}
//if after this execute means the IP is not banned
//now we can include file that $_GET['r'] points to
include $_GET['r'];
그것은 매우 간단합니다. 그리고 그것의 진짜 것은 매우 복잡합니다.하지만 주요 아이디어는 동일합니다.당신은 어떻게 생각하나요?
우리 대부분은 방화벽 수준에서 차단하는 것에 동의하는 것 같습니다.
웹 사이트에서 차단할 ip를 청취하고 스크립트를 생성하는 프로그램이 있을 수 있습니다.
ip = getNextIpToBlock()
an = increment_unique_alphanum_generator()
script = generate_script(ip, an)
스크립트는 다음과 같이 나타납니다(여기서 [an]은 영숫자 값이고 [ip]는 차단하는 IP입니다).
en [enter]
*password* [enter]
conf t [enter]
access-list [an] deny ip [ip] 0.0.0.0 any [enter]
access-group [an] in interface outside [enter]
그런 다음 이 스크립트를 FW CLI로 원격 텔넷 또는 ssh 호출을 실행하는 다른 프로그램에 로드합니다.
로그아웃하는 것을 잊지 마십시오. 100 ips마다 실행 중인 구성을 복사하여 구성을 시작합니다.
방화벽에 대한 제한 사항이 무엇인지 지금 알고 싶을 수도 있습니다.
최고야.
대신 ASN으로 차단하는 것이 어떻습니까? 예:
function ip2asn($ip)
{
return trim(shell_exec("whois -h whois.cymru.com $ip|sed 1,1d|cut -d '|' -f 1"));
}
$asn = ip2asn($_SERVER['REMOTE_ADDR']);
# 16247 https://ipinfo.io/AS16247
# 9009 https://ipinfo.io/AS9009
$bad_asn = array("16247", "9009");
if(in_array($asn, $bad_asn)){
http_response_code(404);
exit();
}
목록에 있는 IP를 지역 검색합니다.제 자신의 경험에 따르면 대부분의 악의적인(즉, 스팸) 연결은 중국에서 발생했습니다.만약 당신이 같은 경우에 중국에 봉사할 특별한 필요가 없다면, 방화벽 수준에서 국가 전체를 효율적으로 차단할 수 있는지 확인하십시오.
IMHO, 이 질문을 고려할 수 있는 몇 가지 각도가 있습니다.
- 차단할 고유 IP 주소 집합이 매우 큽니다.서버에서 이러한 서버를 일찍 차단할수록 처리 능력이 저하됩니다.PHP의 적절한 시스템 호출을 통해 방화벽에서 IP를 추가/제거할 수 있습니다.
위의 옵션을 고려할 때 관련 질문은 다음과 같습니다.
- 그들은 자주 방문합니까?=> 그렇다면 솔루션 (1)이 최선의 선택입니다.
- 방화벽에서 효율적으로 처리할 수 있습니까?=> 그렇지 않다면 다른 솔루션을 고려해 보는 것이 좋습니다.
그.htaccess두 번째 선택이 될 겁니다
언급URL : https://stackoverflow.com/questions/15579620/how-to-block-100-000-individual-ip-addresses
'IT' 카테고리의 다른 글
| 아이폰 인앱 구매 스크린샷 (0) | 2023.07.27 |
|---|---|
| iOS 애플리케이션을 위한 작업 대기열 대 디스패치 대기열 (0) | 2023.07.27 |
| 마리아에서 'DEELETE'에 대해 지정된 Twice 테이블DB (0) | 2023.07.27 |
| PHPUunit 모의 객체 및 정적 방법 (0) | 2023.07.27 |
| CSS를 사용하여 텍스트 숨기기 (0) | 2023.07.27 |