вторник, 15 ноября 2011 г.

Полезные команды консоли

1). Как просмотреть сетевые интерфейсы
lshw -class network
ясно дело без класа покажет все устройства
2). Стольбец превратить в строку где айпихи например разделены переносами
awk '{print $1}' /etc/hosts | paste -s -d ' '
3). трасировка порта или проверка его доступности
tcptraceroute -n 21.90.85.78 22
tcptraceroute mail.makeup.com.ua 22122
можно также так
traceroute -Picmp -M3 -m8 77.222.131.91
traceroute -Ptcp -p25 -M3 -m8 77.222.131.91
traceroute -f3 -Pudp -p53 176.9.121.68
paping www.google.com -p 80 -c 4
http://code.google.com/p/paping/
4). mtr
mtr -r -n 21.90.18.10 
5). размер папок текущей директории с глубиной 1 подпапки
du -xh --max-depth=1
6). использование xargs
find /var/www/memory/data/www/memory.net.ua/ -name '*.php' -print0 | xargs -0 chmod u+x
где
флаги find -print0 и xargs -0: это такая борьба с возможными пробелами в именах файлов. Такие файлы могут быть восприняты chown'ом как два разных. Первый флаг заставляет find выводить каждый найденный файл с нулём в конце (символ конца строки в Си), а второй флаг сообщает xargs что ему нужно отделять файлы друг от друга не по переводу строки, а по этому самому нулю, что гарантирует верную обработку даже самых хитрых имён файлов
7). вывод конфигов без коментов
| egrep -v "^(#|\s*$)"
grep -v "^#" файл | sed -e '/^$/d'
awk '$1!~"^(#|$)" {print}' /etc/squid/squid.conf
где
# комментарий
$ перевод строки
| или логическое
8). кто в локальной сети живет
nmap -e eth0 -sP 10.1.1.0/24
9). киляние сетевых сессий
tcpkill -i eth0 host 192.168.1.100 port 8080
lsof -iTCP@HostnameOrIPAddress:PortNumber а потом кильнуть по пиду
10). регулярки в grep
egrep -i '(shut|reboot)' messages
11). рекурсивный обход директорий с выполнением команд на всеми найденными файлами (если не нужно над всем используем ключи find name iname)
find / -exec ls -la '{}' \;
find / -exec egrep -i '(eval|base64_decode|gzuncompress|gzinflate|ob_start|str_rot13|create_function|headers_sent|preg_match|iframe)' '{}' \;
12). снифаем трафик (можно добавить -v -vv -vvv чтобы увеличить информативность)
tcpdump -i eth3 -nn -tttt udp and port 5060 -l | tee dump.log
13). кто слушает сокет
netstat -tunlp | grep 465
netstat -lnpt | grep master (по имени процесса - какие он порты слушает)
lsof -i :465
для UDP трафика
netstat -panu
14). работает ли процессор на полной частоте, если нет тогда что нужно сделать
[root@mail ~]# grep -E '^model name|^cpu MHz' /proc/cpuinfo
model name : Intel(R) Core(TM)2 Duo CPU     E7400  @ 2.80GHz
cpu MHz : 1596.000
model name : Intel(R) Core(TM)2 Duo CPU     E7400  @ 2.80GHz
cpu MHz : 1596.000
[root@mail ~]# for CPUFREQ in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do [ -f $CPUFREQ ] || continue; echo -n performance > $CPUFREQ; done
[root@mail ~]# grep -E '^model name|^cpu MHz' /proc/cpuinfo
model name : Intel(R) Core(TM)2 Duo CPU     E7400  @ 2.80GHz
cpu MHz : 2793.000
model name : Intel(R) Core(TM)2 Duo CPU     E7400  @ 2.80GHz
cpu MHz : 2793.000
(http://www.experts-exchange.com/OS/Linux/Administration/A_3492-Avoiding-CPU-speed-scaling-in-modern-Linux-distributions-Running-CPU-at-full-speed-Tips.html)
# service cpuspeed stop
# chkconfig cpuspeed off
# pgrep -lf ondemand
1444 kondemand/0
1445 kondemand/1
# lsmod | grep ondemand
cpufreq_ondemand       42449  0
freq_table             38977  2 cpufreq_ondemand,acpi_cpufreq
# rmmod cpufreq_ondemand acpi_cpufreq freq_table
15). Разархивировать все zip файлы в каталогеfind ./ -type f -name "*.zip" -exec unzip -o {} \;
16). Переименование файликов скопом
for i in *.txt; do j=`echo $i | sed 's/Гоголь\ Николай\.\ //g'`; mv "$i" "$j"; done
где как видите мы заменяли Гоголь Николай. на пустое место
(пример из http://snipplr.com/view/2736/rename-multiple-files-in-bash-using-regular-expressions/)
17). tcpdump vlan (то есть слушаем трафик на теггированном интерфейсе)
tcpdump -i eth0 -e -n (видим все теггированные пакеты)
tcpdump -e -i eth2.7 (конкретного vlan)
tcpdump -e -i eth2.7 host 1.1.1.1 and port 110 (на конкретный хост и порт)
-X содержание пакета в 16-ричной форме (удобна для http протокола, где данные передаются в открытой форме)
-n - не резолвить ip в днс
-nn - предыдущий + номера портов
-c[n] - показать первые n пакетов
-s[n] - показать количество байт для пакета
-S - показывать абсолютные номера последовальности
-e - показывать заголовки ethernet-фреймов
-q - показывать меньше информации
-E - расшифровавывать ipsec трафик с помощью ключа
-v подробная информация (-vv, -vvv)
src - адрес источника пакета (dst - получателя)
port not 22 (не), детально - and, && (и); or, || (или); not, ! (не)
portrange 21-23 (диапазон портов)
> 32 and <=121 (тоже)
net 10.1.1.0/24 (сеть)
proto[expr:size], где proto - протокол, expr - смещение в байтах от начала заголовка пакета, size - необязательное поле, указывающее длину рассматриваемых данных (по умолчанию 1 байт)
tcpdump 'tcp[13]==2' (пакеты с установленным SYN флагом)
tcpdump 'tcp[tcpflags] & tcp-syn != 0' (то же самое)
Нахождение и сохранение видео потока
tcpdump -eflAi eth0 -s 0 -w - | strings | grep -ao "rtmp://.\+.flv" - ссылку кормим утилите rtmpdump (lkcl.net/rtmp) ./rtmpdump -r 'URL' -o file.flv
Примеры
ssh root@1.com tcpdump -w - 'port !22' | wireshark -k -i - (-w - запись дампа в стандартный вывод и перенаправили его на анализ wireshark)
ssh root@1.com "tcpdump -nn -i eth0 -w -" | snort -c /etc/snort/snort.conf -r - (тоже самое на анализ snort)
tcpdump -nnvv -r dump.cap tcp | grep -v "tcp sum ok" | wc -l (находим пакеты с неправильной контрольной суммой)
tcpdump -nn -v -i eth0 -s 1500 -c 1 'ether[20:2] == 0x2000' (ловим CDP пакеты)
tcpdump -i eth0 -vvv -s 1500 '((port 67 or port 68) and (udp[8:1] = 0x1))' (ловим DHCP пакеты)
tcpdump -i eth0 "tcp port pop3 and ip[40] = 85 and ip[41] = 83" -s 1500 -n (ловим POP3 аутентификацию)
(тоже хорошие примеры - http://wiki.dieg.info/doku.php/tcpdump#primery_ispolzovanija_tcpdump_and_or_except)
18). ngrep и мониторинг трафика http
ngrep -l -q -d eth2.7 "^GET |^POST" tcp and port 80 (GET и POST в рамкас tcp сессий)
ngrep -i 'game*|p0rn|adult' -W byline -d eth2.7 > 1.txt (выявление бездельников)
ngrep -i 'rcpt to|mail from' -d eth2.7 tcp port smtp (анализ smtp трафика)
19). проброс порта через ssh
ssh -f -N -L 3389:10.1.1.1:3389 ali@mali.kiev.ua
20). whois -h whois.ua 11.gov.ua
21). просмотр сетевых соединений
# iptraf
# iftop
22). просмотр работы с винчестером
# iptop
23). файл или страничка доступен по http (без поднятия веб-сервера)
while true ; do nc -l 80 < index.html ; done
24). повторяющиеся строки в файле (поиск)
sort /etc/sysctl.conf | uniq -d
25). дерево процессов
pstree -p
26). запись видео с экрана
ffmpeg -f  x11grab -s 1440x900 -r 15 -i :0.0 -vcodec qtrle /home/user/1.mov
-s разрешение
-r количество кадров
-i порядковый номер экрана иксов
https://code.google.com/p/qboard/wiki/CreatingScreencastsWithFfmpeg - скрипт для привязки к определенному окну
27). запуск Х приложений через ssh
ssh -X 10.1.1.2 firefox
(на удаленной машине в настройках sshd демона X11Forwarding yes)
28). тестируем apache
rpm -qf /usr/bin/ab
httpd-tools-2.2.15-29.el6.centos.x86_64
ab -c 50 -n 10000 URL_TO_THE_SITE
(https://wiki.appnexus.com/display/documentation/How+to+Apache+Stress+Test+With+ab+Tool - можно также почитать)
29). iptables вывод номеров линий и вставка после определенной линии
iptables -L INPUT -n --line-numbers
iptables -I INPUT {LINE_NUMBER}
соответсвенно линия с данным номером, которая была прежде опуститься ниже
30). dnstop -l 3 eth0 -i 8.8.8.8
где ip - собственно и есть айпиха интерфейса которую исключаем
с - дает нам увидеть какие запросы больше всего нагружают bind
если это какая то леваковая вирусная зона можно ей сделать
/etc/named/fake-zone
$TTL    86400
@       IN      SOA     localhost. root.localhost. (
                              1         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                          86400 )       ; Negative Cache TTL
