@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

Пробую подключиться с сервера из частной сети - дропает. Без правил работает
Подскажите в какую сторону копать?
Спасибо!
  • Вопрос задан
  • 2949 просмотров
Решения вопроса 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 будет фильтроваться, значит и ответных пакетов не будет. А если злоумышленник взломает сервер, то логично, что он сможет добавить исключение для своего приложения.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы