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

Ubuntu iptables разрешает определенные IP-адреса

У меня есть кластер riak, который мне нужен, чтобы разрешить доступ к информации только определенным IP-адресам. Я сейчас использую, -A INPUT -s 192.168.10.200 -j ACCEPT, чтобы разрешить этот IP-адрес, и внизу моих правил я -A INPUT -j REJECT и -A FORWARD -j REJECT, чтобы отклонить другой трафик. Кто-нибудь может посоветовать, где я ошибаюсь? Спасибо!

Полные правила:

-A INPUT -s 192.168.1.181 -j ACCEPT
-I INPUT -p tcp --dport 8098 -j ACCEPT
-I INPUT -p tcp --dport 8099 -j ACCEPT
-I INPUT -p tcp --dport 4369 -j ACCEPT
-I INPUT -p tcp --dport 5678:5679 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -j ACCEPT
-A INPUT -p tcp -m state --state NEW --dport 2500 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
-A INPUT -j REJECT -A FORWARD -j REJECT

Netfilter имеет 5 основных цепочек. На данный момент вы можете игнорировать PREROUTING и POSTROUTING, поэтому вам нужно манипулировать 3 INPUT, FORWARD и OUTPUT.

INPUT и OUTPUT контролируют трафик, направляемый в саму систему, а FORWARD контролирует трафик, который проходит через и направляется на другую машину (в случае шлюза).

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

# Rule 1: accept packets from established connections to enter and leave the system
iptables -A INPUT -i eth0 -p tcp -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p udp -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p udp -m state --state ESTABLISHED -j ACCEPT

# Rule 2: accept new connections entering the system
iptables -A INPUT -i eth0 -p tcp -s 192.168.10.200 -m state --state NEW -j ACCEPT 



# Rule 3: block all connections entering and leaving the system (if not previously accepted)
iptables -A INPUT -i eth0 -j DROP

# note: only use the filtering on output if you want to control outgoing connection
# if you want to let all connections leave your system, just comment this out
iptables -A OUTPUT -o eth0 -j DROP 

Правила 1 и 3 являются общими, Правило 2 относится к конкретному соединению. Просто используйте этот образец и добавьте новое Правило 2, когда вам понадобятся новые соединения.

Если хотите чего-то более солидного, взгляните на это: http://1nw.eu/!MJ

Хорошо, я прочитал ваши правила полностью.

Прежде всего, одна важная вещь: пожалуйста не смешайте -A с -I.

  • -A добавляет правила до конца цепочки
  • -I вставки правила в цепочку (если позиция не указана, она вставляется в первое место)

Итак, ваши правила iptables на самом деле:

-A INPUT -p tcp --dport 5678:5679 -j ACCEPT
-A INPUT -p tcp --dport 4369 -j ACCEPT
-A INPUT -p tcp --dport 8099 -j ACCEPT
-A INPUT -p tcp --dport 8098 -j ACCEPT
-A INPUT -s 192.168.1.181 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp -m state --state NEW --dport 2500 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
-A INPUT -j REJECT
-A FORWARD -j REJECT
-A OUTPUT -j ACCEPT

Как видите, правила INPUT с №1 по №4 не ограничить любой исходный адрес.

Теперь, если вы действительно хотите ограничить доступ к этим портам до 192.168.1.181, вам придется сделать это следующим образом:

# Established connections should just pass
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Loopbacks will not match 192.168.1.181, so we ACCEPT them here
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
# Other than 192.168.1.181, we reject
-A INPUT -s 192.168.1.181 -j in_allow
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
-A INPUT -j REJECT
# Allow only the following ports
-A in_allow -p tcp --dport 5678:5679 -j ACCEPT
-A in_allow -p tcp --dport 4369 -j ACCEPT
-A in_allow -p tcp --dport 8099 -j ACCEPT
-A in_allow -p tcp --dport 8098 -j ACCEPT
-A in_allow -p tcp -m state --state NEW --dport 2500 -j ACCEPT
-A in_allow -p icmp -m icmp --icmp-type 8 -j ACCEPT
#
-A FORWARD -j REJECT
-A OUTPUT -j ACCEPT

Только один вопрос: почему -m state --state NEW для --dport 2500?

Важная заметка: Не забудьте сначала ПРОМЫВИТЬ и УДАЛИТЬ все правила iptables перед применением вышеуказанного.

Недостаточно разрешить входящий трафик, используя: -A INPUT -s 192.168.10.200, или перенаправил трафик с помощью: -A INPUT -s 192.168.10.200. Вам не хватает соответствующего трафика. Вам необходимо добавить:

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

INPUT должен использоваться для трафика, направляемого на сам брандмауэр. FORWARD должен использоваться для трафика, предназначенного для других машин. Кроме того, в этом случае не забудьте включить переадресацию IP.