Назад | Перейти на главную страницу

Изменение цепочки iptables с порта на IP

Я работаю над ограничением доступа к новому XenServer 6.2 монтаж. В правилах iptables по умолчанию на ящиках есть RH-Firewall-1-INPUT сеть, которая открыта для внешнего мира.

Без прохождения и добавления -s <ip range> к каждому правилу (их много) есть ли способ добавить диапазоны IP-адресов ко всем правилам по умолчанию?

Раньше я создавал iptables с INPUT DROP и FORWARD DROP, затем открывал все во внутренние сети, а затем -j REJECT игнорировать остальное. В XenServer правила кажутся немного более сложными и неумышленными блокировка iptables было бы плохо.

Вы могли бы иметь правило, которое -j JUMP в другую цепочку, если IP соответствует вашему диапазону, иначе просто отбросьте все.

FWIW, это правила XenServer 6.2 по умолчанию - в основном стандартные правила RedHat, поскольку XenServer основан на RedHat:

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     47   --  *      *       0.0.0.0/0            0.0.0.0/0           
 499M 1226G RH-Firewall-1-INPUT  all  --  *      *       0.0.0.0/0            0.0.0.0/0           

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 RH-Firewall-1-INPUT  all  --  *      *       0.0.0.0/0            0.0.0.0/0           

Chain OUTPUT (policy ACCEPT 187M packets, 1105G bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain RH-Firewall-1-INPUT (2 references)
 pkts bytes target     prot opt in     out     source               destination         
 312K  429M ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
15842 1331K ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           icmp type 255 
    0     0 ACCEPT     esp  --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     ah   --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            224.0.0.251         udp dpt:5353 
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp dpt:631 
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:631 
    0     0 ACCEPT     udp  --  xenapi *       0.0.0.0/0            0.0.0.0/0           udp dpt:67 
 497M 1223G ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW udp dpt:694 
    1    60 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
    3   180 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:80 
10474  543K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:443 
1883K 2404M REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Поэтому, если вы хотите ограничить доступ к известному диапазону (например, 192.168.0.0/24) вы можете сделать что-то вроде этого:

iptables -I INPUT -s ! 192.168.0.0/24 -j REJECT

Это отклонит все, что НЕ с этого исходного адреса, поэтому остальные правила будут применяться только к этому исходному диапазону.

Если у вас есть несколько надежных источников, вам нужно будет использовать новую цепочку, например, @Matt (хотя вам следует использовать -j RETURN вместо того -j INPUT)

Примерно так должно работать. Внезапно я уже давно не использовал iptables, но.

# Create a whitelist chain
iptables -N whitelist

# Add some ip's to it
iptables -A whitelist -s 1.2.3.4/32 -j RETURN
iptables -A whitelist -s 2.3.4.5/32 -j RETURN
iptables -A whitelist -s 3.4.5.6/32 -j RETURN
# etc

# default drop on whitelist, no match - drop
iptables -P whitelist DROP


# Jump to the whitelist chain by default which will jump back if we get a match
iptables -A INPUT -j whitelist

# now back at your input chain
# All the normal rules follow