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"
У меня такой вопрос. В основном в интернете при описании iptables используются команды, которые надо вводить в терминале. Здесь вы описываете конфиг. Так собственно вопрос. Чего с ним делать. Я новичок. Только начал разбираться с iptables.
создать файл с таким содержанием например в папке /etc/
написать в консоли nano /etc/ip.rules вставить туда это содержимое
сделать файл исполняемым командой chmod +x /etc/ip.rules
запустить командой /etc/ip.rules
проверить что работает
сделать автозапуск как написано тут
Премного благодарен. Именно этого и не хватало.
Рад помочь =)
Чувак, спасибо, реально помог) Единственный рабочий из всех найденных конфигов.
Посмотрел твой конфиг и понял где у меня была ошибка ))
Всегда рад помочь =)