kill $(ps -e | grep dmn | awk '{print $1}')
ps -efw | grep dmn | grep -v grep | awk '{print $2}'| xargs kill
kill $(ps -e | grep dmn | awk '{print $1}')
ps -efw | grep dmn | grep -v grep | awk '{print $2}'| xargs kill
* | vi filename | edit filename starting at line 1 |
---|---|---|
vi -r filename | recover filename that was being edited when system crashed |
* | ![]() |
quit vi, writing out modified file to file named in original invocation |
---|---|---|
:wq<Return> | quit vi, writing out modified file to file named in original invocation | |
:q<Return> | quit (or exit) vi | |
* | :q!<Return> | quit vi even though latest changes have not been saved for this vi call |
* | j or <Return> [or down-arrow] |
move cursor down one line |
---|---|---|
* | k [or up-arrow] | move cursor up one line |
* | h or <Backspace> [or left-arrow] |
move cursor left one character |
* | l or <Space> [or right-arrow] |
move cursor right one character |
* | 0 (zero) | move cursor to start of current line (the one with the cursor) |
* | $ | move cursor to end of current line |
w | move cursor to beginning of next word | |
b | move cursor back to beginning of preceding word | |
:0<Return> or 1G | move cursor to first line in file | |
:n<Return> or nG | move cursor to line n | |
:$<Return> or G | move cursor to last line in file |
^f | move forward one screen | |
---|---|---|
^b | move backward one screen | |
^d | move down (forward) one half screen | |
^u | move up (back) one half screen | |
^l | redraws the screen | |
^r | redraws the screen, removing deleted lines |
* | u | UNDO WHATEVER YOU JUST DID; a simple toggle |
---|
* | i | insert text before cursor, until <Esc> hit |
---|---|---|
I | insert text at beginning of current line, until <Esc> hit | |
* | a | append text after cursor, until <Esc> hit |
A | append text to end of current line, until <Esc> hit | |
* | o | open and put text in a new line below current line, until <Esc> hit |
* | O | open and put text in a new line above current line, until <Esc> hit |
* | r | replace single character under cursor (no <Esc> needed) |
---|---|---|
R | replace characters, starting with current cursor position, until <Esc> hit | |
cw | change the current word with new text, starting with the character under cursor, until <Esc> hit |
|
cNw | change N words beginning with character under cursor, until <Esc> hit; e.g., c5w changes 5 words |
|
C | change (replace) the characters in the current line, until <Esc> hit | |
cc | change (replace) the entire current line, stopping when <Esc> is hit | |
Ncc or cNc | change (replace) the next N lines, starting with the current line, stopping when <Esc> is hit |
* | x | delete single character under cursor |
---|---|---|
Nx | delete N characters, starting with character under cursor | |
dw | delete the single word beginning with character under cursor | |
dNw | delete N words beginning with character under cursor; e.g., d5w deletes 5 words |
|
D | delete the remainder of the line, starting with current cursor position | |
* | dd | delete entire current line |
Ndd or dNd | delete N lines, beginning with the current line; e.g., 5dd deletes 5 lines |
yy | copy (yank, cut) the current line into the buffer | |
---|---|---|
Nyy or yNy | copy (yank, cut) the next N lines, including the current line, into the buffer | |
p | put (paste) the line(s) in the buffer into the text after the current line |
/string | search forward for occurrence of string in text | |
---|---|---|
?string | search backward for occurrence of string in text | |
n | move to next occurrence of search string | |
N | move to next occurrence of search string in opposite direction |
:.= | returns line number of current line at bottom of screen | |
---|---|---|
:= | returns the total number of lines at bottom of screen | |
^g | provides the current line number, along with the total number of lines, in the file at the bottom of the screen |
These commands permit you to input and output files other than the named file with which you are currently working.
:r filename<Return> | read file named filename and insert after current line (the line with cursor) |
|
---|---|---|
:w<Return> | write current contents to file named in original vi call | |
:w newfile<Return> | write current contents to a new file named newfile | |
:12,35w smallfile<Return> | write the contents of the lines numbered 12 through 35 to a new file named smallfile | |
:w! prevfile<Return> | write current contents over a pre-existing file named prevfile |
We’ve encountered this problem on our Rackspace cloud servers, and taking inspiration from http://www.unixmen.com/rhel-centos-6-4- … 14-update/ we have a workaround which seems to be working for yum and curl via WordPress/PHP/Apache.
Created /etc/profile.d/nss.sh and added:
export NSS_DISABLE_HW_AES=1
Add the following to /etc/grub.conf:
systemd.setenv=NSS_DISABLE_HW_AES=1
Added the following to /etc/sysconfig/init:
export NSS_DISABLE_HW_AES=1
Шпаргалка по git. Пошаговое руководство: как выполнить слияние веток в git, как создать новую ветку и репозиторий, как выписать ветку с github и т.п. Инструкции по git для начинающих.
Git – это распределенная система контроля версий. Это главное отличие git от svn. Каждый разработчик создает на своем компьютере отдельный, полноценный репозиторий.
В рамках этого репозитория можно делать все тоже самое, что и обычно в svn – создавать ветки, просматривать изменения, выполнять коммиты. Для того, чтобы можно было работать с удаленными репозиториями и обмениваться изменениями с другими разработчиками, в git есть две команды, не имеющие аналогов в svn – git push и git pull.
git push – вливание локальных изменений в удаленный репозиторий. git pull – вливание изменений из удаленного репозитория в локальный. Обмен данными обычно происходит с использованием протокола SSH.
Git поддерживают несколько крупных репозиториев – GitHub, SourceForge, BitBucket и Google Code. Удобно использовать один из них в качестве основного хранилища для корпоративных проектов.
1
|
git clonegit@github.com:devlabuser/sharp.git./
|
“./” означает, что создать репозиторий нужно в текущей директории.
Результат: каталог с выписанной веткой master. Теперь можно создавать новые ветки, или выписывать с github существующие.
С помощью команды “checkout” можно выписать уже существующую ветку с github:
1
2
|
$git checkout-bdev origin/dev
$git checkout-bproject_branch origin/project_branch
|
Или так, что намного надежнее:
1
|
$git checkout—track origin/production
|
Если вышеприведенные команды не сработали, выдали ошибку, и времени разбираться с ней нет, можно попробовать получить нужную ветку следующим способом:
1
2
|
git checkout-bproject_branch
git pull origin project_branch
|
Т.е. сначала мы создаем новую ветку, а затем вливаем в нее изменения из ветки на github.
1
2
|
$git checkout-bdev
Switched toanewbranch‘dev’
|
1
2
3
4
|
$git push origin dev
Total0(delta0),reused0(delta0)
Togit@github.com:devlabuser/sharp.git
*[newbranch] dev->dev
|
1
|
$git checkout project2_branch
|
Если вы случайно удалили какой-то файл, можно извлечь его из хранилища:
1
|
$git checkout readme.txt
|
Команда “branch” позволяет посмотреть список веток в локальном репозитории. Текущая ветка будет помечена звездочкой:
1
2
3
|
$git branch
*dev
master
|
Создаем новую ветку, выполняем в ней нужные изменения.
1
|
$git status
|
1
|
$git add<file1><file2>...
|
Или удаляем устаревшие файлы:
1
|
$git rm<file1><file2>...
|
1
|
$git commit-m‘Комментарий к коммиту’
|
1
2
|
$git pull origin dev
$git pull origin master
|
Теперь наша ветка содержит изменения для проекта, и все последние изменения по другим задачам, которые успела внести команда.
1
|
$git checkout dev
|
1
|
$git merge project_branch
|
1
2
3
4
5
6
7
8
9
|
$git push origin dev
Counting objects:4,done.
Delta compression using up to2threads.
Compressing objects:100%(2/2),done.
Writing objects:100%(3/3),286bytes,done.
Total3(delta0),reused0(delta0)
Togit@github.com:devlab/sharp.git
d528335..9a452d9 dev->dev
|
push может не пройти, потому что удалённый origin/dev обогнал локальную его копию.
Допустим, при слиянии с другой веткой git выдал ошибку. Команда git status возвращает информацию о конфликте:
1
2
3
4
5
6
7
8
9
10
11
12
|
$git status
...
Unmerged paths:
(use«git add <file>…»tomark resolution)
both modified: root/css/styles.css.gz
$git diff root/css/styles.css.gz
diff—cc root/css/styles.css.gz
index970c721,bc6d170..0000000
Binary files differ
|
Конфликтный файл является бинарным (это могут быть архивные файлы, изображения и т.п.), и решение конфликта стандартным способом, с помощью редактирования – не возможно.
Чтобы решить такой конфликт, надо просто выбрать – какая версия файла будет использоваться: ваша или из вливаемой ветки. Чтобы использовать свой вариант файла, вводим команду:
1
2
|
git checkout—ours binary.dat
git add binary.dat
|
Если мы выбираем версию из вливаемой ветки:
1
2
|
git checkout—theirs binary.dat
git add binary.dat
|
“ours” – от английского “наш”, “theirs” – от английского “их”.
git log – просмотр логов.
1
2
3
4
5
6
7
8
9
10
11
12
|
$git log
commit9a452d9cdbdb57e7e4f2b09f8ce2f776cd56657a
Author:DevLab User<user@mail.ru>
Date: Wed Jul3118:35:472013+0400
first commit
commit d528335724dfc15461996ed9d44d74f23ce6a075
Author:DevLab User<user@mail.ru>
Date: Wed Jul3106:24:572013-0700
Initial commit
|
Вывод данных о каждом коммите в одну строку:
1
2
3
4
|
git log—pretty=oneline
9a452d9cdbdb57e7e4f2b09f8ce2f776cd56657afirst commit
d528335724dfc15461996ed9d44d74f23ce6a075 Initial commit
|
Для вывода информации git log использует просмотрщик, указанный в конфиге репозитория.
Поиск по ключевому слову в комментариях к коммиту:
1
2
|
$git log|grep-e«first»
first commit
|
Команда “git show” позволяет просмотреть, какие именно изменения произошли в указанном коммите:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
$git show99452d955bdb57e7e4f2b09f8ce2fbb6cd56377a
commit99452d955bdb57e7e4f2b09f8ce2fbb6cd56377a
Author:DevLab User<user@mail.ru>
Date: Wed Jul3118:35:472013+0400
first commit
diff—gita/readme.txtb/readme.txt
newfile mode100644
index0000000..4add785
—-/dev/null
+++b/readme.txt
@@-0,0+1@@
+Text
\No newline at endof file
|
Можно посмотреть построчную информацию о последнем коммите, имя автора и хэш коммита:
1
2
3
4
|
$git blame README.md
^d528335(devlabuser2013-07-3106:24:57-07001)sharp
^d528335(devlabuser2013-07-3106:24:57-07002)=====
|
git annotate, выводит измененные строки и информацию о коммитах, где это произошло:
1
2
|
$git annotate readme.txt
9a452d9c (DevLab User 2013-07-3118:35:47+0400 1)Text
|
1
2
3
4
5
6
7
8
9
10
11
|
commit9a452d9cdbdb57e7e4f2b09f8ce2f776cd56657a
Author:devlabuser<user@mail.ru>
Date: Wed Jul3118:35:472013+0400
first commit
commit d528335724dfc15461996ed9d44d74f23ce6a075
Author:devlabuser<user@mail.ru>
Date: Wed Jul3106:24:572013-0700
Initial commit
|
1
2
|
$git reset—hard9a452d955bdb57e7e4f2b09f8ce2fbb6cd56377a
HEAD isnow at9a45779first commit
|
Можно откатить до последней версии ветки:
1
2
|
$git reset—hard origin/dev
HEAD isnow at9a45779first commit
|
После того, как откат сделан, и выполнен очередной локальный коммит, при попытке сделать push в удаленный репозиторий, git может начать ругаться, что версия вашей ветки младше чем на github и вам надо сделать pull. Это лечится принудительным коммитом:
1
|
git push-forigin master
|
git merge выполняет слияние текущей и указанной ветки. Изменения добавляются в текущую ветку.
1
|
$git merge origin/ticket_1001_branch
|
git pull забирает изменения из ветки на удаленном сервере и проводит слияние с активной веткой.
1
|
$git pull origin ticket_1001_branch
|
git pull отличается от git merge тем, что merge только выполняет слияние веток, а pull прежде чем выполнить слияние – закачивает изменения с удаленного сервера. mergeудобно использовать для слияния веток в локальном репозитории, pull – слияния веток, когда одна из них лежит на github.
1
2
3
|
$mkdir project_dir
$cd project_dir
$git init
|
git cherry-pick помогает применить один-единственный коммит из одной ветки к дереву другой.
1
|
git checkout master
|
1
|
git pull origin master
|
1
|
git cherry-pick eb042098a5
|
1
|
git push origin master
|
После создания репозитория в текущей директории появится субдиректория .git . Она содержит файл config .
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
[core]
repositoryformatversion=0
filemode=true
bare=false
logallrefupdates=true
[remote"origin"]
fetch=+refs/heads/*:refs/remotes/origin/*
url=git@github.com:devlab/sharp.git
[branch"master"]
remote=origin
merge=refs/heads/master
[branch"dev"]
remote=origin
merge=refs/heads/dev
|
Чтобы раскрасить вывод git, можно добавить в файл блок [color]:
1
2
3
4
5
6
|
[color]
branch=auto
diff=auto
interactive=auto
status=auto
ui=auto
|
iptables -N MongoDB iptables -I INPUT -s 0/0 -p tcp --dport 27017 -j MongoDB iptables -I INPUT -s 0/0 -p tcp --dport 28017 -j MongoDB iptables -I MongoDB -s 127.0.0.1 -j ACCEPT iptables -I MongoDB -s 123.123.123.123 -j ACCEPT iptables -A MongoDB -s 0/0 -j DROP /etc/init.d/iptables save vim /etc/sysconfig/iptables
iptables -D MongoDB 5 /etc/init.d/iptables save
Чтобы отобразить номер строки с существующими правилами:
# iptables -L INPUT -n --line-numbers
# iptables -L OUTPUT -n --line-numbers
# iptables -L OUTPUT -n --line-numbers | less
# iptables -L OUTPUT -n --line-numbers | grep 202.54.1.1
Получим список IP адресов. Просто посмотрим на номер слева и удалим соответствующую строку. К примеру для номера 3:
# iptables -D INPUT 3
Или найдем IP адрес источника (202.54.1.1) и удалим из правила:
# iptables -D INPUT -s 202.54.1.1 -j DROP
Где:
-D : Удалить одно или несколько правил из цепочки.
Файрвол в системе linux контролируется программой iptables (для ipv4) и ip6tables (для ipv6). В данной шпаргалке рассмотрены самые распространённые способы использования iptables для тех, кто хочет защитить свою систему от взломщиков или просто разобраться в настройке.
Знак # означает, что команда выполняется от root. Откройте заранее консоль с рутовыми правами - sudo -i
в Debian-based системах или su
в остальных.
# iptables -L -n -v
Примерный вывод команды для неактивного файрвола:
Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination
Для активного файрвола:
Chain INPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 state INVALID 394 43586 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 93 17292 ACCEPT all -- br0 * 0.0.0.0/0 0.0.0.0/0 1 142 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 Chain FORWARD (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT all -- br0 br0 0.0.0.0/0 0.0.0.0/0 0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 state INVALID 0 0 TCPMSS tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp flags:0x06/0x02 TCPMSS clamp to PMTU 0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 0 0 wanin all -- vlan2 * 0.0.0.0/0 0.0.0.0/0 0 0 wanout all -- * vlan2 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT all -- br0 * 0.0.0.0/0 0.0.0.0/0 Chain OUTPUT (policy ACCEPT 425 packets, 113K bytes) pkts bytes target prot opt in out source destination Chain wanin (1 references) pkts bytes target prot opt in out source destination Chain wanout (1 references) pkts bytes target prot opt in out source destination
Где:
-L : Показать список правил.
-v : Отображать дополнительную информацию. Эта опция показывает имя интерфейса, опции, TOS маски. Также отображает суффиксы ‘K’, ‘M’ or ‘G’.
-n : Отображать IP адрес и порт числами (не используя DNS сервера для определения имен. Это ускорит отображение).
# iptables -n -L -v --line-numbers
Примерный вывод:
Chain INPUT (policy DROP) num target prot opt source destination 1 DROP all -- 0.0.0.0/0 0.0.0.0/0 state INVALID 2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 4 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 Chain FORWARD (policy DROP) num target prot opt source destination 1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 2 DROP all -- 0.0.0.0/0 0.0.0.0/0 state INVALID 3 TCPMSS tcp -- 0.0.0.0/0 0.0.0.0/0 tcp flags:0x06/0x02 TCPMSS clamp to PMTU 4 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 5 wanin all -- 0.0.0.0/0 0.0.0.0/0 6 wanout all -- 0.0.0.0/0 0.0.0.0/0 7 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 Chain OUTPUT (policy ACCEPT) num target prot opt source destination Chain wanin (1 references) num target prot opt source destination Chain wanout (1 references) num target prot opt source destination
Вы можете использовать номера строк для того, чтобы добавлять новые правила.
# iptables -L INPUT -n -v
# iptables -L OUTPUT -n -v --line-numbers
Силами самой системы:
# service ufw stop
# service ufw start
Можно также использовать команды iptables для того, чтобы остановить файрвол и удалить все правила:
# iptables -F
# iptables -X
# iptables -t nat -F
# iptables -t nat -X
# iptables -t mangle -F
# iptables -t mangle -X
# iptables -P INPUT ACCEPT
# iptables -P OUTPUT ACCEPT
# iptables -P FORWARD ACCEPT
Где:
-F : Удалить (flush) все правила.
-X : Удалить цепочку.
-t table_name : Выбрать таблицу (nat или mangle) и удалить все правила.
-P : Выбрать действия по умолчанию (такие, как DROP, REJECT, или ACCEPT).
Чтобы отобразить номер строки с существующими правилами:
# iptables -L INPUT -n --line-numbers
# iptables -L OUTPUT -n --line-numbers
# iptables -L OUTPUT -n --line-numbers | less
# iptables -L OUTPUT -n --line-numbers | grep 202.54.1.1
Получим список IP адресов. Просто посмотрим на номер слева и удалим соответствующую строку. К примеру для номера 3:
# iptables -D INPUT 3
Или найдем IP адрес источника (202.54.1.1) и удалим из правила:
# iptables -D INPUT -s 202.54.1.1 -j DROP
Где:
-D : Удалить одно или несколько правил из цепочки.
Чтобы добавить одно или несколько правил в цепочку, для начала отобразим список с использованием номеров строк:
# iptables -L INPUT -n --line-numbers
Примерный вывод:
Chain INPUT (policy DROP) num target prot opt source destination 1 DROP all -- 202.54.1.1 0.0.0.0/0 2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state NEW,ESTABLISHED
Чтобы вставить правило между 1 и 2 строкой:
# iptables -I INPUT 2 -s 202.54.1.2 -j DROP
Проверим, обновилось ли правило:
# iptables -L INPUT -n --line-numbers
Вывод станет таким:
Chain INPUT (policy DROP) num target prot opt source destination 1 DROP all -- 202.54.1.1 0.0.0.0/0 2 DROP all -- 202.54.1.2 0.0.0.0/0 3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state NEW,ESTABLISHED
Через iptables-save:
# iptables-save > /etc/iptables.rules
Через iptables-restore
# iptables-restore < /etc/iptables.rules
Чтобы сбрасывать весь трафик:
# iptables -P INPUT DROP
# iptables -P OUTPUT DROP
# iptables -P FORWARD DROP
# iptables -L -v -n
После вышеперечисленных команд ни один пакет не покинет данный хост.
# ping google.com
Чтобы сбрасывать все не инициированные вами входящие пакеты, но разрешить исходящий трафик:
# iptables -P INPUT DROP
# iptables -P FORWARD DROP
# iptables -P OUTPUT ACCEPT
# iptables -A INPUT -m state --state NEW,ESTABLISHED -j ACCEPT
# iptables -L -v -n
Пакеты исходящие и те, которые были запомнены в рамках установленных сессий — разрешены.
# ping google.com
# iptables -A INPUT -i eth1 -s 192.168.0.0/24 -j DROP
# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
Список IP адресов для изолированных сетей:
10.0.0.0/8 -j (A)
172.16.0.0/12 (B)
192.168.0.0/16 (C)
224.0.0.0/4 (MULTICAST D)
240.0.0.0/5 (E)
127.0.0.0/8 (LOOPBACK)
Чтобы заблокировать адрес взломщика 1.2.3.4:
# iptables -A INPUT -s 1.2.3.4 -j DROP
# iptables -A INPUT -s 192.168.0.0/24 -j DROP
Чтобы заблокировать все входящие запросы порта 80:
# iptables -A INPUT -p tcp --dport 80 -j DROP
# iptables -A INPUT -i eth1 -p tcp --dport 80 -j DROP
Чтобы заблокировать запрос порта 80 с адреса 1.2.3.4:
# iptables -A INPUT -p tcp -s 1.2.3.4 --dport 80 -j DROP
# iptables -A INPUT -i eth1 -p tcp -s 192.168.1.0/24 --dport 80 -j DROP
Чтобы заблокировать определенный домен, узнаем его адрес:
# host -t a facebook.com
Вывод: facebook.com has address 69.171.228.40
Найдем CIDR для 69.171.228.40:
# whois 69.171.228.40 | grep CIDR
Вывод:
CIDR: 69.171.224.0/19
Заблокируем доступ на 69.171.224.0/19:
# iptables -A OUTPUT -p tcp -d 69.171.224.0/19 -j DROP
Также можно использовать домен для блокировки:
# iptables -A OUTPUT -p tcp -d www.fаcebook.com -j DROP
# iptables -A OUTPUT -p tcp -d fаcebook.com -j DROP
Чтобы записать в журнал движение пакетов перед сбросом, добавим правило:
# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j LOG --log-prefix "IP_SPOOF A: "
# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
Проверим журнал (по умолчанию /var/log/messages):
# tail -f /var/log/messages
# grep -i --color 'IP SPOOF' /var/log/messages
Чтобы не переполнить раздел раздутым журналом, ограничим количество записей с помощью -m. К примеру, чтобы записывать каждые 5 минут максимум 7 строк:
# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -m limit --limit 5/m --limit-burst 7 -j LOG --log-prefix "IP_SPOOF A: "
# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
# iptables -A INPUT -m mac --mac-source 00:0F:EA:91:04:08 -j DROP
## *разрешить только для TCP port # 8080 с mac адреса 00:0F:EA:91:04:07 * ##
# iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source 00:0F:EA:91:04:07 -j ACCEPT
Чтобы запретить ping:
# iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
# iptables -A INPUT -i eth1 -p icmp --icmp-type echo-request -j DROP
Разрешить для определенных сетей / хостов:
# iptables -A INPUT -s 192.168.1.0/24 -p icmp --icmp-type echo-request -j ACCEPT
Разрешить только часть ICMP запросов:
### ** предполагается, что политики по умолчанию для входящих установлены в DROP ** ###
# iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
# iptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
# iptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
## ** разрешим отвечать на запрос ** ##
# iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 7000:7010 -j ACCEPT
## разрешить подключение к порту 80 (Apache) если адрес в диапазоне от 192.168.1.100 до 192.168.1.200 ##
# iptables -A INPUT -p tcp --destination-port 80 -m iprange --src-range 192.168.1.100-192.168.1.200 -j ACCEPT
## пример для nat ##
# iptables -t nat -A POSTROUTING -j SNAT --to-source 192.168.1.20-192.168.1.25
Заменить ACCEPT на DROP, чтобы заблокировать порт.
## ssh tcp port 22 ##
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 22 -j ACCEPT
## cups (printing service) udp/tcp port 631 для локальной сети ##
iptables -A INPUT -s 192.168.1.0/24 -p udp -m udp --dport 631 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 631 -j ACCEPT
## time sync via NTP для локальной сети (udp port 123) ##
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p udp --dport 123 -j ACCEPT
## tcp port 25 (smtp) ##
iptables -A INPUT -m state --state NEW -p tcp --dport 25 -j ACCEPT
# dns server ports ##
iptables -A INPUT -m state --state NEW -p udp --dport 53 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT
## http/https www server port ##
iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT
## tcp port 110 (pop3) ##
iptables -A INPUT -m state --state NEW -p tcp --dport 110 -j ACCEPT
## tcp port 143 (imap) ##
iptables -A INPUT -m state --state NEW -p tcp --dport 143 -j ACCEPT
## Samba file server для локальной сети ##
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 137 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 138 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 139 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 445 -j ACCEPT
## proxy server для локальной сети ##
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 3128 -j ACCEPT
## mysql server для локальной сети ##
iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
Для ограничений используется connlimit модуль. Чтобы разрешить только 3 ssh соединения на одного клиента:
# iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT
Установить количество запросов HTTP до 20:
# iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j DROP
Где:
—connlimit-above 3 : Указывает, что правило действует только если количество соединений превышает 3.
—connlimit-mask 24 : Указывает маску сети.
Для поиска помощи по iptables, воспользуемся man:
$ man iptables
Чтобы посмотреть помощь по определенным командам и целям:
# iptables -j DROP -h
Проверяем открытость / закрытость портов:
# netstat -tulpn
Проверяем открытость / закрытость определенного порта:
# netstat -tulpn | grep :80
Проверим, что iptables разрешает соединение с 80 портом:
# iptables -L INPUT -v -n | grep 80
В противном случае откроем его для всех:
# iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
Проверяем с помощью telnet
$ telnet ya.ru 80
Можно использовать nmap для проверки:
$ nmap -sS -p 80 ya.ru
Автор статьи Platon Puhlechev aka iFalkorr разрешает печатать данный текст.
pwd - текущая диретория
mkdir -p test/test2 — обе директории создаст (рекурсивно)
tree test - дерево директорий
tail -10000 /sites/project/log/production.log | grep «Completed 200 OK in \d{6}» -P -B 20 —color
ssh -t root@server.ru "cd /dir ; bash"
Delete files by dir:
find path ./*/big_kartochka -print find . -path ./*/big_kartochka -exec rm -rfv {} +
Find by:
find . -maxdepth 4 -iname "*original.jpg" ! -iname "*original.jpeg" ! -iname "*original.png" -print -exec mogrify -resize 1280 {} \;
find \( -name '*.JPG' -o -name '*.jpg' -o -name '*.jpeg' -o -name '*.JPEG' \) -print -exec mogrify -compress JPEG -quality 80 {} \;
find ./*/original \( -name '*.JPG' -o -name '*.jpg' -o -name '*.jpeg' -o -name '*.JPEG' -o -name '*.png' -o -name '*.PNG' \) -print -exec mogrify -resize 1280 {} \;
Use the prune switch, for example if you want to exclude the misc directory just add a -path ./misc -prune -o
to your find command:
find .-path ./misc -prune -o -name '*.txt'-print
Here is an example with multiple directories:
find .-type d \( -path dir1 -o -path dir2 -o -path dir3 \) -prune -o -print
Here we exclude dir1, dir2 and dir3, since in find
expressions it is an action, that acts on the criteria -path dir1 -o -path dir2 -o -path dir3
(if dir1 or dir2 or dir3), ANDed with type -d
. Further action is -o print
, just print.
find ./*/a -name '*.jpg' -print
find -name "*.jpg" -print -exec mogrify -compress JPEG -quality 80 {} \;
find -name "*.jpg" -print -exec mogrify -compress JPEG {} \;
find -name "*.jpg" -print -exec mogrify -resize 320 -quality 75 {} \;
cd /Users/fred/tmp1
mogrify -path /Users/fred/cyclops2/ -format "_Resized.jpg" -resize 50% *.png
cd /Users/fred/tmp2
filelist=$(ls)
for file in $filelist; do
mv "$file" "$(echo "$file" | sed 's/._/_/g' )"
done
mogrify -resize 35%
cd fullsize mogrify -resize 400x238 *.png
cd thumbs mogrify -resize 288x171 *.png
cd $DIR && ( mogrify -resize 1024x768 *.JPG; mogrify -auto-orient *.JPG )
mogrify -density 200 -units PixelsPerInch *.png
Для добавления сервисов в автозагрузку, в центосе используется утилита chkconfig
# chkconfig |
chkconfig version 1.3.30.2 - Copyright (C) 1997-2000 Red Hat, Inc. |
Может свободно распостраняться в рамках GNU Public License. |
применение: chkconfig --list [имя сервиса] |
chkconfig --add <имя сервиса> |
chkconfig --del <имя сервиса> |
chkconfig [--level <уровни>] <имя сервиса> <on|off|reset|resetpriorities> |
Рассмотрим на примере ранее установленного snmpd
Проверим состояние сервиса:
# chkconfig --list snmpd |
snmpd 0:выкл 1:выкл 2:выкл 3:выкл 4:выкл 5:выкл 6:выкл |
т.е. на данный момент он выключен, и при старте системы не будет загружаться, исправим это недоразумение, но для начала разберемся что значат цифры 0-6 в выводе команды, а значат они только уровень выполнения сервиса:
Уровень 0 — остановка системы (halt) — работа системы должна быть прекращена;
Уровень 1 — однопользовательский режим работы — система инициализирует минимум служб и даёт единственному пользователю (как правило, суперпользователю) без проведения аутентификации командную строку. Как правило, этот режим используется для восстановления системы;
Уровень 2 — многопользовательский режим — пользователи могут работать на разных терминалах, вход в систему с процессом аутентификации;
Уровень 3 — многопользовательский сетевой режим — в отличие от предыдущего уровня, осуществляется настройка сети и запускаются различные сетевые службы;
Уровень 4 — не имеет стандартного толкования и практически не используется;
Уровень 5 — запуск графической подсистемы — по сравнению с уровнем 3 производится также старт графической подсистемы X11, и вход в систему осуществляется уже в графическом режиме;
Уровень 6 — перезагрузка системы — при включении этого режима останавливаются все запущенные программы и производится перезагрузка.
Теперь, когда мы мегамодные пацаны, и знаем про уровни выполнения, попробуем добавить наш snmpd в автозагрузку системы:
# chkconfig --level 35 snmpd on |
т.е. включили с уровнями 3 и 5
Проверим:
# chkconfig --list snmpd |
snmpd 0:выкл 1:выкл 2:выкл 3:вкл 4:выкл 5:вкл 6:выкл |
действительно 3 и 5 уровень включен)))
Теперь добавим его в автозагрузку:
# chkconfig --add snmpd |
Чтобы удалить из автозагрузки:
# chkconfig --del snmpd |
Выключить на всех уровнях:
# chkconfig snmpd off |
Включить на всех уровнях:
# chkconfig snmpd on |