Как я позволяю DNS посредством фильтрации интерфейса с помощью iptables в Бездисплейной Ubuntu

Я видел некоторые вопросы относиться к статическому DNSs, openVPN нажатия сервера и т.д., но ни один из них действительно не применяется, или они требуют инструментов GUI, и я использую бездисплейное Ядро Ubuntu что я SSH в.

root@redacted:~# lsb_release -a
Distributor ID: Ubuntu
Description:    Ubuntu 14.04.3 LTS
Release:        14.04
Codename:       trusty

Когда машина только подключена через eth0 к локальной сети, все хорошо работает. Я могу проверить с помощью ping-запросов дюйм/с непосредственно (8.8.8.8) и разрешенные Доменные имена (google.com).

wget -q -O - ipecho.net/plain #Shows my ISPs provided Public IP

Когда машина подключена через tun0 с помощью сети VPN, я могу проверить с помощью ping-запросов дюйм/с непосредственно (8.8.8.8) и разрешенные Доменные имена (google.com).

wget -q -O - ipecho.net/plain #Shows my VPNs provided Public IP

Все как ожидалось до сих пор...

Теперь проблема входит... Я добавляю следующие правила iptables вынудить определенного пользователя только смочь использовать tun0 адаптер:

sudo iptables -A OUTPUT -m owner --gid-owner vpnonly -o lo -j ACCEPT
sudo iptables -A OUTPUT -m owner --gid-owner vpnonly -o eth0 -p tcp -d 192.168.x.x/24 --sport xxxx -j ACCEPT
sudo iptables -A OUTPUT -m owner --gid-owner vpnonly \! -o tun0 -j REJECT

В случае, если Вам любопытно, второе правило разрешает веб-UI быть доступным в моей локальной сети, которая выполняется как пользователь vpnonly.

Таким образом, теперь то, когда я выполняю процессы, которые я не хочу мочь передать по моему общедоступному IP, таким образом предотвращая утечки, если VPN идет вниз/разъединять/и т.д., я просто выполняю их под vpnonly, кого только группа, является vpnonly. ОДНАКО, когда я выполняю процесс как vpnonly, я могу проверить с помощью ping-запросов дюйм/с непосредственно (8.8.8.8), но я не могу разрешить Доменные имена (google.com).

root@redacted:~# sudo -u vpnonly ping -c 2 google.com
ping: unknown host google.com

Даже если бы я мог бы заставить это разрешать доменные имена снова период, который был бы удовлетворительным, но что я ДЕЙСТВИТЕЛЬНО хотел бы сделать, установлен ПРОСТО VPN для использования отдельного, определенного DNS, при отъезде eth0 для использования 8.8.8.8, 8.8.4.4.

Я погуглил все, о чем я могу думать связанный с этим и не могу решить его... Я надеюсь, что добавил достаточно детали, но счастливо добавлю больше по запросу

РЕДАКТИРОВАНИЕ 1: Полный iptables

root@redacted:~# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere             owner GID match vpnonly
ACCEPT     tcp  --  anywhere             192.168.x.x/24       owner GID match vpnonly tcp spt:xxxx
REJECT     all  --  anywhere             anywhere             owner GID match vpnonly reject-with icmp-port-unreachable

-

root@redacted:~# iptables -L -v
Chain INPUT (policy ACCEPT 16407 packets, 12M bytes)
 pkts bytes target     prot opt in     out     source               destination   

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination   

Chain OUTPUT (policy ACCEPT 6230 packets, 675K bytes)
 pkts bytes target     prot opt in     out     source               destination   
 3751 2800K ACCEPT     all  --  any    lo      anywhere             anywhere             owner GID match vpnonly
 6635 3332K ACCEPT     tcp  --  any    eth0    anywhere             192.168.x.x/24       owner GID match vpnonly tcp spt:xxxx
    4   224 REJECT     all  --  any    !tun0   anywhere             anywhere             owner GID match vpnonly reject-with icmp-port-unreachable

Редактирование 2:

Все функционирует правильно, пока правила iptables не добавляются, в которой точке единственная проблема я страдаю, разрешение доменного имени. Мой vpn также обеспечивает не регистрирующийся DNS. Был бы решение этого, чтобы должным быть изменить мою/etc/network/interfaces запись сервера имен от 192.168.x.1 до IP-адреса DNS, обеспеченного моей VPN и затем позволить все соединения со что IP DNS до отклонения? Я хотел спросить прежде, чем попробовать его, один, чтобы удостовериться, что это было столь безопасно, как я полагаю, что это логически, и два я предлагаю щедрость так или иначе. Я хочу удостовериться, что нет никаких утечек и не хотят представлять один через DNS...

