Маска IP адреса версии 4 или как банить IPv4 адреса
C IP адресами 4 версии протокола всё довольно просто, давайте разберёмся как банить IPv4 адреса, разберём что такое маска IP адреса и как она связана с CIDR. Записываются адреса IPv4 в виде 4 цифр разделенных точкой от 0 до 255, например, 192.0.2.1. Не смотря на прогнозы, начавшиеся где-то с 2000-х годов, о заканчивающимся диапазоне в более чем 4 миллиардов адресов, диапазон IP 4 версии всё ещё не исчерпан! По сей день нет проблем с выделением IPv4 адресов, как у местных провайдеров интернета, так и в серверных разных стран. Переход на IPv6 затянулся на десятилетия, не смотря на то, что инициатива явно хорошая и оборудование уже сменилось по нескольку раз. Количество IPv6 в мире на 2020 год составляет порядка 30%, но я не сталкивался с ним ещё ни разу и судя по дискуссиям в интернете - они в большей степени дублируют адресацию IPv4. Что ещё наталкивает на мысль, что 7 млрд. населения очередная байка из телевизора, нас гораздо меньше. (Конечно, не все пользуются интернетом и существуют технологии типа NAT, когда за одним IP сидит офис итп.)
Если коротко, то маска адреса/сети/подсети или CIDR задают диапазоны IP адресов, каждый разряд ограничен от 0 до 255 адресов умножить на подсети, если они есть. Указав адрес и маску или CIDR (Classless Inter-Domain Routing - бесклассовая междоменная маршрутизация) мы указываем от какого и до какого IP адреса следует банить подсеть нарушителя или разрешать вход только из этой подсети.
Допустим у нас есть вредоносный IP адрес 192.0.2.55, есть вариант воспользоваться одним из сервисов определения IP адреса и узнать диапазоны провайдера и забанить сразу их, но в реальной жизни, в случае динамически выделяемых IP адресов или иных схем получения адреса, злоумышленник скорее всего будет находиться в узком промежутке, для IPv4 достаточно забанить последний разряд IP адреса, который соответствует маске сети 255.255.255.0 или CIDR /24. Т.е. если мы указываем 192.0.2.55/24, то получаем промежуток 192.0.2.0 - 192.0.2.255 в котором 256 адресов, 0 - это адрес подсети, 255 - широковещательный, и они не используются для выделения пользователям, таким образом 254 адреса задействовано.
Как именно задавать диапазоны, смотрите сами, как больше нравится, в данном PHP классе для обработки IP адресов можно задавать в следующих равнозначных формах:
192.0.2.55/24 ; 192.0.2/24 ; 192.0.2./24 ; 192.0.2.0 - 192.0.2.255 ; 192.0.2.* ; 192.0.2. ; 192.0.2 ;
все они заблокируют (или разрешат) диапазон 192.0.2.0 - 192.0.2.255. Можно конечно брать и меньшие диапазоны в случае если идёт атака с адресов выходящих за указанный промежуток, смотрите в таблице ниже. Например, баним подсеть следующего уровня имеющую CIDR /16 и маску сети 255.255.0.0 и в которой уже 65536 адресов:
192.0.2.55/16 ; 192.0.2/16 ; 192.0/16 ; 192.0.0.0 - 192.0.255.255 ; 192.0.* ; 192.0.*.* ; 192.0. ; 192.0.2 ;
Основной интерес предоставляет CIDR: /24 /16 /8;
255.255.255.0/24, 255.255.0.0/16, 255.0.0.0/8.
Таблица сетевых масок IPv4
Таблица подсетей подсвечена зелёным цветом в тех местах, где маска ip адреса и CIDR имеют наибольший смысл, промежуточные значения не так интересны, скорее могут быть использованы в случае белых списков адресов, если пользователь знает диапазон своей подсети.
CIDR | Маска | Количество адресов |
---|---|---|
/32 | 255.255.255.255 | 1 |
/31 | 255.255.255.254 | 2 |
/30 | 255.255.255.252 | 4 |
/29 | 255.255.255.248 | 8 |
/28 | 255.255.255.240 | 16 |
/27 | 255.255.255.224 | 32 |
/26 | 255.255.255.192 | 64 |
/25 | 255.255.255.128 | 128 |
/24 | 255.255.255.0 | 256 |
/23 | 255.255.254.0 | 512 |
/22 | 255.255.252.0 | 1024 |
/21 | 255.255.248.0 | 2048 |
/20 | 255.255.240.0 | 4096 |
/19 | 255.255.224.0 | 8192 |
/18 | 255.255.192.0 | 16384 |
/17 | 255.255.128.0 | 32768 |
/16 | 255.255.0.0 | 65536 |
/15 | 255.254.0.0 | 131072 |
/14 | 255.252.0.0 | 262144 |
/13 | 255.248.0.0 | 524288 |
/12 | 255.240.0.0 | 1048576 |
/11 | 255.224.0.0 | 2097152 |
/10 | 255.192.0.0 | 4194304 |
/9 | 255.128.0.0 | 8388608 |
/8 | 255.0.0.0 | 16777216 |
/7 | 254.0.0.0 | 33554432 |
/6 | 252.0.0.0 | 67108864 |
/5 | 248.0.0.0 | 134217728 |
/4 | 240.0.0.0 | 268435456 |
/3 | 224.0.0.0 | 536870912 |
/2 | 192.0.0.0 | 1073741824 |
/1 | 128.0.0.0 | 2147483648 |
/0 | 0.0.0.0 | 4294967296 |
Таблица масок подсетей виде числа
CIDR | Маска | Значение |
---|---|---|
/32 | 255.255.255.255 | 4294967295 |
/31 | 255.255.255.254 | 4294967294 |
/30 | 255.255.255.252 | 4294967292 |
/29 | 255.255.255.248 | 4294967288 |
/28 | 255.255.255.240 | 4294967280 |
/27 | 255.255.255.224 | 4294967264 |
/26 | 255.255.255.192 | 4294967232 |
/25 | 255.255.255.128 | 4294967168 |
/24 | 255.255.255.0 | 4294967040 |
/23 | 255.255.254.0 | 4294966784 |
/22 | 255.255.252.0 | 4294966272 |
/21 | 255.255.248.0 | 4294965248 |
/20 | 255.255.240.0 | 4294963200 |
/19 | 255.255.224.0 | 4294959104 |
/18 | 255.255.192.0 | 4294950912 |
/17 | 255.255.128.0 | 4294934528 |
/16 | 255.255.0.0 | 4294901760 |
/15 | 255.254.0.0 | 4294836224 |
/14 | 255.252.0.0 | 4294705152 |
/13 | 255.248.0.0 | 4294443008 |
/12 | 255.240.0.0 | 4293918720 |
/11 | 255.224.0.0 | 4292870144 |
/10 | 255.192.0.0 | 4290772992 |
/9 | 255.128.0.0 | 4286578688 |
/8 | 255.0.0.0 | 4278190080 |
/7 | 254.0.0.0 | 4261412864 |
/6 | 252.0.0.0 | 4227858432 |
/5 | 248.0.0.0 | 4160749568 |
/4 | 240.0.0.0 | 4026531840 |
/3 | 224.0.0.0 | 3758096384 |
/2 | 192.0.0.0 | 3221225472 |
/1 | 128.0.0.0 | 2147483648 |
/0 | 0.0.0.0 | 0 |
Таблица масок подсетей в двоичном представлении (в бинарном виде)
CIDR | Маска | Значение |
---|---|---|
/32 | 255.255.255.255 | 11111111111111111111111111111111 |
/31 | 255.255.255.254 | 11111111111111111111111111111110 |
/30 | 255.255.255.252 | 11111111111111111111111111111100 |
/29 | 255.255.255.248 | 11111111111111111111111111111000 |
/28 | 255.255.255.240 | 11111111111111111111111111110000 |
/27 | 255.255.255.224 | 11111111111111111111111111100000 |
/26 | 255.255.255.192 | 11111111111111111111111111000000 |
/25 | 255.255.255.128 | 11111111111111111111111110000000 |
/24 | 255.255.255.0 | 11111111111111111111111100000000 |
/23 | 255.255.254.0 | 11111111111111111111111000000000 |
/22 | 255.255.252.0 | 11111111111111111111110000000000 |
/21 | 255.255.248.0 | 11111111111111111111100000000000 |
/20 | 255.255.240.0 | 11111111111111111111000000000000 |
/19 | 255.255.224.0 | 11111111111111111110000000000000 |
/18 | 255.255.192.0 | 11111111111111111100000000000000 |
/17 | 255.255.128.0 | 11111111111111111000000000000000 |
/16 | 255.255.0.0 | 11111111111111110000000000000000 |
/15 | 255.254.0.0 | 11111111111111100000000000000000 |
/14 | 255.252.0.0 | 11111111111111000000000000000000 |
/13 | 255.248.0.0 | 11111111111110000000000000000000 |
/12 | 255.240.0.0 | 11111111111100000000000000000000 |
/11 | 255.224.0.0 | 11111111111000000000000000000000 |
/10 | 255.192.0.0 | 11111111110000000000000000000000 |
/9 | 255.128.0.0 | 11111111100000000000000000000000 |
/8 | 255.0.0.0 | 11111111000000000000000000000000 |
/7 | 254.0.0.0 | 11111110000000000000000000000000 |
/6 | 252.0.0.0 | 11111100000000000000000000000000 |
/5 | 248.0.0.0 | 11111000000000000000000000000000 |
/4 | 240.0.0.0 | 11110000000000000000000000000000 |
/3 | 224.0.0.0 | 11100000000000000000000000000000 |
/2 | 192.0.0.0 | 11000000000000000000000000000000 |
/1 | 128.0.0.0 | 10000000000000000000000000000000 |
/0 | 0.0.0.0 | 00000000000000000000000000000000 |