@       IN      NS      localhost.
        IN      A       127.0.0.1
*       IN      A       127.0.0.1
/etc/named/master.fake-zones.conf
zone "192cq.com" { type master; file "/etc/bind/fake-zone"; allow-update { none; }; };
/etc/named/named.conf
view "inside" {
        include "/etc/named/master.fake-zones.conf";
};
31). whois 91.22.3.124 | awk -F':[ \t]+' 'tolower($1) ~ /^country$/ { print toupper($2) }'
узнаем с какой страны айпиха
32). http://computerlib.narod.ru/html/tcpipdump.htm
кто конектится на конкретный порт (можно конечно и tcpdump тоже самое сделать)
tethereal -i any port 80
33). Вылогинить рута с консоли
ps -dN | grep tty1 - если рут локально
ps -dN | grep pts/3 - если рут по сети
и киляем процес
34). синхронизация файлов (например почты после переключения на новый сервер, когда переключили днс и некоторое время почта ходит и туда и туда)
rsync -avgoPu /home/vmail new_server:/home/vmail --dry-run (-n = --dry-run - test mode, потому уже без ключа -n = --dry-run)
35). просмотр нагрузки на дисковую подсистему
iostat -x -d

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sdb               2,75    16,08   22,95    7,19  3252,53   168,18   113,48     0,70   23,11   2,13   6,43
sda               3,43    16,17   38,37    7,14  4267,38   168,52    97,48     0,09    2,06   2,07   9,44

