2011年1月31日 星期一

Linux - 設定yum 服務器

以FTP server方式作為yum來源
首先確定vsftpd服務己安裝在系統中,且己正常提供服務

複製光碟目錄檔案
[root@www /]#cp -rv Server /var/ftp/pub  
[root@www /]#cp -rv VT /var/ftp/pub    
[root@www /]#cp -rv Cluster /var/ftp/pub
[root@www /]#cp -rv ClusterStorage /var/ftp/pub
註:如果不需要虛擬化套件,VT目錄可以不用複製;Cluster相關也看需求;但最主要Server目錄是一定要的!

產生相依關係
[root@www /]# createrepo -g /var/ftp/pub/Server/repodata/comps-rhel5-server-core.xml /var/ftp/pub/Server
[root@www Server]# rm -rf /var/ftp/pub/Server/.olddata
[root@www /]# createrepo -g /var/ftp/pub/VT/repodata/comps-rhel5-vt.xml /var/ftp/pub/VT
[root@www /]# rm -rf /var/ftp/pub/VT/.olddata
[root@www /]# createrepo -g /var/ftp/pub/Cluster/repodata/comps-rhel5-cluster.xml /var/ftp/pub/Cluster
[root@www /]# rm -rf /var/ftp/pub/Cluster/.olddata
[root@www /]# createrepo -g /var/ftp/pub/ClusterStorage/repodata/comps-rhel5-cluster-st.xml /var/ftp/pub/ClusterStorage
[root@www /]# rm -rf /var/ftp/pub/ClusterStorage/.olddata

註:createrepo命令用於產生RPM依賴關係及分組資訊;-g 參數則是產生依賴關係及更新分組資訊

ok!!產生完成

Yum Client設定
[root@www Server]# cd /etc/yum.repos.d/
[root@www yum.repos.d]# cp -p rhel-debuginfo.repo yumtest.repo
[root@www yum.repos.d]# vi yumtest.repo
內容如下
[yumtest]
name=Server
baseurl=ftp://192.168.11.200/pub/Server
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

查看另一yum client端的設定檔

[root@www]# cat /etc/yum.conf

測試看看安裝一下php相關套件
[root@www]# yum -y install php
......
.........
Dependencies Resolved

=============================================================================
 Package                 Arch       Version          Repository        Size
=============================================================================
Installing:
 php                     i386       5.1.6-5.el5      yumtest           1.2 M
Installing for dependencies:
 php-cli                 i386       5.1.6-5.el5      yumtest           2.2 M
 php-common              i386       5.1.6-5.el5      yumtest           139 k

Transaction Summary
=============================================================================
Install      3 Package(s)        
Update       0 Package(s)        
Remove       0 Package(s)  

查看安裝套件
[root@www /]# rpm -qa |grep php
php-cli-5.1.6-5.el5
php-common-5.1.6-5.el5
php-5.1.6-5.el5

有興趣可man yum 或yum -h
用法:
usage: yum [options] < grouplist, localinstall, groupinfo, localupdate, resolvedep, erase, deplist, groupremove, makecache, upgrade, provides, shell, install, whatprovides, groupinstall, update, groupupdate, info, search, check-update, list, remove, clean, grouperase >

[root@www ~]# yum -y
[root@www ~]# yum -y install <套件名稱>   //安裝指定套件
[root@www ~]# yum -y update             //升級所有己安裝套件 
[root@www ~]# yum -y update <套件名稱>   //升級指定套件
[root@www ~]# yum check-update          //檢查是否有需要更新
[root@www ~]# yum info <套件名稱>        //顯示指定套件資訊
[root@www ~]# yum info updates          //顯示所有可以更新套件資訊
[root@www ~]# yum info installed        //顯示所有己經安裝套件資訊
[root@www ~]# yum groupinfo <套件名稱>    //顯示指定分組資訊
[root@www ~]# yum grouplist              //顯示所有yum服務器定義分組
[root@www ~]# yum list                   //顯示所有己經安裝和可安裝的套件
[root@www ~]# yum list <軟體名稱>         //顯示指定安裝套件情況
[root@www ~]# yum list installed         //顯示指定己安裝套件
[root@www ~]# yum search                 //查看指定關鍵字
[root@www ~]# yum clean packages         //清除cache中的RPM檔案
[root@www ~]# yum clean headers          //清除cache中的RPM header檔案
[root@www ~]# yum clean all              //清除所有yum cache
[root@www ~]# yum localinstall <RPM檔案>  //使用yum 方式安裝本地RPM套件
[root@www ~]# yum groupinstall <分群名稱>   //安裝指定分組的所有套件
[root@www ~]# yum remove <軟體名稱>        //移除套件
[root@www ~]# yum groupremove packagegroup <分組名稱>   //移除指定分組所有套件

2011年1月26日 星期三

Snort - Iptables 簡易主動防禦 (IPS)

網址 http://www.chaotic.org/guardian/

解壓縮/安裝guardian[root@snort snortsnarf]# tar zxvf guardian-1.7.tar.gz
[root@snort snortsnarf]# cd guardian-1.7
[root@snort snortsnarf]# echo > /etc/guardian.ignore
[root@snort snortsnarf]# cp guardian.pl /usr/local/bin/.
[root@snort snortsnarf]# cp scripts/iptables_block.sh /usr/local/bin/guardian_block.sh
[root@snort snortsnarf]# cp scripts/iptables_unblock.sh /usr/local/bin/guardian_unblock.sh
[root@snort snortsnarf]# cp guardian.conf /etc/
[root@snort snortsnarf]# touch /var/log/guardian.log


[root@snort snortsnarf]# vi /etc/guardian.conf
內容如下:
HostGatewayByte   192.168.1.100 //主機IP
LogFile /var/log/guardian.log       //guardian的日誌檔
AlertFile /var/log/snort/alert        //guardian從何處讀取snort的日誌
IgnoreFile /etc/guardian.ignore   //將你需要忽略的IP放在此檔中 
TimeLimit 86400    //封鎖IP的最長時間,99999999為沒有時限

執行[root@snort snortsnarf]# /usr/bin/perl  /usr/local/bin/guardian.pl -c /etc/guardian.conf
註 將上一條命令加入 /etc/rc.d/rc.local


互動測試snort與guardian如何得知snort與guardian是否有聯動關係, 可以作簡單測試
可以把 /etc/snort/snort.conf檔案裡的所有rule 選項先暫時註解
然後自己寫一個規則檔測試看看


撰寫測試rule[root@snort snortsnarf]# vi /etc/snort/rules/myrule
內容如下
alert tcp any any -> any 112(msg:”TCP Traffic”;)

完成後把myrule規則加到snort.conf中。

[root@snort snortsnarf]# vi /etc/snort.conf
include $RULE_PATH/my.rules

先清空snort的的日誌檔, 方便觀察。

[root@snort snortsnarf]# cd /var/log/snort
[root@snort snortsnarf]# rm -rf *


開始測試[root@snort snortsnarf]# service snort restart
[root@snort snortsnarf]# perl /usr/local/bin/guardian.pl -c /etc/guardian.conf
為了能即時的觀察現象……
[root@snort snortsnarf]# tail -f  /var/log/snort/alert
[root@snort snortsnarf]# tail -f /var/log/guardian.log

如果測試正常, 我們就可以把剛原來rules註解拿掉並加入自己的rule

備忘: guardian有時會自動退出,可以使用如下script解決:
#!/usr/bin/perl
use Proc::ProcessTable;
$found=0;
$t = new Proc::ProcessTable;
$g = "guardian.pl";
foreach $p ( @{$t->table} ){
      $f=($p->cmndline =~ m/guardian/);
      if($f==1)
      {$found=1;
      last;
      }
}
if($found == 1)
{
print "guardian is alive!\n";
}
else
{
print "guardian is dead!\n";
print "restart guardian now ... \n";
system "/usr/local/bin/guardian.pl  -c /etc/guardian.conf";
}

註: 將上述腳本存為testguardian,放置到 /etc/cron.hourly目錄下,每1小時檢測guardian是否存在,如果已經死亡就重新啟動guardian

[root@snort snortsnarf]# chmod +x /etc/cron.hourly/testguardian
另一解決方式
Kill guardian script
[root@snort bin]# perl -MCPAN -e 'install Proc::ProcessTable'  //安裝perl 模組
[root@snort bin]# vi /usr/local/bin/killguardian
內容如下
#!/usr/bin/perl
use Proc::ProcessTable;
$t = new Proc::ProcessTable;
foreach $p (@{$t->table})
{
kill 9, $p->pid if $p->cmndline =~ 'guardian.pl';
}
[root@snort snortsnarf]# chmod +x /usr/local/bin/killguardian

編輯 shell script內容如下:
#!/bin/sh
/usr/local/bin/killguardian
/usr/local/bin/guardian.pl -c /etc/guardian.conf
exit 0

[root@snort snortsnarf]# chmod +x /usr/local/bin/rrestartguardian
將上述script存為restartguardian,放置到/usr/local/bin
同时,crontab -e,加入如下一句:
* */6 * * * /usr/local/bin/restartguardian    //每6小时重新啟動guardian

Snort - Alert Log 分析

網址: http://sourceforge.net/

解壓縮 Snortsnarf[root@snort darwin]# tar zxvf SnortSnarf-1.0.tar.gz
因為snorfsnarf目錄內缺少Time-modules 所以要去下載安裝


解壓縮/安裝 Time-modules網址: http://www.cpan.org/modules/by-authors/id/MUIR/modules/
[root@snort darwin]# tar zxvf Time-modules-2006.0814.tar.gz
[root@snort darwin]# cd Time-modules-2006.0814
[root@snort Time-modules-2006.0814]# perl Makefile.PL
[root@snort Time-modules-2006.0814]# make
[root@snort Time-modules-2006.0814]# make install
[root@snort darwin]# mkdir /var/www/cgi-bin/snortsnarf  //存放一些perl的地方
[root@snort darwin]# mkdir /var/www/html/snortsnarf      //輸出index.html的地方


安裝snortsnarf[root@snort darwin]# cd SnortSnarf-1.0
[root@snort SnortSnarf-1.0]# cp cgi/* /var/www/cgi-bin/snortsnarf/ 
[root@snort SnortSnarf-1.0]# cp -r include/ /var/www/cgi-bin/snortsnarf/
[root@snort SnortSnarf-1.0]# cp snortsnarf.pl /var/www/cgi-bin/snortsnarf/
[root@snort snortsnarf]# cd /var/www/cgi-bin/snortsnarf/
[root@snort snortsnarf]# vi snortsnarf.pl


將第一行 #!/usr/bin/perl –w 的-w去掉

參數的意義如下:
-cgidir是apache中跑perl的地方
-d是輸出成網頁的地方
-homenet是自己的主機IP網段
-color設定顏色,只有yes及no,我當然是用yes啦!!
-rulesdir  snort規則地方
/var/log/snort/alert是snort的輸出檔 也就是alert檔案, 作為snortsnarf 分析使用,可以加上snort的相關輸出檔,也可以2個以上, 如果要snort輸出好幾個檔案,那就要在snort.conf中設定, 預設是關掉的


執行結果[root@snort snortsnarf]# perl snortsnarf.pl -cgidir /var/www/cgi-bin/snortsnarf -d /var/www/html/snortsnarf -homenet 102.168.1.* -color='yes' -rulesfile snort.conf -rulesdir /etc/snort/rules /var/log/snort/alert

SNORT - 完整安裝

1. 環境RedHat AS5 for x86
(前提預設已安裝好Apache2,Mysql,PHP及一些相關套件, 如php-mysql..)

前言SNORT 是一支功能強大輕型的網路入侵檢測(NIDS)程式 , 它可以提供封包嗅探、封包記錄器以及輕型的網路入侵檢測(NIDS)等三種主要工作 , 並可利用BASE分析Alert記錄 , 一般根據工作重點不同而有所區分 , 分為主機入侵偵測系統及網路偵測系統二種 ,其入侵偵測結構可分為sensor檢測及處理Alert結果控制台。

SNORT三種工作型態協定分析器(Sniffer): 可以當成即時封包sniffer , SNORT使用libpcap 函式來擷取封包 , 對於診斷網路工具很有用的 。
封包記錄(Logging Packets): 此模式下,Snort將已擷取的封包存入儲存媒體中(如硬碟)。
網路入侵檢測(NIDS): 可自訂網路入侵檢系統 ,輕易利用攻擊簽章(rules)及使用者自訂的snort規則


2. 為什麼要使用入侵偵測系統? 1. 事先補強系統漏洞, 以避免問題發生.
 2. 偵測未被其它安全機制防護到的問題.
 3. 避免威脅擴大.
 4. 對可能的攻擊前兆發出預警
 5. 提供安全設計與管理的品質控制
 6. 記錄並匯整報告
 7. 提供入侵者之資訊
 8. 警告攻擊者
 9. 內部行為控管


3. Snort結構



4. 確定PATH環境變數[root@snort Server]# echo $PATH
PATH路徑如只有/usr/bin:/usr/sbin , 請加入以下路徑
PATH路徑的設定:
[root@snort Server]# bash
[root@snort Server]# vi /etc/profile
內容如下 PATH=/usr/lib/qt-3.3/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/lib/ccache:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
export PATH
LD_LIBRARY_PATH=/lib:/usr/local/lib:/usr/lib
export LD_LIBRARY_PATH

5. 確認所需套件zlib -*  openssl-*  libxml2-*  pcre-*  libpcap-*  flex 
bison-*  gcc  automake  autoconf  http-devel-*  http  mysql  php  php-devel  php-gd  php-mysql  php-pear  phpMyAdmin


例如:  # rpm -qa |grep zlib-devel
#zlib-devel-1.2.3-18.fc9.i386
以此類推查詢,看系統是否缺少某一套件


5.1安裝套件例如1. 原始檔安裝 libxml package
 下載網址 ftp://xmlsoft.org/ 

[root@snort Server]# tar zxvf libxml2-2.7.2.tar.gz
[root@snort Server]#cd libxml2-2.7.2
[root@snort Server]#./configure
[root@snort Server]#make && make install

例如2. yum安裝 libxml2  package
[root@snort Server]#yum install –y  libxml2-devel.*


例如3. rpm安裝 libxml2  package
網址: http://www.rpmfind.net/linux/rpm2html


 [root@snort Server]# rpm -ivh libxml2-devel-2.6.26-2.1.2.i386.rpm

6. 安裝Apache2(在安裝OS時, 預設已安裝好Apache2, 所以只要編輯httpd.conf檔案即可)

6.1 編輯httpd.conf檔案 [root@snort ~]# vi /etc/httpd/conf/httpd.conf
內容如下
Timeout 60
KeepAlive On
MaxKeepAliveRequests 800
KeepAliveTimeout 5
HostnameLookups Off


<IfModule worker.c>
StartServers         2
MaxClients         150
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25
MaxRequestsPerChild  0
</IfModule>


User apache  Apache 的使用者
Group apache Apache 的群組
ServerAdmin darwin@catchlink.com  管理E-mail位址
ServerName  192.168.1.100:80 伺服器位址:80
其餘使用預設值即可.


6.2啟動Apache2 [root@snort ~]# service httpd start
Starting httpd:                                            [  OK  ]


[root@snort ~]# ps -ef |grep httpd
root      3399     1  0 22:25 pts/1    00:00:00 /usr/sbin/nss_pcache off /etc/httpd/alias
root      3403     1  1 22:25 ?        00:00:00 /usr/sbin/httpd
apache    3407  3403  0 22:25 ?        00:00:00 /usr/sbin/httpd
apache    3408  3403  0 22:25 ?        00:00:00 /usr/sbin/httpd
apache    3409  3403  0 22:25 ?        00:00:00 /usr/sbin/httpd
apache    3410  3403  0 22:25 ?        00:00:00 /usr/sbin/httpd
apache    3411  3403  0 22:25 ?        00:00:00 /usr/sbin/httpd
apache    3412  3403  0 22:25 ?        00:00:00 /usr/sbin/httpd
apache    3413  3403  0 22:25 ?        00:00:00 /usr/sbin/httpd
apache    3414  3403  0 22:25 ?        00:00:00 /usr/sbin/httpd


測試網頁 http://webserver/ IP/index.html
 
 

6.3 停止Apache2 [root@snort ~]# service httpd stop
Stopping httpd:                                            [  OK  ]


6.4 自動啟動和關閉Apache2 [root@snort ~]# chkconfig --level 35 httpd on
[root@snort ~]# chkconfig --list httpd
httpd           0:off   1:off   2:off   3:on    4:off   5:on    6:off


7. 安裝MySQL5(在安裝OS時, 預設已安裝好Mysql5)

7.1啟動MySQL[root@snort ~]# service mysqld start
Starting MySQL:                                             [  OK  ]


7.2查看MySQL  PortMysql預設使用的Port是3306
[root@snort ~]# netstat -na |grep -w 3306
tcp        0      0 0.0.0.0:3306          0.0.0.0:*             LISTEN


7.3 設定 MySQL 的 root user密碼
[root@snort ~]# /usr/bin/mysqladmin -uroot password 'gh8Q6prt'
[root@snort ~]# mysqladmin -uroot -h `hostname` password 'gh8Q6prt' –p

7.4 測試 MySQL Server[root@snort ~]# mysqladmin version -p
Enter password:
mysqladmin  Ver 8.41 Distrib 5.0.22, for redhat-linux-gnu on i686
Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL license

Server version          5.0.22
Protocol version        10
Connection              Localhost via UNIX socket
UNIX socket             /var/lib/mysql/mysql.sock
Uptime:                 4 min 0 sec

Threads: 1  Questions: 10  Slow queries: 0  Opens: 0  Flush tables: 1  Open tables: 6  Queries per   second avg: 0.042

如出現上面的有關mysql5相關資訊 , 則表示安裝成功!

7.5 查看MySQL 內所有資料庫
 [root@snort ~]# mysqlshow -p
Enter password:
+------------------------+
|     Databases                 |
+------------------------+
| information_schema      |
| mysql                           |
| test                              |
+-----------------------+

7.6 進入 MySQL 模式[root@snort ~]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9 to server version: 5.0.22

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> show databases;
+-------------------------+
| Database                        |
+-------------------------+
| information_schema        |
| mysql                             |
| test                                 |
+-------------------------+
3 rows in set (0.00 sec)

mysql>mysql> quit;
Bye


7.7 自動啟動和關閉MySQL Server[root@snort ~]# chkconfig --level 35 mysqld on
[root@snort ~]# chkconfig --list mysqld
mysqld          0:off   1:off   2:off   3:on    4:off   5:on    6:off


8. 安裝PHP5PHP5 (在安裝OS時, 預設已安裝好PHP5) 
[root@snort ~]# rpm –qa |grep php  所以只要確認即可.

8.1 安裝PHP 模組[root@snort conf.d]# pear install –f  Image_Color
[root@snort conf.d]# pear install -f Numbers_Roman
[root@snort conf.d]# pear install –f  Numbers_Words
[root@snort conf.d]# pear install –f  Image_Canvas-alpha
[root@snort conf.d]# pear install –f  Image_Graph-0.3.0dev4.tgz
[root@snort conf.d]# pear install –f  Mail
[root@snort conf.d]# pear install –f  Mail_Mime


8.2 測試PHP5 module的方法[root@snort conf.d]# vi /var/www/html/info.php
<?
phpinfo();
?>


打開IE測試http://192.168.1.100/info.php

8.3 重啟動 Apache2 [root@snort conf.d]# service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                              [  OK  ]


9. 安裝phpMyAdmin下載網址 http://www.phpmyadmin.net/

9.1 解壓縮phpMyAdmin[root@snort darwin]# tar jxvf phpMyAdmin-2.11.10-all-languages.tar.bz2
[root@snort darwin]# mv phpMyAdmin-2.11.10-all-languages /var/www/html/phpMyAdmin
[root@snort darwin]# cd //var/www/html/phpMyAdmin
[root@snort darwin]# mv config.sample.inc.php config.inc.php
[root@snort darwin]# vi config.inc.php
內容如下
$cfg['blowfish_secret'] = '123'  任填一組密碼


9.2 打開瀏覽器http://192.168.1.100/phpMyAdmin/

輸入Mysql 資料庫的帳號及密碼即可.

10. 安裝 SNORT網址 http://www.snort.org/

10.1 解壓縮 snort[root@snort darwin]# tar zxvf snort-2.8.5.3.tar.gz
[root@snort darwin]#cd  snort-2.8.5.3

10.2 編譯/安裝 snort[root@snort darwin]# ./configure --with-mysql --with-snmp --enable-dynamicplugin  //如要使用mysql要加上--with-mysql , SNMP則是 –with-snmp
[root@snort darwin]#make && make install

10.3 新增 snort 使用者/群組[root@snort darwin]# groupadd snort
[root@snort darwin]# useradd -g snort –s /bin/nologin snort

10.4 建立/複製snort相關檔案[root@snort darwin]# mkdir /etc/snort            //snort設定檔存放位置
[root@snort darwin]# mkdir /etc/snort/rules   //放置rules地方
[root@snort darwin]# mkdir /var/log/snort     //放置snort log地方
[root@snort darwin]# cp etc/*  /etc/snort/

10.5 取得 SNORT Rules網址 http://www.snort.org/snort-rules/

10.6 解壓縮 Rules[root@snort darwin]# tar zxvf snortrules-snapshot-CURRENT.tar.gz
[root@snort darwin]# \cp -f rules/* /etc/snort/rules/     //將rules 複製到 /etc/snort/rules目錄

10.7 修改 /etc/snort/snort.conf 設定檔[root@snort darwin]# vi /etc/snort/snort.conf
var HOME_NET 192.168.1.0/24                //填偵側的網段,當然是自己的c class,當然預設值也可以
var EXTERNAL_NET !$HOME_NET      //內部網路以外
var RULE_PATH /etc/snort/rules                //設定rules所在位置
註:其餘設定值, 可根據需求適度調整

10.8 測試1- 將SNORT當協定分析器(Sniffer)來使用命令 snort [-d ] [-v] [-e] [-i]
-v: verbose 顯示到螢幕上
-d: decode 將封包的資料payload解碼
-i: 指定網路介面
-e: capture 資料連結層資訊
[root@snort darwin]# snort -dev -i eth0

10.9 測試2將SNORT當封包記錄(Logging Packets)來使用命令 snort -l dir [-h hn][-b]
-l directory snort 放置記錄的目錄
-h X.X.X.X 指定本地網段
-b 記錄使用TCPDUMP二進制格式
-r 將二進制記錄檔轉換成ASCII檔

[root@snort darwin]# snort -dev -i eth0 -l /var/log/snort/
[root@snort snort]# pwd
/var/log/snort
[root@snort snort]# ll
total 4
-rw------- 1 root root 1518 Mar 16 23:42 snort.log.1268754115
[root@snort snort]# tcpdump -X -r snort.log.1268754115
Snort 會產生二進制記錄檔 ,可與任何相容tcpdump格式的程式所讀取 , 如tcpdump 、ethereal

