Появилась потребность настроить фаерволл в Ubuntu. Работать наш фаерволл будет на машине с двумя сетевыми картами, одна смотрит в интернет другая в локальною сеть.
Итак создаем набор правил записанных в файл /etc/rc.firewall
#!/bin/sh # для удобства, особенно если интерфейсов несколько INET_IF="eth0" LOCAL_IF="eth1" # тоже для удобства IPT="/sbin/iptables" #Адреса локальных компьтеров COMP1="192.168.3.115" #Наш внешний адресс IP_OUT="86.111.90.120" #Наш внутренний адресс IP_IN="192.168.13.1" #мак адреса локальных компьютеров MAC1="x:x:x:x:x" MAC2="x:x:x:x:x" # включаем пересылку пакетов echo 1 > /proc/sys/net/ipv4/ip_forward # стандартные действия, устанавливаем политику по умолчанию: $IPT -P INPUT DROP $IPT -P OUTPUT ACCEPT $IPT -P FORWARD DROP # удаляем все имеющиеся правила $IPT -F $IPT -X #Разрешаем подключения с внутренего интерфейса $IPT -A INPUT -i lo -j ACCEPT #Открываем необходимые порты $IPT -A INPUT -p tcp -m multiport --port 22,80,6681 -j ACCEPT #Разрешаем подключения с конкретных компьютеров локальной сети $IPT -A INPUT -s $COMP1 -j ACCEPT # принимаем все пакеты, относящиеся к уже установленным соединениям $IPT -A INPUT -p ALL -m state --state ESTABLISHED,RELATED -j ACCEPT #Несколько правил для безопасности $IPT -A INPUT -p ICMP -s 0/0 --icmp-type 3 -j ACCEPT $IPT -A INPUT -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT $IPT -A INPUT -p ICMP -s 0/0 --icmp-type 12 -j ACCEPT #Если нужно чтобы пинговалась наша машина #$IPTABLES -A INPUT -p ICMP -s 0/0 --icmp-type 8 -j DROP #Разрешаем транзит пакетов для отдельных машин локальной сети. #Можно IP- адреса, а можно Mac $IPT -A FORWARD -s $COMP1 -j ACCEPT $IPT -A FORWARD -d $COMP1 -m state --state ESTABLISHED,RELATED -j ACCEPT #$IPT -A FORWARD -p ALL -m mac --mac-source $MAC1 -j ACCEPT #$IPT -A FORWARD -p ALL -m mac --mac-source $MAC2 -j ACCEPT #Включаем NAT для одного из компьютеров локальной сети $IPT -A POSTROUTING -s $COMP1 -d ! $IP_IN -j SNAT --to-source $IP_OUT #Перенаправление интернет трафика на прокси $IPT -t nat -A PREROUTING -p tcp -i eth1 --dport 80 -j REDIRECT --to-ports 3128 |
Чтобы скрипт работал необходимо добавить права на исполнение:
sudo chmod +x /etc/rc.firewall |
Чтобы добавить правила достаточно набрать путь к скрипту:
sudo /etc/rc.firewall |
Но чтобы правила добавлялись автоматически при загрузке системы, придется написать еще один небольшой скрипт для init.d.
Создаем файл /etc/init.d/iptables со следующим содержанием:
#!/bin/bash IPT="/sbin/iptables" START="/bin/bash" PATH="/sbin:/bin:/usr/sbin:/usr/bin" NAME="$0" N="/etc/init.d/$NAME" if [ ! -f /etc/rc.firewall ]; then echo "/etc/rc.firewall does not exist" exit 0 fi case "$1" in start|restart) echo -n "Starting up iptables firewall..." $START /etc/rc.firewall echo "done." ;; stop) $IPT -F $IPT -X $IPT –P INPUT ACCEPT $IPT –P OUTPUT ACCEPT $IPT -t FORWARD ACCEPT echo "done." exit 0; ;; *) echo "Usage: $N {start|restart|stop}" >&2 exit 1 ;; esac exit 0 |
Естественно делаем файл исполняемым:
chmod +x /etc/init.d/iptables |
Для автозагрузки данного скрипта нужно сделать символические ссылки на него в каталогах /etc/rc0.d, /etc/rc1.d /etc/rc2.d и /etc/rc6.d
sudo ln -s /etc/init.d/iptables /etc/rc0.d/K20iptables sudo ln -s /etc/init.d/iptables /etc/rc1.d/S20iptables sudo ln -s /etc/init.d/iptables /etc/rc2.d/S20iptables sudo ln -s /etc/init.d/iptables /etc/rc6.d/K20iptables |
Все.
Комментариев нет:
Отправить комментарий