Рейтинг:0

IPTABLES Предварительная маршрутизация, массовое добавление

флаг be

может быть, кто-то знает, как я могу массово добавить около 1 400 000 ip-адресов в iptables с помощью команды:

iptables -I ПРЕДВАРИТЕЛЬНАЯ МАРШРУТИЗАЦИЯ -t raw -d $ipban -j DROP

прямо сейчас я использую:

пока читаю ipban
делать
iptables -I PREROUTING -t raw -d $ipban -j DROP
сделано < ips.txt

Но уже на добавление ушло более 20 часов.

Мой vps очень маленький, например, 1 ГБ оперативной памяти и 1 vcpu, поэтому он не такой быстрый.

Я попытался восстановить iptables, но получил несколько ошибок, поэтому ищу самое быстрое решение.

Doug Smythies avatar
флаг gn
Для больших групп IP-адресов загляните в `ipset`.
Рейтинг:0
флаг in

Сценарий ниже должен делать то, что вам нужно. Обратите внимание, что имя файла, из которого вы будете считывать IP-адреса, в сценарии — ips.txt. Вы можете заменить его своим именем файла.

#!/бин/баш

ip_addresses=$(cat ips.txt)

echo -n "" > iptables_configuration
echo "*raw" >> iptables_configuration
echo ": ПРЕДВАРИТЕЛЬНОЕ ПРИНЯТИЕ [0:0]" >> iptables_configuration
эхо ": ВЫВОД ПРИНЯТ [0:0]" >> iptables_configuration

для i в $ip_addresses
делать
echo -A PREROUTING -d $i/32 -j DROP >> iptables_configuration
сделано
эхо "COMMIT" >> iptables_configuration

эхо "*фильтр" >> iptables_configuration
эхо ":ВВОД ПРИНЯТ [0:0]" >> iptables_configuration
echo ":ВПЕРЕД ПРИНЯТЬ [0:0]" >> iptables_configuration
эхо ": ВЫВОД ПРИНЯТ [0:0]" >> iptables_configuration
echo "-A INPUT -p tcp -m tcp --dport 25565 --tcp-option 8 --tcp-flags FIN,SYN,RST,ACK SYN -j REJECT --reject-with icmp-port-unreachable" >> iptables_configuration
эхо "COMMIT" >> iptables_configuration

кошка iptables_configuration | iptables-восстановление
rm iptables_configuration

iptables -t raw -A PREROUTING -p tcp --dport 25565 -j ПРИНЯТЬ
iptables -t raw -A PREROUTING -p tcp --dport 25565 -m state --state СВЯЗАННО, УСТАНОВЛЕНО -j ПРИНЯТЬ
iptables -t raw -A PREROUTING -p tcp --dport 25565 --tcp-flags FIN,SYN,RST,ACK SYN -m connlimit --connlimit-выше 150 --connlimit-mask 32 --connlimit-saddr -j DROP
iptables -t raw -A PREROUTING -p tcp --dport 25565 --tcp-flags FIN,SYN,RST,ACK SYN -m connlimit --connlimit-выше 10 --connlimit-mask 32 --connlimit-saddr -j DROP

Все, что вам нужно сделать, это выполнить скрипт, в котором присутствует файл ips.txt. Остальное сделает скрипт.

флаг be
Проблема в том, что я не хочу блокировать диапазоны или подсети. Я просто хочу заблокировать указанные IP-адреса из текстового файла.
Muhammed Özen avatar
флаг in
Теперь я понимаю. Я знаю решение твоей проблемы. Проблема в том, что каждый раз, когда вы добавляете новое правило, вы снова запускаете двоичный файл iptables. Вам нужно написать файл конфигурации, содержащий все правила, и вы будете выполнять iptables только один раз, чтобы добавить все эти правила. Я написал для вас скрипт, который делает то, что вам нужно, но когда вы примените скрипт, ваши существующие правила iptables исчезнут, а будут присутствовать только правила для запрета IP-адресов в файле. Если вы хотите включить другие правила, вам нужно изменить файл iptables_configuration в соответствии с вашими потребностями. Проверьте мой пост.
флаг be
Конечно, приятель, у меня есть такие правила: https://pastebin.com/MW4x9QNa Если это возможно, сделайте так, чтобы предварительная маршрутизация была более эффективной: D Я очень рад, что вы хотите помочь мне и написать такой большой пост!
Muhammed Özen avatar
флаг in
Пожалуйста. Но в вашем сценарии есть некоторые переменные, которые вы не определили, например $port и $limit_global_connections_max. Если вы сообщите мне их точные значения, только тогда я смогу помочь
флаг be
Извините, не заметил, вот рабочая версия https://pastebin.com/LxJvqF51 Если бы вы также знали, как сделать их ПРЕДВАРИТЕЛЬНЫМИ, это было бы здорово (это было бы более эффективно).
флаг be
И можете ли вы объяснить мне, почему в -A PREROUTING -d $i/32 -j DROP есть `/32`?
Muhammed Özen avatar
флаг in
Я только что снова отредактировал сообщение. Теперь вам даже не нужно беспокоиться о восстановлении iptables. Все, что вам действительно нужно, это запустить скрипт, и он все подготовит для вас. Также я поместил все правила в цепочку PREROUTING, кроме одного, потому что у него были недопустимые параметры для PREROUTING. Что касается вашего второго вопроса, /32 означает только один IP-адрес в нотации CIDR. Если вы укажете любое значение, кроме 32, будет указана подсеть, включающая более одного IP-адреса.Но поскольку нам нужно запретить только отдельные IP-адреса, и мы не хотим блокировать подсеть или диапазон IP-адресов, здесь нам нужен /32.
флаг be
Спасибо за помощь! Я сделал все, как вы сказали, и это работает!
Muhammed Özen avatar
флаг in
Добро пожаловать, приятель. Я рада, что смогла быть полезной :)
флаг be
Проблема, которую я обнаружил прямо сейчас, заключается в том, что когда я применил все, моя скорость интернета снижается до 5 Мбит/с с 1 Гбит/с.
Muhammed Özen avatar
флаг in
Я считаю, что причина этого в том, что у вас много правил. Как вы сказали, у вас было так много правил, что регистрация их всех в брандмауэре занимала много времени. Всякий раз, когда сетевой пакет попадает на ваш компьютер, ядро ​​сравнивает его с каждым правилом брандмауэра. И если он получает пропуск от всех этих правил, то вы получаете свое соединение в локальном стеке TCP/UDP. Чем больше правил у вас в брандмауэре, тем медленнее будет соединение. Вы должны поддерживать правильный баланс между безопасностью и скоростью сети
флаг be
Да, я попросил своего хоста о помощи, и они сказали, что все равно заблокируют эти IP-адреса. Спасибо за помощь !

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.