10.10 自動啟動Snort Daemon[root@snort snortsnarf]# vi /etc/init.d/snort
內容如下
============================================================
#!/bin/bash
# $Id$
# /etc/rc.d/init.d/snort : start or stop the SNORT Intrusion Database System
#
# Written by Lukasz Szmit <ptashek@scg.gliwice.pl>;
# modified by anstan <heracai@126.com>;
#
# Comments to support chkconfig on RedHat Linux
# chkconfig: 2345 99 20
# description: snort is very good
# set config file & path to snort executable
SNORT_PATH=/usr/local/bin
CONFIG=/etc/snort/snort.conf
# set interface
IFACE=eth0
# set GID/Group Name
SNORT_GID=snort
# other options
OPTIONS="-A fast –s -D"
# End of configuration
test -x $SNORT_PATH/snort || exit 0
case "$1" in
start)
echo "Starting Intrusion Database System: SNORT"
$SNORT_PATH/snort -c $CONFIG -i $IFACE -g $SNORT_GID $OPTIONS
#$SNORT_PATH/snort -c $CONFIG -i $IFACE $OPTIONS
if [ "`pidof $SNORT_PATH/snort`" ]; then
echo "SNORT is up and running!"
else
exit 0
fi
echo -n "."
;;
stop)
echo "Stoping Intrusion Database System: SNORT"
if [ "`pidof $SNORT_PATH/snort`" ] ; then
kill -TERM `pidof $SNORT_PATH/snort`
# Wait until the timeout
count=120
numdots=0
while ([ $count != 0 ]) do
let count=$count-1
if [ "`pidof $SNORT_PATH/snort`" ] ; then
echo -n .
let numdots=$numdots+1
sleep 1
else
count=0
fi
done
# If it's not dead yet, kill it.
if [ "`pidof $SNORT_PATH/snort`" ] ; then
echo " TIMEOUT!"
kill -KILL `$SNORT_PATH/snort`
else
case $numdots in
0) echo "." ;;
1) echo ;;
*) echo " done." ;;
esac
fi
else
echo "SNORT is not running!";
fi
;;
restart)
$0 stop
$0 start
;;
*)
echo 'Usage: /etc/init.d/snort {start|stop|restart}'
exit 1
;;
esac
exit 0
;;
========================================================

[root@snort snortsnarf]# chkconfig --add snort
[root@snort snortsnarf]# chkconfig --level 35 snort on
[root@snort snortsnarf]# service snort status
註:開機就自動啟動snort

11. 安裝BASE11.1 建立Snort資料庫[root@snort darwin]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 20 to server version: 5.0.22
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> create database snort;
mysql> grant ALL on snort.* to snort@localhost identified by 'gh8Q6prt';
mysql> quit

11.2 建立資料庫Schema[root@snort darwin]# mysql -uroot -p < /usr/local/src/snort-2.8.5.3/schemas/create_mysql snort  匯入schema
Enter password:   輸入密碼
註: schema放在剛解壓縮的snort原始目錄內

11.3 解壓縮ADODB (供php 連接snort 資料庫用)網址: http://sourceforge.net/projects/adodb/files/

11.4 解壓縮BASE網址: http://base.secureideas.net/
[root@snort darwin]# tar zxvf adodb4992.tgz
[root@snort darwin]# mv adodb /usr/local/lib  搬至 /usr/local/lib
[root@snort darwin]# tar zxvf  base-1.4.5.tar.gz   解壓base
[root@snort darwin]# mv base-1.4.5 /var/www/html/base  搬至 /var/www/html
[root@snort darwin]# chown –R apache.apache  /var/www/html/base
[root@snort darwin]# vi /etc/php.ini
內容如下
將error_reporting = E_ALL 改成如下
error_reporting = E_ALL & ~E_NOTICE
[root@snort base]# service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                              [  OK  ]

11.5 打開瀏覽器 http://192.168.1.100/base







註:如果出現上述的情形, 只要將它的php code copy至 /var/www/html/base /base_conf.php即可


OK沒問題,儘量把 /var/www/html/base目錄的內的setup delete !

[root@snort base]# rm -rf setup/

11.6 編輯snort.conf 檔案 [root@snort base]# vi /etc/snort/snort.conf 檔案
output database: log, mysql, user=snort  password=gh8Q6prt dbname=snort host=localhost   註解拿掉,修改資料庫user/password 及database name

11.7 重啟Apache2[root@snort base]# service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                              [  OK  ]

11.8 啟動Snort[root@snort snort]# service snort start    [  OK  ]

11.9 將alert加入至logrotate[root@snort snort]# vi /etc/logrotate.d/snort
/var/log/snort/alert {
    daily
    rotate 7
    missingok
    compress
    sharedscripts
    postrotate
        /etc/init.d/snort restart 1>/dev/null || true
    endscript
}

11.10 測試Snort可以使用nmap , nessus , X-scan..等等工具對該系統進行掃瞄, 以產生告警記錄.

使用nmap 工具測試


11.11 加入網頁安全驗證
11.11.1新增密碼檔
[root@snort httpd]# touch /etc/httpd/conf/users_password
[root@snort httpd]# cd /etc/httpd/conf
[root@snort conf]# htpasswd -c users_password admin  新增使用者
New password:  輸入使用者密碼
Re-type new password:  再次確認密碼
Adding password for user admin

11.11.2 編輯httpd.conf 檔案[root@snort conf]# vi /etc/httpd/conf/httpd.conf
在最後面加上以下句子
<Directory /var/www/html/base>
AuthName "Please Enter username and password:"
AuthType basic
AuthUserFile /etc/httpd/conf/users_password
Require user  admin
Options  FollowSymLinks
AllowOverride None
</Directory>

11.12 Snort 自訂規則格式
1. 回應動作: alert, log, pass, activate, dynamic, drop, reject, sdrop
2. 協定: ip, tcp,udp, icmp
3. 來源IP,來源Port
4. 方向運算子: ->,<>
5. 目的IP,目的Port
6. 規則選項
7. msg:”輸出訊息”;
8. content:”|16進位碼|”; 或content:”文字”;
9. sid:1000001;

11.13 Snort 規則範例
alert udp any any<>$HOME_NET any (msg:”udp  ids/dns-version-query”;content:”version”;)  //查詢網內所有查詢DNS版本的udp行為
alert tcp any any->any 21 (msg:”Pass detected”; flow:to_server,established;content:”\50 41 53 53\”;sid:1000001;)  //查詢FTP 流量中含有Pass字串
註: 自訂snort規則蠻重要的, 要多用點心在這方面

 

2011年1月25日 星期二

Linux - 編譯核心

解壓縮至 /usr/src目錄
[root@www 下載]# tar jxvf linux-2.6.37.tar.bz2 -C /usr/src/
[root@www ]# cd /usr/src/linux-2.6.37/
[root@www linux-2.6.37]# cp /boot/config-2.6.35.6-45.fc14.i686 .config

重新設定新增功能模組
[root@www linux-2.6.37]# make menuconfig
[root@www linux-2.6.37]# cp .config /boot/config-`uname -r`

編譯 / 安裝核心及模組
[root@www linux-2.6.37]# make
[root@www linux-2.6.37]# make modules_install
[root@www linux-2.6.37]# make install

查看開機選項
[root@www ]# cat /boot/grub/grub.conf
default=1
timeout=0
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu

title Fedora (2.6.37)
    root (hd0,0)
    kernel /vmlinuz-2.6.37 ro root=UUID=1b1c48c1-e028-4df1-9e14-7ee2a175d20d rd_NO_LUKS rd_NO_LVM rd_NO_MD rd_NO_DM LANG=zh_TW.UTF-8 KEYTABLE=us rhgb quiet
    initrd /initramfs-2.6.37.img

title Fedora (2.6.35.6-45.fc14.i686)
    root (hd0,0)
    kernel /vmlinuz-2.6.35.6-45.fc14.i686 ro root=UUID=1b1c48c1-e028-4df1-9e14-7ee2a175d20d rd_NO_LUKS rd_NO_LVM rd_NO_MD rd_NO_DM LANG=zh_TW.UTF-8 KEYTABLE=us rhgb quiet
    initrd /initramfs-2.6.35.6-45.fc14.i686.img

查看目前核心否最新[root@www]# uname -a
Linux www.catchlink.com 2.6.37 #1 SMP Tue Jan 25 13:39:14 CST 2011 i686 i686 i386 GNU/Linux

Apache+MySQL+PHP - source安裝

環境RedHat AS5 for x86

確認所需套件zlib-devel.*  openssl-devel.*  libxml2-devel.*  flex 
bison  gcc  automake  autoconf  apache2  mysql  php  php-gd  php-mysql  php-pear  phpMyAdmin


