RelaxДом

RelaxДом (https://forum.relaxdom.net/index.php)
-   Unix (https://forum.relaxdom.net/forumdisplay.php?f=158)
-   -   настройка iptables для десктопа (https://forum.relaxdom.net/showthread.php?t=54896)

FreeSky 21.07.2009 23:23

настройка iptables для десктопа
 
Вложений: 1
Поглядев на многие руководства по настройке iptables решил написать правила сам. конечно, использовал материал и теорию из интернета, основываясь на правильных руководствах и выбирая необходимое. надеюсь, кому-нибудь это пригодится)
Итак, начнем.

Сначала определимся с нашими задачами. Нам необходимо:
1. Запретить доступ к нашему компьютеру извне для любых пользователей/сервисов, кроме оговоренных
2. Разрешить доступ к нашей рабочей станции тем пользователям/сервисам, с которыми мы сами устанавливаем соединение (проверенные пользователи)
3. Разрешить доступ к нашей рабочей станции для оговоренных пользователей/сервисов

Оформим всю настройку iptables в виде скрипта.
I. Создаем любой файл в любой директории (к примеру - /etc/init.d/iptables.local):
Код:

# vim /etc/init.d/iptables.local
II. Начинаем писать наш скрипт. Будем писать скрипт BASH:
Код:

#!/bin/bash
Создадим несколько переменных для упрощения нашей задачи:
Код:

## Переменные
IFACE="eth0" # Сетевой интерфейс, для которого необходимо создавать правила
IPT="/sbin/iptables" # iptables

Все операции по непосредственной настройке iptables вынесем в отдельную функцию:
Код:

## Скрипт применения правил iptables
start_iptables()
{
## Настройка цепочек
# Очистка всех цепочек от правил
$IPT -F
$IPT -X

# Установка политик цепочек
$IPT -P INPUT DROP
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD DROP

## Настройка правил приёма пакетов
# Принимать ESTABLISHED пакеты
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Разрешить loopback
$IPT -A INPUT -i lo -j ACCEPT

## Открытие портов
# SMB
$IPT -A INPUT -p tcp -m multiport --source 192.168.1.0/24 --dports 137,138,139,445 -j ACCEPT
$IPT -A INPUT -p udp -m multiport --source 192.168.1.0/24 --dports 137,138,139,445 -j ACCEPT
$IPT -A INPUT -p udp -m multiport --source 192.168.1.0/24 --sports 137,138,139,445 -j ACCEPT

# FTP
$IPT -A INPUT -p tcp --dport 21 -j ACCEPT

# HTTP
$IPT -A INPUT -p tcp --dport 80 -j ACCEPT

# SSH
$IPT -A INPUT -p tcp --source 192.168.1.0/24 --dport 22 -j ACCEPT
}

Теперь внесем в наш скрипт больше функциональности. Добавим возможности остановки действия правил iptables, их перезапуска, старта, сохранения настроек и их восстановления и вывода списка текущих правил:
Код:

case "$1" in
start) echo -n "Starting iptables: iptables" # старт правил iptables
      start_iptables
      echo "."
      ;;
stop) echo -n "Stopping iptables: iptables" # остановка действия правил iptables
      iptables -F
      iptables -X
      iptables -P INPUT ACCEPT
      iptables -P OUTPUT ACCEPT
      iptables -P FORWARD ACCEPT
      echo "."
      ;;
save) echo -n "Saving iptables configuration: iptables" # сохранение настроек iptables
      iptables-save > /etc/iptables.save
      echo "."
      ;;
restart) echo -n "Restarting iptables: iptables" # перезапуск правил iptables
      iptables -F
      iptables -X
      iptables -P INPUT ACCEPT
      iptables -P OUTPUT ACCEPT
      iptables -P FORWARD ACCEPT
      start_iptables
      echo "."
      ;;
reload) echo -n "Reloading iptables configuration: iptables" # перезагрузка сохраненной конфигурации iptables
        iptables -F
        iptables -X
        iptables -P INPUT ACCEPT
        iptables -P OUTPUT ACCEPT
        iptables -P FORWARD ACCEPT
        cat /etc/iptables.save | iptables-restore
        echo "."
        ;;
list) echo "List of iptables rules" # вывод списка текущих правил
      iptables -L
      ;;
*) echo "Usage: /etc/init.d/iptables.local start|stop|save|restart|reload" # подсказка к использованию нашего скрипта
  exit 1
  ;;

esac

Ну и как положено, в случае удачной работы скрипт должен возвращать 0:
Код:

exit 0
В итоге мы получаем такой скрипт:
Код:

#!/bin/bash
## Переменные
IFACE="eth0" # Сетевой интерфейс
IPT="/sbin/iptables" # iptables

## Скрипт применения правил iptables
start_iptables()
{
## Настройка цепочек
# Очистка всех цепочек от правил
$IPT -F
$IPT -X

# Установка политик цепочек
$IPT -P INPUT DROP
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD DROP

## Настройка правил приёма пакетов
# Принимать ESTABLISHED пакеты
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Разрешить loopback
$IPT -A INPUT -i lo -j ACCEPT

## Открытие портов
# SMB
$IPT -A INPUT -p tcp -m multiport --source 192.168.1.0/24 --dports 137,138,139,445 -j ACCEPT
$IPT -A INPUT -p udp -m multiport --source 192.168.1.0/24 --dports 137,138,139,445 -j ACCEPT
$IPT -A INPUT -p udp -m multiport --source 192.168.1.0/24 --sports 137,138,139,445 -j ACCEPT

# FTP
$IPT -A INPUT -p tcp --dport 21 -j ACCEPT

# HTTP
$IPT -A INPUT -p tcp --dport 80 -j ACCEPT

# SSH
$IPT -A INPUT -p tcp --source 192.168.1.0/24 --dport 22 -j ACCEPT
}