После дальнейшего просвещения, вместо того, чтобы изменить интерфейсы, я должен просто позволить 192.168.x.1 и IP DNS VPN явно до отклонения?

То, что я ДЕЙСТВИТЕЛЬНО хотел бы сделать, вызвать те запросы DNS через tun0 адаптер, сделать ЛЮБУЮ связь с внешним миром от пользователя "vpnonly", проходят VPN, если вообще возможный.

1
задан 6 November 2015 в 23:11

2 ответа

Простой способ состоит в том, чтобы создать сервис .conf, который сохранится, любой iptables постановляет, что Вам нравится.

можно установить пакет, чтобы сделать это, но ручной путь как таков:

sudo vi /etc/init/persist-iptables.conf

можно назвать его вообще, Вам нравится, просто удостоверьтесь, что это находится в /etc/init/ и заканчивается .conf

Затем, Вы хотите вставить следующие строки:

description "Persist IPTables on Boot"

start on runlevel [2345]

script
        # Accept all loopback traffic localhost or 127.0.0.1
        iptables -A INPUT -i lo -j ACCEPT
        iptables -A OUTPUT -o lo -j ACCEPT

        # Accept any DNS traffic, I use a DD-WRT router with
        # Force DNS Redirection to a non-logging DNS
        iptables -A OUTPUT -d 255.255.255.255 -j ACCEPT
        iptables -A INPUT -s 255.255.255.255 -j ACCEPT

        # Accept all local traffic from 192.168.1.1-192.168.1.255
        iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -j ACCEPT
        iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -j ACCEPT

        # Forward all eth0, eth1, etc through tun interfaces
        iptables -A FORWARD -i eth+ -o tun+ -j ACCEPT
        iptables -A FORWARD -i tun+ -o eth+ -j ACCEPT

        # Postroute masquerade through tun interfaces
        iptables -t nat -A POSTROUTING -o tun+ -j MASQUERADE

        # Drop any other traffic through eth adapters
        iptables -A OUTPUT -o eth+ ! -d a.b.c.d -j DROP
end script

Теперь, когда Ваши системные перезагрузки (который очищает Ваши таблицы IP) это будет работать автоматически для обновления iptables снова. Можно также назвать его сами с sudo service persist-iptables start

, Этот файл позволит весь localhost трафик, позволит весь трафик DNS (Вам решать, чтобы удостовериться, что это - ПРАВИЛЬНЫЙ DNS, прибывающий из маршрутизатора), позвольте весь локальный трафик, передайте трафик с eth адаптеров на адаптер бочки и постнаправьте masq он и наконец отбросьте любой другой трафик.

0
ответ дан 30 September 2019 в 05:56

Первый вопрос, банка, Вы получаете доступ к своему серверу DNS? Если Вы блокируете доступ ко всем кроме tun0, можно блокировать доступ DNS.

, Если Вы выполняете некоторый сервер DNS локально быть настолько полными на, Связывают, или что-то как dnsmasq, тот сервис, должно будет также смочь получить доступ к Интернету.

я предложил бы добавить запись в журнале к Вашему iptables перед отклонением, видеть, какой трафик отклоняется.

порт Using 53 является стандартным способом победить безопасность, так открытие *:53, вероятно, неблагоразумно, таким образом, Вы будете лучшими из специфического выдвижения Вашего сервера DNS (локальный и восходящий) как приемлемые цели для трафика. Я принимаю - спорт xxxx, Вы подразумевали использование нестандартного порта вместо:80 для веб-сервиса. Если не необходимо указать, что на 192,168 правилах (так же для IP, это должно быть полное на адресе/32).

Также не забывают, если Вы захотите использовать ping для тестирования, то необходимо будет установить iptable записи для ICMP. ICMP 8 (эхо) является ping, ICMP 0 является ответом ping.

Это также достойно рассмотрения, что направляет Вас, имеют, поскольку необходимо будет удостовериться, что маршрут по умолчанию для трафика является tun0. Если tun0 является единственным допустимым интерфейсом, необходимо гарантировать все маршруты, Вы должны отправить трафику тот путь.

, Если это не диагностирует Ваши проблемы, используйте ethtool, чтобы сделать некоторый сетевой сниффинг, видеть то, что переговоры делают им и что не. Это могло быть что-то странное, как REQ позволяется, но ACK не возвращается.

0
ответ дан 30 September 2019 в 05:56

Другие вопросы по тегам:

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