Iptables

Материал из support.qbpro.ru
Версия для печати больше не поддерживается и может содержать ошибки обработки. Обновите закладки браузера и используйте вместо этого функцию печати браузера по умолчанию.

1024px-Netfilter-packet-flow.svg.png

Anti-ssh-bruteforce (сам не пробовал, но на всякий случай помещаю здесь, если когда-нибудь пригодиться)

Вот правила iptables ( нужна поддержка recent match в ядре ):

  1. Сохраните текущие правила командой iptables-save > /etc/iptables.bak
  2. Откройте /etc/iptables.bak в вашем любимом текстовом редакторе.
  3. Добавте следующие правила в подходящем порядке в соответствии с уже созданными правилами.
Firewall Rule: Anti-ssh-bruteforce
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
  1. Активируйте все правила 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	чистим все цепочки


[1]http://pm4u.narod.ru/iptables.htm

Настраиваем политики по умолчанию

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
  • Удаляем все имеющиеся правила
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -X
  • Правила входящих соединений
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth0 --match state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 80 --match state --state NEW -j ACCEPT
iptables -A INPUT -i eth0 --source 192.168.0.10 -p tcp --dport 22 --match state --state NEW -j ACCEPT
iptables -A INPUT -i eth0 --source 192.168.0.10 -p tcp --dport 5432 --match state --state NEW -j ACCEPT
  • Правила исходящих соединений
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -o eth0 --match state --state ESTABLISHED, RELATED -j ACCEPT

Пример готового скрипта минимальной защиты:

#!/bin/sh
echo "restart firewall and allowing everyone..."
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
### shield
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth0 --match state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -o eth0 -j ACCEPT
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

Пример скрипта перенаправления на разные порты при работе со Squid и например Privoxy

#!/bin/bash
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
### start rules 10.1.1.1. - virtual ethernet for privoxy port 8118 & port 3128 to squid
iptables -t nat -I PREROUTING -s 192.168.5.16/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.1.1.1:8118
iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
### inet all
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
iptables -A FORWARD -i ppp0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1400:65495 -j TCPMSS --clamp-mss-to-pmtu
### guard server
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
iptables -A INPUT -i eth0 -p tcp -m multiport --dport 21,80,111,135,139,445 -j DROP
iptables -A INPUT -i ppp0 -p tcp -m multiport --dport 21,80,111,135,139,445 -j DROP

Пример блокировки доступа к определенному хосту от выделенного ip локальной сети - не стандартно!

в секции nat

-A PREROUTING -s 10.10.10.22/32 -d 88.97.1.0/18 -p tcp -m multiport --dports 1:65535 -j REDIRECT --to-ports 666

или

-A PREROUTING -s 10.10.10.22/32 -d 88.99.33.11 -p tcp -m multiport --dports 1:65535 -j REDIRECT --to-ports 666

порт "666" - произвольный который не используется ни кем.. можно на 127.0.0.1:666
любой запрос будет завернут в глухую.. :)


Помощь по iptables.

Для поиска помощи по iptables, воспользуемся man:
$ man iptables
Или краткой страничкой помощи:
# iptables -h
Чтобы посмотреть помощь по определенным командам и целям:
# iptables -j DROP -h

Проверка правила iptables.

