вторник, 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

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