例如:  # rpm -qa |grep zlib-devel
#zlib-devel-1.2.3-18.fc9.i386
以此類推查詢,看系統是否缺少某一套件

安裝套件Ex: 1. 原始檔安裝 libxml package
 下載網址 ftp://xmlsoft.org/ 

# tar zxvf libxml2-2.7.2.tar.gz
# cd libxml2-2.7.2
#./configure
# make && make install

 2. yum安裝 libxml2  package
# yum install –y  libxml2-devel.*
3. rpm安裝 libxml2  package
網址: http://www.rpmfind.net/linux/rpm2html
# rpm –ivh libxml2-2.7.2-1.fc10.i386.rpm

安裝Apache2下載網址 http://httpd.apache.org/download.cgi

解壓縮/編譯 Apache2# tar jxvf httpd-2.2.15.tar.bz2
# cd cd httpd-2.2.15
# ./configure --prefix=/usr/local/apache2 --enable-so --enable-ssl=static --enable-mods-shared=all --enable-modules=most --with-mpm=worker
# make && make install

編輯配置httpd.conf檔案# vi /usr/local/apache2/conf/httpd.conf
User apache   //Apache 的使用者及群組
Group apache
ServerAdmin darwin@catchlink.com  //管理E-mail位址
ServerName  192.168.1.246:80 //伺服器位址:80

<IfModule dir_module>
    DirectoryIndex index.html index.php index.php3 index.htm
</IfModule>

啟動apache2 # /usr/local/apache2/bin/apachectl start  //啟動Apache2
# ps -ef |grep httpd
root      4734     1  0 10:43 ?        00:00:00 /usr/local/apache2/bin/httpd -k start
apache    4735  4734  0 10:43 ?        00:00:00 /usr/local/apache2/bin/httpd -k start
apache    4736  4734  0 10:43 ?        00:00:00 /usr/local/apache2/bin/httpd -k start
apache    4739  4734  0 10:43 ?        00:00:00 /usr/local/apache2/bin/httpd -k start
apache    4743  4734  0 10:43 ?        00:00:00 /usr/local/apache2/bin/httpd -k start
apache    4822  4734  0 10:43 ?        00:00:00 /usr/local/apache2/bin/httpd -k start


測試網頁 http://webserver IP/index.html


                                                                        出現 It Work!代表成功了

# /usr/local/apache2/bin/apachectl stop   //Apach2停止

調整Apache效能
編輯httpd-default檔案
# vi /usr/local/apache2/conf/extra/httpd-default.conf
內容如下
Timeout 60
KeepAlive On
MaxKeepAliveRequests 800
KeepAliveTimeout 5
HostnameLookups Off


編輯httpd-mpm檔案
bash-3.00# vi /usr/local/apache2/conf/extra/httpd-mpm.conf
內容如下
<IfModule mpm_worker_module>
    StartServers          2
    MaxClients          800
    MinSpareThreads      25
    MaxSpareThreads      100
    ThreadsPerChild      50
    MaxRequestsPerChild  100
</IfModule>

修改httpd.conf檔案#vi /usr/local/apache2/conf/httpd.conf
將httpd-mpm.conf及httpd-default註解取消 , 沒有此2行的就自行加入
Include conf/extra/httpd-mpm.conf
Include conf/extra/httpd-default.conf

自動啟動和關閉Apache Server# ln –s /usr/local/apache2/bin/apachectl  /etc/rc3.d/S85httpd
# ln –s /usr/local/apache2/bin/apachectl  /etc/rc0.d/K85httpd
# ln –s /usr/local/apache2/bin/apachectl  /etc/rc1.d/K85httpd
# ln -s /usr/local/apache2/bin/apachectl  /etc/rc2.d/K85httpd


安裝MySQL5
下載網址 http://dev.mysql.com/downloads/

新增mysql使用者及群組# groupadd mysql
# useradd –g mysql mysql

解壓縮/編譯 MYSQL5.1.44# tar zxvf mysql-5.1.44.tar.gz
# cd mysql-5.1.44
# ./configure --prefix=/usr/local/mysql5

安裝 mysql5.1.44# make && make install
# /usr/local/mysql5/bin/mysql_install_db  --user=mysql
# cp /usr/local/mysq5/share/mysql/my-medium.cnf /etc/my.cnf
# cp /usr/local/mysq5/share/mysql/mysql.server /etc/init.d/mysqld
# chown -R mysql:mysql /usr/local/mysql5
# /usr/local/mysql5/bin/mysqld_safe  --user= mysql  &
# export PATH=$PATH:/usr/local/mysql5/bin
# export LD_LIBRARY_PATH=/usr/local/mysql5/lib:/lib:/usr/local/lib:/var/lib

查看mysql Mysql預設使用的Port是3306
# netstat -na | grep 3306
      *.3306               *.*                0      0 49152      0 LISTEN

設定 MySQL 的 root user密碼  # cd /usr/local/mysql5/bin/
# ./mysqladmin -u root password gh8Q6prt
# ./mysqladmin -u root -h `hostname` password 'new-password' –p

測試 MySQL Server# mysqladmin version -p
Enter password:     //輸入剛加入的root 密碼

[root@dns local]# mysqladmin version -p
Enter password:
mysqladmin  Ver 8.42 Distrib 5.1.44, for pc-linux-gnu on i686
Copyright 2000-2008 MySQL AB, 2008 Sun Microsystems, Inc.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL license

Server version          5.1.44-log
Protocol version        10
Connection              Localhost via UNIX socket
UNIX socket             /tmp/mysql.sock
Uptime:                 6 min 7 sec

Threads: 1  Questions: 9  Slow queries: 0  Opens: 15  Flush tables: 1  Open tables: 8  Queries per second avg: 0.24

如出現上面的有關mysql5相關資訊 , 則表示安裝成功!

查看mysql 內所有資料庫
 # ./mysqlshow -p
 Enter password:   輸入root 密碼
+--------------------+
|     Databases         |
+--------------------+
| information_schema |
| mysql                       |
| test                           |
+----------------------+

進入 mysql 模式# mysql -uroot -p
Enter password:   //輸入root 密碼
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 5.1.44-log Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database               |
+--------------------+
| information_schema |
| mysql                       |
| test                           |
+----------------------+
3 rows in set (0.00 sec)
mysql>
3 rows in set (0.00 sec)
mysql> quit;
Bye

自動啟動和關閉MySQL Server# chkconfig --add mysqld
# service mysqld restart
# chkconfig mysqld on

PHP5下載網址 http://www.php.net/
#  tar jxvf php-5.2.13.tar.bz2
#  cd php-5.2.13

編譯及安裝php # ./configure  --prefix=/usr/local/php5 --with-apxs2=/usr/local/apache2/bin/apxs
--with-mysql=/usr/local/mysql5 –with-gd –with-zlib-dir
# make && make install

將php.ini設定檔copy至/usr/local/php5/lib目錄內
#cp php.ini-dist /usr/local/php5/lib/php.ini

安裝php 模組#pear install –f  Image_Color
#pear install –f  Numbers_Roman
#pear install –f  Numbers_Words
#pear install –f  Image_Canvas-alpha
#pear install –f  Image_Graph-0.3.0dev4.tgz
#pear install –f  Mail
#pear install –f  Mail-Mime

編輯Apache 設定檔 , 讓Apache可以看得懂PHP Script 並使PHP模組去解析它們
# vi /usr/local/apache2/conf/httpd.conf

檢查所下, 如沒有自行加入
DirectoryIndex index.html index.php index.php3 index.phtml
LoadModule php5_module        modules/libphp5.so
AddType application/x-httpd-php-source .phps
AddType application/x-httpd-php .php .phtml

測試php5 module的方法# cd /usr/local/apache2/htdocs
# vi info.php
<?
phpinfo();
?>

打開IE測試:http://192.168.1.254/info.php

重啟動 Apache2 # usr/local/apache2/bin/apachectl restart //重新啟動Apache2

安裝 phpMyAdmin下載網址 http://www.phpmyadmin.net/

解壓縮phpMyAdmin#tar jxvf phpMyAdmin-3.3.0-all-languages.tar.bz2
# mv phpMyAdmin-3.3.0-all-languages /usr/local/apache2/htdocs/phpMyAdmin


