Iptables
Anti-ssh-bruteforce (сам не пробовал, но на всякий случай помещаю здесь, если когда-нибудь пригодиться)
Вот правила iptables ( нужна поддержка recent match в ядре ):
- Сохраните текущие правила командой iptables-save > /etc/iptables.bak
- Откройте /etc/iptables.bak в вашем любимом текстовом редакторе.
- Добавте следующие правила в подходящем порядке в соответствии с уже созданными правилами.
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
- Активируйте все правила 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
Помощь по 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 адресе внутри виртуальной машины.