Модератор: Модераторы
. Я лучше вам дам направление поиска.Grin писал(а):Alex2ndr
Долго изучал указанное Вами руководство и пришёл к выводу, что наскоку этого не получится.
Но азы конечно усвоил.
И если бы я был администратором сети, тогда да - копал бы глубоко.
Но у меня просто домашняя сеть - eth0
Поэтому, если не трудно напишите строчки для iptables , которые запретят вторжение в мою сеть
из интернет - ppp0 и сети , смотрящей в интернет - eth1( локальная сеть - по ней много любителей шарят - в Windows логи страницами исчисляются )
Буду очень благодарен!
Добавлено спустя 2 часа 35 минут 19 секунд:
Нашёл вот такой вариант:
iptables -F # Очищаем все цепочки таблицы filter
# Ко всем пакетам, которые относятся к уже установленным соединениям, применяем терминальное действие ACCEPT — пропустить
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -P INPUT DROP # В качестве действия по умолчанию устанавливаем DROP — блокирование пакета
iptables -P OUTPUT ACCEPT # Разрешаем все исходящие пакеты
Он удовлетворяет моим требованиям?
#!/bin/sh
# vim: sw=4 ts=4 expandtab ai
# Задаем некоторые переменные:
# Переменная, задающая путь к файлу запуска iptables.
IPT="/sbin/iptables"
# Настройки локальной сети
# Диапазон адресов локальной сети
LOCAL_NET="192.168.0.0/24"
# Ip-адреса клиентов в локальной сети и их mac-адреса для проверки
# Формат - [номер_в_массиве]="<ip_клиента> <mac_клиента>"
# если mac не указывать то доступ с данного ip будет разрешен для любого mac
# Можно оставить эту переменную пустой(т е () ),тогда будут разрешены все ip
LOCAL_IPS=(
[1]="192.168.0.2 00:13:8f:e0:34:d1"
[2]="192.168.0.3"
[3]="192.168.0.4 00:19:4f:9e:f3:69"
[4]="192.168.0.5 00:06:1b:c2:db:40"
)
# Стандартные порты
#TCP
# 80 http
# 443 https
# 21 ftp
# 5190 ICQ
# 5222 Jabber
# 5223 Jabber
# 9418 Git
# 2222 ssh
# 110 pop3
# 25 smtp
# 5353 Multicast DNS
# 123 ntp
#UDP
# 53 DNS
# 5353 Multicast DNS
# 25024 Openvpn для моего случая
# Разрешенные порты для локальной сети
ALLOWED_PORTS_FW_TCP="80 443 21 22 2222 5222 5223 25 110 9418 995 465 3389"
ALLOWED_PORTS_FW_UDP="53 5353"
# Настройки самого сервера
# Интерфейс в Интернет
INET_IFACE="tun0"
# Интерфейс в локальную сеть
LOCAL_IFACE="eth0"
# Адрес этого сервера в локальной сети
LOCAL_ADR="192.168.0.1"
# Разрешенные порты для входящих запросов к серверу
ALLOWED_PORTS_IN_TCP="80 2222"
ALLOWED_PORTS_IN_UDP="53"
# Разрешенные порты для исходящих запросов c серверa
ALLOWED_PORTS_OT_TCP="2222"
ALLOWED_PORTS_OT_UDP="53 123 25024"
start_fw()
{
# Включаем перенаправление пакетов через ядро.
echo 1 > /proc/sys/net/ipv4/ip_forward
# Сбрасываем правила и удаляем цепочки.
$IPT -F
$IPT -X
$IPT -t nat -F
$IPT -t nat -X
$IPT -t mangle -F
$IPT -t mangle -X
# Политики по умолчанию.
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT DROP
# Разрешаем вход и выход всем пакетам, связанным с локальным интерфейсом lo
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
# Разрешаем вход и выход всем пакетам, относящимся к протоколу ICMP
$IPT -A INPUT -p icmp -j ACCEPT
$IPT -A OUTPUT -p icmp -j ACCEPT
$IPT -A FORWARD -p icmp -j ACCEPT
# Разрешаем пакеты, относящиеся ко всем установленным соединениям
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# !!!!!!!!!! ТОЛЬКО ЕСЛИ ВНУТРЕНЯЯ СЕТЬ ДОВЕРЕННАЯ !!!!!!!!!!!!!
# Разрешаем пакеты, идущие из локальной сети на этот компьютер и
# с этого компа в локальную сеть
$IPT -A INPUT -i $LOCAL_IFACE -s $LOCAL_NET -j ACCEPT
$IPT -A OUTPUT -o $LOCAL_IFACE -d $LOCAL_NET -j ACCEPT
# NAT через динамический IP адрес.
$IPT -t nat -A POSTROUTING -o $INET_IFACE -j MASQUERADE
# Создаем цепочки для сортировки транзитного трафика и направляем его в них
$IPT -N allowip
$IPT -N allowport
$IPT -A FORWARD -s $LOCAL_NET -j allowip
# Разрешаем доступ для клиентов указанных в LOCAL_IPS
# если данная переменная пустая то разрешены все адреса из локальной сети
if [ "${#LOCAL_IPS[*]}" -ne 0 ]; then
for i in `seq 1 ${#LOCAL_IPS[*]}`; do
ip=`echo ${LOCAL_IPS[$i]} | awk '{print $1}'`
mac=`echo ${LOCAL_IPS[$i]} | awk '{print $2}'`
if [ -n "$mac" ]; then
$IPT -A allowip -m mac -s $ip --mac-source $mac -j allowport
else
$IPT -A allowip -s $ip -j allowport
fi
done
else
$IPT -A allowip -s $LOCAL_NET -j allowport
fi
# Разрешаем транзитные соединения из локальной сети
for port in $ALLOWED_PORTS_FW_TCP; do
$IPT -A allowport -p tcp -m tcp --dport $port -j ACCEPT
done
for port in $ALLOWED_PORTS_FW_UDP; do
$IPT -A allowport -p udp -m udp --dport $port -j ACCEPT
done
# Разрешаем входящие соединения c сервером
for port in $ALLOWED_PORTS_IN_TCP; do
$IPT -A INPUT -p tcp -m tcp --dport $port -j ACCEPT
done
for port in $ALLOWED_PORTS_IN_UDP; do
$IPT -A INPUT -p udp -m udp --dport $port -j ACCEPT
done
# Разрешаем исходящие соединения c сервера
for port in $ALLOWED_PORTS_OT_TCP; do
$IPT -A OUTPUT -p tcp -m tcp --dport $port -j ACCEPT
done
for port in $ALLOWED_PORTS_OT_UDP; do
$IPT -A OUTPUT -p udp -m udp --dport $port -j ACCEPT
done
}
stop_fw()
{
# Сбрасывем все правила
$IPT -F
$IPT -X
$IPT -t nat -F
$IPT -t nat -X
$IPT -t mangle -F
$IPT -t mangle -X
$IPT -P INPUT ACCEPT
$IPT -P FORWARD ACCEPT
$IPT -P OUTPUT ACCEPT
# Выключить перенаправление пакетов через ядро.
echo 0 > /proc/sys/net/ipv4/ip_forward
}
case "$1" in
start) echo -n "Starting firewall: iptables"
start_fw
echo "."
;;
stop) echo -n "Stopping firewall: iptables"
stop_fw
echo "."
;;
restart) echo -n "Restarting firewall: iptables"
stop_fw
start_fw
echo "."
;;
*) echo "Usage: $0 start|stop|restart"
exit 1
;;
esac
exit 0
sudo chmod +x /etc/init.d/rc.iptablessudo update-rc.d rc.iptables start 90 2 3 4 5 . stop 10 0 1 6 .Grin писал(а):Ещё раз спасибо.
А Вами рекомендованное правило надо добавлять:
-A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
Если да, то в какое место Вашего скрипта?
...
# Разрешаем вход и выход всем пакетам, связанным с локальным интерфейсом lo
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
#Решаем проблему с pmtu
$IPT -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
# Разрешаем вход и выход всем пакетам, относящимся к протоколу ICMP
$IPT -A INPUT -p icmp -j ACCEPT
$IPT -A OUTPUT -p icmp -j ACCEPT
$IPT -A FORWARD -p icmp -j ACCEPT
...
Grin писал(а):Я понимаю, что Ваш скрипт уже исполняемый и мне достаточно его только подправить под свои параметры?
Создадим пустой файл
alex@deb-book:~/test$ touch rc.iptables alex@deb-book:~/test$ ls -la
итого 8
drwxr-xr-x 2 alex alex 4096 Мар 14 21:19 .
drwxr-xr-x 53 alex alex 4096 Мар 14 21:19 ..
-rw-r--r-- 1 alex alex 0 Мар 14 21:19 rc.iptables alex@deb-book:~/test$ chmod +x ./rc.iptables alex@deb-book:~/test$ ls -la
итого 8
drwxr-xr-x 2 alex alex 4096 Мар 14 21:19 .
drwxr-xr-x 53 alex alex 4096 Мар 14 21:19 ..
-rwxr-xr-x 1 alex alex 0 Мар 14 21:19 rc.iptables
alex@deb-book:~/test$tester8 писал(а):Я просто оставлю эту ссылку:
http://ubuntologia.ru/permissions
Alex2ndr, иногда можно просто дать ссылку на статью на сайте, а не писать заново.
Grin писал(а):При вводе команды, получаю такое сообщение. Это надо как то лечить?
root@Linux-S:/home/alex# update-rc.d rc.iptables start 90 2 3 4 5 . stop 10 0 1 6 .
update-rc.d: warning: /etc/init.d/rc.iptables missing LSB information
update-rc.d: see <http://wiki.debian.org/LSBInitScripts>
#!/bin/sh
### BEGIN INIT INFO
# Provides: iptables
# Required-Start: $syslog $network $time
# Required-Stop: $syslog $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start iptables at boot time
# Description: Enable service provided by iptables.
### END INIT INFO
# Задаем некоторые переменные:
# Переменная, задающая путь к файлу запуска iptables.
IPT="/sbin/iptables"
...
Grin писал(а):Переделал, но меня смутило, что они закоментированы - хотя результат есть!
Grin писал(а):root@Linux-S:/home/alex# update-rc.d rc.iptables start 90 2 3 4 5 . stop 10 0 1 6 .
System start/stop links for /etc/init.d/rc.iptables already exist.
Grin писал(а):При вводе следующей команды - ругается на скобку в 25 строке:
root@Linux-S:/home/alex# /etc/init.d/rc.iptables ls -la
/etc/init.d/rc.iptables: 25: Syntax error: "(" unexpected
25 строка из скрипта, выделена красным:
......
# Можно оставить эту переменную пустой(т е () ),тогда будут разрешены все ip
LOCAL_IPS=(
[1]="192.168.0.2 00:01:6C:26:A4:8B"
[2]="192.168.0.6 00:0D:61:11:9D:8B"
.......
LOCAL_IPS=(
[1]="192.168.0.2 00:13:8f:e0:34:d1"
[2]="192.168.0.3"
[3]="192.168.0.4 00:19:4f:9e:f3:69"
[4]="192.168.0.5 00:06:1b:c2:db:40"
)
Grin писал(а):Но правила отсутствуют, видимо автозагрузка не получается и интернета у домашних машин нет:
root@Linux-S:/home/alex# /etc/init.d/rc.iptables ls -la
Usage: /etc/init.d/rc.iptables start|stop|restart
root@Linux-S:/home/alex# /etc/init.d/rc.iptables start
root@Linux-S:/home/alex# /etc/init.d/rc.iptables stop
Alex2ndr писал(а):Вероятно вы потеряли закрывающую скобку - shell вам об этом и говорит - Syntax error: "(" unexpected. Проверьте.
#!/bin/sh
### BEGIN INIT INFO
# Provides: iptables
# Required-Start: $syslog $network $time
# Required-Stop: $syslog $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start iptables at boot time
# Description: Enable service provided by iptables.
### END INIT INFO
# vim: sw=4 ts=4 expandtab ai
# Задаем некоторые переменные:
# Переменная, задающая путь к файлу запуска iptables.
IPT="/sbin/iptables"
# Настройки локальной сети
# Диапазон адресов локальной сети
LOCAL_NET="192.168.0.0/24"
# Ip-адреса клиентов в локальной сети и их mac-адреса для проверки
# Формат - [номер_в_массиве]="<ip_клиента> <mac_клиента>"
# если mac не указывать то доступ с данного ip будет разрешен для любого mac
# Можно оставить эту переменную пустой(т е () ),тогда будут разрешены все ip
LOCAL_IPS=(
[1]="192.168.0.2 00:01:6C:26:A4:8B"
[2]="192.168.0.6 00:0D:61:11:9D:8B"
[3]="192.168.0.4 00:19:DB:D1:3B:63"
[4]="192.168.0.5 00:0D:61:5E:86:40"
)
# Стандартные порты
#TCP
# 80 http
# 443 https
# 21 ftp
# 5190 ICQ
# 5222 Jabber
# 5223 Jabber
# 9418 Git
# 2222 ssh
# 110 pop3
# 25 smtp
# 5353 Multicast DNS
# 123 ntp
#UDP
# 53 DNS
# 5353 Multicast DNS
# 25024 Openvpn для моего случая
# Разрешенные порты для локальной сети
ALLOWED_PORTS_FW_TCP="80 443 21 22 2222 5222 5223 25 110 9418 995 465 3389"
ALLOWED_PORTS_FW_UDP="53 5353"
# Настройки самого сервера
# Интерфейс в Интернет
INET_IFACE="eth1"
# Интерфейс в локальную сеть
LOCAL_IFACE="eth0"
# Адрес этого сервера в локальной сети
LOCAL_ADR="192.168.0.1"
# Разрешенные порты для входящих запросов к серверу
ALLOWED_PORTS_IN_TCP="80 2222"
ALLOWED_PORTS_IN_UDP="53"
# Разрешенные порты для исходящих запросов c серверa
ALLOWED_PORTS_OT_TCP="2222"
ALLOWED_PORTS_OT_UDP="53 123 25024"
start_fw()
{
# Включаем перенаправление пакетов через ядро.
echo 1 > /proc/sys/net/ipv4/ip_forward
# Сбрасываем правила и удаляем цепочки.
$IPT -F
$IPT -X
$IPT -t nat -F
$IPT -t nat -X
$IPT -t mangle -F
$IPT -t mangle -X
# Политики по умолчанию.
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT DROP
# Разрешаем вход и выход всем пакетам, связанным с локальным интерфейсом lo
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
#Решаем проблему с pmtu
$IPT -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
# Запрет пингования моего сервера
# $IPT -A INPUT -p icmp --icmp-type 8 -j DROP
# Разрешаем вход и выход всем пакетам, относящимся к протоколу ICMP
$IPT -A INPUT -p icmp -j ACCEPT
$IPT -A OUTPUT -p icmp -j ACCEPT
$IPT -A FORWARD -p icmp -j ACCEPT
# Разрешаем пакеты, относящиеся ко всем установленным соединениям
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# !!!!!!!!!! ТОЛЬКО ЕСЛИ ВНУТРЕНЯЯ СЕТЬ ДОВЕРЕННАЯ !!!!!!!!!!!!!
# Разрешаем пакеты, идущие из локальной сети на этот компьютер и
# с этого компа в локальную сеть
$IPT -A INPUT -i $LOCAL_IFACE -s $LOCAL_NET -j ACCEPT
$IPT -A OUTPUT -o $LOCAL_IFACE -d $LOCAL_NET -j ACCEPT
# NAT через динамический IP адрес.
$IPT -t nat -A POSTROUTING -o $INET_IFACE -j MASQUERADE
# Создаем цепочки для сортировки транзитного трафика и направляем его в них
$IPT -N allowip
$IPT -N allowport
$IPT -A FORWARD -s $LOCAL_NET -j allowip
# Разрешаем доступ для клиентов указанных в LOCAL_IPS
# если данная переменная пустая то разрешены все адреса из локальной сети
if [ "${#LOCAL_IPS[*]}" -ne 0 ]; then
for i in `seq 1 ${#LOCAL_IPS[*]}`; do
ip=`echo ${LOCAL_IPS[$i]} | awk '{print $1}'`
mac=`echo ${LOCAL_IPS[$i]} | awk '{print $2}'`
if [ -n "$mac" ]; then
$IPT -A allowip -m mac -s $ip --mac-source $mac -j allowport
else
$IPT -A allowip -s $ip -j allowport
fi
done
else
$IPT -A allowip -s $LOCAL_NET -j allowport
fi
# Разрешаем транзитные соединения из локальной сети
for port in $ALLOWED_PORTS_FW_TCP; do
$IPT -A allowport -p tcp -m tcp --dport $port -j ACCEPT
done
for port in $ALLOWED_PORTS_FW_UDP; do
$IPT -A allowport -p udp -m udp --dport $port -j ACCEPT
done
# Разрешаем входящие соединения c сервером
for port in $ALLOWED_PORTS_IN_TCP; do
$IPT -A INPUT -p tcp -m tcp --dport $port -j ACCEPT
done
for port in $ALLOWED_PORTS_IN_UDP; do
$IPT -A INPUT -p udp -m udp --dport $port -j ACCEPT
done
# Разрешаем исходящие соединения c сервера
for port in $ALLOWED_PORTS_OT_TCP; do
$IPT -A OUTPUT -p tcp -m tcp --dport $port -j ACCEPT
done
for port in $ALLOWED_PORTS_OT_UDP; do
$IPT -A OUTPUT -p udp -m udp --dport $port -j ACCEPT
done
}
stop_fw()
{
# Сбрасывем все правила
$IPT -F
$IPT -X
$IPT -t nat -F
$IPT -t nat -X
$IPT -t mangle -F
$IPT -t mangle -X
$IPT -P INPUT ACCEPT
$IPT -P FORWARD ACCEPT
$IPT -P OUTPUT ACCEPT
# Выключить перенаправление пакетов через ядро.
echo 0 > /proc/sys/net/ipv4/ip_forward
}
case "$1" in
start) echo -n "Starting firewall: iptables"
start_fw
echo "."
;;
stop) echo -n "Stopping firewall: iptables"
stop_fw
echo "."
;;
restart) echo -n "Restarting firewall: iptables"
stop_fw
start_fw
echo "."
;;
*) echo "Usage: $0 start|stop|restart"
exit 1
;;
esac
exit 0
alex@deb-gate3:~$ echo $SHELL
/bin/bash
alex@deb-gate3:~$ $SHELL --version
GNU bash, version 3.2.39(1)-release (i486-pc-linux-gnu)
Copyright (C) 2007 Free Software Foundation, Inc.
alex@deb-gate3:~$
declare -a LOCAL_IPSAlex2ndr писал(а):Дайте вывод echo $SHELL и $SHELL --version
Alex2ndr писал(а):И еще попробуйте перед этим массивом LOCAL_IPS вставить такую строку:
declare -a LOCAL_IPS
Вернуться в Администрирование Ubuntu-Server
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1