Iptables
- Запомнить конфигурацию файрвола можно командой iptables-save, восстановить iptables-restore, хранится она в /etc/sysconfig/iptables.
Содержание
- 1 Добавление и удаления правил
- 2 Прямой доступ в Интернет
- 3 Ограничение доступа в локальную сеть
- 4 Подключение к удалённому рабочему столу (УРС, по протоколу RDP) Windows через фаервол
- 5 Anti-ssh-bruteforce
- 6 Примеры некоторых правил
- 7 Журналирование событий iptables
- 8 Шаблонный скрипт закрывающий все дыры
- 9 Полезные ссылки
Добавление и удаления правил
- Если ошиблись, то удаляем, изменяем и прописываем заново
# 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 |
чистим все цепочки |
Журналирование событий iptables
Настройка журнала iptables в Debian производится в файле /etc/sysconfig/iptables
... -A INPUT -i eth1 -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j LOG --log-prefix "**Hackers**" --log-level 4 --log-tcp-options -A INPUT -i eth1 -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j REJECT --reject-with icmp-port-unreachable ...
В Debian 4.0 iptables по умолчанию пишет логи в /var/log/kern.log, чтобы это изменить создаём файл /var/log/iptables.warn (с правами доступа такими же как и /var/log/kern.log) и добавляем в /etc/syslog.conf (/etc/rsyslog.conf для Debian 5.0) строку "kern.warning -/var/log/iptables.warn":
... kern.* -/var/log/kern.log kern.warning -/var/log/iptables.warn ...
Перезагружаем syslogd:
# /etc/init.d/sysklogd restart
или rsyslog в случае Debian 5:
# /etc/init.d/rsyslog restart
Полезные ссылки:
Шаблонный скрипт закрывающий все дыры
Отказывая по умолчанию всем в соединении (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