iptables простой пример

Итак и я решил поделиться с Вами своим конфигурационным файлом iptables. Если учесть, что я люблю простоту и понимание, то наверное он будет достаточно понятен и Вам. Сам я работал с freebsd с 2000 года и поэтому большее время работал с ipfw, но в силу некоторых обстоятельств и т.к. ubuntu в целом прекрасная система я стал переходить на linux и на серверах.
Что мы имеем: 2 сетевые карты (одна в интернет eth0, вторая локальная eth1), статический ip адрес и небольшая конторка в которой интернет будем раздавать по ip адресам, и желательно с прокси сервером (это позволит нам дополнительно обрезать всякие рекламы и запрещать доступы к сайтам и многое другое).

#!/bin/bash
echo "Loading iptables rules"

int_if="eth1"
ext_if="eth0"
ext_ip="xx.yy.zz.xx"

echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -F
iptables -X
iptables -t nat -F
iptables -t mangle -F

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

echo "loopback allowed..."
iptables -A INPUT -i lo -j ACCEPT

echo "SSH allowed ..."
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

echo "RDP"
iptables -t nat -A PREROUTING -p tcp -d $ext_ip --dport 9000 -j DNAT --to-destination 192.168.0.10:3389
iptables -A FORWARD -o $int_if -d 192.168.0.10 -p tcp --dport 3389 -j ACCEPT

echo "Ping allowed ..."
iptables -A INPUT -i eth0 -p icmp --icmp-type 0 -j ACCEPT
iptables -A INPUT -i eth0 -p icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -p icmp -m icmp --icmp-type 4 -j ACCEPT
iptables -A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT

#Prioritets for packets
iptables -t mangle -I INPUT -m connbytes --connbytes 512000: --connbytes-dir both --connbytes-mode bytes -j TOS --set-tos Maximize-Throughput
iptables -t mangle -I OUTPUT -m connbytes --connbytes 512000: --connbytes-dir both --connbytes-mode bytes -j TOS --set-tos Maximize-Throughput
iptables -t mangle -I INPUT -m connbytes ! --connbytes 51200: --connbytes-dir both --connbytes-mode bytes -j TOS --set-tos Minimize-Delay
iptables -t mangle -I OUTPUT -m connbytes ! --connbytes 51200: --connbytes-dir both --connbytes-mode bytes -j TOS --set-tos Minimize-Delay

echo "Allow established"
iptables -A INPUT -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p udp -m state --state RELATED,ESTABLISHED -j ACCEPT
#DNS
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT

echo "SQUID redirect"
for userip in `/bin/grep -v '#' /etc/ipusers.txt`; do
iptables -t nat -A PREROUTING -p tcp -s $userip -i $int_if -m multiport --dport 80,3128,8080,8081 -j REDIRECT --to-port 3128
done
iptables -A INPUT -p TCP -i $int_if --dport 3128 -j ACCEPT

echo "NAT for users"
for userip in `/bin/grep -v '#' /etc/ipusers.txt`; do
iptables -t nat -A POSTROUTING -o $ext_if -s $userip -j SNAT --to-source $ext_ip
done

echo "Local clients to inet"
for userip in `/bin/grep -v '#' /etc/ipusers.txt`; do
iptables -A FORWARD -s $userip -j ACCEPT
done
iptables -A FORWARD -p ALL -m state --state RELATED,ESTABLISHED -j ACCEPT
echo "Done"

Расскажу его плюсы, он не очень большой и работоспособный — зачем нужны echo? если Вы исправляете что нибудь или добавляете, то видите примерно в каком куске кода у Вас проблема. Ip адреса берутся из файла /etc/ipusers.txt его также можно будет соответственно использовать и в squid acl, что дополнительно удобно. В приведенном примере 3 цикла, которые на самом деле можно в один уместить, но тогда менее читабельно, а я хотел добиться именно читабельности. Есть приоритизация по пакетам — дополнительный бонус. В целом это первоначальный вариант и буду постепенно дорабатывать, стараясь не потерять всей этой простоты, потому что все правила что я видел очень громоздки и мне не всегда понятны с первого раза.

С радостью выслушаю все пожелания по данному набору правил.

echo "Done"

6 комментариев к записи “iptables простой пример”

  1. studnet:

    У меня такой вопрос. В основном в интернете при описании iptables используются команды, которые надо вводить в терминале. Здесь вы описываете конфиг. Так собственно вопрос. Чего с ним делать. Я новичок. Только начал разбираться с iptables.

  2. создать файл с таким содержанием например в папке /etc/
    написать в консоли nano /etc/ip.rules вставить туда это содержимое
    сделать файл исполняемым командой chmod +x /etc/ip.rules
    запустить командой /etc/ip.rules
    проверить что работает

    сделать автозапуск как написано тут

  3. studnet:

    Премного благодарен. Именно этого и не хватало.

  4. Евгений:

    Чувак, спасибо, реально помог) Единственный рабочий из всех найденных конфигов.
    Посмотрел твой конфиг и понял где у меня была ошибка ))

  5. Всегда рад помочь =)

Прокомментировать

XHTML: Вы можете использовать эти тэги для форматирования текста: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>