IPTables — разрешает трафик только из определенных диапазонов

IPTables — разрешает трафик только из определенных диапазонов

Я пытаюсь заблокировать весь трафик на веб-сервер, за исключением некоторых определенных подсетей. Я проверил множество сообщений и считал, что правильно настроил iptables, но по какой-то причине сайт все еще доступен за пределами подсетей, определенных мной в наборе правил. Может ли кто-нибудь пролить свет на то, что я мог сделать неправильно? Я установил, что удаление правила 3 ​​делает сайт вообще недоступным. Сам сайт находится в 10.10.0.0/16.

Chain INPUT (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 ACCEPT     all  --  any    any     10.10.0.0/16         anywhere            
2        0     0 ACCEPT     all  --  any    any     172.30.0.0/16        anywhere            
3        0     0 ACCEPT     all  --  lo     any     anywhere             anywhere            

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 ACCEPT     all  --  any    lo      anywhere             anywhere    

Целью будет добавление в белый список различных публичных IP-адресов и блокировка сайта, чтобы он был доступен только некоторым.

Были добавлены следующие правила:

iptables -I INPUT -i lo -j ACCEPT
iptables -I OUTPUT -o lo -j ACCEPT
iptables -I INPUT -s 10.10.0.0/16 -j ACCEPT
iptables -I INPUT -s 172.30.0.0/16 -j ACCEPT
iptables -P INPUT DROP

решение1

Theпорядок правилимеет значение в iptables. Используя iptables -Aвы добавляете правилав конценабора правил. Но iptables -Iвставляет правило поверх набора правил, если вы не указали номер строки (вы этого не сделали). В результате правила не оцениваются в предполагаемом порядке.

Вот пример конфигурации, которая должна работать, на основеэта почта. Очистите свои правила заранее, чтобы избежать дублирования.

iptables -P FORWARD DROP
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -s 10.10.0.0/16 -j ACCEPT
iptables -A INPUT -s 172.30.0.0/16 -j ACCEPT
# add some more whitelisting rules here
iptables -P INPUT DROP # Drop everything we don't accept

Третье правило важно:

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

в противном случае ваш сервер не будет получать ответы на инициированные им соединения, например, DNS-запросы.

Кстати, iptables работает с IPv4, но не с IPv6, поэтому, если ваш сервер поддерживает IPv6, у вас могут быть клиенты, подключающиеся с помощьюIPv6. Это возможно, если они подключаются по имени хоста вместо IP-адреса, и что имя хоста разрешается в допустимый адрес IPv6 на вашем сервере. Вы, вероятно, знаете, но многие люди до сих пор не знают, что iptables фильтрует трафик IPv6 (и атаки). Я бы также добавил похожие ip6tablesправила, если это подходит для вашей настройки.

Связанный контент