Хитрости с iptables
Это будет долгая и длинная статья о том что и как можно делать с помощью iptables. Предпологается что уже у Вас установленны все важные плюшки, а именно
apt-get install conntrack conntrackd libnetfilter-conntrack3 xtables-addons-dkms libnetfilter-queue1
Небольй трюк по обману сетевых сканеров, но если сканирований будет много, это отразатся на работе процессора
iptables -A INPUT -p tcp -m tcp -m multiport --dports 135,139,1025 -j TARPIT
TARPIT открывает у вас на компьютере TCP/IP порт. Если некая система соединяется с таким портом, то закрыть такое соединение быстро не получится. Соединение зависнет до тех пор, пока само не прервется по таймауту. Причем система, которая инициировала соединение, будет тратить свои системные ресурсы, а наш сервер просто будет останавливать попытки передачи данных, что практически не расходует ресурсов.
Защита SSH от брутфорса
самый просто способ это поставить fail2ban и успокоиться, по молчанию он сам все настроит и сделает, но можно сделать так, если от котого приходит более одно пакета с заголовком NEW в течение 20 секунд, он отправляется в бан
iptables -A INPUT -p tcp -m state --state NEW --dport 22 -m recent --update --seconds 20 -j TARPIT iptables -A INPUT -p tcp -m state --state NEW --dport 22 -m recent --set -j ACCEPT
Фильтр по содержанию пакета
Предположим нам надо блокировать все запросы которые идут на список от РосКомНадзора (это могут быть и ip и domen имена) а наш сервер это шлюз.
iptables -I FORWARD -s 10.0.0.0/8 -p tcp -m string --algo bm --string "bad-domen.ru" -j DROP
Есть два варианта использования --algo, bm ялвляется самый быстрый.
Защита от SYN-flood
iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT iptables -A INPUT -p tcp --syn -j DROP
Защита от сканеров портов
iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j DROP
Фильтрация по дате
iptables -A FORWARD -p tcp --dport 80 -m time --timestart 06:00 --timestop 17:00 --weekdays Mon -j REJECTЗаворот трафика на Squid (proxy server)
1. Если прокси сервер на той же машине что и шлюз, то используем редирект (REDIRECT)
iptables -t nat -A PREROUTING -p tcp -s 10.0.0.0/24 -i $int_if -m multiport --dport 80,3128,8080,8081 -j REDIRECT --to-port 31282. Если на другой машине (имеет другой адрес)
iptables -t nat -A PREROUTING -i $int_if -d 10.0.0.0/24 -p tcp -m multiport --dport 80,8080 -j DNAT --to 10.0.0.124:3128Проброс портов внутрь сети
iptables -t nat -A PREROUTING -p tcp -d $ext_ip --dport 9000 -j DNAT --to-destination 10.0.0.3:3389Для того что бы правильно и полностью работали соединения инициированные вашими компами внутри локалки наружу надо разрешить такие соединения
iptables -A FORWARD -i $int_if -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
Linux как сервер сетевого моста для мониторинга и управления проходящего трафика
Это будет долгая статья, так как все перепровить быстро не получается.
Ставим себе задачу следить тайно за проходящем трафиком. У меня это делает старенький комп с тремя сетевыми картами, две из них соеденены в мост, а третья для управления.
eth2 - сетевая для управления сервером
eth0 и eth1 соеденены в мост
apt-get install bridge-utils
и пишем нужные нам данные в /etc/network/interfaces
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). source /etc/network/interfaces.d/* # The loopback network interface auto lo iface lo inet loopback # The primary network interface allow-hotplug eth2 iface eth2 inet static address 192.168.1.11 netmask 255.255.255.0 gateway 192.168.1.1 dns-nameservers 192.168.1.3 auto vmbr1 iface vmbr1 inet manual bridge_ports eth0 eth1 bridge_stp off bridge_fd 0
Proxmox настройка сети
Настройка сети в Proxmox очень легка и сейчас я распишу несколько случаев. Предположим у нас в сервере (или ноде) всего 1 сетевая карта eth0 при установке proxmox'а он создал сетевой мост и вложил в него эту сетевую карточку и выдал на мосте такие настройки: ip 192.168.1.2 netmask 255.255.255.0 gateway 192.168.1.1.
1. Каждой виртуальной машине выдается свой IP из 192.168.1.*
В данном случае все просто, при создании такой ВМ в качестве соединения мы выбираем мост с именем vmbr0
ВМ получит ip адрес сама если в сети 192.168.1.* выдаются адреса автоматически
iptables настройка работы по времени
Для того что бы заставить работать блокировки iptables по времени, достаточно просто написать команду
iptables -I FORWARD -m ndpi --proto steam -s 10.10.10.101 -m time --timestart 09:00 --timestop 17:20 --weekdays Mon,Tue,Wed,Thu,Fri -j DROP
и вот уже кое кто, не сможет поиграть в стим игры с 9 утра до 17:20 вечера на буднях
а еще запретим например сайт youtube.com
iptables -I FORWARD -s 10.0.0.0/8 -p tcp -m string --algo bm --string "youtube.com" -j DROP
почему --algo bm так потому что это самы быстрый сопособ обработаь запись, вот тут написано это
пример настройки iptables
#!/bin/sh echo "Loading iptables rules" #определеяем сетевые карты int_if="eth1" ext_if="eth0" ext_ip=`ifconfig $ext_if | grep "inet addr" | awk '{print$2}' | sed 's/addr://'` echo "$ext_ip" echo 1 > /proc/sys/net/ipv4/ip_forward #очищаем старые правила iptables -F iptables -X iptables -t nat -F iptables -t mangle -F iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT modprobe ip_nat_ftp modprobe ip_nat_pptp modprobe ip_conntrack_ftp modprobe ip_conntrack_irc echo "loopback allowed..." iptables -A INPUT -i $int_if -j ACCEPT iptables -A INPUT -i lo -j ACCEPT echo "SSH allowed ..." iptables -A INPUT -p tcp --dport 22 -j ACCEPT echo "RDP" #iptables -t nat -A PREROUTING -p tcp -d $ext_ip --dport 9000 -j DNAT --to-destination 10.0.0.3:3389 #iptables -t nat -A PREROUTING -p tcp -d $ext_ip --dport 15432 -j DNAT --to-destination 10.0.0.3:4899 #iptables -A FORWARD -o $int_if -d 10.0.0.3 -p tcp --dport 3389 -j ACCEPT echo "Ping allowed ..." iptables -A INPUT -i $ext_if -p icmp --icmp-type 0 -j ACCEPT iptables -A INPUT -i $ext_if -p icmp --icmp-type 8 -j ACCEPT iptables -A INPUT -p icmp -m icmp --icmp-type 4 -j ACCEPT iptables -A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT #iptables -A INPUT -p all -s 109.173.124.161 -j ACCEPT iptables -A INPUT -i $ext_if -p tcp --dport 1723 -j ACCEPT iptables -A INPUT -i $ext_if -p udp --dport 1723 -j ACCEPT iptables -A INPUT -i $ext_if -p 47 -j ACCEPT iptables -A FORWARD -i $ext_if -p 47 -j ACCEPT echo "mail rules ..." iptables -A INPUT -p tcp -m multiport --dport 25,465,487,110,143,993,995,443 -j ACCEPT echo "Allow established" iptables -A INPUT -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A INPUT -p udp -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A INPUT -p tcp --dport 53 -j ACCEPT iptables -A INPUT -p udp --dport 53 -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 8080 -j ACCEPT iptables -A INPUT -p tcp --dport 8081 -j ACCEPT iptables -A INPUT -s 185.8.6.16 -p all -j ACCEPT #iptables -A INPUT -s 62.173.134.10 -p all -j ACCEPT echo "SQUID redirect" #iptables -t nat -A PREROUTING -p tcp -s 10.0.0.0/24 -i $int_if -m multiport --dport 80,3128,8080,8081 -j REDIRECT --to-port 3128 #iptables -A INPUT -p TCP -i $int_if --dport 3128 -j ACCEPT echo "NAT for users" iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o $ext_if -j MASQUERADE #iptables -t nat -A POSTROUTING -o $ext_if -s 192.168.0.0/24 -j SNAT --to-source $ext_ip echo "Local clients to inet" iptables -A FORWARD -p ALL -m state --state RELATED,ESTABLISHED -j ACCEPT
Дополнительные ограничения, например заблокировать все соединения, не инециализированные самим хостом.
iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT iptables -A INPUT -m state --state NEW,ESTABLISHED -j ACCEPT
Сбрасывать все соединеня на внешнем интерфесе с адресов серых сетей
iptables -A INPUT -i eth1 -s 192.168.0.0/24 -j DROP -m comment --comment "Сбрасываем сеть С" iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP -m comment --comment "Сбрасываем сеть А" iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DROP -m comment --comment "Сбрасываем сеть B" iptables -A INPUT -i eth1 -s 224.0.0.0/4 -j DROP -m comment --comment "Сбрасываем мультикаст" iptables -A INPUT -i eth1 -s 240.0.0.0/5 -j DROP -m comment --comment "Сбрасываем сеть Е"
Записать действия над пакетом и сбросить.
iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j LOG --log-prefix "IP_SPOOF A: " iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
Работаем с диспазоном адресов
iptables -A INPUT -p tcp --destination-port 22 -m iprange --src-range 10.100.0.10-10.100.0.200 -j ACCEPT
Разрешаем только 2 соединения на 22 порт
iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 2 -j REJECT