Войти

Показать полную графическую версию : Проблема с NAT в Линуксе Fedora Core 7


Страниц : [1] 2

voler
30-07-2007, 14:35
Нужен совет где косяк зарылся.

Добавил строку в iptables -A POSTROUTING -s 192.168.1.0/255.255.255.0 -o eth0 -j SNAT --to-source 80.237.27.**

Получил следующий конфигурационный файл.


# Firewall configuration written by system-config-securitylevel
# Manual customization of this file is not recommended.
*nat
:PREROUTING ACCEPT [15:1440]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -s 192.168.1.0/255.255.255.0 -o eth0 -j SNAT --to-source 80.237.27.42
COMMIT
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 137 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 138 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 23 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT


Еще в файле sysctl.conf в строке net.ipv4.ip_forward = 0 поменял на 1.


# Kernel sysctl configuration file for Red Hat Linux
#
# For binary values, 0 is disabled, 1 is enabled. See sysctl(8) and
# sysctl.conf(5) for more details.

# Controls IP packet forwarding
net.ipv4.ip_forward = 1

# Controls source route verification
net.ipv4.conf.default.rp_filter = 1

# Do not accept source routing
net.ipv4.conf.default.accept_source_route = 0

# Controls the System Request debugging functionality of the kernel
kernel.sysrq = 0

# Controls whether core dumps will append the PID to the core filename.
# Useful for debugging multi-threaded applications.
kernel.core_uses_pid = 1

# Controls the use of TCP syncookies
net.ipv4.tcp_syncookies = 1



Но пинги дальше внутреннего адреса сервера 192.168.1.200 не уходят

Пингую адрес сетевой карты которая смотрит наружу 80.237.27.** пинги идут, а вот пинги на шлюз уже не идут 80.237.27.41

Подскажите плиз?

BuGfiX
30-07-2007, 15:27
насколько я понимаю - дело в этом:
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

voler
30-07-2007, 16:19
Я сделал проще, убил стандартные настройки правил.

И получилось вот, что:


# Firewall configuration written by system-config-securitylevel
# Manual customization of this file is not recommended.
*nat
:PREROUTING ACCEPT [15:1440]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -s 192.168.1.0/255.255.255.0 -o eth0 -j SNAT --to-source 80.237.27.**
COMMIT


И продвинулся, но не далеко.

Т.е. я теперь из подсети 192.168.1.0/255.255.255.0 пингую шлюз, но вот mail.ru не как.

Может тут нужно, что то добавить?

BuGfiX
30-07-2007, 17:52
Шлюз 80.237.27.41 Ваш или провайдерский?
Посмотреть в каком месте затык можно командой
$ traceroute -n mail.ru
или из windows
c:\> tracert -d mail.ru

Strange_V
31-07-2007, 01:03
voler
а DNS настроен? когда пингуеш IP по имени хоста определяет?
типа:
PING mail.ru (194.67.57.26) 56(84) bytes of data.

voler
31-07-2007, 11:29
Вообщем проверил.

Настройки клиента такие.

ip 192.168.1.xxx
mask 255.255.255.0
gateway 192.168.1.200 (мой сервер линукс)

dns1 217.150.34.129
dns2 217.150.35.129

выполнил от клиента команду

tracert -d mail.ru

получил результат

Трассировка маршрута к mail.ru [194.67.57.26]
с максимальным числом прыжков 30:
1 <1 мс <1 мс <1 мс 192.168.1.200
2 <1 мс <1 мс <1 мс 80.237.27.41
3 1 ms 1 ms 1 ms 80.237.24.33
4 4 ms 3 ms 4 ms 217.150.56.174
5 5 ms 5 ms 5 ms 194.186.0.141
6 27 ms 48 ms 50 ms 195.239.10.189
7 8 ms 6 ms 6 ms 195.239.13.109
8 6 ms 6 ms 7 ms 194.67.57.26
Трассировка завершена.

От сюда сделал вывод, что dns у клиента был задан не верно.

Кто нибудь выложите свои конфигурационные файлы iptables

И ресурс гду можно более подробно почитать об этом.

BuGfiX
31-07-2007, 12:04
выполнил от клиента команду tracert -d mail.ru получил результат Трассировка маршрута к mail.ru [194.67.57.26]
судя по тому что Вы написали - DNS как раз работает..

