Задать вопрос
@IsaevDev

Как в iptables открыть порт только для частной сети?

Создал частную сеть на VPS хостинге
Пишет:
Шлюз: 10.0.0.1
Маска: 255.255.255.0
IP адреса через DHCP

Дальше хочу сделать кэш сервер с redis на 6379 порту
Ставлю такие правила:

iptables -A INPUT -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p UDP -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p TCP --sport 22 -j ACCEPT
iptables -A INPUT -p TCP -s 10.0.0.1/24 --dport 6379 -j ACCEPT (или 10.0.0.0)
iptables -A OUTPUT -p TCP --sport 6379 -j ACCEPT
iptables -A INPUT -j DROP
iptables -A OUTPUT -j DROP

Пробую подключиться с сервера из частной сети - дропает. Без правил работает
Подскажите в какую сторону копать?
Спасибо!
  • Вопрос задан
  • 3065 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 2
leahch
@leahch Куратор тега Linux
3D специалист. Dолго, Dорого, Dерьмово.
Вы все еще пишете iptables руками?! Тогда мы идем к вам!
Поставьте наконец firehol или ufw, или какой другой аналог автогенераторов правил.

Мой фаворит - firehol - https://firehol.org
# apt-get install firehol
# vi /etc/default/firehol
# /etc/init.d/firehol start|stop|restart|status

Ну и конфигурирования под ваши нужды
server_redis_ports="tcp/6379 udp/6379"
client_redis_ports="default 6379"

redirect to 22 proto tcp dport 2244

interface eth0 internet
    policy drop
    protection strong
    server smtp accept
    server http accept
    server ftp  accept
    server ssh  accept ### (!) проверить сначала работу по 2244, не выключать текущую сессию ssh!
    client ping accept

interface eth1 myprivatelan
    policy reject
    server "ping ssh redis" accept src 10.0.0.0/24
    server dhcp accept
    client "ssh ping redis dhcp"  accept
Ответ написан
@krosh
Странно, но правила выглядят рабочими. Может что-то не так на стороне клиента?

Вместо iptables -A INPUT -j DROP
используйте iptables -P INPUT DROP

Рекомендую пользоваться:
iptables-save > ipt.rules
iptables-restore < ipt.rules


Попробуйте посмотреть лог. Надо перед ACCEPTами добаивить:
iptables -A INPUT -p tcp --dport 22 -j LOG
iptables -A OUTPUT -p TCP --sport 22 -j LOG


и потом
journalctl -f

SSH-клиент работает?
Если -P OUTPUT ACCEPT, работает?
Нужно посмотреть вывод на сервере и клиенте
ip a
iptables-save
netstat -plnt


Ну и вообще нет смысла на хосте ограничивать OUTPUT. Это логично делать на пограничном МЭ. Софт сам будет слать данные в сеть? Зачем эти ограничения? Если INPUT будет фильтроваться, значит и ответных пакетов не будет. А если злоумышленник взломает сервер, то логично, что он сможет добавить исключение для своего приложения.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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