@DarkAlioth

Как настроить фаервол на сервере с несколькими IP?

Есть сервер ubuntu с двумя IP на одном интерфейсе ens1s0.
Подскажите как настроить файрвол (через iptables или ufw), что бы полностью закрыть все порты на одом из IP, а на втором открыть только необходимые.

(задумка в том что бы подключаться к впн по одному IP, а выходить в интернет с другого, на котором будут полностью закрыты все входящие порты)
  • Вопрос задан
  • 244 просмотра
Решения вопроса 1
@dronmaxman
VoIP Administrator
Все достаточно просто.

Недолюбливаю я ufw, мне больше по душе ferm
Не забываем про
sudo sysctl -w net.ipv4.ip_forward=1

Сносим ufw и cтавим надстройку ferm над firewall
sudo apt install ferm

Правим конфиг ferm
sudo vim /etc/ferm/ferm.conf
@def $WAN_IP1 = 1.1.1.1; # На этом разрешаем входящие
@def $WAN_IP2 = 1.1.1.2; # Через этот выходим
@def $DEV_WAN = ens1s0;
@def $VPN_NETS = (10.10.10.0/24 10.10.20.0/24); # Сети VPN клиентов


domain (ip ip6) {
    table filter {
        chain INPUT {
            policy DROP; # Политика поумолчанию, если нет разрешающего правила значит запрещено

            # connection tracking
            mod state state INVALID LOG log-prefix '[FERM] INVALID INPUT DROP: ';
            mod state state INVALID DROP;
            mod state state (ESTABLISHED RELATED) ACCEPT;

            # allow local packet
            interface lo ACCEPT;

             # respond to ping
             #proto icmp ACCEPT;
            
            daddr $WAN_IP1 {

                # respond to ping
                proto icmp ACCEPT;

                # allow SSH connections
                proto tcp dport 22 ACCEPT;

                # allow WEB connections
                proto tcp dport (http https) ACCEPT;

                # allow VPN wireguard connections
                proto udp dport 51820 ACCEPT;
            }


        }
        chain OUTPUT {
            policy ACCEPT;

            # connection tracking
            #mod state state INVALID DROP;
            mod state state (ESTABLISHED RELATED) ACCEPT;
        }
        
        chain FORWARD {
            policy DROP; 

            # connection tracking
            mod state state INVALID DROP;
            mod state state (ESTABLISHED RELATED) ACCEPT;

            saddr $VPN_NETS ACCEPT; # Разрешаем трафику от VPN клиентов проходить в любом направлении
        }
    }
    table nat {
        chain POSTROUTING {
            saddr $VPN_NETS outerface $DEV_WAN SNAT to $WAN_IP2; # Маскируем-натим исходящий трафик от VPN клиентов вторым IP
        }
    }
}

@include ferm.d/;


Применяем конфиг
sudo ferm -i /etc/ferm/ferm.conf
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
leahch
@leahch Куратор тега Linux
3D специалист. Dолго, Dорого, Dерьмово.
Задумка плохая, ибо нужно не только защитить, но и как-то переопределить адрес, с которого отвечать. В общем, долго объяснять, но ломается весь TCP/IP стек и TCP-соединения. Оно конечно можно, но даже я бы за это не взялся. (если я неправ, скажите как сделать)
Не делайте так.
Просто закройте фаерволом.
Ответ написан
Ваш ответ на вопрос

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

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