Iptables

Материал из Викиадмин
Версия от 13:44, 16 ноября 2018; Aleksdem (обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к навигации Перейти к поиску

Iptables - приложение, которое позволяет системному администратору проводить настройки таблиц брандмауэра ядра Linux в виде цепей и правил, которые он хранит. В настоящее время используются для различных протоколов; относится к IPv4, ip6tables на IPv6, arptables к ARP, и т.д. Реализованы в виде различных модулей Netfilter.

Iptables требует повышенных привилегий для конфигурирования и должна быть выполнена только пользователем root, в противном случае она не сможет функционировать. На большинстве систем на базе OS Linux, Iptables устанавливается в /usr/sbin/iptables. Он также может быть найден в /sbin/iptables, но так как iptables не основа системы, а больше как сервис, предпочтительным местом остается /usr/sbin.

QoS для Linux, кто использует торрент-клиенты

Итак, задача: чтобы торрент качал как надо и в то же время можно было достаточно комфортно сёрфить страницы. Для этого мы отделим приоритеты для портов до 1024 и после. Те порты, которые будут до 1024-го, будут более значимы. Таким образом канал будет использоваться наиболее полно, нежели просто ограничивать торрент-клиент на время. Итак, список правил:

iptables -A PREROUTING -t mangle -p tcp --sport 0:1024 -j TOS --set-tos Minimize-Delay
iptables -A PREROUTING -t mangle -p tcp --sport 1025:65535 -j TOS --set-tos Maximize-Throughput
iptables -A OUTPUT -t mangle -p tcp --dport 0:1024 -j TOS --set-tos Minimize-Delay
iptables -A OUTPUT -t mangle -p tcp --dport 1025:65535 -j TOS --set-tos Maximize-Throughput

Как удалить в iptables правило по номеру

iptables -L INPUT --line-numbers
iptables -D INPUT номер

iptables -t nat -L POSTROUTING --line-numbers
iptables -t nat -D POSTROUTING номер

Графическая оболочка для iptables

   Webmin

Есть модуль, где реализовано управление iptables в данном ПО.

Настройка для начинающих

Небольшой первоначальный скрипт (правила, iptables faq) для десктопа или простого сервера. В данном случае примеры по работе с портами того или иного ПО, запущенного на вашем компьютере. На любом компьютере необходимо соблюдать меры безопасности. Миф о том, что Linux более защищен - не верен, все зависит от корявости рук администратора. Есть и хорошо защищенные Windows-системы, как и открытые практически любому Linux-системы. Поэтому стоит все-таки немного подумать и о сетевой защите компьютера. Ниже добавлены некоторые правила для iptables, которые могут вначале пригодиться.

Специально заменил $IPT на /sbin/iptables, если кому-то понадобится только одно правило, чтобы не менять что-либо - просто скопировал и выполнил. Естественно, здесь пока мало правил, нет различных VPN и т.д., если есть желание - добавьте.

Эти строки можно скопировать целиком в какой-либо скрипт и просто его выполнить. Для обычных случаев этого вполне хватит. Если какое-либо приложение не может выйти в сеть, специально добавлено логирование. Просто открывайте tail -f /var/log/syslog (или ваше, если отличное от Ubuntu) и смотрите! Если есть вопросы - добавьте их в обсуждение, будем вместе решать.

PS Кроме этих правил, подумайте о том, что стоит взять из статьи Оптимизация TCP.

Скрипт и правила IPTABLES

#!/bin/sh

echo "0" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/tcp_syncookies
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
#необходим для корректной работы FTP-сервера
sbin/modprobe ip_conntrack_ftp
#Сбрасываем старые данные и правила
/sbin/iptables -F
/sbin/iptables -F -t nat
/sbin/iptables -F -t mangle
/sbin/iptables -X
/sbin/iptables -X -t nat
/sbin/iptables -X -t mangle

echo Old Rules Flushed

#Устанавливаем правила на DROP по-умолчанию. (Set Default-Drop Policy)
/sbin/iptables -P INPUT DROP
/sbin/iptables -P OUTPUT DROP

#Create New Chain Called BAD_PACKETS
/sbin/iptables -N BAD_PACKETS

#Разрешаем работу локального интерфейса, того самого 127.0.0.1 (Allow The Loopback)
/sbin/iptables -A INPUT -i lo -j ACCEPT

#Jump To BAD_PACKETS
/sbin/iptables -A INPUT -j BAD_PACKETS

#Разрешаем поддерживать открытыми уже установленные соединения (Allow Established Connections)
/sbin/iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Разрешаем получать запросы от клиентов DHCP. (Allow DHCP)
/sbin/iptables -A INPUT -p UDP --dport 68 --sport 67 -j ACCEPT

#Разрешаем присоединяться к SSH, при условии, что используется стандартный 22 порт (Allow SSH)
/sbin/iptables -A INPUT -p TCP -i eth0 --dport 22 -j ACCEPT
/sbin/iptables -A INPUT -p TCP -i eth0 --dport 22 -j ACCEPT

#Разрешаем сетевую печать на этом компьютере. (Allow net print)
/sbin/iptables -A INPUT -p UDP -i eth0 --dport 631 -j ACCEPT

#Разрешаем webmin на стандартном 10000 порту (Allow  webmin)
/sbin/iptables -A INPUT -p TCP -i eth0 --dport 10000 -j ACCEPT

#Allow avahi-daemon
/sbin/iptables -A INPUT -p TCP -i eth0 --dport 5353 -j ACCEPT

#Allow input torrents-client
/sbin/iptables -A INPUT -p TCP -i eth0 --dport 51413 -j ACCEPT
/sbin/iptables -A INPUT -p UDP -i eth0 --dport 51413 -j ACCEPT
/sbin/iptables -A INPUT -p TCP -i eth0 --dport 6881 -j ACCEPT
/sbin/iptables -A INPUT -p UDP -i eth0 --dport 6881 -j ACCEPT

#Allow Samba From Specified Hosts
/sbin/iptables -A INPUT -p TCP -i eth0 --dport 137:139 -j ACCEPT
/sbin/iptables -A INPUT -p UDP -i eth0 --dport 137:139 -j ACCEPT
/sbin/iptables -A INPUT -p TCP -i eth0 --sport 137:139 -j ACCEPT
/sbin/iptables -A INPUT -p UDP -i eth0 --sport 137:139 -j ACCEPT

#Allow CMP Replies From Specified Hosts (Ping)
/sbin/iptables -A INPUT -p ICMP -i eth0 --icmp-type 8 -j ACCEPT
/sbin/iptables -A INPUT -p ICMP -i eth0 --icmp-type 8 -j ACCEPT

#Разрешаем подключаться к SMTP на 587 порт
/sbin/iptables -A INPUT -p tcp --dport 587 -j ACCEPT
#Log
/sbin/iptables -A INPUT -j LOG --log-prefix "INPUT DROP: "

#Accept Loopback On OUTPUT
/sbin/iptables -A OUTPUT -o lo -j ACCEPT

#Разрешаем поддерживать открытыми уже установленные соединения. (Allow Established Connections)
/sbin/iptables -A OUTPUT -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

#Разрешить получать IP по DHCP (Allow DHCP)
/sbin/iptables -A OUTPUT -p UDP --dport 67 --sport 68 -j ACCEPT

#Allow HTTP, FTP, DNS, SSH, SMTP & Port 443 Outbound
/sbin/iptables -A OUTPUT -p TCP -o eth0 --dport 443 -j ACCEPT
/sbin/iptables -A OUTPUT -p TCP -o eth0 --dport 80 -j ACCEPT
/sbin/iptables -A OUTPUT -p TCP -o eth0 --dport 53 -j ACCEPT
/sbin/iptables -A OUTPUT -p UDP -o eth0 --dport 53 -j ACCEPT
/sbin/iptables -A OUTPUT -p TCP -o eth0 --dport 25 -j ACCEPT
/sbin/iptables -A OUTPUT -p TCP -o eth0 --dport 22 -j ACCEPT
/sbin/iptables -A OUTPUT -p TCP -o eth0 --dport 21 -j ACCEPT

#Allow POP, IMAP
/sbin/iptables -A OUTPUT -p TCP -o eth0 --dport 110 -j ACCEPT
/sbin/iptables -A OUTPUT -p TCP -o eth0 --dport 143 -j ACCEPT

#Allow IMAPS
/sbin/iptables -A OUTPUT -p TCP -o eth0 --dport 993 -j ACCEPT

#Allow output  ICQ
/sbin/iptables -A OUTPUT -p TCP -o eth0 --dport 5190 -j ACCEPT

#Разрешить выход на IRC. Allow output IRC
/sbin/iptables -A OUTPUT -p TCP -o eth0 --dport 6667 -j ACCEPT
/sbin/iptables -A OUTPUT -p TCP -o eth0 --dport 6668 -j ACCEPT
/sbin/iptables -A OUTPUT -p TCP -o eth0 --dport 6669 -j ACCEPT
/sbin/iptables -A OUTPUT -p TCP -o eth0 --dport 8001 -j ACCEPT

 #Allow output CUPS (for printers in net)
/sbin/iptables -A OUTPUT -p UDP -o eth0 --dport 631 -j ACCEPT
 
#Allow output avahi-daemon
/sbin/iptables -A OUTPUT -p UDP -o eth0 --dport 5353 -j ACCEPT

#Allow output NTP (for ntpdate)
/sbin/iptables -A OUTPUT -p UDP -o eth0 --dport 123 -j ACCEPT

#Allow output Urban Terror (ну это просто необходимость)
/sbin/iptables -A OUTPUT -p UDP -o eth0 --dport 27960 -j ACCEPT

#Allow specify ports
/sbin/iptables -A OUTPUT -p TCP -o eth0 --dport 2046 -j ACCEPT
/sbin/iptables -A OUTPUT -p TCP -o eth0 --dport 2050 -j ACCEPT

#Allow Samba From Specified Hosts
/sbin/iptables -A OUTPUT -p TCP -o eth0 --dport 137:139 -j ACCEPT
/sbin/iptables -A OUTPUT -p UDP -o eth0 --dport 137:139 -j ACCEPT
/sbin/iptables -A OUTPUT -p TCP -o eth0 --dport 445 -j ACCEPT
/sbin/iptables -A OUTPUT -p UDP -o eth0 --dport 445 -j ACCEPT

#Allow ICMP
/sbin/iptables -A OUTPUT -p ICMP -o eth0 --icmp-type 8 -j ACCEPT

#Drop
/sbin/iptables -A OUTPUT -j LOG --log-prefix "OUTPUT DROP: "
/sbin/iptables -A BAD_PACKETS -p TCP ! --syn -m state --state NEW -j DROP
/sbin/iptables -A BAD_PACKETS -p TCP --tcp-flags ALL ALL -j DROP
/sbin/iptables -A BAD_PACKETS -p TCP --tcp-flags ALL NONE -j DROP
/sbin/iptables -A BAD_PACKETS -p TCP --tcp-flags ALL SYN \-m state --state ESTABLISHED -j DROP
/sbin/iptables -A BAD_PACKETS -p ICMP --fragment -j DROP
/sbin/iptables -A BAD_PACKETS -m state --state INVALID -j DROP
/sbin/iptables -A BAD_PACKETS -d 255.255.255.255 -j DROP
/sbin/iptables -A BAD_PACKETS -j RETURN

echo "Rules written."

Как удалить в Iptables правило

iptables -L INPUT --line-numbers
iptables -D INPUT номер
iptables -t nat -L POSTROUTING --line-numbers
iptables -t nat -D POSTROUTING номер