Можно ли на shell Linux прочитать файл и для каждой строки выполнить команду.

zexis
На сайте с 09.08.2005
Offline
388
9779

Есть текстовый файл ip.txt, в каждой строке которого записан IP адрес в текстовом формате

Пример файла ip.txt

187.65.27.242

59.97.208.180

88.164.194.205

Посоветуйте, пожалуйста, как сделать, что бы для каждой строки из файла ip.txt выполнить определенную команду?

То есть нужна программа, которая прочитает файл ip.txt и для каждой строки выполнит, команду подставив IP адрес из файла.

Вот пример.

iptables -A INPUT -s 187.65.27.242 -j DROP

iptables -A INPUT -s 59.97.208.180 -j DROP

iptables -A INPUT -s 88.164.194.205 -j DROP

Можно ли это сделать на shell Linux? Если да то посоветуйте какие команды использовать.

BS
На сайте с 22.06.2009
Offline
73
#1

#!/bin/sh

for i in `cat ip.txt`

do

iptables -A INPUT -s $i -j DROP

done

Только не забудьте на всякий случай в начале явно разрешить свой айпи в фаере, а то мало ли..

M
На сайте с 16.09.2009
Offline
278
#2

cat ip.txt | xargs -n1 -I_ iptables -A BAN -s _ -j DROP

INPUT не стоит захламлять кучей отднотипных правил - вынесите

их в отдельную чепочку и подключите ее _одним_ правилом в INPUT.

Абонементное сопровождение серверов (Debian) Отправить личное сообщение (), написать письмо ().
Boris A Dolgov
На сайте с 04.07.2007
Offline
215
#3

еще вариант -

cat ip.txt | while read $ip;

do

список команд

done

Будет работает для кучи команд и огромных файлов.

Совет по поводу цепочки - согласен. Еще лучше - загружать это одним сисколлом через iptables-save/iptables-restore

С уважением, Борис Долгов. Администрирование, дешевые лицензии ISPsystem, Parallels, cPanel, DirectAdmin, скины, SSL - ISPlicense.ru (http://www.isplicense.ru/?from=4926)
M
На сайте с 16.09.2009
Offline
278
#4
Boris A Dolgov:
Будет работает для кучи команд и огромных файлов.

только $ в $ip - имхо, лишнее ;)

Boris A Dolgov:

Еще лучше - загружать это одним сисколлом через iptables-save/iptables-restore

скорее, не загружать, а _догружать_. как-то так:


awk 'BEGIN{ print "*filter" }{print "-A BAN -s " $1 " -j DROP"} END{ print "COMMIT" }' < ip.txt |
iptables-restore -n
zexis
На сайте с 09.08.2005
Offline
388
#5

Спасибо за помощь.

Хакеры снова начали ддосить.

Пока решил проблему напсанием на с++ анализатора логов апача, который получает список IP адресов ботнета, затем эти IP заносятся в iptables.

Пока атаку отбил.

Посмотрим, что они завтра придумают.

AU
На сайте с 03.09.2009
Offline
88
#6
zexis:
Есть текстовый файл ip.txt, в каждой строке которого записан IP адрес в текстовом формате
Пример файла ip.txt

187.65.27.242
59.97.208.180
88.164.194.205

Посоветуйте, пожалуйста, как сделать, что бы для каждой строки из файла ip.txt выполнить определенную команду?

То есть нужна программа, которая прочитает файл ip.txt и для каждой строки выполнит, команду подставив IP адрес из файла.

Вот пример.
iptables -A INPUT -s 187.65.27.242 -j DROP
iptables -A INPUT -s 59.97.208.180 -j DROP
iptables -A INPUT -s 88.164.194.205 -j DROP

Можно ли это сделать на shell Linux? Если да то посоветуйте какие команды использовать.

#!/bin/sh

while read line

do

iptables -A INPUT -s $line -j DROP

done < ip.txt

Unix в вопросах и ответах https://unixhow.com (https://unixhow.com)
Andreyka
На сайте с 19.02.2005
Offline
822
#7
zexis:
Спасибо за помощь.
Хакеры снова начали ддосить.
Пока решил проблему напсанием на с++ анализатора логов апача, который получает список IP адресов ботнета, затем эти IP заносятся в iptables.
Пока атаку отбил.
Посмотрим, что они завтра придумают.

А что, не проще ли iplimit в N коннектов с подсети /24 поставить?

Не стоит плодить сущности без необходимости
zexis
На сайте с 09.08.2005
Offline
388
#8
Andreyka:
А что, не проще ли iplimit в N коннектов с подсети /24 поставить?

Может и проще, если бы я знал как.

Не подскажите команду, которая это сделает?

N
На сайте с 06.05.2007
Offline
419
#9

zexis, оставьте как есть. Блокирование по числу коннектов гребет всех подряд под одну гребенку. Программа, раз уж вы осилили ее написание, сможет более тонко распознать бота. Андрейка сам бот, поэтому предлагает такие решения :)

Хотя можно и то и другое, но iplimit должен срабатывать при очень сильном превышении разумного числа коннектов.

Кнопка вызова админа ()
M
На сайте с 16.09.2009
Offline
278
#10

согласен с netwind. iplimit/connlimit, даже hashlimit - это крайние меры, они не

знают даже прикладного протокола, работу которого в итоге ограничивают.

я бы посоветовал настроить лимиты в легком прокси перед основным

веб-сервером. в nginx для этого есть замечательные limit_conn и

limit_req. будете отдавать временно забаненым легкую статику, а "особо

отличившихся" - банить по результатам парсинга error.log nginx'а.

обращайтесь, если интересует такое решение.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий