@WbdT

Как правильно настроить iptables для такого варианта?

Есть сервер с centos 7.2, хочу, чтобы в сеть смотрел только ssh порт(к примеру, 6292), порт openvpn, остальные коннекты должны приниматься только от сети cloudflare(ip4+ip6), остальное - дропаем. Как это правильно реализовать?
  • Вопрос задан
  • 418 просмотров
Решения вопроса 1
a13xsus
@a13xsus
Lazy developer
Ну вообще нужно знать устройство вашего openvpn, может у вас там маршрутизация хитрая. В общем выглядит как-то так:

предполагаем, что политика INPUT и OUTPUT по умолчанию ACCEPT
#разрешаем loopback
iptables -A INPUT -i lo -j ACCEPT

#разрешаем icmp
iptables -A INPUT -p icmp -j ACCEPT

#разрешаем коннект на 6292 tcp
iptables -A INPUT -p tcp -m tcp --dport 6292 -j ACCEPT

#настраиваем openvpn (это порты по-умолчанию)
#разрешаем соединения на udp порт openvpn
iptables -A INPUT -i eth0 -m state --state NEW -p udp --dport 1194 -j ACCEPT

#разрешаем TUN соединения к openvpn серверу
iptables -A INPUT -i tun+ -j ACCEPT

#разрешаем форвардинг соединений с TUN интерфейса через другие интерфейсы
iptables -A FORWARD -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT

#натируем клиентсткий vpn трафик в интернет (маску vpn подсети свою указывайте)
iptables -t nat -A POSTROUTING -s 10.0.0.0/16 -o eth0 -j MASQUERADE

#дальше настройка CloudFlare, взял отсюда https://rietta.com/blog/2012/09/10/using-iptables-to-require-cloudflare/
#
# CloudFlare Network has Access to HTTP (port 80)
#
iptables -A INPUT -s 204.93.240.0/24 -p tcp --dport http -j ACCEPT
iptables -A INPUT -s 204.93.177.0/24 -p tcp --dport http -j ACCEPT
iptables -A INPUT -s 199.27.128.0/21 -p tcp --dport http -j ACCEPT
iptables -A INPUT -s 173.245.48.0/20 -p tcp --dport http -j ACCEPT
iptables -A INPUT -s 103.22.200.0/22 -p tcp --dport http -j ACCEPT
iptables -A INPUT -s 141.101.64.0/18 -p tcp --dport http -j ACCEPT
iptables -A INPUT -s 108.162.192.0/18 -p tcp --dport http -j ACCEPT
iptables -A INPUT -s 190.93.240.0/20 -p tcp --dport http -j ACCEPT
#
# CloudFlare Network has Access to Encrypted HTTPS (port 443)
#
iptables -A INPUT -s 204.93.240.0/24 -p tcp --dport https -j ACCEPT
iptables -A INPUT -s 204.93.177.0/24 -p tcp --dport https -j ACCEPT
iptables -A INPUT -s 199.27.128.0/21 -p tcp --dport https -j ACCEPT
iptables -A INPUT -s 173.245.48.0/20 -p tcp --dport https -j ACCEPT
iptables -A INPUT -s 103.22.200.0/22 -p tcp --dport https -j ACCEPT
iptables -A INPUT -s 141.101.64.0/18 -p tcp --dport https -j ACCEPT
iptables -A INPUT -s 108.162.192.0/18 -p tcp --dport https -j ACCEPT
iptables -A INPUT -s 190.93.240.0/20 -p tcp --dport https -j ACCEPT

#RELATED,ESTABLISHED соединения разрешаем
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

#все остальное запрещаем
iptables -A INPUT -j REJECT --reject-with icmp-port-unreachable


Правила для CloudFlare будет удобней вынести в отдельную цепочку.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы