Ответы пользователя по тегу Iptables
  • Правильно ли я все сделал в iptables?

    EvilMan
    @EvilMan
    Если ставите политику DROP и на OUTPUT, то нужно в неё добавить симметричные разрешающие правила. Например, если у вас есть правило iptables -A INPUT -p tcp --dport 22 -j ACCEPT, то нужно будет и правило iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT. Но обычной практикой является то, что OUTPUT оставляют пустым с политикой ACCEPT.

    Так же обычно добавляют правило типа iptables -A INPUT -i lo -j ACCEPT для того, чтобы разрешить коммуникации между процессами на самом хосте, и правило
    iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
    для того, чтобы разрешить ответные пакеты.

    iptables-save не сохраняет изменения, а только выводит текущий набор правил на стандартный вывод. То, где хранятся настройки iptables зависит от дистрибутива Linux. Например, в Debian-подобных дистрибутивах лучше поставить пакеты netfilter-persistent и iptables-persistent, чтобы можно было загружать настройки файерволла при загрузке.

    В общем, iptables и настройка файерволла требуют хороших знаний по сетям и протоколам, и с наскока их не получится освоить, а только прочитав документацию (благо, есть неплохой перевод iptables tutorial на opennet.ru).
    Ответ написан
    Комментировать
  • Как фильтровать dnat/forward в микротик/mikrotik/iptables?

    EvilMan
    @EvilMan
    Использовать -m conntrack --ctstate DNAT (опционально можно ещё использовать дополнительные ключи - полный список по iptables -m conntrack --help).
    Ответ написан
    Комментировать
  • Как дропать соединения мимо conntrack, через iptables напрямую?

    EvilMan
    @EvilMan
    Как вариант, можно для данных пакетов в таблице raw применять -j CT --notrack, чтобы отключить для них обработку conntrack'ом, а потом дропать их где угодно по своему усмотрению, так как не все сопоставления доступны в таблице raw.
    Ответ написан
    3 комментария
  • Как настроить переадресацию портов в linux?

    EvilMan
    @EvilMan
    iptables -t nat -A OUTPUT --dst $vm-ip-addr -p tcp --dport 8080 -j DNAT --to-destination $vm-ip-addr:80
    Ответ написан
    2 комментария
  • Iptables. Доступ в интернет

    EvilMan
    @EvilMan
    Разрешите ICMP и UDP для DNS. Так же не совсем понятно, как вы разрулили маршрутизацию по этим каналам. Желательно показать ip -4 a ls, ip -4 r ls table all и ip -4 ru ls, если не поможет разрешение дополнительных протоколов.
    Ответ написан
    Комментировать
  • Как редиректить исходящий траффик с помощью iptables?

    EvilMan
    @EvilMan
    В общем, с указанием ---dst 127.0.0.1 не работает. Возможно, надо что-то шаманить в sysctl. Чтобы работало, надо указывать адрес, который у Вас висит на каком-нибудь другом интерфейсе. Источник такого поведения сходу определить трудно, нужно глубже копать, но что-то настроения нет. Может потом как-нибудь.

    Небольшой тест, который я у себя провёл.
    ~$ ip -4 a ls dev lo
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
        inet 127.0.0.1/8 scope host lo
    ~$ ip -4 a ls dev eth0.200
    4: eth0.200@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
        inet 172.27.65.228/16 brd 172.27.255.255 scope global eth0.200
    ~$ sudo iptables -t nat -L OUTPUT -n -v
    Chain OUTPUT (policy ACCEPT 295 packets, 17876 bytes)
     pkts bytes target     prot opt in     out     source               destination
       28  1660 DNAT       tcp  --  *      *       0.0.0.0/0            127.0.0.1            tcp dpt:65001 to:1.1.1.1:8001
        2   120 DNAT       tcp  --  *      *       0.0.0.0/0            172.27.65.228        tcp dpt:65001 to:1.1.1.1:8002

    Проверяем первый случай (где в правиле dst 127.0.0.1). При этом в тисипидампе глухо, а в таблице трассировщика не появляется записи о потоке.
    ~$ telnet 127.0.0.1 65001
    ~$ sudo conntrack -L --orig-dst 127.0.0.1
    conntrack v1.2.1 (conntrack-tools): 0 flow entries have been shown.

    Теперь другой вариант, когда dst 172.27.65.228. В тисипидампе видим уходящие пакеты, а в таблице трассировщика соединений - запись о потоке.
    ~$ telnet 172.27.65.228 65001
    ~$ sudo tcpdump -ni eth0.200 'ip host 1.1.1.1'
    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on eth0.200, link-type EN10MB (Ethernet), capture size 65535 bytes
    19:21:59.848777 IP 172.27.65.228.48735 > 1.1.1.1.8002: Flags [S], seq 3790799685, win 43690, options [mss 65495,sackOK,TS val 1388718972 ecr 0,nop,wscale 7], length 0
    19:22:00.850050 IP 172.27.65.228.48735 > 1.1.1.1.8002: Flags [S], seq 3790799685, win 43690, options [mss 65495,sackOK,TS val 1388719974 ecr 0,nop,wscale 7], length 0
    19:22:02.852057 IP 172.27.65.228.48735 > 1.1.1.1.8002: Flags [S], seq 3790799685, win 43690, options [mss 65495,sackOK,TS val 1388721976 ecr 0,nop,wscale 7], length 0
    19:22:06.860066 IP 172.27.65.228.48735 > 1.1.1.1.8002: Flags [S], seq 3790799685, win 43690, options [mss 65495,sackOK,TS val 1388725984 ecr 0,nop,wscale 7], length 0
    ....
    ~$ sudo conntrack -L --orig-src 172.27.65.228 --orig-dst 172.27.65.228
    tcp      6 117 SYN_SENT src=172.27.65.228 dst=172.27.65.228 sport=48924 dport=65001 [UNREPLIED] src=1.1.1.1 dst=172.27.65.228 sport=8002 dport=48924 mark=0 use=1
    conntrack v1.2.1 (conntrack-tools): 1 flow entries have been shown.
    Ответ написан
    Комментировать
  • Как в iptables блокировать все соединения SYN_RECV?

    EvilMan
    @EvilMan
    В новых ядрах появилась поддержка SYN-PROXY, что очень сильно может ВАМ помочь.
    Ответ написан
    Комментировать
  • Где маркировать пакеты в iptables, если надо макировать ответ после SNAT и фильтровать по исходному IP (до SNAT)?

    EvilMan
    @EvilMan
    Если нужно отбирать пакеты по оригинальным адресам (до трансляции), то можно использовать модуль сопоставления (match) conntrack.
    Краткая справка опций данного сопоставления (можно посмотреть по iptables -m conntrack --help как и для всех других типов сопоставлений):
    [!] --ctstate {INVALID|ESTABLISHED|NEW|RELATED|UNTRACKED|SNAT|DNAT}[,...]
                                   State(s) to match
    [!] --ctproto proto            Protocol to match; by number or name, e.g. "tcp"
    [!] --ctorigsrc address[/mask]
    [!] --ctorigdst address[/mask]
    [!] --ctreplsrc address[/mask]
    [!] --ctrepldst address[/mask]
                                   Original/Reply source/destination address
    [!] --ctorigsrcport port
    [!] --ctorigdstport port
    [!] --ctreplsrcport port
    [!] --ctrepldstport port
                                   TCP/UDP/SCTP orig./reply source/destination port
    [!] --ctstatus {NONE|EXPECTED|SEEN_REPLY|ASSURED|CONFIRMED}[,...]
                                   Status(es) to match
    [!] --ctexpire time[:time]     Match remaining lifetime in seconds against
                                   value or range of values (inclusive)
        --ctdir {ORIGINAL|REPLY}   Flow direction of packet


    Но маркировать после SNAT не получится, так как nat выполняется в nat/POSTROUTING уже ПОСЛЕ mangle/POSTROUTING (диаграмма прохождения пакетов через Netfilter). При этом решение о маршрутизации принимается до SNAT, уже пытаться маршрутизировать пакеты в другую таблицу после SNAT неправильно. Может расскажете подробнее схему?
    Ответ написан
    Комментировать
  • Как правильно настроить OpenVPN для последовательной маршрутизации трафика через два сервера?

    EvilMan
    @EvilMan
    Достаточно клиентам отдать маршрут через первый сервер (сервер 1), а на серверах 1 и 2 настроить маршрутизацию. Нат нужно настраивать только на сервере 2, через который трафик уже в интернет уходит.
    На первом сервере:
    ip route add default via <server2-ip> dev tunX table 10
    ip rule add from <clients-net> lookup 10 pref 10
    

    На втором сервере надо будет уже настроить НАТ и прописать маршрут до клиентских сетей через сервер 1
    ip route add <clients-net> via <server1-ip> dev tunY
    iptables -t nat -A POSTROUTING --src <clients-net> -o <extiface> \
      -j SNAT --to-source <extip>
    

    Вот как-то так.
    Ответ написан
    Комментировать