case "$1" in
start) echo -n "Starting iptables: iptables"
      start_iptables
      echo "."
      ;;
stop) echo -n "Stopping iptables: iptables"
      iptables -F
      iptables -X
      iptables -P INPUT ACCEPT
      iptables -P OUTPUT ACCEPT
      iptables -P FORWARD ACCEPT
      echo "."
      ;;
save) echo -n "Saving iptables configuration: iptables"
      iptables-save > /etc/iptables.save
      echo "."
      ;;
restart) echo -n "Restarting iptables: iptables"
      iptables -F
      iptables -X
      iptables -P INPUT ACCEPT
      iptables -P OUTPUT ACCEPT
      iptables -P FORWARD ACCEPT
      start_iptables
      echo "."
      ;;
reload) echo -n "Reloading iptables configuration: iptables"
        iptables -F
        iptables -X
        iptables -P INPUT ACCEPT
        iptables -P OUTPUT ACCEPT
        iptables -P FORWARD ACCEPT
        cat /etc/iptables.save | iptables-restore
        echo "."
        ;;
list) echo "List of iptables rules"
      iptables -L
      ;;
*) echo "Usage: /etc/init.d/iptables.local start|stop|save|restart|reload"
  exit 1
  ;;

esac
exit 0

III. Сохраняем наш скрипт и даем ему права на исполнение:
Код:

chmod +x /etc/init.d/iptables.local
Теперь вы можете применять правила iptables просто исполняя наш скрипт с ключом start. Но правила iptables действуют только до следующего запуска системы, поэтому имеет смысл автоматизировать запуск правил iptables. Сделать это можно несколькими способами, кому какой нравится. Мы же сделаем это путем добавления в файл /etc/rc.local необходимых записей. Открываем файл /etc/rc.local и приводим его к следующему виду:
Код:

# vim /etc/rc.local
Код:

#!/bin/sh -e
/etc/init.d/iptables.local start
exit 0

Все, теперь мы решили поставленные нами задачи. Если кто-то заметит неточности или предложит другие варианты - буду очень признателен!

BIT 22.07.2009 03:27

Re: настройка iptables для десктопа
 
Я так понимаю под дебиан настругал :)
Цитата:


#!/bin/bash
## Переменные
IFACE="eth0" # Сетевой интерфейс
IPT="/sbin/iptables" # iptables
IFC="/sbin/ifconfig"
G="/bin/grep"
SED="/bin/sed"
AWK="/usr/bin/awk"
ECHO="/bin/echo"

LOCIF="eth0"
LOCIP="`$IFC $EXTIF | $AWK /$EXTIF/'{next}//{split($0,a,":");split(a[2],a," ");print a[1];exit}'`" # В силу своей ленивости дергаем ип из ipconfig`а

SAMBA="137,138,139,445" # порты под самбу
FTP="21" # аналогично
SSH="22"

TCP_PORTS=" \
$SAMBA \
$FTP \
$SSH \"

UDP_PORTS=" \
$SAMBA \"


## Скрипт применения правил iptables
start_iptables()
{
## Настройка цепочек
# Очистка всех цепочек от правил
$IPT -F
$IPT -X

# Установка политик цепочек
$IPT -P INPUT DROP
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD DROP

## Настройка правил приёма пакетов
# Принимать ESTABLISHED пакеты
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Разрешить loopback
$IPT -A INPUT -i lo -j ACCEPT

## Открытие портов
# SMB
$IPT -A INPUT -p tcp -m multiport --source $LOCIP --dports $TCP_PORTS -j ACCEPT
$IPT -A INPUT -p udp -m multiport --source $LOCIP --dports $UDP_PORTS -j ACCEPT
$IPT -A INPUT -p udp -m multiport --source $LOCIP --sports $UDP_PORTS -j ACCEPT
}

case "$1" in
start) echo -n "Starting iptables: iptables"
start_iptables
echo "."
;;
stop) echo -n "Stopping iptables: iptables"
iptables -F
iptables -X
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
echo "."
;;
save) echo -n "Saving iptables configuration: iptables"
iptables-save > /etc/iptables.save
echo "."
;;
restart) echo -n "Restarting iptables: iptables"
iptables -F
iptables -X
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
start_iptables
echo "."
;;
reload) echo -n "Reloading iptables configuration: iptables"
iptables -F
iptables -X
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
cat /etc/iptables.save | iptables-restore
echo "."
;;
list) echo "List of iptables rules"
iptables -L
;;
*) echo "Usage: /etc/init.d/iptables.local start|stop|save|restart|reload"
exit 1
;;

esac
exit 0
Быстренько поправил... на глаз вроде должно работать :)

FreeSky 22.07.2009 12:07

Re: настройка iptables для десктопа
 
да, было под дебиан) мб тогда и пост поправить? )

BIT 22.07.2009 12:11

Re: настройка iptables для десктопа
 
сам смотри, я лишь поделился своим видением iptables правил, хотя написал немного неправильно ))
там в цикле нада TCP_PORTS и UDP_PORTS обрабатывать :)

FreeSky 22.07.2009 13:07

Re: настройка iptables для десктопа
 
ладно, пусть будет два варианта)


Часовой пояс GMT +4, время: 22:56.

Powered by vBulletin® Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot