Iptables: различия между версиями
Langator (обсуждение | вклад) (Новая страница: «- Запомнить конфигурацию файрвола можно командой <tt>iptables-save</tt>, восстановить <tt>iptables-restore</tt>...») |
Langator (обсуждение | вклад) м |
||
Строка 1: | Строка 1: | ||
− | |||
− | |||
== Добавление и удаления правил == | == Добавление и удаления правил == | ||
− | + | Если ошиблись, то удаляем, изменяем и прописываем заново | |
<source lang="bash"> iptables -t nat -D POSTROUTING 1</source> | <source lang="bash"> iptables -t nat -D POSTROUTING 1</source> | ||
Строка 733: | Строка 731: | ||
* [http://www.ingineer.ru/linux/ Пошаговое конфигурирование iptables] | * [http://www.ingineer.ru/linux/ Пошаговое конфигурирование iptables] | ||
− | [[Category:Руководства]] [[Категория:Net]] | + | [[Category:Руководства]] |
+ | [[Категория:Iptables]] | ||
+ | [[Категория:Net]] |
Текущая версия на 01:14, 18 апреля 2011
Добавление и удаления правил
Если ошиблись, то удаляем, изменяем и прописываем заново
iptables -t nat -D POSTROUTING 1
где 1 это номер правила по порядку, или удаляем все правила из таблицы POSTROUTING
iptables -t nat -F POSTROUTING
Также удалить конкретное правило можно использовав директиву -D вместо -A:
iptables -t nat -D POSTROUTING -s 10.0.0.0/24 -o eth1 -j MASQUERADE
- В целях отладки можно добавить правило на пропуск пингов от клиентов во внешний мир
iptables -t nat -A POSTROUTING -o eth1 -p icmp -j SNAT --to-source 192.168.100.18
Прямой доступ в Интернет
Добавим правило прямого доступа (без прокси сервера) к Интернет для адреса 10.0.0.244
iptables -t nat -A POSTROUTING -s 10.0.0.244 -o eth1 -j SNAT --to 192.168.100.18
или для всей подсети
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth1 -j MASQUERADE
- Проверяем добавленную запись
iptables -t nat -L
Ограничение доступа в локальную сеть
Частичная блокировка
Для того, чтобы ограничить доступ в нашу сеть извне не навредив, нужно иметь представление какие ресурсы используют приложения, работающие на сервере. Для этого убедимся, что все службы сервера запущены (httpd, named и т.д.) и определим открытые порты.
Пусть внешний интерфейс eth1 имеет адрес 81.81.81.81.
Проверим открытые порты командой:
netcat -v -w 4 -z 81.81.81.81 1-1023 | grep succeed
либо
nmap -sT -O 81.81.81.81
где "-О" это заглавная латинская буква "О". Посмотрим кто сопоставлен, к примеру, с портом 111:
cat /etc/services | grep 111
sunrpc 111/tcp portmapper # RPC 4.0 portmapper TCP
sunrpc 111/udp portmapper # RPC 4.0 portmapper UDP
Посмотрим, кто его прослушивает:
netstat -anp | grep 111
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 2457/portmap
udp 0 0 0.0.0.0:111 0.0.0.0:* 2457/portmap
Посмотрим используется ли он сейчас:
lsof -i | grep 111
Прописываем правила, закрывающие все порты за исключением 25 (smtp: принимаем почту) и 80 (http: показываем web страницы)
iptables -A INPUT -i eth1 -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -i eth1 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth1 -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j REJECT --reject-with icmp-port-unreachable
iptables -A FORWARD -o eth1 -p tcp -j DROP
Теперь наш сервер прикрыт с внешнего мира. Запуск команд netcat и nmap c самого сервера покажет тоже, что и до внесения правил, но если пробовать с другого компьютера, то заметим результат: доступ везде прикрыт, кроме как на разрешённые нами 25 и 80 порты. Можно посмотреть действующие правила:
iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:smtp
ACCEPT tcp -- anywhere anywhere tcp dpt:http
REJECT tcp -- anywhere anywhere tcpflags:FIN,SYN,ACK/SYN reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT)
target prot opt source destination
DROP tcp -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Или те же правила в виде команд:
iptables-save
# Generated by iptables-save v1.3.1 on Wed Aug 30 14:30:11 2006
*nat
:PREROUTING ACCEPT [2784:423873]
:POSTROUTING ACCEPT [1822:103126]
:OUTPUT ACCEPT [1805:100270]
COMMIT
# Completed on Wed Aug 30 14:30:11 2006
# Generated by iptables-save v1.3.1 on Wed Aug 30 14:30:11 2006
*filter
:INPUT ACCEPT [28890:12820098]
:FORWARD ACCEPT [22:3088]
:OUTPUT ACCEPT [30305:14410374]
-A INPUT -i eth1 -p tcp -m tcp --dport 25 -j ACCEPT
-A INPUT -i eth1 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -i eth1 -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -o eth1 -p tcp -j DROP
COMMIT
# Completed on Wed Aug 30 14:30:11 2006
Чтобы запомнить эти правила смотрим в /etc/init.d/iptables откуда берёт iptables свою конфигурацию при старте. Видим, что хранит он её в /etc/sysconfig/iptables. Сохраняем новую конфигурацию в этот файл:
iptables-save > /etc/sysconfig/iptables
Теперь при запуске системы прописанные нами правила восстановятся.
Блокировка всех входящих, открываем все исходящие
Ещё один вариант как настроить элементарный firewall выпускающий все наружу и закрывающий все входящие подключения приведён по адресу http://rlworkman.net/conf/firewall/rc.firewall.desktop.generic. Выполняем при старте системы скрипт:
# Define variables
IPT=/usr/sbin/iptables # change if needed
EXT_IF=eth0 # external interface (connected to internet)
# Enable TCP SYN Cookie Protection
if [ -e /proc/sys/net/ipv4/tcp_syncookies ]; then
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
fi
# Disable ICMP Redirect Acceptance
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
# Do not send Redirect Messages
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
# Enable bad error message protection
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
# Enable broadcast echo protection
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# Disable source-routed packets
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
# Set default policy to DROP
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP
# Flush old rules
$IPT -F
# Allow loopback traffic
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
# Allow packets of established connections and those
# which are related to established connections
$IPT -A INPUT -i $EXT_IF -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allow all outgoing packets
$IPT -A OUTPUT -o $EXT_IF -j ACCEPT
# Allow incoming ssh from internet (uncomment the line below if needed)
#$IPT -A INPUT -i $EXT_IF -p tcp --destination-port 22 --syn -m state --state NEW -j ACCEPT
Подключение к удалённому рабочему столу (УРС, по протоколу RDP) Windows через фаервол
Постановка задачи:
Необходимо получить доступ к рабочей станции Windows из Интернет. Рабочая станция находится в локальной сети и имеет адрес 192.168.1.1. Доступ в Интернет осуществляется через Линукс сервер, выполняющий роль файрвола, прокси и т.д.
Решение:
С глобальной сети будем подключаться к линуксовому серверу, который будет перенаправлять все запросы к УРС (т.е. на порт 3389) в локальную сеть на ip 192.168.1.1
- На Windows клиенте открыть доступ к УРС:
Свойства "Моего компьютера" - закладка Удалённые сеансы - поставить галочку на "Разрешить удалённый доступ к этому компьютеру"
Не забудем, что:
а) пользователь которым мы будем подключаться должен иметь не пустой пароль.
б) обязательно указать имя пользователя в формате: ИмяКомпьютера\ИмяПользователя или ИмяДомена\ИмяПользователя
- Теперь настроим iptables на Linux сервере, для перенаправления запросов:
# iptables -t nat -A PREROUTING -p tcp -d ххх.ххх.ххх.ххх --dport 3389 -j DNAT --to-destination 192.168.1.1:3389 # iptables -A FORWARD -i eth1 -d 192.168.1.1 -p tcp --dport 3389 -j ACCEPT
здесь ХХХ.ХХХ.ХХХ.ХХХ - внешний адрес Linux'a
Anti-ssh-bruteforce
Вот правила iptables (нужна поддержка recent match в ядре):
1. Сохраните текущие правила командой
# iptables-save > /etc/iptables.bak
2. Откройте /etc/iptables.bak в вашем любимом текстовом редакторе.
3. Добавте следующие правила в подходящем порядке в соответствии с уже созданными правилами.
iptables -A INPUT -p tcp --syn --dport 22 -m recent --name radiator --set iptables -A INPUT -p tcp --syn --dport 22 -m recent --name radiator --update --seconds 60 --hitcount 3 -j DROP
4. Активируйте все правила
iptables-restore /etc/iptables.bak
После 3 попыток подключиться в течение 60 секунд, робот блокируется и отваливает и почти нет мусора в логах, а главное - лишнего траффика, в отличие от pam_abl. По желанию можно увеличить параметры --hitcount и --seconds.
Примеры некоторых правил
iptables -t nat -A POSTROUTING -s 10.0.3.41 -d 217.217.217.217 -o eth1 -p tcp --dport 25 -j SNAT --to 116.116.116.116
Разрешаем прямой доступ к внешней почте. Подробнее: разрешаем доступ хосту 10.0.3.41 из внутренней сети обращаться к хосту 217.217.217.217 на 25 порт (smtp) протокола tcp; такие обращения пропускаем через интерфейс eth1, который имеет адрес 116.116.116.116
Для доступа к РОР добавляем такое же правило для порта 110
iptables -t nat -A POSTROUTING -s 10.0.3.41 -p tcp --dport 25 -j MASQUERADE
Более короткое правило, аналогичное вышеприведённому, только здесь пользователь с ip 10.0.3.41 имеет доступ к любому почтовому серверу в Интернете.
iptables -L -vxn | смотрим счётчики. При создании правил автоматически ведётся счётчик пакетов и байт к которому это правило было применено. |
iptables -F iptables -X |
чистим все цепочки |
Шаблонный скрипт закрывающий все дыры
Отказывая по умолчанию всем в соединении (default policy drop), открываем только то, что знаем.
#!/bin/sh
# Firewall rules by Nail Ahmetgaleev, 2011
###########################################################################
#
# 1. Configuration options.
#
#
# 1.1 Internet Configuration.
#
INET_IP="212.75.220.218"
INET_IFACE="eth0"
INET_BROADCAST="212.75.220.219"
#
# 1.2 Local Area Network configuration.
#
# your LAN's IP range and localhost IP. /24 means to only use the first 24
# bits of the 32 bit IP address. the same as netmask 255.255.255.0
#
LAN_IP="10.108.93.223"
LAN_IP_RANGE="10.0.0.0/8"
LAN_IFACE="eth1:0"
LAN1_IP="192.1.1.1"
LAN1_IP_RANGE="192.1.1.0/24"
LAN1_IFACE="eth2"
LAN2_IP="192.168.1.1"
LAN2_IP_RANGE="192.168.1.0/24"
LAN2_IFACE="eth1"
#
# 1.3 DMZ Configuration.
#
#
# 1.4 Localhost Configuration.
#
LO_IFACE="lo"
LO_IP="127.0.0.1"
#
# 1.5 IPTables Configuration.
#
IPTABLES="/sbin/iptables"
#
# 1.6 Other Configuration.
#
# Flushing rules
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -X
###########################################################################
#
# 2. Module loading.
#
#
# Needed to initially load modules
#
/sbin/depmod -a
#
# 2.1 Required modules
#
/sbin/modprobe ip_tables
/sbin/modprobe ip_conntrack
/sbin/modprobe iptable_filter
/sbin/modprobe iptable_mangle
/sbin/modprobe iptable_nat
/sbin/modprobe ipt_LOG
/sbin/modprobe ipt_limit
/sbin/modprobe ipt_state
#
# 2.2 Non-Required modules
#
#/sbin/modprobe ipt_owner
#/sbin/modprobe ipt_REJECT
#/sbin/modprobe ipt_MASQUERADE
#/sbin/modprobe ip_conntrack_ftp
#/sbin/modprobe ip_conntrack_irc
#/sbin/modprobe ip_nat_ftp
#/sbin/modprobe ip_nat_irc
###########################################################################
#
# 3. /proc set up.
#
#
# 3.1 Required proc configuration
#
echo "1" > /proc/sys/net/ipv4/ip_forward
#
# 3.2 Non-Required proc configuration
#
#echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter
#echo "1" > /proc/sys/net/ipv4/conf/all/proxy_arp
#echo "1" > /proc/sys/net/ipv4/ip_dynaddr
# Enable TCP SYN Cookie Protection
if [ -e /proc/sys/net/ipv4/tcp_syncookies ]; then
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
fi
# Disable ICMP Redirect Acceptance
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
# Do not send Redirect Messages
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
# Enable bad error message protection
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
# Enable broadcast echo protection
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# Disable source-routed packets
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
###########################################################################
#
# 4. rules set up.
#
######
# 4.1 Filter table
#
#
# 4.1.1 Set policies
#
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP
#
# 4.1.2 Create userspecified chains
#
#
# Create chain for bad tcp packets
#
$IPTABLES -N bad_tcp_packets
#
# Create SSH check table
#
$IPTABLES -N ssh_check
#
# Create separate chains for ICMP, TCP and UDP to traverse
#
$IPTABLES -N allowed
$IPTABLES -N tcp_packets
$IPTABLES -N udp_packets
$IPTABLES -N icmp_packets
#
# 4.1.3 Create content in userspecified chains
#
#
# bad_tcp_packets chain
#
$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags SYN,ACK SYN,ACK \
-m state --state NEW -j REJECT --reject-with tcp-reset
$IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j LOG \
--log-prefix "New not syn:"
$IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP
#
# SSH check table
#
$IPTABLES -A ssh_check -m recent --update --seconds 300 --hitcount 3 \
--rttl --name SSH -m limit --limit 3/minute --limit-burst 3 -j LOG \
--log-level DEBUG --log-prefix "IPT SSH_BRUTFORCE:"
$IPTABLES -A ssh_check -m recent --update --seconds 300 --hitcount 3 \
--rttl --name SSH -j DROP
$IPTABLES -A ssh_check -m recent --set --name SSH -j allowed
#
# allowed chain
#
$IPTABLES -A allowed -p TCP --syn -j ACCEPT
$IPTABLES -A allowed -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A allowed -p TCP -j DROP
#
# TCP rules
#
# allow ftp,ssh,http,identd incoming packets
#$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 21 -j allowed
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 22 -m state --state NEW -j ssh_check
#$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 80 -j allowed
#$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 113 -j allowed
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 6890:6999 -j allowed
# Allow DC++
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 10853 -j allowed
#$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 6068 -j allowed
# Allow VoIP
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 1718:1720 -j allowed
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 1731 -j allowed
# Allow Donkey
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 9407 -j allowed
# Allow Overnet
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 15649 -j allowed
# Allow Gnutella
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 17099 -j allowed
#
# UDP ports
#
#$IPTABLES -A udp_packets -p UDP -s 0/0 --destination-port 53 -j ACCEPT
#$IPTABLES -A udp_packets -p UDP -s 0/0 --destination-port 123 -j ACCEPT
#$IPTABLES -A udp_packets -p UDP -s 0/0 --destination-port 2074 -j ACCEPT
#$IPTABLES -A udp_packets -p UDP -s 0/0 --destination-port 4000 -j ACCEPT
# Allow DC++
$IPTABLES -A udp_packets -p UDP -s 0/0 --destination-port 6308 -j ACCEPT
# Allow Torrents
$IPTABLES -A udp_packets -p UDP -s 0/0 --destination-port 6771 -j ACCEPT
$IPTABLES -A udp_packets -p UDP -s 0/0 --destination-port 6890:6999 -j ACCEPT
# Allow VoIP
$IPTABLES -A udp_packets -p UDP -s 0/0 --destination-port 5060:5064 -j ACCEPT
# Allow Donkey
$IPTABLES -A udp_packets -p UDP -s 0/0 --destination-port 9411 -j ACCEPT
# Allow Kademila
$IPTABLES -A udp_packets -p UDP -s 0/0 --destination-port 17354 -j ACCEPT
# Allow Overnet
$IPTABLES -A udp_packets -p UDP -s 0/0 --destination-port 15649 -j ACCEPT
# Allow Gnutella
$IPTABLES -A udp_packets -p UDP -s 0/0 --destination-port 17099 -j ACCEPT
# Allow dns requests
$IPTABLES -A udp_packets -p UDP -i $LAN1_IFACE --destination-port 53 -j ACCEPT
# Allow dhcp and bootp
$IPTABLES -A udp_packets -p UDP -i $LAN2_IFACE --destination-port 67 -j LOG \
--log-level DEBUG --log-prefix "IPT DHCP request: "
$IPTABLES -A udp_packets -p UDP -i $LAN2_IFACE --destination-port 67 -j ACCEPT
$IPTABLES -A udp_packets -p UDP -i $LAN2_IFACE --destination-port 69 -j LOG \
--log-level DEBUG --log-prefix "IPT TFTP request: "
$IPTABLES -A udp_packets -p UDP -s $LAN2_IP_RANGE --destination-port 69 -j ACCEPT
#
# In Microsoft Networks you will be swamped by broadcasts. These lines
# will prevent them from showing up in the logs.
#
#$IPTABLES -A udp_packets -p UDP -i $INET_IFACE -d $INET_BROADCAST \
#--destination-port 135:139 -j DROP
$IPTABLES -A udp_packets -p UDP -i $INET_IFACE \
--destination-port 135:139 -j DROP
#$IPTABLES -A udp_packets -p UDP -i $INET_IFACE \
#--destination-port 135:139 -j ACCEPT
#
# If we get DHCP requests from the Outside of our network, our logs will
# be swamped as well. This rule will block them from getting logged.
#
#$IPTABLES -A udp_packets -p UDP -i $INET_IFACE -d 255.255.255.255 \
#--destination-port 67:68 -j DROP
#
# ICMP rules
#
$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT
$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT
# 4.1.4 INPUT chain
#
#
# Bad TCP packets we don't want.
#
$IPTABLES -A INPUT -p tcp -j bad_tcp_packets
#
# Rules for special networks not part of the Internet
#
#$IPTABLES -A INPUT -p ALL -i $LAN_IFACE -s $LAN_IP_RANGE -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $LO_IP -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $LAN_IP -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $INET_IP -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $LAN2_IP -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LAN1_IFACE -s $LAN1_IP_RANGE -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LAN2_IFACE -s $LAN2_IP_RANGE -j ACCEPT
$IPTABLES -A INPUT -p ALL -i tun0 -j ACCEPT
#
# Special rule for DHCP requests from LAN, which are not caught properly
# otherwise.
#
#$IPTABLES -A INPUT -p UDP -i $LAN_IFACE --dport 67 --sport 68 -j ACCEPT
#
# Rules for incoming packets from the internet.
#
$IPTABLES -A INPUT -p ALL -d $INET_IP -m state --state ESTABLISHED,RELATED \
-j ACCEPT
$IPTABLES -A INPUT -p ALL -d $LAN_IP -m state --state ESTABLISHED,RELATED \
-j ACCEPT
$IPTABLES -A INPUT -p TCP -i $INET_IFACE -j tcp_packets
$IPTABLES -A INPUT -p UDP -i $INET_IFACE -j udp_packets
$IPTABLES -A INPUT -p ICMP -i $INET_IFACE -j icmp_packets
#
# If you have a Microsoft Network on the outside of your firewall, you may
# also get flooded by Multicasts. We drop them so we do not get flooded by
# logs
#
#$IPTABLES -A INPUT -i $INET_IFACE -d 224.0.0.0/8 -j DROP
#
# Log weird packets that don't match the above.
#
$IPTABLES -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG \
--log-level DEBUG --log-prefix "IPT INPUT packet died: "
#
# 4.1.5 FORWARD chain
#
#
# Bad TCP packets we don't want
#
$IPTABLES -A FORWARD -p tcp -j bad_tcp_packets
#
# Accept the packets we actually want to forward
#
#$IPTABLES -A FORWARD -i $LAN_IFACE -j ACCEPT
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -i $LAN1_IFACE -j ACCEPT
#
# Log weird packets that don't match the above.
#
$IPTABLES -A FORWARD -m limit --limit 3/minute --limit-burst 3 -j LOG \
--log-level DEBUG --log-prefix "IPT FORWARD packet died: "
#
# 4.1.6 OUTPUT chain
#
#
# Bad TCP packets we don't want.
#
$IPTABLES -A OUTPUT -p tcp -j bad_tcp_packets
#
# Special OUTPUT rules to decide which IP's to allow.
#
$IPTABLES -A OUTPUT -p ALL -s $LO_IP -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -s $LAN_IP -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -s $INET_IP -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -s $LAN1_IP -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -s $LAN2_IP -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -o tun0 -j ACCEPT
#
# Log weird packets that don't match the above.
#
$IPTABLES -A OUTPUT -m limit --limit 3/minute --limit-burst 3 -j LOG \
--log-level DEBUG --log-prefix "IPT OUTPUT packet died: "
######
# 4.2 nat table
#
#
# 4.2.1 Set policies
#
#
# 4.2.2 Create user specified chains
#
#
# 4.2.3 Create content in user specified chains
#
#
# 4.2.4 PREROUTING chain
#
#
# 4.2.5 POSTROUTING chain
#
#
# Enable simple IP Forwarding and Network Address Translation
#
#$IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -j SNAT --to-source $INET_IP
$IPTABLES -t nat -A POSTROUTING -s $LAN1_IP_RANGE -o $INET_IFACE -j SNAT --to-source $INET_IP
#
# 4.2.6 OUTPUT chain
#
######
# 4.3 mangle table
#
#
# 4.3.1 Set policies
#
#
# 4.3.2 Create user specified chains
#
#
# 4.3.3 Create content in user specified chains
#
#
# 4.3.4 PREROUTING chain
#
#
# 4.3.5 INPUT chain
#
#
# 4.3.6 FORWARD chain
#
#
# 4.3.7 OUTPUT chain
#
#
# 4.3.8 POSTROUTING chain
#
Полезные ссылки
- http://easylinux.ru/node/190 - хороший краткий обзор о принципе работы файрвола в Линуксе
- http://adz.void.ru - Цикл статей "Проблемы безопасности UNIX-подобных операционных систем"
- Red Hat Enterprise Linux 4: Руководство по безопасности
- Пошаговое конфигурирование iptables