Проверяем открытость / закрытость портов:
# netstat -tulpn
Проверяем открытость / закрытость определенного порта:
# netstat -tulpn | grep :80
Если порт 80 не открыт, запустим apache:
# service httpd start
И проверим, что iptables разрешает соединение с 80 портом:
# iptables -L INPUT -v -n | grep 80
В противном случае откроем его для всех:
# iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
# service iptables save
Проверяем с помощью telnet
$ telnet www.cyberciti.biz 80
Вывод:
Trying 75.126.153.206...
Connected to www.cyberciti.biz
Escape character is '^]'.
^]
telnet> quit
Connection closed.
Можно использовать nmap для проверки:
$ nmap -sS -p 80 www.cyberciti.biz
Вывод:
Starting Nmap 5.00 ( http://nmap.org ) at 2011-12-13 13:19 IST
Interesting ports on www.cyberciti.biz (75.126.153.206):
PORT   STATE SERVICE
80/tcp open  http
Nmap done: 1 IP address (1 host up) scanned in 1.00 seconds

Варианты настройки для Торрента

http://forum.ubuntu.ru/index.php?topic=63695.0

данная схема проброса портов для eth1 чтобы торенты видели и из локалки и из интеренета ppp0 где:

  • 6681 пробрасываемый порт, 192.168.1.2- ip назначения (компъютер где работает торрент клиент)
  • ppp0 и eth1- внешние интрефейсы с кторых пробрасывать порт.

если оставить ppp0 то торренты будет видны тоько из интернета если eht0 то только из локалки а с локальных пиров пророй получается качать со скоростью под 50 мбит.

Днанная конфигурация приведена для корбины-с успехом работает уже около 3х мес....

iptables -t nat -I PREROUTING -p udp --dport  6681 -j DNAT --to-destination 192.168.1.2: 6681
iptables -t nat -A PREROUTING -p tcp -m tcp --dport  6681 -i eth1 -j DNAT --to 192.168.1.2: 6681
iptables -A FORWARD -m tcp -p tcp -d 192.168.1.2 --dport  6681 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -m tcp --dport  6681 -i ppp0 -j DNAT --to 192.168.1.2: 6681
iptables -A FORWARD -m tcp -p tcp -d 192.168.1.2 --dport  6681 -j ACCEPT


Фильтр по мак-адресам

Оригинал

Есть выделенный сервер с XCP (Xen Cloud Platform), есть диапазон ip выданный провайдером. Как сделать так, чтобы клиенты не могли поменять свой ip внутри xen машин? Привязка к mac адресу! Но как сделать, чтобы и mac адрес не сменили? Воспользуемся iptables на сервере XCP. Нам понадобится XCP версии минимум 1.1, в 1.0 ядро не поддерживает фильтрацию по mac адресам.

Делаем так:

Очищаем правила iptables:

iptables -F


Разрешаем клиенту с ip 46.4.180.227 и с mac адресом 11:11:11:11:11:11 и 2му клиенту с ip 46.4.180.228 и с mac адресом 22:22:22:22:22:22:

iptables -A FORWARD -m mac --mac-source 11:11:11:11:11:11 -s 46.4.180.227 -j ACCEPT iptables -A FORWARD -m mac --mac-source 22:22:22:22:22:22 -s 46.4.180.228 -j ACCEPT


Если ip другой, но mac прежний, то запрещаем:

iptables -A FORWARD -m mac --mac-source 11:11:11:11:11:11 -j DROP iptables -A FORWARD -m mac --mac-source 22:22:22:22:22:22 -j DROP


Блокируем все неиспользуемые ip (эти правила будут наверху цепочки):

iptables -I FORWARD -s 46.4.180.229 -j DROP iptables -I FORWARD -s 46.4.180.230 -j DROP iptables -I FORWARD -s 46.4.180.231 -j DROP


Цепочка FORWARD должна выглядеть так:

iptables -L -n


Chain FORWARD (policy ACCEPT) target prot opt source destination DROP all -- 46.4.180.231 0.0.0.0/0 DROP all -- 46.4.180.230 0.0.0.0/0 DROP all -- 46.4.180.229 0.0.0.0/0 ACCEPT all -- 46.4.180.227 0.0.0.0/0 MAC 11:11:11:11:11:11 ACCEPT all -- 46.4.180.228 0.0.0.0/0 MAC 22:22:22:22:22:22 DROP all -- 0.0.0.0/0 0.0.0.0/0 MAC 11:11:11:11:11:11 DROP all -- 0.0.0.0/0 0.0.0.0/0 MAC 22:22:22:22:22:22


Теперь доступ на внешку и из внешки к виртуальной машине возможен только при правильном ip и mac адресе внутри виртуальной машины.


еще http://bourabai.kz/dbt/security/iptables.htm

ПОЛЕЗНОЕ: