• Правильно ли я все сделал в 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).
    Ответ написан
    Комментировать
  • Как в firefox devtools вернуть цветовую схему со старых версий?

    EvilMan
    @EvilMan
    Открыть Инструменты разработчика, нажать на иконку с шестерёнкой (настройки инструментов) в верхней строчке. И там будет пункт "Темы" с переключателями "Тёмная", "Светлая" и "Firebug".
    Ответ написан
  • Увидит ли кто-то мой реальный мак адрес?

    EvilMan
    @EvilMan
    Ваш реальный мак-адрес доступен и виден только в пределах того же широковещательного сегмента, в котором вы находитесь. Дальше уже ваш мак-адрес не будет виден, а будет виден мак-адрес оборудования провайдера. Разве что в логах останется где-нибудь. За подробностями рекомендую обратиться к Таненбауму или к Олиферам.
    Ответ написан
    Комментировать
  • Как фильтровать 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 комментария
  • Как пройти путь из точки A в точку D за определенное время?

    EvilMan
    @EvilMan
    1. Сначала вам нужно узнать суммарную длину всего пути,
    2. Обходя следующую точку, вы можете заносить в массив значений расстояние от начала пути до этой точки.
    3. На выходе получаете массив с абсолютными значениями.
    4. Опционально для ускорения можно преобразовать их в процентные.

    Теперь, чтобы определить процент от пути, надо сделать следующее:
    1. Если в массиве у нас абсолютные значения, то надо процентное значение преобразовать в абсолютное.
    2. Последовательно идёте по массиву, и находите две точки, между которыми находится искомая точка останова.
    3. Теперь всего лишь осталось уточнить координаты точки останова. Это не так сложно, так как вам известны координаты точек, и расстояние точки останова до этих точек.
    Если интересно, могу кинуть псевдокод, так как в JS не шибко силён.
    Ответ написан
  • Как развернуть сеть SDN?

    EvilMan
    @EvilMan
    Самый минимум можно сэмулировать в GNS3, использовав в качестве сетевого оборудования виртуальные машины linux с openvswitch с несколькими сетевыми картами, запущенные в qemu/virtualbox. В общем, для старта можно начать отсюда, а потом гуглить дальше.
    Ответ написан
    2 комментария
  • Объединение интернет каналов до определенных сетей в Debian Wheezy?

    EvilMan
    @EvilMan
    Тут единственный вариант - делать round-robin маркировку пакетов до этих подсетей. Просто продублировать правила не прокатит - будет срабатывать только первое, а до остальных дело не дойдёт. Чистыми средствами iproute это так же не разрулить - multipath routing работает с потоками, а не с отдельными пакетами.
    Схема более-менее стандартная: три таблицы, в каждой по дефолтному маршруту. А так же три правила маршрутизации по метке. В iptables прописываете что-то вроде этого:
    iptables -t mangle -A PREROUTING --dst <subnet/prefix> -m statistic --mode nth --every 3 -j MARK --set-mark 0x1
    iptables -t mangle -A PREROUTING --dst <subnet/prefix> -m mark ! --mark 0x1 -m statistic --mode nth --every 2 -j MARK --set-mark 0x2
    iptables -t mangle -A PREROUTING --dst <subnet/prefix> -m mark ! --mark 0x1 -m mark ! --mark 0x2 -j MARK --set-mark 0x3

    Этим вы обеспечиваете равномерную маркировку на три метки на уровне пакетов до подсети.
    Но если у вас на этом маршрутизаторе ещё и выполняется NAT в разные адреса, то не получится, так как трассировщик соединений (conntrack) так же работает с потоками, а не отдельными пакетами. В этом случае задача становится нетривиальной. В случае, если NAT выполняется в один адрес, то должно прокатить.
    Ответ написан
  • Iptables. Доступ в интернет

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

    EvilMan
    @EvilMan
    Покажите конфиг что ли. По описанию, всё правильно делаете. Но раз не работает, значит что-то упустили из виду. Адреса из одной подсети или из разных? Если из одной, то никакого PBR не нужно, а просто по метке делать НАТ в нужный адрес (вместо masquerade используйте src-nat). Если же выданные провайдером адреса из разных подсетей (с разными шлюзами), то тогда Вам действительно нужно PBR, но там просто добавляется по отдельному маршруту с меткой на каждый шлюз.
    Ответ написан
    5 комментариев
  • Как редиректить исходящий траффик с помощью 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.
    Ответ написан
    Комментировать
  • Как защитить вкладки (не закладки) браузере FireFox от краха системы?

    EvilMan
    @EvilMan
    Есть неплохое дополнение для замены встроенного менеджера сессий - Session Manager. Там есть и функция периодического сохранения состояний открытых вкладок специально на случай краха браузера.
    Ответ написан
    1 комментарий
  • Как защитить вкладки (не закладки) браузере FireFox от краха системы?

    EvilMan
    @EvilMan
    Заходите в Настройки. В пункте "Синхронизация" отмечайте пункт "Вкладки". Журнал - Вкладки с других устройств. Там уже можете выбрать, какие вкладки хотите открыть. Так же очень удобное дополнение TabMixPlus для работы с вкладками: можете их защитить от случайного закрытия, прикрепить, чтобы они всегда находились в самом начале панели вкладок и много других плюшек. Как-то так.
    Ответ написан
    1 комментарий
  • Как сделать проброс портов в Mikrotik при обращении из локалки?

    EvilMan
    @EvilMan
    Маскардинг не работает в вашем случае. Добавляйте явное правило SNAT для таких пакетов.
    В общем, всё выглядит примерно так.
    1. LAN client -> Mikrotik, 192.168.0.100:4555 -> 1.2.3.4:87 (на роутере у этого пакета будет in-interface ether2, так как пакет действительно прилетел из локальной сети) - если в правиле указано сопоставление пакета по входящему интерфейсу для dst-nat (логичнее предположить, что он у вас указан как ether1), то никакого перенаправления не будет. Либо заводите два правила, либо не проверяете для перенаправляемых пакетов входящий интерфейс, а только адрес назначения, протокол и порт. Двигаемся дальше.

    2. Mikrotik -> LAN server, 192.168.0.100:4555 -> 192.168.0.2:87 (output-interface ether2) - Победили перенаправление и пакеты теперь успешно улетают в локалку после замены адреса назначения (в том-то и суть dst-nat). Но что будет дальше? Локальный сервак получает перенаправленный через роутер пакет и отвечает на него напрямую в обход роутера.

    3. LAN server -> LAN client, 192.168.0.2:87 -> 192.168.0.100:4555 - Это ответный пакет от сервера. Но клиент ожидает пакеты с адресом источника 1.2.3.4, а не эти, и отбрасывает их. Либо молча, либо явно с посылкой ICMP-сообщения.

    Вот такие дела. Отсюда решение. Правила ната на микротике.
    1. Правило для проброса портов из интернета:
    chain = nat/prerouting,
      input-interface = ether1, 
      dst-ip = 1.2.3.4, 
      protocol = tcp, 
      dst-port = 87, 
      action = dst-nat, 
      dst-nat-address = 192.168.0.2, 
      dst-nat-port = 87.

    2. Правило для проброса портов из локалки:
    chain = nat/prerouting
      input-interface = ether2, 
      dst-ip 1.2.3.4, 
      src-ip = 192.168.0.0/24, 
      protocol = tcp, 
      dst-port = 87, 
      action = dst-nat, 
      dst-nat-address = 192.168.0.2, 
      dst-nat-port = 87.

    3. Правило для source-nat, чтобы ответные пакеты сервера так же пошли через роутер:
    chain = nat/postrouting,
      output-interface = ether2, 
      dst-ip = 192.168.0.2, 
      src-ip = 192.168.0.0/24, 
      protocol = tcp, 
      dst-port = 87, 
      action = src-nat, 
      src-nat-address = 192.168.0.1

    Вот как-то так. Можно, кстати, пакеты из локалки в локалку метить в цепочке FORWARD и уже на основе метки делать src-nat.
    Ответ написан
    7 комментариев
  • Можно ли сделать роутер из такого покоцанного Линукса?

    EvilMan
    @EvilMan
    Можно делать NAT и без iptables. Но это будет stateless nat: один в один. Правда ядро 2.4, не уверен, что в нём поддержка это включена.
    Ответ написан
    Комментировать
  • Как в 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 неправильно. Может расскажете подробнее схему?
    Ответ написан
    Комментировать