Я довольно новичок в IPTABLES, но я написал скрипт, который блокирует несколько диапазонов IP-адресов Amazon EC2 из входного файла, blacklist.txt:

...
54.66.0.0/16
54.67.0.0/16
...

У меня также есть отдельный файл whilelist.txt, состоящий из дружественных IP-адресов (произвольно здесь), включая:

54.66.1.1
54.67.1.2

Вот сокращенная версия скрипта bash, который я запускаю, чтобы заблокировать занесенные в черный список IP-адреса и разрешить занесенные в белый список:

#!/bin/sh

TABLENAME="EC2LIST"


iptables -N $TABLENAME

# Block These
while read ip; do

    # Create the drop rule
    iptables -t filter -A $TABLENAME -s $ip -j DROP

done <~/ec2block/blacklist.txt  # The blacklist location

# Delete matching rules from blacklist
while read ip; do

    # Remove any matching explicit whitelisted IPs from Blacklist
    # This will fail if explicit record doesn't exit. Ommitted check for existence.
    iptables -t -D $TABLENAME -s $ip -j DROP

    # Accept this incoming IP
    iptables -A INPUT -i eth0 -s $ip -j ACCEPT

done <~/ec2block/whitelist.txt  # Edit this location if needed

# Drop incoming packets from EC2LIST
iptables -I INPUT -j $TABLENAME

Могу ли я гарантировать, что будет принят IP с правилом ACCEPT, которое также попадает в диапазон, заблокированный правилом DROP?

Есть ли лучший, более приемлемый способ сделать это? Я искал приоритет правил ПРИНЯТЬ против правил УДАЛЕНИЯ, но я не могу найти много.

Один сервер - это CentOS с другой реализацией в Gentoo. Я не могу вспомнить, что есть что, но нужно было использовать:

service iptables save

Вот пример вывода из

$ sudo iptables -L

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
EC2LIST    all  --  anywhere             anywhere
ACCEPT     all  --  ec2-54-66-1-1.ap-southeast-2.compute.amazonaws.com  anywhere
ACCEPT     all  --  ec2-54-67-1-2.ap-southeast-2.compute.amazonaws.com  anywhere

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain EC2LIST (1 references)
target     prot opt source               destination
DROP       all  --  ec2-54-66-0-0.ap-southeast-2.compute.amazonaws.com/16  anywhere
DROP       all  --  ec2-54-67-0-0.us-west-1.compute.amazonaws.com/16  anywhere

2 ответа2

1

Правила Iptables обрабатываются по порядку. Когда правило совпадает, обработка останавливается. Если вы используете вложенные цепочки (а именно, EC2LIST), вложенные цепочки "возвращаются в вызывающую цепочку", если во вложенной цепочке ничего не совпадает.

Вы можете (и должны) использовать это в своих интересах. Если у вас есть IP-адрес, который попадает в правило REJECTED, и вы хотите внести его в белый список, поместите правило ACCEPT для него перед REJECT/DROP.

0

Благодаря Юрезу я понял это. Если я добавляю правила ACCEPT и DROP в один и тот же список, правила ACCEPT, добавленные до того, как правила DROP будут иметь приоритет.

Порядок операций может быть не совсем правильным или обычным, но эта конфигурация работает, если я пытаюсь разрешить 123.123.123.123, но блокировать оставшиеся 123.123.0.0 до 123.123.255.255: например.

iptables -A EC2BLOCK -i eth0 -s 123.123.123.123 -j ACCEPT
iptables -t filter -A EC2BLOCK -s 123.123.0.0/16 -j DROP
iptables -I INPUT -j EC2BLOCK

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .