IPTABLES |
IT MY WORK |
iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited
Данная команда означает буквально следующее - отклонять все пакеты, которые не подходят ни под одно описанное выше правило, со статусом "узел запрещен". 4. Сохраните все ваши правила и убедитесь, что служба iptables будет автоматически запущена при рестарте системы. iptables-save > /etc/sysconfig/iptables chkconfig iptables on После рестарта системы, iptables должен прочитать все правила из файла /etc/sysconfig/iptables и автоматически применить их. Проверить все дейвствующие правила можно командой iptables -L Если вы перезагрузились, а правил нет - проверьте, откуда их читает сервис. Посмотреть это можно в файле /etc/init.d/iptables, в параметре IPTABLES_DATA. Но я бы не советовал включать автоматическое сохранение. Так как всегда можно будет откатится простым передергиванием питания. Так-же советую включить опции IPTABLES_STATUS_LINENUMBERS="yes" IPTABLES_STATUS_VERBOSE="yes" и смотреть правила командой /etc/init.d/iptables status Добавлять и удалять можно командами iptables -I и iptables -D соответственно. Сохранять правила - /etc/init.d/iptables save Проверяем, что режим форвардинга включён Он нужен для трансляции пакетов между сетевыми интерфейсами. В частности, для работы NAT. В файле /etc/sysctl.conf должна присутствовать строчка: net.ipv4.ip_forward=1 иначе режим форвардинга НЕ БУДЕТ включаться при загрузке системы. Для того, чтобы включить его временно (например, в целях тестирования), набираем в консоли: echo 1 > /proc/sys/net/ipv4/ip_forward То есть, записываем единичку в файл /proc/sys/net/ipv4/ip_forward, определяющий текущие настройки форвардинга. |
it from posix/network/iptables #!/bin/sh # Задаем некоторые переменные: # Переменная, задающая путь к файлу запуска iptables. IPT="/sbin/iptables" # Ваш сетевой интерфейс. Это нужно, чтобы не писать в правилах одно и тоже. INET_IFACE="ppp0" # Номера непривилегированных портов UNPRIPORTS="1024:65535" start_fw() { # Включить перенаправление пакетов через ядро. echo 1 > /proc/sys/net/ipv4/ip_forward # Сбросить правила и удалить цепочки. $IPT -F $IPT -X # Политики по умолчанию. $IPT -P INPUT DROP $IPT -P FORWARD ACCEPT $IPT -P OUTPUT DROP # Разрешаем прохождение любого трафика по интерфейсу обратной петли. $IPT -A INPUT -i lo -j ACCEPT $IPT -A OUTPUT -o lo -j ACCEPT # Запрещаем любые новые подключения с любых интерфейсов, кроме lo к компьютеру. $IPT -A INPUT -m state ! -i lo --state NEW -j DROP # Если интерфейс не lo, то запрещаем входить в список его адресов. $IPT -A INPUT -s 127.0.0.1/255.0.0.0 ! -i lo -j DROP # Отбрасывать все пакеты, которые не могут быть идентифицированы и поэтому не могут иметь определенного статуса. $IPT -A INPUT -m state --state INVALID -j DROP $IPT -A FORWARD -m state --state INVALID -j DROP # Принимать все пакеты, которые инициированы из уже установленного соединения, и имеющим признак ESTABLISHED. # Состояние ESTABLISHED говорит о том, что это не первый пакет в соединении. $IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT # Предупреждаю вас о туповатых провайдерах, которые назначают IP адреса, отведенные IANA для локальных сетей. # Например адреса 10.X.X.X. Для этого надо установить правило, пропускающие трафик с этих серверов, ранее цепочки INPUT. $IPT -t nat -I PREROUTING -i $INET_IFACE -s 10.0.0.1/32 -j ACCEPT # Эти правила предохраняют от некоторых типов атак: # SYN наводнение. # Приводит к связыванию системных ресурсов, так что реальных обмен данными становится не возможным. $IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP $IPT -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP # UDP наводнение # Службы использующие UDP, очень часто становятся мишенью для атак с целью вывода системы из строя. $IPT -A INPUT -p UDP -s 0/0 --destination-port 138 -j DROP $IPT -A INPUT -p UDP -s 0/0 --destination-port 113 -j REJECT $IPT -A INPUT -p UDP -s 0/0 --source-port 67 --destination-port 68 -j ACCEPT $IPT -A INPUT -p UDP -j RETURN $IPT -A OUTPUT -p UDP -s 0/0 -j ACCEPT # ICMP - перенаправление # ICMP - сообщение указывает системе изменить содержимое таблиц маршрутизации с тем, что бы направлять # пакеты по более короткому маршруту. Может быть использовано взломщиком для перенаправления вашего трафика через свою машину. $IPT -A INPUT --fragment -p ICMP -j DROP $IPT -A OUTPUT --fragment -p ICMP -j DROP # Разрешаем ICMP соединение. Значительная часть ICMP используется для передачи сообщений о # том, что происходит с тем или иным UDP или TCP соединением. $IPT -A INPUT -p icmp -m icmp -i $INET_IFACE --icmp-type source-quench -j ACCEPT $IPT -A OUTPUT -p icmp -m icmp -o $INET_IFACE --icmp-type source-quench -j ACCEPT # Разрешаем себе ping наружу - нас же не попингуешь - пакеты отбрасываются. $IPT -A INPUT -p icmp -m icmp -i $INET_IFACE --icmp-type echo-reply -j ACCEPT $IPT -A OUTPUT -p icmp -m icmp -o $INET_IFACE --icmp-type echo-request -j ACCEPT # Разрешаем передачу пакета - некорректный параметр - используется, если в заголовке пакета содержится недопустимая запись, # или если контрольная сумма заголовка не соответствует контрольной сумме, указанной передающим узлом. $IPT -A INPUT -p icmp -m icmp -i $INET_IFACE --icmp-type parameter-problem -j ACCEPT $IPT -A OUTPUT -p icmp -m icmp -o $INET_IFACE --icmp-type parameter-problem -j ACCEPT # Запрещаем подключение к X серверу через сетевые интерфейсы. $IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport 6000:6063 -j DROP --syn # Прописываем порты, которые открыты в системе, но которые не должны быть открыты на сетевых интерфейсах: # $IPT -A INPUT -p tcp -m tcp -m multiport -i $INET_IFACE -j DROP --dports #порта $IPT -A INPUT -p tcp -m tcp -m multiport -i $INET_IFACE -j DROP --dports 783 $IPT -A INPUT -p tcp -m tcp -m multiport -i $INET_IFACE -j DROP --dports 3310 $IPT -A INPUT -p tcp -m tcp -m multiport -i $INET_IFACE -j DROP --dports 10000 # DNS сервер имен разрешаем. $IPT -A OUTPUT -p udp -m udp -o $INET_IFACE --dport 53 --sport $UNPRIPORTS -j ACCEPT $IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport 53 --sport $UNPRIPORTS -j ACCEPT $IPT -A INPUT -p udp -m udp -i $INET_IFACE --dport $UNPRIPORTS --sport 53 -j ACCEPT $IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport 1024:65353 --sport 53 -j ACCEPT # Разрешаем AUTH-запросы на удаленные сервера, на свой же компьютер - запрещаем. $IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport 113 --sport $UNPRIPORTS -j ACCEPT $IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport $UNPRIPORTS --sport 113 -j ACCEPT ! --syn $IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport 113 -j DROP # Открываем некоторые порты: # SMTP клиент (25) $IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport 25 --sport $UNPRIPORTS -j ACCEPT $IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport $UNPRIPORTS --sport 25 -j ACCEPT ! --syn # POP3 клиент (110) $IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport 110 --sport $UNPRIPORTS -j ACCEPT $IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport $UNPRIPORTS --sport 110 -j ACCEPT ! --syn # IMAP4 клиент (143) $IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport 143 --sport $UNPRIPORTS -j ACCEPT $IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport $UNPRIPORTS --sport 143 -j ACCEPT ! --syn # SSH клиент (22) $IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport 22 --sport $UNPRIPORTS -j ACCEPT $IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport $UNPRIPORTS --sport 22 -j ACCEPT ! --syn $IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport 22 --sport 1020:1023 -j ACCEPT $IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport 1020:1023 --sport 22 -j ACCEPT ! --syn # FPT клиент (21) $IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport 21 --sport $UNPRIPORTS -j ACCEPT $IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport $UNPRIPORTS --sport 21 -j ACCEPT ! --syn # HTTP/HTTPS клиент (80, 443) $IPT -A OUTPUT -p tcp -m tcp -m multiport -o $INET_IFACE --sport $UNPRIPORTS -j ACCEPT --dports 80,443 $IPT -A INPUT -p tcp -m tcp -m multiport -i $INET_IFACE --dport $UNPRIPORTS -j ACCEPT --sports 80,443 ! --syn # Разрешаем finger, whois, gorper, wais. Traceroute - разрешаем себе, к нам не проломятся - запрещено. Telnet # запретил, чтобы соблазна не было передавать пароли прямым текстом. $IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport $UNPRIPORTS --sport 20 -j ACCEPT $IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport 20 --sport $UNPRIPORTS -j ACCEPT ! --syn $IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport $UNPRIPORTS --sport $UNPRIPORTS -j ACCEPT $IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport $UNPRIPORTS --sport $UNPRIPORTS -j ACCEPT ! --syn $IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport 23 --sport $UNPRIPORTS -j ACCEPT $IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport $UNPRIPORTS --sport 23 -j ACCEPT ! --syn $IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport 79 --sport $UNPRIPORTS -j ACCEPT $IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport $UNPRIPORTS --sport 79 -j ACCEPT ! --syn $IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport 43 --sport $UNPRIPORTS -j ACCEPT $IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport $UNPRIPORTS --sport 43 -j ACCEPT ! --syn $IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport 70 --sport $UNPRIPORTS -j ACCEPT $IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport $UNPRIPORTS --sport 70 -j ACCEPT ! --syn $IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport 210 --sport $UNPRIPORTS -j ACCEPT $IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport $UNPRIPORTS --sport 210 -j ACCEPT ! --syn $IPT -A OUTPUT -p udp -m udp -o $INET_IFACE --dport 33434:33523 --sport 32769:65535 -j ACCEPT # Разрешаем прохождение DHCP запросов через iptables. Нужно, если IP адрес динамический. $IPT -A OUTPUT -p udp -m udp -o $INET_IFACE --dport 67 --sport 68 -j ACCEPT $IPT -A INPUT -p udp -m udp -i $INET_IFACE --dport 68 --sport 67 -j ACCEPT } case "$1" in start) echo -n "Starting firewall: iptables" start_fw echo "." ;; stop) echo -n "Stopping firewall: iptables" iptables -F iptables -X echo "." ;; save) echo -n "Saving firewall: iptables" iptables-save > /etc/rules-save echo "." ;; restart) echo -n "Restarting firewall: iptables" iptables -F iptables -X cat /etc/rules-save | iptables-restore echo "." ;; reload|force-reload) echo -n "Reloading configuration files for firewall: iptables" echo "." ;; *) echo "Usage: /etc/init.d/rc.iptables start|stop|restart|reload|force-reload" exit 1 ;; esac exit 0 Ну вот и все. Выше рассмотрена настройка Iptables для домашней машины. Сохраните этот скрипт, сделайте его выполняемым и поместите в /etc/init.d/; если там уже есть файл rc.firewall, удалите его, выполнив команду из этого каталога: $ update-rc.d -f rc.firewall remove Дальше сделайте, чтобы новый скрипт инициализации запускался во время загрузки: $ update-rc.d new.rc.iptables start 40 S . stop 89 0 6 . Теперь правила Iptables вступают в силу во время загрузки. Если вы хотите остановить Iptables: $ /etc/init.d/rc.iptables stop Для сохранения правил в /etc/rules-save $ /etc/init.d/rc.iptables save Для нового запуска Iptables: $ /etc/init.d/rc.iptables start |
INFO |
INFO from NEXT |
INFO from NEXT |