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