интересна колонка %util - показывает в % нагрузку. 
36). вставка файла в начало другого файла
echo -e '0r /root/file\nw' | ed /root/panel/ng.log
37). выбрать из файла определенный диапазон линий
sed -n 1,10518p /root/acco.log > /root/acco.log_recover
38). кто держит директорию
lsof +D /var/www/html
/sbin/fuser -m /var/www/html

39). модель сервера
dmidecode | grep -A3 '^System Information' 

ubuntu 11.10 vpn autostart, а также как сделать шлюз для раздачи инета

Конфигурим оба езернета на тазике, а также впн, на инет интерфейсе. На интерфейсе, смотрящем в сторону ЛАН и который будеш ширинь инет выключаем ipv6 (есть глюк, когда интерфейс поднимается и падает и так без конца, поэтому и выключаем)
Называем сетевые подключения в т.ч. впн однословными названиями, что в скриптах было проще
создаем скрип который будет с задержкой 20с поднимать интерфейс расшаренный для других пк (задержка нужна для поднятия впн)
#vim /etc/network/if-up.d/eth0
#!/bin/sh
sleep 20
nmcli con up id wired2
где wired2 - имя интерфейса расшаренного для других пк в Network Manager
#chmod +x /etc/network/if-up.d/eth0
Также создадим скрипт для автоматического подйома впн
#vim /etc/network/if-up.d/vpn
#!/bin/bash
REQUIRED_CONNECTION_NAME="wired1"         # change singularity to your network connection name
VPN_CONNECTION_NAME="vpn1"                # change airvpn to your VPN connection name
activ_con=$(nmcli con status | grep "${REQUIRED_CONNECTION_NAME}")
activ_vpn=$(nmcli con status | grep "${VPN_CONNECTION_NAME}")
if [ "${activ_con}" -a ! "${activ_vpn}" ];
then
    nmcli con up id "${VPN_CONNECTION_NAME}"