Свои фаерволы Вам тут никто не выложит, если есть конкретные вопросы - задавайте. А по поводу информации - вот (http://www.opennet.ru/docs/RUS/iptables/)

voler
31-07-2007, 13:51
Вопросы есть, и много.

Как видно из этих двух строк, править файл настроек вручную не рекомендовано.

# Firewall configuration written by system-config-securitylevel
# Manual customization of this file is not recommended.


Мой файл настроек, сейчас выглядит так.

*nat
:PREROUTING ACCEPT [15:1440]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -s 192.168.1.0/255.255.255.0 -o eth0 -j SNAT --to-source 80.237.27.**
COMMIT


Хотелось бы задать ограничения пользователям, открыть только данные порты 80, 5190, 80, 25, 110.

BuGfiX
31-07-2007, 14:08
Вопросы есть, и много.
Где?

По ссылке которую я дал выше есть подробное описание, и даже на русском всех аспектов настройки iptables.
HINT: Чтобы "открыть только данные порты 80, 5190, 80, 25, 110" - добавлять правила в таблицу filter, цепочку FORWARD.

Strange_V
31-07-2007, 14:56
По поводу настройки iptables BuGfiX дал вам хороший ман, так же можно погуглить (http://www.google.com/search?hl=ru&client=opera&rls=en&hs=LFT&q=%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0+iptables&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr=).
Еще в сети можно найти множество готовых скриптов..

Сам пока не имел возможности глубоко разобраться, работает так (кусок файла настройки):
# Переменная, задающая путь к файлу запуска iptables.
IPT=/sbin/iptables

# Интерфейс локальной сети.
LAN_IFACE="eth0"
LAN_IFACE2="eth1"

# Интерфейс в инет
INET_IFACE="ppp0"

# Удаление правил
$IPT -F
$IPT -t nat -F
$IPT -t mangle -F

# Очищаем нестандартные правила
$IPT -X
$IPT -t nat -X
$IPT -t mangle -X

# Политики по умолчанию.
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCEPT

... ... ...

# Маскарад
$IPT -t nat -A POSTROUTING -p tcp -s 192.168.0.1/24 -m multiport --dport 25,110,5190 -o $INET_IFACE -j MASQUERADE
Сделано на основе готового скрипта.

voler
09-08-2007, 21:10
Вопрос, а почему так. Не проще забить настройки в /etc/sysconfig/iptables

сделать рестарт серввиса и все. # service iptables restart



*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
#Блокируем все icmp запросы.
-A INPUT -p icmp --icmp-type any -j DROP
#-A OUTPUT -p icmp --icmp-type 8 -j ACCEPT
#-A INPUT -p icmp --icmp-type 8 -j ACCEPT
#разрешает web серфинг.
-A INPUT --protocol tcp --dport 80 -j ACCEPT
#разрешает ssh подключения.
-A INPUT --protocol tcp --dport 22 -j ACCEPT
#разрешает получение почты.
-A INPUT --protocol tcp --dport 110 -j ACCEPT
#разрешает отправку почты.
-A INPUT --protocol tcp --dport 25 -j ACCEPT
#разрешает вхдящие покеты аськи.
-A INPUT --protocol tcp --dport 5190 -j ACCEPT

COMMIT


Вот только добится работы пингов я не смог.
Если с нему коментарии с этих строк

#-A OUTPUT -p icmp --icmp-type 8 -j ACCEPT
#-A INPUT -p icmp --icmp-type 8 -j ACCEPT


пинги не идут, лучше делать дроп на icmp отдельно, а открыть нужные. То много писать.

BuGfiX
09-08-2007, 22:01
Вопрос, а почему так. Не проще забить настройки в /etc/sysconfig/iptables
сделать рестарт серввиса и все. # service iptables restart
Метод добавления правил в таблицы роли не играет, делайте как именно Вам удобно, хотя некоторые дистрибутивы (например Suse) содержат свои "оболочки".
Для того чтобы заработал ping наружу, нужно разрешить на выход icmp пакеты типа echo-request, и на вход echo-reply. Для пинга снаружи соответственно наоборот.

voler
16-08-2007, 10:54
Посоветуйте, может что не так.
0/0 - ip адрес


# Firewall configuration written by system-config-securitylevel
# Manual customization of this file is not recommended.
*nat
:PREROUTING ACCEPT [15:1440]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -s 192.168.1.0/255.255.255.0 -o eth0 -j SNAT --to-source ip вашей ситивухи
COMMIT

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
#Разрешаем пинги.
-A INPUT -i eth0 -p icmp --icmp-type echo-reply -j ACCEPT
-A OUTPUT -o eth0 -p icmp --icmp-type echo-request -j ACCEPT

#3априщаем пинговать себя остальным, оставляем только свой IP.
-A OUTPUT -s ! 0/0 -o eth0 -p icmp --icmp-type echo-reply -d 0/0 -j DROP
-A INPUT -s ! 0/0 -i eth0 -p icmp --icmp-type echo-request -d 0/0 -j DROP

#Сообщение, предназначенное для управления потоком между двумя маршрутизаторами
#или маршрутизатором и обычным узлом.
-A INPUT -i eth0 -p icmp --icmp-type source-quench -j ACCEPT
-A OUTPUT -o eth0 -p icmp --icmp-type source-quench -j ACCEPT

#Некорректный параметр.
-A INPUT -i eth0 -p icmp --icmp-type parameter-problem -j ACCEPT
-A OUTPUT -o eth0 -p icmp --icmp-type parameter-problem -j ACCEPT

#Узел назначения не доступен.
-A INPUT -i eth0 -p icmp --icmp-type destination-unreachable -j ACCEPT
-A OUTPUT -o eth0 -p icmp --icmp-type destination-unreachable -j ACCEPT
-A INPUT -p icmp --icmp-type fragmentation-needed -j ACCEPT

#Необходимо для правильной работы трасировки маршрута.
-A INPUT -p icmp --icmp-type port-unreachable -j ACCEPT
-A OUTPUT -p icmp --icmp-type port-unreachable -j ACCEPT
-A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT

#Блокировка нежелатеьных запросов icmp.
#Противодействие smurf - атаке.
-A INPUT -i eth0 -p icmp -d 255.255.255.255 -j DROP
-A OUTPUT -o eth0 -p icmp -d 255.255.255.255 -j REJECT

#Разрешаем взаимодествие между клиентом и сервером для работы DNS.
-A INPUT --protocol udp --dport 53 -j ACCEPT
-A OUTPUT --protocol udp --dport 53 -j ACCEPT
-A INPUT --protocol tcp --dport 53 -j ACCEPT
-A OUTPUT --protocol tcp --dport 53 -j ACCEPT

#разрешает web серфинг.
-A INPUT -d 0/0 --protocol tcp --dport 80 -j ACCEPT
-A OUTPUT -s 0/0 --protocol tcp --dport 80 -j ACCEPT

#разрешает ssh подключения.
-A INPUT -s 0/0 -i eth0 --protocol tcp --dport 22 -d 0/0 -j ACCEPT
-A INPUT -i eth0 --protocol tcp --dport 22 -d 0/0 -j DROP

#Разрешаем работу почты.
#разрешает получение почты.
-A INPUT -d 0/0 -i eth0 --protocol tcp --dport 110 -j ACCEPT
-A OUTPUT -o eth0 --protocol tcp --dport 110 -j ACCEPT
#разрешает отправку почты.
-A INPUT -d 0/0 -i eth0 --protocol tcp --dport 25 -j ACCEPT
-A OUTPUT -s 0/0 -o eth0 --protocol tcp --dport 25 -j ACCEPT

#разрешает вхдящие покеты аськи.
-A INPUT -d 0/0 -i eth0 --protocol tcp --dport 5190 -j ACCEPT
-A OUTPUT -s 0/0 -o eth0 --protocol tcp --dport 5190 -j ACCEPT

#Разрешаем доступ к WEBMIN, только с IP адреса.
-A INPUT -s 0/0 -i eth0 --protocol tcp --dport 10000 -d 0/0 -j ACCEPT



Вот часть моего файла настроек файрвола. Прошу высказать свои комментарии.

И еще возник вопрос по iptables и его родоначальнику ipchains. В ipchains было следующие:
EXTERNAL_INTERFACE в iptables это параметр -i
Internal_ INTERFACE -
LAN_1
LAN_IPADDR_1
LOOPBACK_INTERFACE
IPADDR - адрес компа
ANYWHERE
MY_ISP
LOOPBACK
BROADCAST_DEST
BROADCAST_SRC
NAMESERVER
SMTP_GATEWAY
POP_SERVER
NEWS_SERVER
IMAP_SERVER
PRIVPPORTS
UNPRIVPORTS
SSH_PORTS

Если соответствия данным параметрам в iptables. Man читал.

BuGfiX
16-08-2007, 11:52
Что сразу бросилось в глаза - зачем вот это?
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
И потом еще много правил с действием -j ACCEPT в INPUT и OUTPUT?

Воттут еще:
-A INPUT -d 0/0 --protocol tcp --dport 80 -j ACCEPT
-A OUTPUT -s 0/0 --protocol tcp --dport 80 -j ACCEPT
Имеется в виду что разрешается заход по HTTP на веб-сервер данной машины? Или серфинг с нее?
В первом случае нужно исправить на
-A OUTPUT -s 0/0 --protocol tcp --sport 80 -j ACCEPT
а во втором
-A INPUT -d 0/0 --protocol tcp --sport 80 -j ACCEPT
Аналогично касательно почти и аськи.
Еще мне не понятно зачем нужно второе правило для разрешения ssh, ну и если сервер стоит в инете с открытым ssh, я бы добавил защиту от bruteforce.
Если соответствия данным параметрам в iptables
Что-то мне подсказывает, что это просто переменные, объявленные в скрипте фаервола, и икакого прямого отношения к ipchains и iptables они не имеют.

voler
16-08-2007, 12:31
Возможно ты прав, скорее всего, я прочел об этом "Линукс-сервер в виндовс окружении" Алексея Стаханова.
я бы добавил защиту от bruteforce. - по подробней если можно?\

За остальное спасибо.

И потом еще много правил с действием -j ACCEPT в INPUT и OUTPUT? - Ты считаешь они не нужны?

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]

Это было в стандартном файле.

BuGfiX
16-08-2007, 12:43
Ты считаешь они не нужны?
Если политика по-умолчанию ACCEPT, не вижу никакого смысла разрешать какие-либо пакеты по определенным критериям, разве что может пригодиться для подсчета статистики. Я обычно делаю такие политики:
INPUT = DROP
OUTPUT = ACCEPT
FORWARD = DROP
а дальше разрешаю только то что нужно. Хотя можно поступить и противоположным образом - дело вкуса.

Защиту SSH от брутфорса можно сдлать например вот так:
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --name SSH --set
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --name SSH --update --seconds 60 --hitcount 2 -j DROP
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -j ACCEPT
При условии, что iptables -P INPUT DROP.

voler
16-08-2007, 13:01
INPUT = DROP
OUTPUT = ACCEPT
FORWARD = DROP
Есть тогда вопрос резонный. На сколько мне известно, что iptables читает правило сверху вниз. Т.е. если, я что забыл добавить в правила, то это будит рубиться.

Тогда скажи как быть с ftp, его я собираюсь организовать в ближайшее время. Запрос и дет по одному порту, а работа дальнейшая по большому диапазону портов.


Если политика по-умолчанию ACCEPT, не вижу никакого смысла разрешать какие-либо пакеты по определенным критериям, разве что может пригодиться для подсчета статистики. Я обычно делаю такие политики:
INPUT = DROP
OUTPUT = ACCEPT
FORWARD = DROP

Послушаюсь твоего совета и добавлю данное правило, в начало и погляжу что да как.

BuGfiX
16-08-2007, 13:45
Т.е. если, я что забыл добавить в правила, то это будит рубиться.
не совсем так. Будет оно рубиться, или нет, зависит как раз от заданной политики по-умолчанию. Например, если политика цепочки INPUT = DROP, и пакет, попавший туда не подошел ни под одно правило, то он отбрасывается.
как быть с ftp
FTP может работать либо в активном, либо в пассивном режиме. В зависимости от этого, по разному настраивается фаервол. А с диапазоном портов можно поступить очень просто - нужно всего-лишь использовать модуль -m multiport.
Его описание так же есть по ссылке, которую я давал ранее.

voler
16-08-2007, 14:06
Защиту SSH от брутфорса можно сдлать например вот так:
Код:
-A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --name SSH --set
-A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --name SSH --update --seconds 60 --hitcount 2 -j DROP
-A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -j ACCEPT

-m state --state NEW - новое состояние
-m recent - это что за модуль?
-- NAME SSH Задание имени для recent ?
--set добавляет новый адрес.
--update --seconds 60 --hitcount 2 -j DROP - это блокирует адреса, которые обращаются с интервалом меньше 60 сек?

Я все правильно понял?

BuGfiX
16-08-2007, 14:18
-m state --state NEW
Признак NEW сообщает о том, что пакет является первым для данного соединения. Это означает, что это первый пакет в данном соединении, который увидел модуль трассировщика. Например если получен SYN пакет являющийся первым пакетом для данного соединения, то он получит статус NEW.

Суть правил с -m recent сводится к тому, что на 22-й порт будет приниматься всего одна попытка подключения в минуту. Если в течении минуты будет предпринята еще одна попытка - пакет будет отброшен.




© OSzone.net 2001-2012