打開瀏覽器



 
http://192.168.1.254/phpMyAdmin/

2011年1月23日 星期日

iptables - 命令使用

列出table
iptables [-t table] -L [-nv]
參數:
-t table:選擇table,有filter及nat,mangle,預設為filter
-L:列出table規則
-n:不進行IP與HOSTNAME的反查
-v:列出更多的資訊

刪除
iptables [-t table] [-FXZ]
-F:清除所有的已訂定的規則
-X:殺掉所有使用者自訂的chain
-Z:將所有的chain的計數與流量統計都歸0
-N:自訂一條新的chain

存檔和讀檔
iptables-save > file :將iptables的規則設定儲存在file的檔案裡
iptables-restore < file :將iptables的規則設定檔讀進來

定義chain的政策
iptables [-t table] -P chain value
-P:定義政策
-P chain value:可選擇的chain有INPUT,OUPUT,FORWARD,而value有ACCEPT,DROP
   ex:iptables -P INPUT DROP  則所有進入的封包都會被丢棄
若table是nat,則chain有OUTPUT,POSTROUTING,PREROUTING
若table是mangle,則chain有PREROUTING,POSTROUTING,INPUT,OUTPUT

封包進入時的經過的chain順序為
1mangle(prerouting)>nat(prerouting)>依是否轉遞封包到2a或2b
 2a進行封包轉遞 mangle(forward)>filter(forward)>到順序3
 2b無,封包進入主機 mangle(input)>filter(input)>主機,路由判斷>mangle(output)>nat(output)>filter(output)>到順序3
3mangle(postrouting)>nat(postrouting)

.........................................................................................................

設定chain的規則
iptables -[A|I] chain [-io] [-p] [-s] [-d] [-j]
-A chain:附加一條規則在後面
-I chain:差入一條規則在前面
-R chain n:改變第n條規則
-D chain n:刪除第n條規則
-D 部份rule :刪除第一個符合rule的值
-D 完整rule :刪除和rule一樣的值
-i interface:封包進入的interface,需與input配合,ex:lo,eth0
-o interface:同上,但需與output配合
-p protocol:設定規則適用於那個protocol,可選tcp,udp,icmp,all
若protocol是tcp或udp則可用以下參數
-s source:設定來源,source可以是ip,ip/mask,網域,若在sourec前加!表示拒絕
-d destination:設定目標,target的值同source
--dport value1:value2 :指定目標port或程式名稱,port號可選擇一連續範圍,需搭配-p
--sport value1:value2 :同上,但是指定來源,需搭配-p
若protocol是tcp可用以下參數
! -syn  不是syn封包
--syn tcp的syn位元被開啟,也就是syn封包
--tcp-flags value 指定tcp的flag,value可選syn,ack,fin,rst,urg,psh,all,none
    若protocol是icmp可用以下參數
--icmp-type type:指定icmp的type,ex:8=echo request
-j target:設定此規則要如何處理,可選ACCEPT,DROP,
TOS,LOG,自訂chain
 ex:iptables -A INPUT -i eth0 -s 192.168.1.10 -j DROP    將從192.168.1.10進到eth0介面的封包drop
ex:iptables -R INPUT 1 -i ppp0 -p tcp --sport 80 -j DROP  將第一個規則改成,拒絕任何來源為port80進入ppp0的界面
ex:iptables -I INPUT -i ppp0 -p tcp --dport 80 -j ACCEPT 封包的目標port若是80而且要進入ppp0介面則允許通行
ex:iptables -A INPUT -p icmp --icmp-type 8 -j DROP  不接受ping的回應

若target為log,可用以下參數
--log-level value 要記錄到syslog的等級,等級可參考syslog.conf
--log-prefix value 會在每筆log前加指定字串
--log-tcp-options 記錄tcp header相關訊息
--log-ip-options 記錄ip header相關訊息

ps:log會記錄到/var/log/messages
ps:若設定--log-level debug,並在syslog.conf內加入kern.=debug /var/log/iptableslog,重啟syslog則可將log記在iptableslog內
ps:iptables log分析器 http://iptablelog.sourceforge.net/ 

ex:iptables -I INPUT -p tcp --dport 80 -j LOG --log-prefix=flog 若符合則記錄到log中,並在每筆記錄前加flog  若target為tos,可用以下參數
     --set-tos Mzximize-Throughput  讓通過量最大
     --set-tos Minimize-Delay 可獲得更多反應

ps:
-j target的其他參數
RETURN:不使用目前chain規則,且直接返回並到下個chain或其他位址
結束在目前chain中的過濾程序,返回主chain繼續過濾
ps:若把自訂chain看做副程式,那return就相當於提早結束副程式並返回到主程式中
QUEUE:將packet送到指定的應用程式處理     
MARK:將packet標上某個編號,給後續過濾的動作參考
ex:iptables -t mangle -A PREROUTING -p tcp --dport 80 -j MARK --set-mark 2
REJECT:阻擋該packet,並回傳訊息

..............................

使用模組
iptables -[A|I] chain -m module --module [-j]
module有:
1.state(狀態模組),用法:
-m state --state value1,value2 :指定封包的狀態,value有
INVALID:無效的封包,例如資料破損的封包狀態
ESTABLISHED:已經連線成功的連線狀態
NEW:想要新建立連線的封包狀態,就是第一個來的封包,tcp連線開始會先送syn封包
RELATED:最常用,表示此封包是與我們主機發送出去的封包有關
 ex:iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 只要己建立或相關封包就給予通過
ex:iptables -A INPUT -p tcp ! -syn -m state --state NEW -j DORP 第一個來的tcp封包不是syn則拒絕

2.mac(網路卡硬體位置),用法:
-m mac --mac-source value :指定主機(value為網卡卡號)
ex:iptables -A INPUT -m mac --mac-source aa:bb:cc:dd:ee:ff -j ACCEPT 若要進入此網卡則可通行
3.
limit(限制),用法
-m limit --limit value/unit 比對某段時間內封包的平均流量,unit有day,hour,minute,second
ex:iptables -A INPUT -m limit --limit 3/hour 每小時平均只能處理3個封包
-m limit --limit-burst 若同時進來多個封包,只有少數幾個能放入緩衝區,其餘丟棄
ex:iptables -A INPUT -m limit --limit-burst 5 若同時進來多個封包,只有5個封包放入緩衝區,其餘丟棄
ex:iptables -A INPUT -p icmp --icmp-type 8 -m limit --limit 6/m --limit burst 10 -j ACCEPT 若每分鐘超過10個icmp封包則每分鐘只能進來6個icmp封包

4.mark用法
-m mark --mark value 比對此封包被-j MARK --set-mark的value
ex:iptables -t mangle -A INPUT -m mark --mark 1000 比對封包是否被標上1000的編號

.............................

核心的網路功能
一個功能表示成一個檔案,檔案內的值設成1表示啟動

在此目錄/proc/sys/net/ipv4/有:
tcp_syncookies  避免SYN Flooding 的 DoS 攻擊
tcp_max_syn_backlog TCP封包連線最佳化
tcp_synack_retries TCP封包連線最佳化
tcp_abort_on_overflow TCP封包連線最佳化
icmp_echo_ignore_broadcasts 只勿略ping broadcast,可避免ping flooding及ping of death
icmp_echo_ignore_all 全部的ping都不回應,缺點是難判斷主機是否在線上
icmp_ignore_bogus_error_responses 啟動忽略記錄功能可避免一些假回應對syslog進行DoS攻擊
tcp_ecn 自動擁塞通知,並非所有ip支援,建議關掉

在此目錄/proc/sys/net/ipv4/conf/網路介面/*有:
rp_filter 逆向路徑過濾,將不合理的封包丟棄,可避免攻擊者偽裝成信任網域來欺騙防火牆
log_martians 將不合法的ip紀錄在/var/log/messages
ex:echo "1" > /proc/sys/net/ipv4/tcp_syncookies 啟動阻擋syn flooding機制
accept_redirects 建議關閉
send_redirects 建議關閉

......................................................................................................................

關於nat
相關核心網路功能有:
/proc/sys/net/ipv4/ip_forward  打開Linux核心的封包轉遞能力,讓linux具router功能
ps:可在/etc/sysctl.conf內加入net.ipv4.ip_forward=1,在執行sysctl -p讓設定立即生效

使用nat表的-j action如果是
 MASQUERADE,表示偽裝ip
 SNAT --to,表示直接修改ip表頭,需使用postrouting鏈
 DNAT --to,表示直接修改ip表頭,需使用prerouting鏈
 REDICRECT --to-ports,進行port轉換
ex:iptables -t nat -A POSTROUTING -s 192.168.1.2 -o eth1 -j MASQUERADE //若封包從192.168.1.2來且要從eth1介面出去,則將封包偽裝
ex:iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to 192.168.200.250  //把要從eth1介面出去的封包,封包來源改為192.168.200.250
ex:iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 80 -j DNAT --to 192.168.1.210:80 
//把進入eth1介面且目標埠為80的封包,封包目標改為192.168.1.210:80
ex:iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080 //若封包進來的目標埠為80,則改為8080

nat主機需設定的有
echo "1" > /proc/sys/net/ipv4/ip_forward
modprobe ip_tables
modprobe ip_nat_ftp
modprobe ip_nat_irc
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_conntrack_irc
若ppp0介面對外,且對內網路為192.168.1.0/24
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.1.0/24 -j MASQUERADE
ps:以上設定都在nat的對內網路己連線,且預設閘道為外網介面的情況下
ps:要透過nat的主機,client端閘道要設nat主機,通常dns也需要設定

....................................

常用範例

basic mode:
使用iptables時建議開啟這些功能
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 1 > /proc/sys/net/ipv4/tcp_max_syn_backlog
echo 1 > /proc/sys/net/ipv4/tcp_synack_retries
echo 1 > /proc/sys/net/ipv4/tcp_abort_on_overflow
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 1 > /proc/sys/net/ipv4/conf/all/log_martians

client mode:
client端電腦建議設定方式
ps:假設連外網卡為eth0
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
任何主動連線到client端電腦都會被拒絕,除非是由client端發起的連線或已存在的連線才准許通過

使用forward的strict nat mode:
ps:假設nat己設定好可正常使用,連外網卡為eth0
iptables -P FORWARD DROP
iptables -I FORWARD -o eth0 -p tcp --dport 80 -j ACCEPT
iptables -I FORWARD -o eth0 -p tcp --dport 443 -j ACCEPT
iptables -I FORWARD -o eth0 -p tcp --dport 53 -j ACCEPT
iptables -I FORWARD -o eth0 -p udp --dport 53 -j ACCEPT
iptables -I FORWARD -o eth0 -p tcp --dport 21 -j ACCEPT
iptables -I FORWARD -o eth0 -p tcp --dport 20 -j ACCEPT
iptables -A FORWARD -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
使用者只可瀏覽網頁以及ftp
iptables -A FORWARD -o eth0 -j LOG --log-prefix=natdeny
記錄使用者使用那些port被擋掉,執行cat /var/log/message | grep natdeny可思考那些port可開放

使用mangle的strict nat mode
ps:假設nat己設定好可正常使用,且lan介面為eth0,wan介面為ppp0
iptables -t mangle -P PREROUTING DROP
iptables -t mangle -I PREROUTING -i lo -j ACCEPT
iptables -t mangle -I PREROUTING -i eth0 -p udp --dport 53 -j ACCEPT
iptables -t mangle -I PREROUTING -i eth0 -p tcp --dport 53 -j ACCEPT
iptables -t mangle -I PREROUTING -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -t mangle -I PREROUTING -i eth0 -p tcp --dport 443 -j ACCEPT
iptables -t mangle -I PREROUTING -i eth0 -p tcp --dport 20 -j ACCEPT
iptables -t mangle -I PREROUTING -i eth0 -p tcp --dport 21 -j ACCEPT
iptables -t mangle -I PREROUTING -i eth0 -p tcp --dport 22 -j ACCEPT
iptables -t mangle -A PREROUTING -i ppp0 -m state --state RELATED,ESTABLISHED -j ACCEPT
使用者只可瀏覽網頁以及ftp
iptables -t mangle -A PREROUTING -i eth0 -j LOG --log-prefix=natdeny
記錄使用者使用那些port被擋掉,執行cat /var/log/message | grep natdeny可思考那些port可開放

server mode
假設進入內部的介面為eth0
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -I OUTPUT -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
#若有web server要加入
iptables -I INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -i eth0 -p tcp --dport 443 -j ACCEPT
#若有ftp server要加入
iptables -I INPUT -i eth0 -p tcp --dport 20 -j ACCEPT
iptables -I INPUT -i eth0 -p tcp --dport 21 -j ACCEPT
#若有dns server要加入
iptables -I INPUT -i eth0 -p tcp --dport 53 -j ACCEPT
iptables -I INPUT -i eth0 -p udp --dport 53 -j ACCEPT
#若有mail server要加入
iptables -I OUTPUT -i eth0 -p tcp --dport 25 -j ACCEPT
iptables -I OUTPUT -o eth0 -p tcp --dport 25 -j ACCEPT
#若要用ssh管理要加入
iptables -I INPUT -i eth0 -p tcp --dport 22 -j ACCEPT



轉貼文件(我從別的網站copy來的)
http://systw.net/note/af/sblog/more.php?id=82
 

hping - 命令使用

hping是一個網路工具,可以用來測試firewall, 網路效能, 觀察遠端主機的回應狀態,包括TCP,UDP,ICMP!


rpm 套件: http://packages.sw.be/hping/
#rpm -ivh hping-2.0.0-1.rc3.2.el5.rf.i386.rpm


編譯/安裝
#yum -y install gcc tcl tcl-devel libpcap libpcap-devel
#mkdir /usr/local/include/net/
#ln -sf /usr/include/pcap-bpf.h /usr/local/include/net/bpf.h
#ln -sf /usr/local/share/man /usr/local/man
#wget http://www.hping.org/hping3-20051105.tar.gz
#tar xvfz hping3-20051105.tar.gz
#cd hping3-20051105
#./configure
#make
# make strip
#make install

用法
1. [root@www ~]# hping www.yahoo.com.tw -1 -c 3 
HPING www.yahoo.com.tw (eth0 203.84.219.114): icmp mode set, 28 headers + 0 data bytes
len=46 ip=203.84.219.114 ttl=52 id=56301 icmp_seq=0 rtt=112.0 ms
len=46 ip=203.84.219.114 ttl=52 id=57204 icmp_seq=1 rtt=112.5 ms
len=46 ip=203.84.219.114 ttl=52 id=58226 icmp_seq=2 rtt=111.7 ms

--- www.yahoo.com.tw hping statistic ---
3 packets tramitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 111.7/112.1/112.5 ms

註: -c表示次數,-1(數字)表示icmp方式


2. [root@www ~]# hping -S www.yahoo.com.tw -p 80
HPING www.yahoo.com.tw (eth0 203.84.219.114): S set, 40 headers + 0 data bytes
len=46 ip=203.84.219.114 ttl=51 DF id=0 sport=80 flags=SA seq=0 win=5840 rtt=113.2 ms
len=46 ip=203.84.219.114 ttl=51 DF id=0 sport=80 flags=SA seq=1 win=5840 rtt=111.7 ms
len=46 ip=203.84.219.114 ttl=51 DF id=0 sport=80 flags=SA seq=2 win=5840 rtt=110.8 ms
註: -S表示syn flag,-p 80表示偵測http(80)是否有開啟

3. [root@www ~]# hping -S www.yahoo.com.tw -p ++22
註: ++22 表示從22開始scan,自動遞增掃描

4. [root@www ~]# hping 192.168.11.200 -S -p 22 -c 5 -a 10.10.10.1
註: -a表示 偽冒ip 10.10.10.1

5. [root@www ~]# hping 192.168.11.200 -S -p 22 -i u1000
註: -i表示interval u表示microseconds為單位

6. [root@www ~]# hping 192.168.11.2 -a 10.10.10.1 -s 1111 -p 80
註: -s表示source port; 表示使用偽冒的ip:10.10.10.1 port:1111對目標主機192.168.11.2 port80 scan



其它
7.不正常TCP Flag組合封包(每秒10個封包)
7.1 SYN+FIN
hping 目標主機IP –i u100000 –S –F –a 偽造來源IP
7.2 X’mas
hping 目標主機IP –i u100000 –F –S –R –P –A –U –a 偽造來源IP

偽造IP的UDP封包
hping目標主機IP –i u100000 –2 –a 偽造來源IP

偽造IP內含CodeRed封包
hping 目標主機IP –i u100000 –d [封包datasize] –E [filename] –a [偽造來源IP]

有興趣可自行man hping

Linux - 管理使用者命令


查看新增使用者部份預設值
[root@~]# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

[root@~]# useradd -D -b /home2 -s /bin/csh //可以自行設定變更家目錄及shell
[root@~]# useradd -D -e 2012-01-01 //設定新使用者於20120101失效

例子1 新增使用者部份
[root@~]# groupadd -g 1001 mis //建立MIS 群組
[root@~]# groupadd -g 1002 sales //建立SALE群組
[root@/]# useradd -u 5001 -g 10 darwin //新增使用者指定uidgid
[root@/]# id darwin //查看使用者uidgid
uid=5001(darwin) gid=10(wheel) groups=10(wheel)

[root@/]# useradd -d /home/darwinyang darwin //指定使用者家目錄
[root@/]# useradd -G mis,sales darwin //指定附屬群組missales
[root@~]# useradd -e 2011-01-23 darwin //新增使用者至20110113失效
[root@~]# useradd -s /sbin/nologin darwin //使用者無法登入系統
[root@~]# useradd -u 5002 -g 10 -G mis,sales -M test //不建立家目錄

例子2 修改使用者部份
[root@~]# usermod -L darwin //鎖定使用者
[root@~]# usermod -U darwin //解除鎖定使用者

相同於 password指令
[root@~]# passwd -l darwin //鎖定使用者
Locking password for user darwin.
passwd: Success
[root@~]# passwd -u darwin //解除鎖定使用者
Unlocking password for user darwin.
passwd: Success.

[root@~]# chsh -s /bin/csh darwin //指定使用者變更shell,後面如果沒帶使用者的話,是變更自己shell

[root@~]# chfn -f "Darwin Yang" -o "A-01" -h 123-666-888 -p 123-666-000 darwin
註: 指定使用者變更finger, 如果後面沒有帶使用者的話,是變更自己finger
-f :表示全名
-o : office 房間號碼
-h : home tel number
-p : office tel number

[root@~]# finger darwin //finger指令查看
Login: darwin Name: Darwin Yang
Directory: /home/darwin Shell: /bin/bash
Office: A-01, 123-666-000 Home Phone: 123-666-888
Never logged in.
No mail.
No Plan.


例子2 刪除使用者部份
[root@~]# userdel -r darwin //剛除使用者; -r 表示連家目錄,mailbox 都刪除

例子3 passwd命令部份
[root@~]# passwd -n 2 darwin //最少必須相隔幾天才能改變密碼

[root@~]# passwd -x 100 darwin //最多必須相隔幾天才能改變密碼

[root@~]# passwd -w 10 darwin //在密碼將要過期之前多少天會發出警告

[root@~]# passwd -i 14 darwin //從密碼開始過期至失效天數

[root@~]# chage -l darwin
最近一次密碼修改時間 : 123, 2011
密碼過期 : 503, 2011
密碼失效 : 517, 2011
帳戶過期 : 101, 2012
最少必須相隔幾天才能改變密碼 :2
最多必須相隔幾天才能改變密碼 :100
在密碼將要過期之前多少天會發出警告 :10

例子4 chage命令部份
[root@~]# chage -l darwin //查看使用者密碼狀態

最近一次密碼修改時間 : 123, 2011
密碼過期 : 503, 2011
密碼失效 : 612, 2011
帳戶過期 : 101, 2012
最少必須相隔幾天才能改變密碼 :2
最多必須相隔幾天才能改變密碼 :100
在密碼將要過期之前多少天會發出警告 :10

[root@~]# chage -d 5 darwin //強制密碼5天後過期
[root@~]# chage -d 0 darwin //強制下次登入時變更密碼

例子5 群組- 新增/刪除/修改部份
root@~]# groupadd -g 1001 mis //建立MIS 群組
[root@~]# groupadd -o -g 1001 mis-2 //用現有的gid 建立另一新群組名
[root@~]# groupadd -r admin //建立群組(gid小於499)
[root@~]# groupmod -n IT mis //mis群組名變更為IT群組名
[root@~]# groupdel IT //刪除IT 群組

[root@~]# groups darwin
darwin : wheel mis sales

2011年1月21日 星期五

Linux - syslog詳解

我們可以借助syslog函數將消息寫入到 /var/log/messages檔。syslogd(系統日誌守護進程)會監控程序提交的消息並對其進行處理。klogd(內核日誌守護進程)負責監控內核提交的消息,並將內核消息記錄到 /var/log/messages。二者協助記錄日誌消息。每次啟動linux時,這兩個守護進程都會由 /etc/rc.d/init.d中的初始化腳本啟動。

#vi /etc/syslog.conf  daemon.info    /var/log/messages
syslog.conf檔中每一行包括以下內容:

 選擇器
用於表明應該記錄哪些消息的一組單詞。包括設備(用於指定選擇哪種類型程式的代碼,即生成該消息的程式類別)和優先順序(又能夠於指定選擇記錄的消息類型,更確切的說是表明該消息所代表事件的嚴重程度)。

   動作
用於指定sysogd接收到與選擇標準相匹配的消息時應該執行的動作,通常可以使消息要寫入的檔案名,或應該顯示該消息的機器的用戶名。

設備

         設備描述
         設備名
來自login等使用者身份驗證類程式的消息
  auth
特殊目的(私有)使用者身份驗證消息
  auth-priv
來自cron程式的消息(用於控制自動化得,調度後的任務)
  cron
來自未在此處列出的所有標準守護進程或伺服器的消息
  deamon
內核消息(由klogd捕捉)
  kern
印表伺服器消息
  lpr
郵件伺服器消息(來自mail transfer agent
  mail
新聞伺服器消息
  news
關於系統登錄進程本身的消息
  syslog
來自終端使用者所啟動程式的消息
  user
來自uucp程式的消息
  uucp
八個特定用途的類別資訊,linux銷售商和程式設計人員可能需要使用這些消息來定義通常類別資訊之外的特定需求
  local0local7


優先順序

         優先順序描述
      優先順序名
無優先順序
  none
調試信息
  debug
關於程式當前狀態的報告消息
  info
程式運行中產生了值得注意的事件
  notice
程式中存在潛在問題的警告資訊
  waring
程式存在錯誤的通告
  err
錯誤消息,可能會導致程式關閉的事件
  crit
嚴重錯誤消息,會導致程式關閉並可能影響其他程式
  alert
發生嚴重事件,並有導致系統崩潰的潛在危險
  emerg


 簡單動作大概如下:
將消息寫入某終端,該終端可以為從/dev/tty1/dev/tty6的標準終端名,也可以為控制台設備,比如/dev/console
將消息寫入到指定使用者清單中當前已登錄使用者的電腦螢幕。
將消息寫入遠端系統上的日誌檔,這是通過在動作中使用符號@實現的。

下面給出一些例子:
#vi /etc/syslog.conf authpriv.*                   /var/log/secure

將私有使用者驗證的消息對於任何優先順序寫入/var/log/messages.
*.info ;main.none ;authpriv.none     /var/log/messages
匹配來自任何設備並且優先順序為info(或更高)的消息,但來自mail的所有消息都被排除。
最後,在對syslog.conf修改完成後,記得通知syslogdklogd重新讀取該設定檔。

#service syslog restart