fi
где wired1 - имя интерфейса подключенного к выходу в интернет в Network Manager, vpn - имя впн интерфейса в Network Manager
#chmod +x /etc/network/if-up.d/vpn
Теперь нужно изменять конфигурационный файл впн подлючения, поскольку пароли одного юзера другой в т.ч. рут не видит по умолчанию
#vim /etc/NetworkManager/system-connections/vpn1
меням с 1 на 0
[vpn]
....
password-flags=0
добавляем также секцию
[vpn-secrets]
password=your_password

перед секцией [ipv4], где your_password - пароль вашего юзера, использующегося для подключения впн

Также добавляем задачу восстановления впн, если вдруг подлючение упадет
*/1 * * * * /etc/network/if-up.d/vpn

Вот в принцыпе и все.

среда, 21 сентября 2011 г.

iptables recent и ddos и т.п.

Критерий recent
recent — это специальный критерий, позволяющий запоминать проходящие через него пакеты, а затем использовать полученную информацию для принятия решений. Ввиду его уникальности, широких возможностей и, как следствие, некоторых трудностей в понимании новичками принципов его использования, рассказ о нем был вынесен в отдельный подраздел.
Если быть точным, recent запоминает не сами пакеты, а их количество, время поступления, адрес источника (в последних версиях iptables также может запоминать и адрес назначения), а также, при необходимости, TTL.
В начале кратко рассмотрим его опции:
[!] --set — запомнить адрес источника/назначения пакета (внести его во внутренний список). Если такая запись уже присутствует в списке — обновить время последнего доступа для нее. Обратите внимание, что критерию recent с опцией --set удовлетворяют все пакеты. Чтобы ему не удовлетворял ни один пакет — используйте логическую инверсию (! --set).
[!] --rcheck — позволяет проверить, присутствует ли адрес источника/назначения пакета во внутреннем списке. Критерий recent с этой опцией вернет истину, если адрес в списке присутствует.
[!] --update — работает аналогично --rcheck, но еще и обновляет время время последнего доступа для данной записи.
[!] --remove — работает аналогично --rcheck, но еще и удаляет найденную запись из списка. Если запись не найдена, пакет считается не соответствующим критерию.
[!] --seconds число — дополнительная опция в режимах --rcheck и --update. Пакет считается соответствующим критерию, только если последний доступ к записи был не позднее, чем число секунд назад.
[!] --hitcount число — дополнительная опция в режимах --rcheck и --update. Пакет считается удовлетворяющим критерию, если было не менее число обращений к данной записи. Обычно используется вместе с --seconds — тогда критерий имеет смысл «не менее n обращений за последние m секунд».
--rttl — дополнительно к адресу источника/назначения, заносить в список и проверять еще и TTL пакета.
--rsource — эта опция появилась в последних версиях iptables, с тех пор, как критерий recent начал поддерживать запоминание адресов не только источника, но и назначения. Позволяет явно указать, что в список вносится именно адрес источника пакета. Однако в целях обратной совместимости этот режим используется по умолчанию, и поэтому указывать данную опцию не обязательно.
--rdest — эта опция появилась в последних версиях iptables. Позволяет явно указать, что в список вносится именно адрес назначения пакета.
--name имя — позволяет указать имя списка при использовании нескольких списков. По умолчанию используется список DEFAULT. Каждый список представлен псевдофайлом /proc/net/ipt_recent/имя. В частности, вы можете:
cat /proc/net/ipt_recent/имя # вывести список на экран
echo +адрес > /proc/net/ipt_recent/имя # добавить адрес в список
echo -адрес > /proc/net/ipt_recent/имя # удалить адрес из списка
echo / > /proc/net/ipt_recent/имя # очистить список
Теперь давайте рассмотрим несколько примеров. Блокирование bruteforce-атак (подбор пароля вслепую) на SSH и аналогичные сервисы.
iptables -A INPUT  -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -m recent --set --name SSH
iptables -A INPUT -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount -4 -rttl --name SSH -j DROP
iptables -A INPUT -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT iptable -P INPUT -j DROP
Теперь все попытки открыть новое SSH-соединение проверяются, и с одного IP-адреса можно открывать не более 4 соединений за 60 секунд. Обратите внимание, что за одно соединение злоумышленник может проверить несколько паролей — число попыток аутентификации до обрыва соединения задает параметр MaxAuthTries в файле /etc/ssh/sshd_config. По умолчанию это число равно 6, так что в нашем примере злоумышленник сможет проверять не более 24 паролей за 60 секунд. Впрочем, данный пример весьма тривиален, и сходную функциональность можно получить и при помощи критерия hashlimit:
iptables -A INPUT -m state --state NEW -p tcp --dport 22 -m hashlimit --hashlimit-mode srcip --hashlimit-upto 5/hour --hashlimit-name ssh -j ACCEPT
разрешит не более 5 новых соединений в час. Данная реализация имеет недостаток по сравнению с recent — вы не можете произвольно задавать временной период.
Открытие порта «по стуку».
Port knocking — метод защиты портов, при котором доступ к определенному порту с отдельно взятого IP-адреса открывается после серии пакетов на заданную последовательность портов с заданными интервалами. Обычно эта задача решается демоном knockd. Также сходным функционалом обладает критерий pknock из patch-o-matic-ng, однако он, к сожалению, потерял разработчика и прекратил развиваться.
Несколько самых простых вариантов такой защиты можно организовать и средствами критерия recent.
Самое простое — открывать порт ssh (22) после стука в заданный высокий порт:
iptables -N ssh_knock # Создаем цепочку для проверки попыток соединений на защищаемый порт
# Если за последние 60 секунд было 2 и более стука — блокируем, на всякий случай
iptables -A ssh_knock -m recent --rcheck --seconds 60 --hitcount 2 -j RETURN
# Если за последние 10 секунд стук в нужный порт был — разрешить соединение
iptables -A ssh_knock -m recent --rcheck --seconds 10 -j ACCEPT
iptables -F INPUT # Очищаем цепочку INPUT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Разрешаем пакеты по установленным соединениям
# Все попытки открыть новое соединение по SSH направляем на проверку
iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ssh_knock
# Здесь мы добавляем правило для регистрации стука
iptables -A INPUT -m state --state NEW -p tcp --dport 27520 -m recent --set
# Опять же на всякий случай — при стуке в соседние порты закрываем SSH
iptables -A INPUT -m state --state NEW -p tcp -m multiport --dport 27519,27521 -m recent --remove
iptables -P INPUT DROP # Что не разрешено — то запрещено
Даже в таком простом примере присутствуют жесткие меры защиты: защищаемый порт (22) открывается на 10 секунд после стука в заданный порт (27520), при этом более одного стука в этот порт в течение минуты считается ошибкой. Также стук в соседние с заданным порты сразу закрывает защищаемый порт. Это делается в целях защиты от подбора стука.
Если вам не интересны такие параноидальные меры безопасности, то обратите внимание на этот простой пример:
iptables -N ssh_knock # Создаем цепочку для проверки
# Если за последние 10 минут было 5 и более попыток соединения — блокируем
iptables -A ssh_knock -m recent --name ssh --update --seconds 600 --hitcount 5 -j RETURN
# Регистрируем
iptables -A ssh_knock -m recent --name ssh --set
# Если за последние 5 секунд было менее двух попыток — блокируем
iptables -A ssh_knock -m recent --name ssh ! --rcheck --seconds 5 --hitcount 2 -j RETURN
# Все остальное — разрешаем
iptables -A ssh_knock -j ACCEPT
iptables -F INPUT # Очищаем цепочку INPUT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Разрешаем пакеты по установленным соединениям
# Все попытки открыть новое соединение по SSH направляем на проверку
iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ssh_knock
iptables -P INPUT DROP # Что не разрешено — то запрещено
Идея метода проста: защищаемый порт открывается со второй попытки, т.е. стук идет непосредственно в него. Вторую попытку нужно сделать в течение 5 секунд после первой. При этом 5 и более попыток за десять минут блокируются (во избежание брутфорса).
Также можно организовать защиту через стук в серию портов:
iptables -N reset_knock # Цепочка для сброса процесса стука
iptables -A reset_knock --name PHASE1 --remove
iptables -A reset_knock --name PHASE2 --remove
iptables -A reset_knock --name PHASE3 --remove
iptables -A reset_knock --name PHASE4 --remove
iptables -N in_phase_2 # Создаем цепочку для фазы 2
iptables -A in_phase_2 -m recent --name PHASE1 --remove # Удаляем запись из списка первой фазы
iptables -A in_phase_2 -m recent --name PHASE2 --set # Добавляем ее в список второй фазы
iptables -N in_phase_3 # Создаем цепочку для фазы 3
iptables -A in_phase_3 -m recent --name PHASE2 --remove # Удаляем запись из списка второй фазы
iptables -A in_phase_3 -m recent --name PHASE3 --set # Добавляем ее в список третьей фазы
iptables -N in_phase_4 # Создаем цепочку для фазы 4
iptables -A in_phase_4 -m recent --name PHASE3 --remove # Удаляем запись из списка третьей фазы
iptables -A in_phase_4 -m recent --name PHASE4 --set # Добавляем ее в список четвертой фазы
iptables -N checked # Для записей, прошедших проверку
iptables -A checked -j reset_knock # Очищаем списки
iptables -A checked -j ACCEPT # Разрешаем пакет
iptables -F INPUT # Очищаем цепочку INPUT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Разрешаем пакеты по установленным соединениям
# Первая фаза
iptables -A INPUT -p tcp --dport 21210 -m recent --name PHASE1 --set -j RETURN
# Для тех, кто присутствует в списке первой фазы — переход во вторую
iptables -A INPUT -p tcp --dport 11992 -m recent --rcheck PHASE1 --seconds 5 -g in_phase_2
# И т.д.
iptables -A INPUT -p tcp --dport 16043 -m recent --rcheck PHASE2 --seconds 5 -g in_phase_3
iptables -A INPUT -p tcp --dport 23050 -m recent --rcheck PHASE3 --seconds 5 -g in_phase_4
# Если стучатся не в том порядке — сброс
iptables -A INPUT -p tcp -m multiport --dport 21210,11992,16043,23050 -j reset_knock
# Для тех, кто прошел все четыре фазы — разрешаем доступ
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --rcheck PHASE4 --seconds 5 -j checked
iptables -P INPUT DROP # Дефолтное правило цепочки INPUT
Принцип прост — при стуке в порт, соответствующий очередной фазе, проверяется наличие записи в предыдущей фазе. Теперь порт 22 откроется на 5 секунд после стука в порты 21210, 11992, 16043, 23050 со строгим соблюдением порядка перечисления и интервалами не более 5 секунд.
Обратите внимание на технику реализации процесса — цепочки фаз вызываются не через -j, а через -g, поэтому после прохождения этих цепочек к пакетам сразу применяется правило по умолчанию цепочки INPUT, т.е. DROP. В противном случае пакеты доходили бы до правила сброса (которое с multiport), и процесс стука все время сбрасывался бы.
Последовательный стук в порты можно организовать, например, утилитой netcat
for it in {21210,11992,16043,23050}; do
    echo " " | nc -w 1 host $it
done
ssh user@host
Другие примеры реализации port knocking'а при помощи критерия recent можно посмотреть по этим ссылкам [1], [2], [3], [4].
Защита от сканирования портов
iptables -F INPUT # Очищаем цепочку INPUT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Разрешаем пакеты по установленным соединениям
# Если за последний час было 10 или более запросов на нерабочие порты — блокируем
iptables -A INPUT -m recent --rcheck --seconds 3600 --hitcount 10 --rttl -j RETURN
# Если за последнюю минуту было 2 или более запросов на нерабочие порты — блокируем
iptables -A INPUT -m recent --rcheck --seconds 60 --hitcount 2 --rttl -j RETURN
# Разрешаем рабочие порты
iptables -A INPUT -m state --state NEW -p tcp -m multiport --dport 21,25,53,80,110 -j ACCEPT
iptables -A INPUT -m state --state NEW -p udp -m multiport --dport 53,123 -j ACCEPT
# Всех, кто ломится в нерабочие порты — регистрируем
iptables -A INPUT -m recent --set
iptables -P INPUT DROP # Что не разрешено — то запрещено
Все пакеты, попадающие на нерабочие порты сервера, регистрируются. После нескольких таких попыток за заданный интервал времени адрес их источника блокируется. Проверка TTL добавлена для защиты от блокировки легитимных клиентов после спуфинга злоумышленником от их имени. Хотя, с другой стороны, эта мера позволяет ему обойти защиту от сканирования, выставляя своим пакетам различный TTL. Так что вопрос о нужности этой проверки в вашем конкретном случае вам придется решать самостоятельно.
Пресечение попыток взлома сервисов
iptables -A INPUT -p tcp --dport 22 -m recent --name ssh --update --seconds 3600 --hitcount 8 -j REJECT
iptables -A INPUT -p tcp --dport 22 -m recent --name ssh --set
iptables -A INPUT -p tcp --dport 22 -m recent --name ssh ! --rcheck --seconds 15 --hitcount 2 -j REJECT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
Как это работает? Последнее правило: если ни одно из предшествующих правил не сработало, то принимать пакет. Второе правило безусловно создает или обновляет запись о последнем пакете. Третье правило отвергает пакеты, если за последние 15 секунд было менее 2-х попыток подключения. Первое правило отвергает, если за последние 3600 секунд было 8 или более пакетов.
Первая попытка подключения: пакет не соответствует правилу 1, второе правило добавляет его в таблицу последних попыток подключения. У второго правила нет цели, поэтому пакет идет дальше по цепочке. Третье правило проверяет, есть запись в таблице недавних подключений. Да, пакет занесен в таблицу предыдущим правилом, но всего один, а требуется 2. Правило не сработало бы, но установлено отрицание правила (!), значит правило срабатывает и первый пакет отвергается целью REJECT. Если вторая попытка соединения будет предпринята в течении 15 секунд после первой, то третье правило не сработает, и пакеты будут пропускаться 4-м правилом. При этом каждый такой пакет будет заноситься в таблицу недавних вторым правилом. При превышении лимита 8 подключений в час все пакеты будут блокироваться первым правилом, при этом каждый раз обновляя последнюю запись.
Т.е. первое соединение отвергается. Второе, если оно сделано не позднее чем 15 секунд после предыдущего - принимается. И так до 8 соединений, затем все блокируется. Т.е. если вас будут сканировать на предмет открытых портов для атаки, то порт окажется закрытым. Если вторая попытка просмотра портов с того же адреса позднее чем 15 секунд - то тоже все закрыто.


cisco как грамонтно раздавать айпихи в одном вилане и шейпить их

елси не хочеться раздавать реальные айпихи в сетях /30 можно их раздавать  по одной
создает подинтерфейс

interface FastEthernet0/0.195
 description SRIBNOKILSKA CLIENTS
 encapsulation dot1Q 195
 ip address 21.90.17.129 255.255.255.192
 no snmp trap link-status
 service-policy input SRCLIENTS
 service-policy output SRCLIENTS
end
для каждого клиента выдается соотвественно айпиха 21.90.17.130 mask 255.255.255.192 gate 21.90.17.129
создается аксес лист
ip access-list extended BOREC
 permit ip host 21.90.17.130 any
 permit ip any host 21.90.17.130
 deny   ip any any
клас мап
class-map match-all BOREC
  match access-group name BOREC
котрый и заносится в сервис полиси интерфейса 
policy-map SRCLIENTS
  class BOREC
   police cir 1024000 bc 256000 be 256000
     conform-action transmit 
     exceed-action drop
также и остальные клиенты
Для просмотра нет ли превышений полосы используются команды
sh policy-map interface Fa0/0.195 input class BOREC          
 FastEthernet0/0.195 

  Service-policy input: SRCLIENTS

    Class-map: BOREC (match-all)
      646 packets, 107462 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match: access-group name BOREC
      police:
          cir 1024000 bps, bc 256000 bytes
        conformed 646 packets, 107462 bytes; actions:
          transmit 
        exceeded 0 packets, 0 bytes; actions:
          drop 
        conformed 0 bps, exceed 0 bps
sh policy-map interface Fa0/0.195 output class BOREC
 FastEthernet0/0.195 

  Service-policy output: SRCLIENTS

    Class-map: BOREC (match-all)
      741 packets, 502282 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match: access-group name BOREC
      police:
          cir 1024000 bps, bc 256000 bytes
        conformed 741 packets, 502282 bytes; actions:
          transmit 
        exceeded 0 packets, 0 bytes; actions:
          drop 
        conformed 0 bps, exceed 0 bps
как видим дропов нет.
а здесь можно почитать чем отличается полиси с cir и без него

пятница, 29 июля 2011 г.

windows ограничение списка запускаемых программ

Обязательно должны быть включены (чтобы пользователь мог залогинится в систему)
C:\Windows\explorer.exe
C:\Windows\system32\csrss.exe
C:\Windows\system32\dwm.exe
C:\Windows\system32\rdclip.exe
C:\Windows\system32\taskhost.exe
C:\Windows\system32\TSTheme.exe
C:\Windows\system32\userinit.exe
Пусть-> Выполнить -> mmc -> Файл -> Добавить или удалить оснастку -> Редактор объектов групповой политики (GPO) -> Добавить -> Обзор (указываем пользователя) -> Готово -> OK -> Политика "имя пользователя" -> Конфигурация пользователя -> Конфигурация Windows -> Параметры безопасности -> Пр. клавишей на "Политики ограничения использования программ" ->  Создать политику ограничения использования программ -> Уровни безопасности -> 2 раза кликаем на "Запрещено" (по умолчанию) -> переходим в раздел "Дополнительные правила" удаляем созданные системой ссылки "%HKEY_LOCAL_MACHINE\...." -> добавляем правила на нужные программы через правую клавишу "Создать правило для хеша" где выбираем нужный файл и меняем уровень безопасности на "Неограниченный"

медленные страницы на сайте

Google Analytics www.google.com/analytics. Функция доступна в новом интерфейсе, чтобы ее включить (по умолчанию выключена) нужно добавить строку в скрипт GA (тот JS-код, который вставляется в каждую страницу веб-проэкта и необходим для сбора и отправки данных), а именно обращение к функции _trackPageLoadTime[], который должен происходить после вызова trackPageview[]:
// Вариант для асинхронного кода GA:
_gaq.push(['_trackPageview]);
_gaq.push(['_trackPageLoadTime]);
// Вариант для стандартного кода GA:
pageTracker._trackPageview();
pageTracker._trackPageLoadTime();
После этого данные будут в отчете "Содержание - Скорость загрузки сайта"

вторник, 26 июля 2011 г.

быстро поднять веб сервер и расшарить файлы на линуксе

ставим пакет webfs и даем команду
webfsd -p 8080 -r /путь/к/данным
или в папке с файлами
python -m SimpleHTTPServer
сервер работает на 8000 порту на всех интерфейсах