LINUX.ORG.RU
ФорумAdmin

Iptables по-умному


0

0

Доброго времени суток.
В связи с подключением сети к Интернету по выделенке появилась необходимость более тонкой настройки iptables в плане фильтрации доступа к сервисам с разных IP. Сейчас все организовано очень по-простому - при загрузке системы правила загружаются командой iptables-save из соответствующего конфига. Хотелось бы ввести в правила переменные, которые позволили бы проще и эффективнее распределять права доступа, типа $TRUSTED_IP, $RESTRICTED_IP, $SAMBA_CLIENTS и т.п. по разным комбинациям сервисов. Как бы это правильнее реализовать?

anonymous

ну и используй эти переменные в скрипте (например rc.firewall), например вот так 



#!/bin/sh

INTERNAL_IP="x.x.x.x"
INTERNAL_IFACE="eth0"

EXTERNAL_IP="x.x.x.x"
EXTERNAL_IFACE="eth1"

INET_IP="x.x.x.x"
INET_IFACE="eth2"

MAIL_IP="x.x.x.x"

SQUID_PORT="3128"
ICP_PORT="3130"
SQUID_VOIP_PORT="3129"

SMTP_PORT="25"
SMTPS_PORT="465"

POP_PORT="110"
POPS_PORT="995"

IMAP_PORT="143"
IMAPS_PORT="993"

DNS_PORT="53"

NTP_PORT="123"

FTP_PORT="21"
FTP_DATA_PORT="20"
TFTP_PORT="69"

SSH_PORT="22"

HTTP_PORT="80"

HTTPS_PORT="443"

HTTP_8080_PORT="8080"

...........

и.т.д.

PPP_IFACE="ppp+"



IPTABLES="/sbin/iptables"


/sbin/depmod -a

/sbin/modprobe ip_tables
/sbin/modprobe ip_conntrack
/sbin/modprobe iptable_filter
/sbin/modprobe iptable_mangle
/sbin/modprobe iptable_nat
/sbin/modprobe ipt_state

/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_conntrack_tftp
/sbin/modprobe ip_nat_ftp



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

echo "0" > /proc/sys/net/ipv4/ip_no_pmtu_disc

echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_all

#Переменная tcp_ecn отвечает за работу Explicit Congestion Notification (Явное Уведомление о Перегруженности)
#в TCP-соединениях. Используется для уведомления о возникновении "затора" на маршруте к заданному хосту или
#сети. Может использоваться для извещения хоста-отправителя о необходимости снизить скорость передачи пакетов
#через конкретный маршрутизатор или брандмауэр.
echo "1" > /proc/sys/net/ipv4/tcp_ecn

echo "1" > /proc/sys/net/ipv4/conf/eth0/log_martians
echo "1" > /proc/sys/net/ipv4/conf/eth1/log_martians
echo "1" > /proc/sys/net/ipv4/conf/eth2/log_martians

#Принцип фильтрования в rp_filter:
#Если ответ на текущий пакет не может уйти через тот же интерфейс (когда
#приходит через один интерфейс, а уходит через другой), пакет отфильтровывается.
echo "1" > /proc/sys/net/ipv4/conf/eth0/rp_filter
echo "1" > /proc/sys/net/ipv4/conf/eth1/rp_filter
echo "1" > /proc/sys/net/ipv4/conf/eth2/rp_filter
echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter


echo "1" > /proc/sys/net/ipv4/conf/all/send_redirects

#ключает/выключает связывание IP-адреса с ARP-адресом. Если эта опция включена, то ответ будет
#передаваться через тот интерфейс, через который поступил запрос.
#echo "0" > /proc/sys/net/ipv4/conf/all/proxy_arp


.....
итд.
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD DROP


$IPTABLES -A INPUT -p ALL -s $LO_IP -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -j ACCEPT

#ulog rules
$IPTABLES -A INPUT -i $INET_IFACE -j ULOG --ulog-qthreshold 50 --ulog-nlgroup 1 --ulog-prefix all_input --ulog-cprange 100
$IPTABLES -A FORWARD -i $INET_IFACE -j ULOG --ulog-qthreshold 50 --ulog-nlgroup 1 --ulog-prefix all_forward --ulog-cprange 100


$IPTABLES -A INPUT -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -p UDP -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -p ICMP -j ACCEPT


#INPUT
#INTERNAL_IF
$IPTABLES -A INPUT -i $INET_IFACE -p TCP -m state --state NEW -d $INET_IP --dport $FTP_PORT -j ACCEPT
$IPTABLES -A INPUT -i $INET_IFACE -p UDP -m state --state NEW -d $INET_IP --dport $DNS_PORT -j ACCEPT
$IPTABLES -A INPUT -i $INET_IFACE -p TCP -m state --state NEW -d $INET_IP --dport $DNS_PORT -j ACCEPT
$IPTABLES -A INPUT -i $INET_IFACE -p TCP -m state --state NEW -d $INET_IP --dport $SSH_PORT -j ACCEPT

....

и еще очень много :)


для применения правил запускай его.
далее 
iptables save

потом создай файл
rc.firewall.add.remove
заголовок которого полностью скопируй из вышенаписаноого файла

rc.firewall.add.remove помещай правила с ключами -I -A -D, запускай для применения, а потом снова iptables save. и копируй/удаляй строки из rc.firewall.add.remove в rc.firewall.

так rc.firewall у тебя будет всегда в надлежащем состоянии, да и каждый раз iptables полностью перезапускать не придется.




anonymous
()
Ответ на: комментарий от anonymous

Огромное спасибо, буду разбираться

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.