Nat on linux server

Настройка NAT, DNAT в Linux с помощью iptables

Всё очень просто, в очередной раз объясняя на форуме новичкам в мире Linux, что да как я понял, что на просторах интернет не найти собранную воедино статью с объяснением не только настройки iptables, но и некоторых сетевых основ.

Так что вашему вниманию я представляю небольшой экскурс по настройке firewall в Linux. Углубимся лишь в настройку netfilter/iptables, остальных прикладных вопросов мы несомненно тоже коснёмся, ведь нам не хватает именно комплексных ответов на наши вопросы… И я постараюсь ка можно более доходчиво здесь все изложить.

Мы будем рассматривать типичную схему для офисов и для квартир, да-да именно квартир! Мало у кого есть собственный маленький сервачок дома под столом, но у большинства интернет дома раздается через роутер и в большинстве своём они тоже прошиты Linux.
Это типичная схема малого офиса. Когда к интернет подключен 1 компьютер(сервер), а остальные подключаются к интернет уже через этот сервер.
Поехали, потихонечку…

И так что же мы имеем:
сервер с 2мя сетевыми картами и установленным на нём Debian Lenny
имеющийся по умолчанию в Debian Lenny firewall — netfilter/iptables
локальную сеть из N компьютеров, все соединены через коммутатор, в том числе и сервер

Для начала нам нужно понять, что настраивать мы будем самый обыкновенный NAT(Network Address Translation). Для жаждущих, я в конце упомяну и о проксе сервере на примере squid. Как я уже сказал разжёвывать будем практически всё.
Что же такое NAT? На самом деле все просто, все компьютеры имеют физический (MAC) и сетевой (IP) адреса. Нас в данный момент интересуют IP адреса. IP адрес в пределах одной сети должен быть уникальным! А при нынешнем стандарте IPv4 уникальными могут быть всего-то 4 294 967 296 (232), что совсем не много и они практически кончились. но не переживайте вот вот вступит в широкое распространение IPv6, а там адресов навалом!
Но тут вы можете заметить, компьютеров значительно больше того числа, что позволяет IPv4 или скажете, что у друга дома такой же адрес как и у вас! И вот тут-то и заходит речь о NAT — он позволяет соединять компьютерные сети между собой используя единственный, свой IP адрес, действия фаервола при этом называется SNAT(Source NAT или подмена адреса источника). Т.е. в 99% случаев вся ваша контора выходит в интернет под 1 IP адресом, при этом внутри офиса у каждого он свой. О классах IP адресов вы сможете прочесть в интерне.

Теперь, когда мы знаем что такое NAT и для чего он нужен, можно приступать непосредственно к настройке сервера.
транзитный трафик

Все команды выполняются от имени root(суперпользователь). В Debian по умолчанию отключен так называемый транзитный трафик, т.е. по умолчанию предусмотрена работа только как единичная машина. Как вы уже догадались, без транзитного трафика нету и NAT. Для его включения достаточно изменить 1 цифру — $ echo 1 > /proc/sys/net/ipv4/ip_forward, но данная настройка слетит после перезагрузки, так что лучше поправить конфиг — $ nano /etc/sysctl.conf далее ищем строчку #net.ipv4.ip_forward=1 и убираем «решётку»(символ комментария) в начале строки и проверяем что значения равно 1! Теперь можно приступать непосредственно к конфигурированию iptables.
настраиваем iptables

Читайте также:  Python ide linux ubuntu

В интернет, есть много статей о том как писать правила в iptables и что с их помощью можно творить, наиболее полным и приятным для чтения мне показалась статья на wikipedia.org.
И так приступим. Для начала очистим таблицы от лишних правил, вдруг там что было лишнего…
$ iptables -F
$ iptables -t nat -F
$ iptables -t mangle -F
Лишнее почистили. Очень важно понять и помнить, что правила в iptables применяются иерархически, т.е. правило стоящее выше выполнится раньше. Все цепочки по умолчанию имеют политику ACCEPT — разрешают всё. что не попало под правила данной цепочки.
Условимся, что интерфейс смотрящий в локальную сеть — eth0, а в интернет — eth1, локальная сеть имеет адреса 192.168.0.0/24, а провайдер выдал нам статический адрес 10.188.106.33(пускай и не «белый» — о типах ip адресов вы также можете посмотреть в интернет). И так пишем:
$ iptables -A FORWARD -i eth0 -o eth1 -s 192.168.0.0/24 -j ACCEPT
$ iptables -A FORWARD -i eth1 -o eth0 -d 192.168.0.0/24 -j ACCEPT
$ iptables -P FORWARD DROP
тем самым разрешили ходить транзитным пакетам через firewall для нашего диапазона ip адресов, а всё остальное запрещаем.
Теперь сам NAT:
$ iptables -A POSTROUTING -s 192.168.0.0/24 -o eth1 -j SNAT —to-source 10.188.106.33
Этого достаточно для того что бы у вас заработал NAT.
по мелочам…

На клиентах указываем ip из выбранного диапазона и указываем в качестве шлюза ip адрес нашего сервера(обычно его назначают первым из подсети — я оставлю это на ваше усмотрение). Все сетевые настройки на сервере можно провести так:
$ nano /etc/network/interfaces в нём указываются настройки ваших сетевых интерфейсов.
доступ в недры сети через шлюз или DNAT

И тут вы поняли, что в сети у вас есть Windows Server к которому у вас всегда был простой доступ по RDP, а тут вылез это назойливый шлюз на Debian! Всё очень просто — надо всего лишь добавить DNAT правило в наш iptables.
Что за зверь DNAT? DNAT (Destination NAT или подмена адреса получателя) — сетевые карты работают в таком режиме, что они принимают только пакеты адресованные именно им, а зайти на наш сервер если ip под которым он выходит в интернет сидят еще десяток машин в вашем офисе? Как запрос дойдёт именного до него? На самом деле все запросы такого рода упираются в наш шлюз. И всё что нам надо сделать это задать правила для работы с такими пакетами.
$ iptables -A PREROUTING -i eth1 -p tcp -m tcp —dport 3389 -j DNAT —to-destination 192.168.0.2
Это простое правило будет переадресовывать все пакеты приходящие на шлюз из интернет на порт TCP 3389(именно его использует RDP протокол) на ваш внутренний Windows Server. И, вуаля, у вас все работает.
итак что там с любимым squid

Читайте также:  Linux delete system file

И хотя сейчас все работает, у всех есть интернет и все работает, некоторым всё же нужен прокси сервер. Я не буду рассказывать о настройке squid, я покажу правило которое позволит сделать его «прозрачным». В сквид надо лишь прописать волшебное слово transparent в нужном месте и он начнём корректно обрабатывать свалившееся на него запросы.
Пишем

$ iptables -A PREROUTING -d! 192.168.0.0/24 -i eth0 -p tcp -m multiport —dports 80,443 -j REDIRECT —to-ports 3128 .

И что же нам это даёт? Теперь все запросы на web страницы с ваших рабочих мест по http((80) и https(443) протоколам будут перенаправляться на порт который слушает squid. Вы получает контентную фильтрацию, информацию о том кто где был и что делал в интернет, пользователь ни чего не подозревая работает как и раньше…
немного безопасности

Следует хоть минимально защитить свой шлюз поэтому добавим еще пару правил
$ iptables -A INPUT -i lo -j ACCEPT
$ iptables -A INPUT -i eth0 -s 192.168.0.0/24 -j ACCEPT
$ iptables -A INPUT -i eth1 -m conntrack —ctstate RELATED,ESTABLISHED -j ACCEPT
$ iptables -P INPUT DROP
Тем самым запретили любое общение непосредственно с шлюзом, кроме уже установленных соединений, т.е. те что были инициированы вами и вы просто получаете на них ответы. Не бойтесь наш DNAT до этих правил просто не доходит…
почему так мало?

Статья не резиновая и обо всем все-равно не расскажешь… Я привел минимальный набор действий и понятий что бы вы могли начать осваивать такую махину как шлюз на Linux. Здесь можно говорить очень и очень долго, обсуждая многие аспекты и возможности netfilter.
Итого

Как мы видим все действительно просто! Главное это понять принцип функционирования сети и не боятся настраивать и читать большие мануалы.
Надеюсь мне удалось собрать воедино информацию достаточную для начала вашей дружбы с программными маршрутизаторами на основе Linux.

Отблагдарить автора статьи также можно переводом, +100 вам в карму!

Источник

Nat on linux server

Good morning from Spain. I want to contact you because I took some iptables rules from your blog and use it on my blog: https://freelifeblog.wordpress.com/2013/09/19/iptables-reglas-contra-fuerza-bruta-escaneos/

Rules I have used from you have references in your post: http://www.karlrupp.net/en/computer/nat_tutorial

Sorry for not ask you before to post. If you want I can delete entire post or snippet where I use those rules. Anyway I have reference your blog.

Читайте также:  Qt creator linux исходники

Sorry for advise you so later, but I couldn´t do it before.

Very useful article and very nicely written.

Diagnostics help e.g. log messages could be useful for beginners to iptables.

wonderful work congrats!
Very very simple and very very very good
You must be a good teacher. Even though it is fully understood in the first reading , i think it is the best tutorial available in the net. I wish you could help me to solve my problem of FTP-Transparent proxy problem. Thanks a lot

In Connect a LAN to the internet, in the case you drop forwarding in your default policy :
iptables -P FORWARD DROP
statefully :
iptables -A FORWARD -m state —state RELATED,ESTABLISHED -j ACCEPT
do not forget in addition to masquerading to authorize forwarding from your LAN. Say 192.168.0.0/24 is the LAN of your host and 192.168.1.0/24 the LAN you want to connect to the Web, then :
iptables -I FORWARD 1 -s 192.168.1.0/24 ! -d 192.168.0.0/24 -j ACCEPT

Ethernet 1: i assign this ip

my internet ip is : 111.119.81.194
Subnet mask is : 255.255.255.252
Default Gateway is : 111.115.81.193

Ethernet 2 : I assign this ip

my Lan IP is : 192.168.0.12
Subnet mask is : 255.255.255.0
Default Gateway is : 0.0.0.0

Usable Range IP is: 111.115.132.104/29

IP 1 : 111.115.132.106 this lan ip give to me my isp providers
IP 1 : 111.115.132.107
IP 1 : 111.115.132.108
IP 1 : 111.115.132.109
IP 1 : 111.115.132.110

gateway ip : 111.115.132.105
Broadcast ip : 111.115.132.111

How to i nat usable range ip to my private ip

111.115.132.106 nat 192.168.0.211
111.115.132.107 nat 192.168.0.212
111.115.132.108 nat 192.168.0.213
111.115.132.109 nat 192.168.0.214
111.115.132.110 nat 192.168.0.215

this is my ip tables configuration

# Generated by iptables-save v1.4.7 on Tue Oct 30 16:30:47 2012
*nat
:PREROUTING ACCEPT [178:11422]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A PREROUTING -i eth1 -p tcp -m tcp —dport 80 -j DNAT —to-destination 192.168.0.12:3128
-A PREROUTING -i eth1 -p tcp -m tcp —dport 443 -j DNAT —to-destination 192.168.0.12:3128
-A PREROUTING -d 111.115.132.106/32 -p tcp -m tcp —dport 80 -j DNAT —to-destination 192.168.0.211
-A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
COMMIT
# Completed on Tue Oct 30 16:30:47 2012
# Generated by iptables-save v1.4.7 on Tue Oct 30 16:30:47 2012
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [6605:832098]
-A INPUT -m state —state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state —state NEW -m tcp —dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp —dport 3128 -j ACCEPT
-A INPUT -j REJECT —reject-with icmp-host-prohibited
COMMIT
# Completed on Tue Oct 30 16:30:47 2012
But this iptables did not working for nat ip translation

Источник

Оцените статью
Adblock
detector