Linux.org.ua
Технічні питання => Адміністрування => Гілку створено: Toshik від 2005-02-14 14:29:18
-
Отже, у наявності у нас є комп'ютер (К1) з завантаженою Лінакс та сервером VPN (pptpd) та віндові клієнти, які мають під'єднуватися до цього сервера через VPN-канал (припустимо К2).
К1 під'єднаний до локальної мережі у якій знаходиться К2 і інші. Тільки на К1 видається інтернет за допомогою того самого мережевого інтерфейсу (eth0). Як заставити К1 пропускати пакети від К2 в інтернет? Форвардинг пакетів я включив. Може не правильно налаштував файрвол? Підкажіть!!!
-
Можливо це допоможе:
iptables -A POSTROUTING -o eth0 -j MASQUERADE
-
Здається, пане, ви щось наплутали. Чи на етапі побудови, чи коли формулюєте питання.
Бо постає питання: навіщо робити VPN канал між двома машинами, що знаходяться в одній мережі? Вони чудово можуть обмінюватись даними стандартними засобами TCP/IP. Якщо ж одна з них (К1) ще й має доступ до інтернету, а хочеться мати доступ і на другій (К2), то з К1 робиться так званий шлюз (gateway)( +Forwarding, +Masquerading), а на К2 прописується, що шлюзом є К1. І все, ніяких VPN. І немає значення що до якого інтерфейсу приєднано.
-
Та ні, я нічого не наплутав. Просто я постійно експерементую і таким чином вчуся. Для експериментів в мене є декілька комп'ютерів з'єднаних між собою мережею. І на цей раз я дійсно хочу пустити К2 в інтернет за допомогою VPN.
-
Ну, тоді зрозуміло. Але все рівно, варто підходити до проблеми більш структуровано.
1. Налаштування роутера
2. VPN
Ось мій код rc.firewall
#!/bin/bash
IPT=/usr/sbin/iptables
MY_NET=192.168.1.0/24
#Set up policy:
$IPT -P INPUT DROP
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD DROP
# Add new chain for ppp:
$IPT -N ppp-in
#Setting rules
$IPT -A FORWARD -s $MY_NET -j ACCEPT
$IPT -t nat -A POSTROUTING -s $MY_NET -j MASQUERADE
$IPT -A INPUT -i eth0 -s $MY_NET -j ACCEPT
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A INPUT -i ppp0 -j ppp-in
$IPT -A INPUT -i eth1 -j ACCEPT
$IPT -A ppp-in -s $MY_NET -j DROP
# DNS
$IPT -A ppp-in -p TCP -s 0/0 --destination-port 53 -j ACCEPT
$IPT -A ppp-in -p UDP -s 0/0 --destination-port 53 -j ACCEPT
$IPT -A INPUT -p UDP -d 0/0 --destination-port 1025: -j ACCEPT
$IPT -A ppp-in -p TCP ! --syn -j ACCEPT
#Done
echo Firewall is Up now!
exit
Виберіть потрібне
-
дуже дякую :)
-
УРА!!! Вдалося! Все виявилося простіше чим я думав. Кому цікаво, ось як я це зробив:
#iptables -P INPUT ACCEPT
#iptables -P FORWARD ACCEPT
#iptables -P OUTPUT ACCEPT
#iptables -t nat -A POSTROUTING -s $MY_NET -j MASQUERADE
#iptables -A FORWARD -s $MY_NET -i ! ppp0 -j DROP
Хто бачить якісь проколи - кажіть.
-
Ну і добре. Роутер налаштовано. Правда, строку
iptables -A FORWARD -s $MY_NET -i ! ppp0 -j DROP
можна і прибрати, особливої безпеки вона не забезпечить.
-
Чому прибрати? Якщо цього рядка не стане, то форварду будуть підлягати пакети, що прийшли не тільки через VPN, а й просто на мережевий інтерфейс (наприклад, якщо комп'ютер вказаний як шлюз). Можливо, я щось не правильно зрозумів?
І ще питання: чи можна відкрити форвардинг пакетів усім VPN-інтерфейсам (у даному випадку відкрито тільки для ppp0), бо коли підключається декілька користувачів, то з'являється ppp1,ppp2...
-
Чому прибрати? Якщо цього рядка не стане, то форварду будуть підлягати пакети, що прийшли не тільки через VPN, а й просто на мережевий інтерфейс (наприклад, якщо комп'ютер вказаний як шлюз). Можливо, я щось не правильно зрозумів?
Тут я трохи заплутався.
Але, в цілому, політика "Що не заборонено, те дозволено" не дуже вдала. Тому що легко щось упустити, і як результат - неплановий трафік.
У політиці "Що не дозволено, те заборонено" при логічній помилці трафік буде блоковано.
Тому краще було б робити все починаючи з:
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
І ще питання: чи можна відкрити форвардинг пакетів усім VPN-інтерфейсам (у даному випадку відкрито тільки для ppp0), бо коли підключається декілька користувачів, то з'являється ppp1,ppp2...
Можна зробити так ( eth1 - локальна мережа, eth0 - inet )
$IPT -P FORWARD ACCEPT
$IPT -A FORWARD -i eth1 -j DROP
$IPT -A FORWARD -i eth0 -j DROP
Тепер буде форвардити тільки через ті інтерфейси, які лишились, тобто ppp0,ppp1,...
-
Цікавий факт, я зробив наступним чином:
#iptables -P INPUT DROP
#iptables -A INPUT -s $MY_NET -i eth0 -j ACCEPT
По ідеї, воно має кидати пакети, що надійшли не з $MY_NET, а воно кидає всі вхідні пакети ??? Тобто працює лише перше правило :-/
-
Можливо, змінна MY_NET має неправильне значення
echo $MY_NET
Ще можна подивитись
iptables -L -v
Детальну статистику. І побачити, що не так.
-
Та ні, в $MY_NET все нормально :(
-
Пришліть, що видає iptables -L -v. Я не телепат :)
-
Chain INPUT (policy DROP 27 packets, 2275 bytes)
pkts bytes target prot opt in out source destination
61 4145 ACCEPT all -- eth0 any localnet/24 anywhere
Chain FORWARD (policy DROP 1 packets, 1400 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 27 packets, 2236 bytes)
pkts bytes target prot opt in out source destination
-
Як видно із статистики, 61 пакет із локальної мережі проходить.
І 27 невизначених відкидаються.
Це свідчить про те що твердження
воно кидає всі вхідні пакети Huh Тобто працює лише перше правило
невірне.
Інша справа, якщо сказати, що щось працює не так, як потрібно. Можливо, ті 27 пакетів нам потрібні.
Щоб подивитись, які пакети відкидаються, можна додати в кінці ланцюга правило
iptables -A INPUT -j LOG
І подивитись можна в /var/adm/syslog
Мені чогось здається, що вони виявляться із якоїсь невідомої машини і матимуть порт призначення 53 :-)
-
Все. я вже розібрався. Дуже дякую за увагу.
-
Ну і навіщо використовувати MASQUERADE ?
Якщо IP адрес статичний, то краще використати SNAT.
Добродії, ви що не читали, що MASQUERADE чинить навантаження на систему ? MASQUERADE слід застосовувати лиш у випадках динамічного IP адресу, коли IP змінюється кожен заз, коли сервер регіструється у провайдера в системі (VLAN, VPN).