欢迎光临
我们一直在努力

使用AIDE监控Linux系统文件入侵检测

u22e阅读(3702)

AIDE 简介

  • AIDE(Advanced Intrusion Detection Environment,高级入侵检测环境)是个入侵检测工具,主要用途是检查文档的完整性。
  • 安装和配置基于主机的IDS(入侵检测系统)“AIDE”(高级入侵检测环境)

安装

[root@u22e.com ~]# yum -y install aide

修改配置文件

vim /etc/aide.conf

# Example configuration file for AIDE.

@@define DBDIR /var/lib/aide #基准数据库目录
@@define LOGDIR /var/log/aide #日志目录

# The location of the database to be read.
database=file:@@{DBDIR}/aide.db.gz #基础数据库文件

# The location of the database to be written.
#database_out=sql:host:port:database:login_name:passwd:table
#database_out=file:aide.db.new
database_out=file:@@{DBDIR}/aide.db.new.gz #更新数据库文件

# Whether to gzip the output to database
gzip_dbout=yes

# Default.
verbose=5

report_url=file:@@{LOGDIR}/aide.log
report_url=stdout
#report_url=stderr
#NOT IMPLEMENTED report_url=mailto:root@foo.com
#NOT IMPLEMENTED report_url=syslog:LOG_AUTH

# These are the default rules.
#
#p:      permissions
#i:      inode:
#n:      number of links
#u:      user
#g:      group
#s:      size
#b:      block count
#m:      mtime
#a:      atime
#c:      ctime
#S:      check for growing size
#acl:           Access Control Lists
#selinux        SELinux security context
#xattrs:        Extended file attributes
#md5:    md5 checksum
#sha1:   sha1 checksum
#sha256:        sha256 checksum
#sha512:        sha512 checksum
#rmd160: rmd160 checksum
#tiger:  tiger checksum

#haval:  haval checksum (MHASH only)
#gost:   gost checksum (MHASH only)
#crc32:  crc32 checksum (MHASH only)
#whirlpool:     whirlpool checksum (MHASH only)

#R:             p+i+n+u+g+s+m+c+acl+selinux+xattrs+md5
#L:             p+i+n+u+g+acl+selinux+xattrs
#E:             Empty group
#>:             Growing logfile p+u+g+i+n+S+acl+selinux+xattrs
R = p+i+n+u+g+s+m+c+acl+selinux+xattrs+md5
L = p+i+n+u+g+acl+selinux+xattrs
> = p+u+g+i+n+S+acl+selinux+xattrs


# You can create custom rules like this.
# With MHASH...
# ALLXTRAHASHES = sha1+rmd160+sha256+sha512+whirlpool+tiger+haval+gost+crc32
ALLXTRAHASHES = sha1+rmd160+sha256+sha512+tiger
# Everything but access time (Ie. all changes)
EVERYTHING = R+ALLXTRAHASHES

# Sane, with multiple hashes
# NORMAL = R+rmd160+sha256+whirlpool
NORMAL = R+rmd160+sha256

# For directories, don't bother doing hashes
DIR = p+i+n+u+g+acl+selinux+xattrs

# Access control only
PERMS = p+i+u+g+acl+selinux

# Logfile are special, in that they often change
LOG = >

# Just do md5 and sha256 hashes
LSPP = R+sha256

# Some files get updated automatically, so the inode/ctime/mtime change
# but we want to know when the data inside them changes
DATAONLY =  p+n+u+g+s+acl+selinux+xattrs+md5+sha256+rmd160+tiger

# Next decide what directories/files you want in the database.

/boot   NORMAL
/bin    NORMAL
/sbin   NORMAL
/lib    NORMAL
/lib64  NORMAL
/opt    NORMAL
/usr    NORMAL
/root   NORMAL
# These are too volatile
!/usr/src
!/usr/tmp
!/usr/share #通过文件路径前面加感叹号 ! 排除这个路径的监控,请自定义
# Check only permissions, inode, user and group for /etc, but
# cover some important files closely.
/etc    PERMS
!/etc/mtab
# Ignore backup files
!/etc/.*~
/etc/exports  NORMAL
/etc/fstab    NORMAL
/etc/passwd   NORMAL
/etc/group    NORMAL
/etc/gshadow  NORMAL
/etc/shadow   NORMAL
/etc/security/opasswd   NORMAL

/etc/hosts.allow   NORMAL
/etc/hosts.deny    NORMAL

/etc/sudoers NORMAL
/etc/skel NORMAL

/etc/logrotate.d NORMAL

/etc/resolv.conf DATAONLY

/etc/nscd.conf NORMAL
/etc/securetty NORMAL

# Shell/X starting files
/etc/profile NORMAL
/etc/bashrc NORMAL
/etc/bash_completion.d/ NORMAL
/etc/login.defs NORMAL
/etc/zprofile NORMAL
/etc/zshrc NORMAL
/etc/zlogin NORMAL
/etc/zlogout NORMAL
/etc/profile.d/ NORMAL
/etc/X11/ NORMAL

# Pkg manager
/etc/yum.conf NORMAL
/etc/yumex.conf NORMAL
/etc/yumex.profiles.conf NORMAL
/etc/yum/ NORMAL
/etc/yum.repos.d/ NORMAL

/var/log   LOG
/var/run/utmp LOG

# This gets new/removes-old filenames daily
!/var/log/sa
# As we are checking it, we've truncated yesterdays size to zero.
!/var/log/aide.log

# LSPP rules...
# AIDE produces an audit record, so this becomes perpetual motion.
# /var/log/audit/ LSPP
/etc/audit/ LSPP
/etc/libaudit.conf LSPP
/usr/sbin/stunnel LSPP
/var/spool/at LSPP
/etc/at.allow LSPP
/etc/at.deny LSPP
/etc/cron.allow LSPP
/etc/cron.deny LSPP
/etc/cron.d/ LSPP
/etc/cron.daily/ LSPP
/etc/cron.hourly/ LSPP
/etc/cron.monthly/ LSPP
/etc/cron.weekly/ LSPP
/etc/crontab LSPP
/var/spool/cron/root LSPP

/etc/login.defs LSPP
/etc/securetty LSPP
/var/log/faillog LSPP
/var/log/lastlog LSPP

/etc/hosts LSPP
/etc/sysconfig LSPP

/etc/inittab LSPP
/etc/grub/ LSPP
/etc/rc.d LSPP

/etc/ld.so.conf LSPP

/etc/localtime LSPP

/etc/sysctl.conf LSPP

/etc/modprobe.conf LSPP

/etc/pam.d LSPP
/etc/security LSPP
/etc/aliases LSPP
/etc/postfix LSPP

/etc/ssh/sshd_config LSPP
/etc/ssh/ssh_config LSPP

/etc/stunnel LSPP

/etc/vsftpd.ftpusers LSPP
/etc/vsftpd LSPP

/etc/issue LSPP
/etc/issue.net LSPP

/etc/cups LSPP

# With AIDE's default verbosity level of 5, these would give lots of
# warnings upon tree traversal. It might change with future version.
#
#=/lost\+found    DIR
#=/home           DIR

# Ditto /var/log/sa reason...
!/var/log/and-httpd

# Admins dot files constantly change, just check perms
/root/\..* PERMS

使用方法

#初始化监控数据库(这需要一些时间)
/usr/sbin/aide -c /etc/aide.conf --init
 
#把当前初始化的数据库作为开始的基础数据库
cp /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
 
#如果是正常的改动 更新改动到基础数据库
aide --update
cd /var/lib/aide/
#覆盖替换旧的数据库
mv aide.db.new.gz aide.db.gz
 
#在终端中查看检测结果
aide --check
 
#检查文件改动 保存到文件
aide --check --report=file:/tmp/aide-report-`date +%Y%m%d`.txt
 
#定时任务执行aide检测报告和自动邮件发送aide检测报告
(如果没有mail, yum install mail,还需要有本地邮件服务支持, 
yum install sendmail;/etc/init.d/sendmail start)
crontab -e
00 02 * * * /usr/sbin/aide -C -V4 | /bin/mail -s "AIDE REPORT $(date +%Y%m%d)"  root@localhost

使用中遇到的问题 错误

执行 /usr/sbin/aide -c /etc/aide.conf –init 或者 aide -i 后报错

lgetfilecon_raw failed for /var/log/yum.log:No data available
lgetfilecon_raw failed for /var/log/messages.2:No data available
lgetfilecon_raw failed for /var/log/cron:No data available
lgetfilecon_raw failed for /var/log/messages.3:No data available
lgetfilecon_raw failed for /var/log/messages.1:No data available
lgetfilecon_raw failed for /var/log/sdsvrd.log:No data available
lgetfilecon_raw failed for /var/log/spooler.3:No data available
lgetfilecon_raw failed for /var/log/cron.3:No data available
lgetfilecon_raw failed for /var/log/cron.1:No data available
lgetfilecon_raw failed for /var/log/sdupdate.log:No data available
lgetfilecon_raw failed for /var/log/rsyncd.log:No data available
lgetfilecon_raw failed for /var/log/maillog.3:No data available
lgetfilecon_raw failed for /var/log/rpmpkgs.3:No data available
lgetfilecon_raw failed for /var/log/pm/suspend.log:No data available
lgetfilecon_raw failed for /var/log/prelink/prelink.log:No data available

以下配置项改为如下.

#/etc/aide.conf
ALLXTRAHASHES = sha1+rmd160+sha256+sha512+tiger
EVERYTHING = p+i+n+u+g+s+m+c+acl+xattrs+md5+ALLXTRAHASHES
NORMAL = p+i+n+u+g+s+m+c+acl+xattrs+md5+rmd160+sha256
DIR = p+i+n+u+g+acl+xattrs
PERMS = p+i+u+g+acl
LOG = p+u+g+i+n+S+acl+xattrs
LSPP = p+i+n+u+g+s+m+c+acl+xattrs+md5+sha256
DATAONLY = p+n+u+g+s+acl+xattrs+md5+sha256+rmd160+tiger

 

WordPress迁移HTTPS经验与教程

u22e阅读(3735)

  • 1.前言

全站HTTPS加密的好处

(1)保障用户隐私信息安全:SSL证书让网站实现加密传输,可以很好的防止用户隐私信息如用户名、密码、交易记录、居住信息等被窃取和纂改。比如电商网站安装SSL证书,就可以有效保障你登录电商网站支付时提交的用户名密码的安全。

(2)帮助用户识别钓鱼网站:SSL证书可以认证服务器真实身份,可以有效的区别钓鱼网站和官方网站。网站部署全球信任的SSL证书后,浏览器内置安全机制,实时查验证书状态,通过浏览器向用户展示网站认证信息,让用户轻松识别网站真实身份,防止钓鱼网站仿冒。

(3)利于网站SEO优化:因为部署了SSL证书的网站相比没有部署SSL证书的网站更加可信,更加安全,可以有效的保障用户的利益不受侵害。因此搜索引擎如谷歌,百度站在确保用户信息安全的角度,都在大力倡导网站部署SSL证书实现https加密访问。在搜索、展现、排序方面也给予部署了SSL证书网站优待。

(4)提升公司品牌形象和可信度:网站部署SSL证书,让您的网站与其他网站与众不同。部署了SSL证书的网站会在浏览器地址栏显示https绿色安全小锁,如果是部署的EV SSL证书还会显示绿色地址栏和单位名称。可告诉用户其访问的是安全、可信的站点,可以放心的进行操作和交易,有效提升公司的品牌信息和可信度。

这篇文章是基于AMH面板环境配置SSL的,环境:NGINX+AMH


  • 2.准备工作

我们在需要为AMH面板配置域名站点SSL证书之前,需要准备几点:

A – 已经搭建AMH面板

B – 已经申请过的SSL证书,准备”for Nginx”证书文件,一个是.crt,一个是.key文件。

我是通过腾讯云申请免费1年的GeoTrust-DVSSL证书。免费续期而且CDN还支持一键部署


  • 3.服务器配置

登录AMH面板后台,在模块扩展区域搜索SSL,找到上图所示的SSL模块,然后下载。

返回模块列表,然后安装刚下载的SSL模块扩展。

然后我们部署SSL证书,把我们准备工作准备的.KEY和.CRT两个文件,用SUBLIME打开,然后复制里面的脚本,黏贴到对应的文本框中保存。

然后reload一下,就能同时支持HTTP和HTTPS访问了。

接下来测试一下HTTPS方式,只要浏览器左上角的小锁不显示红色×的话就可以继续下一步了。

至此,迁移HTTPS成功。


 

  • 4.WordPress

回到HTTP方式,登录到后台。修改设置常规内的各种url为HTTPS 有些主题也会要求填写URL,记得一并改了。

如果你使用了WP Super Cache之类的缓存插件,记得把缓存清除,然后停用插件,避免干扰 如果使用了CDN,请把CDN切换到回源模式,或者干脆本地hosts到源站,避免干扰 可以开始动手迁移了。先备份一下

接下来要替换以前的文章中的链接,以phpmyadmin为例,选择wp_posts表,搜索Find and replace 查找:http://www.dabianhaochi.cn,替换为:https://www.dabianhaochi.cn,字段就选post_content,然后执行替换就行了 如果你以前的文章中还引用到了其他链接,需要升级为https的话重复上述步骤即可。域名根据实际情况自行修改。


  • 5.强制跳转HTTPS网页

到目前为止,我们如果部署好域名,然后通过HTTPS可以直接打开带有SSL证书的URL,但是如果我们需要强制跳转到HTTPS,怎么解决呢?

/usr/local/nginx/conf/vhost/

在上面的目录中,找到站点对应的.conf文件,然后编辑。

if ($server_port = 80) {
return 301 https://$server_name$request_uri;
}
if ($scheme = http) {
return 301 https://$server_name$request_uri;
}
error_page 497 https://$server_name$request_uri;

部署替换完毕之后,执行amh nginx restart重启nginx,就可以生效。

 


  • 6.总结

由于AMH面板的功能很好用,所以SSL证书的部署步骤较简单。如果还出现小黄锁、小灰锁的话,多用F12调试看看是哪里的问题。

 

参考链接:https://www.dabianhaochi.cn/wordpressqianyihttpsjingyanyujiaocheng.html

Nginx服务器下安装 COMODO PositiveSSL 证书并开启全站 SSL

u22e阅读(5765)

众所周知为了提高网站的安全性,一般会在比较敏感的部分页面采用 https 传输,比如注册、登录、控制台等。像Gmail、网银等全部采用 https 传输。网站安装 SSL 证书最主要的好处是可以保障用户隐私信息安全,帮助用户识别钓鱼网站。且更利于网站 SEO 优化,例如谷歌,百度搜索引擎站在确保用户信息安全的角度,在搜索、展现、排序方面也给予部署了SSL证书网站优待。

既然要加密提高网站安全级别,那么选择一款性价比合适的 SSL 在所难免。SSL 证书购买途径有很多,也有一些是免费的,试过一些免费 SSL 证书但觉得续签麻烦,不太稳定,也不安全。国内 CA 机构 CFCA 中国金融认证中心 SSL 产品研发负责人也表示:网站管理人员及 CA 机构都应对免费证书持谨慎态度。因为付费的也不是很贵,就选了比较常用的 Comodo PositiveSSL,在 gogetssl 买比官网便宜不少。

下面就以 gogetssl 家的 Comodo PositiveSSL 证书为例,记录 Nginx 配置安装 ssl 证书的过程,具体原理就不说了。

准备证书

首先需要购买证书,Comodo PositiveSSL,三年只要 9.65 美金,购买直达

购买完成后,邮件会得到几封邮件,其中包含 key 代码、证书压缩包 www.u22e.com 附件,解压之会得到 4 个文件。AddTrustExternalCARoot.crt、COMODORSAAddTrustCA.crt、COMODORSADomainValidationSecureServerCA.crt、www_u22e_com.crt,这就是我们要用到的证书了。

串联证书

执行合并命令生成新文件 ssl-bundle.crt

生成私钥

将刚才gogetssl 发的邮件里的 key 代码,即 —–BEGIN PRIVATE KEY—– 和 —–END PRIVATE KEY—– 之间的代码(包含这两行)复制保存为 u22e_com.key 文件。利用 KEY私钥格式转换工具 来进行转换一下,从PKCS8 Key 转换为 RSA Key。

创建一个证书存放路径

将前面生成的 u22e_com.key 和 ssl-bundle.crt 上传服务器,一般放在 /etc/ssl/private/ 目录下。

修改 Nginx 配置

下面是我 nginx 关于 ssl 部分的配置,因为要全局使用 https,故将 80 端口重定向到 https 下。

具体参数的含义就不多说了,请自行google。使用前先测试一下。

检测没问题后,重启 nginx

阿里云ecs+主机宝linux版+腾讯云ssl证书配置https方法

u22e阅读(3475)

1.申请腾讯云免费的dv ssl证书

2.通过主机宝的ftp上传两个证书文件到服务器上(for Nginx文件夹里的),为了安全性,最好不要放到public_html中

3.主机宝-防火墙-新增规则,由于https走443端口,所以把443端口打开(如果在linux相关文件中打开443的话,重启后会失效,仍然处于关闭状态,所以主机宝的安全做的比较不错,需要通过后台管理界面把443打开)此步不可省略,否则就算ssl配置成功了也是没法通过https前缀来访问的。

4.从阿里云的管理界面中进入管理终端并登陆root用户

5.复制命令“find / -name nginx.conf”(引号之内,不包括引号),查询nginx配置文件的位置。

6.输入vi nginx.conf 编辑配置文件,这个文件不用改动,光标移动到最后,查看引用文件,各个站点的配置,都被放到了vhosts里面的配置文件里了。

图中可以看到,引用了vhosts文件夹中的所有.conf文件

7.按esc,输入”:q!”强制退出编辑模式(不包含引号)

8.cd到vhosts

9.dir,查看这个文件夹中包含了哪些东西

10.我的服务器中挂载了三个站点,所以有三个配置文件,分别以站点的名字命名(图中打了马赛克,不是没有名字)。用vi打开你想配置ssl的那个站点的配置文件。例如,想配置123.conf,就输入vi 123.conf。

11.编辑这个文件成下图中的形式

12.主要就是把监听端口改为443,开启SSL,配置ssl_certificate和ssl_certificate_key的路径(可以在主机宝的文件管理中看到绝对路径)。(图中只有前四行是我修改过的,其他的保持原样即可)

13.按esc,输入“:wq”保存并退出

14.https://www.u22e.com/,应该可以访问了。

如果遇到什么问题可以在评论里提出大家一起讨论

linux系统grep 和find 命令使用详解

u22e阅读(5063)

1、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;

   [root@localhost grub]# grep "^[[:space:]]\+.*" grub.conf
   root (hd0,0)

    限于格式要求,只截取部分显示结果

2、显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;

    [root@localhost rc.d]# grep "^#[[:space:]]\+[^[:space:]]" rc.sysinit
    # /etc/rc.d/rc.sysinit - run once at boot time
    # Taken in part from Miquel van Smoorenburg's bcheckrc.
    # Check SELinux status
    # Print a text banner.
    # Only read this once.
    # Initialize hardware
    # Set default affinity
    # Load other user-defined modules
    # Load modules (for backward compatibility with VARs)
    # Configure kernel parameters
    # Set the hostname.
    # Sync waiting for storage.
    # Device mapper & related initialization
    # Start any MD RAID arrays that haven't been started yet
    # Remount the root filesystem read-write.
    # Clean up SELinux labels
    # If relabeling, relabel mount points.
    # Mount all other filesystems (except for NFS and /proc, which is already
    # mounted). Contrary to standard usage,
    # filesystems are NOT unmounted in single user mode.
    # The 'no' applies to all listed filesystem types. See mount(8).
    # Update quotas if necessary
    # Check to see if a full relabel is needed
    # Initialize pseudo-random number generator
    # Configure machine if necessary.
    # Clean out /.
    # Do we need (w|u)tmpx files? We don't set them up, but the sysadmin might...
    # Clean up /var.
    # Clean up utmp/wtmp
    # Clean up various /tmp bits
    # Make ICE directory
    # Start up swapping.
    # Set up binfmt_misc
    # Boot time profiles. Yes, this should be somewhere else.
    # Now that we have all of our basic modules loaded and the kernel going,
    # let's dump the syslog ring somewhere so we can find it later
    # create the crash indicator flag to warn on crashes, offer fsck with timeout
    # Let rhgb know that we're leaving rc.sysinit
    [root@localhost rc.d]#

3、打出netstat -tan命令执行结果中以‘LISTEN’,后或跟空白字符结尾的行;

    [root@localhost rc.d]# netstat -tan | grep "LISTEN[[:space:]]*$"
    tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      
    tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      
    tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      
    tcp        0      0 :::22                       :::*                        LISTEN      
    tcp        0      0 ::1:631                     :::*                        LISTEN      
    tcp        0      0 ::1:25                      :::*                        LISTEN

4、添加用户bash, testbash, basher, nologin (此一个用户的shell为/sbin/nologin),而后找出当前系统上其用 户名和默认shell相同的用户的信息;

    [root@localhost ~]# grep "^\([a-z]\+\b\).*\1$" /etc/passwd
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    bash:x:501:501::/home/bash:/bin/bash
    nologin:x:503:503::/home/nologin:/sbin/nologin
    [root@localhost ~]#

5、显示当前系统上root、fedora或user1用户的默认shell;

    [root@localhost ~]# grep -E "^(root|fedora|user1)\b.*" /etc/passwd | cut -d: -f1,7
    root:/bin/bash
    fedora:/bin/bash
    user1:/bin/bash
    [root@localhost ~]#

6、找出/etc/rc.d/init.d/functions文件中某单词后面跟一组小括号的行,形如:hello();

    [root@localhost ~]# grep "[[:alnum:]]\+()" /etc/rc.d/init.d/functions
    fstab_decode_str() {
    checkpid() {
    __readlink() {
    __fgrep() {
    __umount_loop() {
    __umount_loopback_loop() {
    __pids_var_run() {
    __pids_pidof() {
    daemon() {
    killproc() {
    pidfileofproc() {
    pidofproc() {
    status() {
    echo_success() {
    echo_failure() {
    echo_passed() {
    echo_warning() {
    update_boot_stage() {
    success() {
    failure() {
    passed() {
    warning() {
    action() {
    strstr() {
    confirm() {
    get_numeric_dev() {
    is_ignored_file() {
    is_true() {
    is_false() {
    apply_sysctl() {
    key_is_random() {
    find_crypto_mount_point() {
    init_crypto() {
    [root@localhost ~]#

7、使用echo命令输出一个绝对路径,使用grep取出其基名;

  [root@localhost ~]# echo /tmp/test/ | grep -o "[^/]\+\/\?$"
  test/

  扩展:取出其路径名

   [root@localhost ~]# echo /tmp/test/ | grep -o "^\/\+[[:alnum:]]\+\b"
    /tmp

linux系统下DNS软件安装及使用讲解

u22e阅读(9367)

DNS以及域名分发布式数据库相关知识 

一、 DNS相关介绍

1. DNS(Domain Name Service):域名解析服务协议

2. 通常监听段脱口:UDP:53 和 TCP: 53

3. 实现应用程序:BIND(Berkeley Internet Name Domain), PowerDNS, etc

4. DNS服务主要工作于域名解析分布式数据库, 用来做域名IP之间的解析

二、 域名分布式数据库

1. 根域:.

2. 一级域: 组织域(.com .org .mil ; 国家域 (.cn, .tw .jp .us); 反向域 (.in-addr.arpa )

3. 解析方式:

  • FQDN (Full Qualified Domain Name) –> IP : 正向解析
  • IP –> FQDN:反向解析

4. 递归与迭代

  • 递归:DNS请求被服务器接收后,如果属于此服务器管辖范围则请求上级服务器依次传递请求,并且依次传递结果给发出请求的主机。客户机指向的服务器一定给递归服务。
  • 迭代: DNS请求被服务器接收后,如果不是自己管辖范围,让客户端访问根域服务器,然后跟域通知客户端去访问下级服务器,直到最后客户端访问管辖请求域名的服务器为止。

5. 资源记录(Resource Record):资源记录用用于存储域名解析数据记录, 几种记录类型如下

  • SOA:Start Of Authority, 其实授权:用于声明本地域被授权
  • NS:Name Server, 域名服务器:用于记录域名服务器信息
  • MX:Mail eXchanger,邮件交换器:记录邮件服务器信息
  • A:Address, FQDN –> IP
  • PTR:PoiTeR,IP –> FQDN
  • AAAA:Address, FQDN –> IPv6
  • CNAME: Canonical Name, 咩名记录

6. 域(Domain) 和 区域(zone)

  • 域(Domain):逻辑概念
  • 区域(zone):物理概念,特指存储资源记录的硬件设备,如文本文件,或者数据库
  • 正向区域和反向区域域不能存储在一个文件或者数据库中,由于解析技术不同

7. DNS服务器类型

  • 主DNS服务器
  • 从DNS服务器
  • 缓存名称服务器

8. DNS数据文件格式(bind为例):文本文件,包含资源记录或宏定义

  • 资源记录格格式
ng-bsh">    资源记录的格式:
    name    [ttl]   IN      RRtype      Value
    例子:
    www     600     IN      A           1.2.3.4
    www.playground.com.     600     IN      A   1.2.3.4
  • SOA记录
    SOA: 只能有一个
    name: 区域名称, 通常可以简写为@,例如:magedu.com.
    value: 主DNS服务器的FQDN
    注意:SOA必须是区域数据库文件第一条记录

    例子:@    600     IN  SOA  ns.playground.com.  dnsadmin.playground.  (
        serial number ;序列号,十进制数字,不能超过10位,通常使用日期,例如2014031001
        refresh time  ;刷新时间,即每隔多久到主服务器检查一次
        retry time    ;重试时间,应该小于refresh time
        expire time   ;过期时间
        negative answer ttl  ;否定答案的ttl
)
  • NS记录
  NS:可以有多条
    name: 区域名称,通常可以简写为@
    value: DNS服务器的FQDN(可以使用相对名称)
    例子:
    @     600     IN  NS  ns
  • A记录
    A: 只能定义在正向区域数据库文件中
    name: FQDN(可以使用相对名称)
    value: IP
    例子:
    www     600     IN      A           1.2.3.4
    www     600     IN      A           1.2.3.5
    www     600     IN      A           1.2.3.4
    ftp     600     IN      A           1.2.3.4
  • MX记录
    MX: 可以有多个
    name: 区域名称,用于标识smtp服务器
    value: 包含优先级和FQDN
       优先级:0-99, 数字越小,级别越高;
    例子:
        @     600     IN  MX   10   mail
        @  600     IN  MX   20   mail2
  • CNAME记录
    CNAME: 
    name: FQDN
    value: FQDN
    例子:
    ftp     IN  CNAME  www
    mail    IN  CNAME  www
  • PTR记录格式
    PTR: IP-->FQDN, 只能定义在反向区域数据文件中,反向区域名称为逆向网络地址加.in-addr.arpa.后缀组成
    name: IP, 逆向的主机地址,例如172.16.100.7的name为7.100,完全格式为7.100.16.172.in-addr.arpa.
    value: FQDN
    例子:
    4.3.2       600     IN      PTR     www.playground.com.

9. 区域传送:

  • 辅助DNS服务器从主DNS服务器或其他辅助DNS服务器请求传输数据的过程
  • 完全区域传送:传送区域的所有数据,AXFER
  • 增量区域传送:传送区域中改变的数据不符,IXFER

DNS程序软件bind简介

一、 BIND简介

1. BIND: www.isc.org

2. 服务程序名称: named, 由named:named 执行

3. bind安装包组

bind.x86_64 : 包含bind应用程序                                 
bind-chroot.x86_64 : 支持change root 机制                                
bind-devel.i686 : 32bit bind开发包                               
bind-devel.x86_64 : 64bit bind开发包                                
bind-dyndb-ldap.x86_64 : 支持动态数据库                                
bind-libs.i686 : bind相关库文件                               
bind-libs.x86_64 : 64bit 库文件                                
bind-sdb.x86_64  : 支持数据库接口                                
bind-to-tinydns.x86_64 : 微型DNS服务器程序                                 
bind-utils.x86_64 : 工具包

 

二、主配置文件和区域文件 /etc/named.conf, /var/named/

1. 必须的三个区域: 跟 .  localhost  127.0.0.1

    主配置文件:
        options {
        // 全局选项
    };

        zone "ZONE name" {
        // 定义区域
    };

        logging {
        // 定义日志系统
    };

2. 域类型

    •  hint:缓存域,用于缓存服务器
    •  master:主域,用于主服务器
    •  slave:从域,用于从服务器
    •  forward:转发域

三、 named服务正向以及反向解析事例

举例: 添加正向域域.playground 和 反向域233.168.192.in-addr.arpa

mail, 192.168.98.12
www 192.168.98.13
pop –> mail
ftp –> www

dns: 192.168.233.128

1. 编辑主配置文件
options {
#       listen-on port 53 { 127.0.0.1; }; # 注释后监听所有ip的53号端口
#       listen-on-v6 port 53 { ::1; }; # 注释后监听所有ipv5的53号端口
        directory       "/var/named"; # 区域文件所在目录
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
#       allow-query     { 127.0.0.1; 192.168.233.128; 192.168.233.131; }; # 允许访问的白名单,注释后允许所有IP访问
        recursion yes; # 是否提供递归 

#       dnssec-enable yes;
#       dnssec-validation yes;
#       dnssec-lookaside auto;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";

        managed-keys-directory "/var/named/dynamic";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
        type hint;
        file "named.ca";
};

include "/etc/named.rfc1912.zones"; # 读取的域文件信息
#include "/etc/named.root.key"; # 与远程操控相关

2. 添加新的域 .playground.com于/etc/named.rfc1912.zones 中

## 添加正向区域
zone "playground.com" IN {
      type master;
      file "playground.zone";
};
## 添加反向区域
zone "98.168.192.in-addr.arpa" IN {
        type master;
        file "192.168.98.zone";
};

3. 编辑区域文件

## 在/var/named/编辑正向区域文件保存为 playground.zone, 与配置文件中输入的文件名一致
$TTL 600
@       IN      SOA     dns.playground.com.     dnsadmin.playground.com. (
        20150305
        1H
        5M
        3D
        12H )
@       IN      NS      dns
@       IN      MX  10  mail
dns     IN      A       192.168.233.128 
mail    IN      A       192.168.98.12
www     IN      A       192.168.98.13
ftp     IN      CNAME   www
pop     IN      CNAME   www
## 在/var/named/编辑反向区域文件保存为 192.168.233.zone, 与配置文件中输入的文件名一直
$TTL 600
@       IN      SOA     dns.playground.com.     dnsadmin.playground.com.(
        20150305
        1H
        5M
        3D
        12H )
@       IN      NS      dns.playground.com.
128     IN      PTR     dns.playground.com.
12      IN      PTR     mail.playground.com.
13      IN      PTR     www.playground.com.
ns      IN      A       192.158.98.128
mail    IN      A       192.168.98.12
www     IN      A       192.168.98.13

 

4. 修改配置文件属组属组为named:named, 权限位640

## 如果不修改属主属组,named将无法读取配置文件,由于named服务是通过named用户启动
chown named:named /etc/named.rfc1912.zones
chown named:named /etc/named.conf 
## 修改配置文件权限,主要为了安全,即便named服务被攻破,也不至于重要信息泄露
chmod 640 /etc/named.conf
chmod 640 /etc/named.rfc1912.zones
chown named:named /var/named/playground.zone 
chmod 640 /var/named/playground.zone

5. 启动服务,查看TCP/UDP 53号端口是否被监听, 查看/var/log/message

ss -tunl | grep ":53"
udp    UNCONN     0      0        192.168.233.128:53                    *:*     
udp    UNCONN     0      0          172.25.137.40:53                    *:*     
udp    UNCONN     0      0              127.0.0.1:53                    *:*     
tcp    LISTEN     0      3        192.168.233.128:53                    *:*     
tcp    LISTEN     0      3          172.25.137.40:53                    *:*     
tcp    LISTEN     0      3              127.0.0.1:53                    *:*
service named configtest ## 测试配置文件语法是否正确
zone localhost.localdomain/IN: loaded serial 0
zone localhost/IN: loaded serial 0
zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 0
zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0
zone 0.in-addr.arpa/IN: loaded serial 0
zone playground.com/IN: loaded serial 20150305
zone 98.168.192.in-addr.arpa/IN: loaded serial 20150305

service named start ## 启动服务 
Starting named:                                            [  OK  ] 

tail /var/log/messages ## 查看服务日志
Mar 13 22:40:26 www named[47455]: zone 0.in-addr.arpa/IN: loaded serial 0
Mar 13 22:40:26 www named[47455]: zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0
Mar 13 22:40:26 www named[47455]: zone 98.168.192.in-addr.arpa/IN: loaded serial 20150305
Mar 13 22:40:26 www named[47455]: zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 0
Mar 13 22:40:26 www named[47455]: zone playground.com/IN: loaded serial 20150305
Mar 13 22:40:26 www named[47455]: zone localhost.localdomain/IN: loaded serial 0
Mar 13 22:40:26 www named[47455]: zone localhost/IN: loaded serial 0
Mar 13 22:40:26 www named[47455]: managed-keys-zone ./IN: loaded serial 288
Mar 13 22:40:26 www named[47455]: zone 98.168.192.in-addr.arpa/IN: sending notifies (serial 20150305)
Mar 13 22:40:26 www named[47455]: running

 

6 使用dig命令测试

dig www.playground.com @192.168.233.128  ## 测试正向解析
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6_6.1 <<>> www.playground.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34061
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;www.playground.com.        IN  A

;; ANSWER SECTION:
www.playground.com. 600 IN  A   192.168.98.13

;; AUTHORITY SECTION:
playground.com.     600 IN  NS  dns.playground.com.

;; ADDITIONAL SECTION:
dns.playground.com. 600 IN  A   172.25.137.40

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Fri Mar 13 22:47:49 2015
;; MSG SIZE  rcvd: 86

dig -x 192.168.98.13 @192.168.233.128 ## 测试反向解析
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6_6.1 <<>> -x 192.168.98.13
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17843
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;13.98.168.192.in-addr.arpa.    IN  PTR

;; ANSWER SECTION:
13.98.168.192.in-addr.arpa. 600 IN  PTR www.playground.com.

;; AUTHORITY SECTION:
98.168.192.in-addr.arpa. 600    IN  NS  ns.playground.com.

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Fri Mar 13 22:48:07 2015
;; MSG SIZE  rcvd: 93

 

四、 区域传送以及从服务器配置

1. dig 模拟完全区域传送

# dig -t axfr playground.com  @192.168.233.128
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6_6.1 <<>> -t axfr playground.com @192.168.233.128
;; global options: +cmd
playground.com.     600 IN  SOA dns.playground.com. dnsadmin.playground.com. 20150305 3600 300 259200 43200
playground.com.     600 IN  NS  dns.playground.com.
playground.com.     600 IN  MX  10 mail.playground.com.
dns.playground.com. 600 IN  A   172.25.137.40
ftp.playground.com. 600 IN  CNAME   www.playground.com.
mail.playground.com.    600 IN  A   192.168.98.12
pop.playground.com. 600 IN  CNAME   www.playground.com.
www.playground.com. 600 IN  A   192.168.98.13
playground.com.     600 IN  SOA dns.playground.com. dnsadmin.playground.com. 20150305 3600 300 259200 43200
;; Query time: 16 msec
;; SERVER: 192.168.233.128#53(192.168.233.128)
;; WHEN: Fri Mar 13 23:30:15 2015
;; XFR size: 9 records (messages 1, bytes 240)

2. 主从兼容关系:主服务器bind版本可以低于从服务器bind版本

3. 向区域文件中添加从服务器关键两步奏:

  • 往上级获得授权(这里指的DNS上级父域服务器)
  • 在主区域文件中为从服务器添加NS记录和对应的A或PTR记录

4. 从服务器,事例。

假设:有另一个主机,IP地址为192.168.233.129,作为192.168.233.128(接续上面的事例)的从服务器。

首先在主DNS服务器的区域文件中,添加从服务器的NS记录

## 正向,添加从服务器的NS记录
@       IN      NS      ns
ns      IN      A       192.168.233.129

## 反向, 添加从服务器的NS记录
@       IN      NS      ns.playground.com.
129     IN      PTR     ns.playground.com.

## 添加完成后,如果不是使用named用户操作,一定注意修把文件属主属组改为named:named, 另外修改一下序列号
service named reload ## 重启服务

然后在从服务器主机上bind配置文件中添加,与主服务器相同的两个正反向域

## 从服务器正向域
zone "playground.com"           IN {
        type slave;
        masters { 192.168.233.128; };
        file "slaves/playground.com.zone";
};


##  从服务器反向域
zone "233.168.192.in-addr.arpa" IN {
        type slave;
        masters { 192.168.233.128; };
        file "slaves/192.168.233.com.zone";
};

## 重启服务 
service named restart

查看日志文件,同步过来的区域文件,尝试用从服务器解析

tail /var/log/message 
Mar 17 03:59:52 www named[2533]: running
Mar 17 03:59:52 www named[2533]: zone 233.168.192.in-addr.arpa/IN: sending notifies (serial 20150305)
Mar 17 03:59:52 www named[2533]: zone playground.com/IN: sending notifies (serial 3934520385)

ls /var/named/slaves  ## 查看区域文件是否成功同步过来
-rw-r--r--. 1 named named 482 Mar 17 03:47 192.168.233.com.zone
-rw-r--r--. 1 named named 497 Mar 17 03:54 playground.com.zone

dig -t A www.playground.com @192.168.233.129 ## 尝试解析 
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6_6.1 <<>> -t A www.playground.com @192.168.233.129
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17894
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;www.playground.com.        IN  A

;; ANSWER SECTION:
www.playground.com. 600 IN  A   192.168.98.13

;; AUTHORITY SECTION:
playground.com.     600 IN  NS  dns.playground.com.
playground.com.     600 IN  NS  ns.playground.com.

;; ADDITIONAL SECTION:
dns.playground.com. 600 IN  A   172.25.137.40
ns.playground.com.  600 IN  A   192.168.233.129

;; Query time: 0 msec
;; SERVER: 192.168.233.129#53(192.168.233.129)
;; WHEN: Tue Mar 17 04:02:31 2015
;; MSG SIZE  rcvd: 119

五、 子域授权

1.   BIND子域授权的实现:首先需要在父域区域文件中添加胶水记录(glue record)说要授权的子域信息和主机IP,父域区域文件中需要添加如下几项

授权的子区域域名称

子区域的名称服务器

子区域的名称服务器IP地址

 

例子:

  bio.playground.com. IN   NS     dns.bio.playground.com.
    bio.playground.com. IN   NS     ns2.bio.playground.com.
    dns.bio.playground.com.     IN      A   172.16.200.21
    ns2.bio.playground.com.     IN      A   172.16.200.22

 

2. 配置区域转发:转发域

解析某本机不负责的区域内的名称时不转发给跟,而是转发给指定主机

        zone "ZONE NAME" IN {
        type forward;
        forwarders { DNS_SERVER; };
        forward only|first;
    };

 

配置转发方式:

         转发非本机负责解析的所有区域:
        options {
            forward only|first;
            forwarders { IP; }
        };

      转发某特定区域:
        zone "特定区域" IN {
                type forward;
            forwarders { IP; }
            forward only|first;
        };

 

3. ACL:bind实现支持的访问控制列表

      acl ACL_NAME {
            172.16.0.0/16;
            192.168.0.0/24
            127.0.0.0/8;
        };

访问控制列表只有定义后才能使用;通常acl要定义在named.conf的最上方;

BIND有四个内置的acl:
any: 任何主机
none: 无一主机
local: 本机

localnet: 本机的所在的网络

 

4. 实例, 接续上面上面的例子,

父域为playground.com. 地址为192.168.233.128,

需要授权给另一台主机192.168.233.129,

子域bio.playground.com. 并且要求子域服务器可以解析父域其他域名

 

在父域playground.com区域文件中添加胶水记录

bio     IN      NS      ns.bio
ns.bio  IN      A       192.168.233.129

 

在子域主机配置文件中添加这个域

zone "bio.playground.com"       IN {
        type master;
        file "bio.playground.com.zone";
};

 

在子域主机编辑并添加/var/named/bio.playground.com.zone 子域区域文件, 并修改权限和属主属组(named:named)

@       IN      SOA     ns.bio.playground.com.  nsbioadmin.playground.com. (
        20150309001
        1H
        5M
        3D
        12H )
@       IN      NS      ns.bio.playground.com.
@       IN      MX  10  mail.bio.playground.com.
ns      IN      A       192.168.233.129
mail    IN      A       192.168.233.140
www     IN      A       192.168.233.141
ftp     IN      A       192.168.233.142
pop     IN      CNAME   ftp

在子域配置文件中,添加转发域,使得子域主机可以解析父域域名

此时注意要开启父域配置文件中的recursion yes, 或者建立recursion白名单,这里笔者偷懒直接用recursion yes 解决,在生产条件下这样设定很不安全

zone "playground.com"           IN {
        type forward;
        forwarders { 192.168.233.128; };
        forward only;
};

 

重启或者重新载入父子域服务器后,尝试解析

在子域服务器上解析子域域名 
dig www.bio.playground.com @192.168.233.129  
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6_6.1 <<>> www.bio.playground.com @192.168.233.129
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17622
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;www.bio.playground.com.        IN  A

;; ANSWER SECTION:
www.bio.playground.com. 43200   IN  A   192.168.233.141

;; AUTHORITY SECTION:
bio.playground.com. 43200   IN  NS  ns.bio.playground.com.

;; ADDITIONAL SECTION:
ns.bio.playground.com.  43200   IN  A   192.168.233.129

;; Query time: 0 msec
;; SERVER: 192.168.233.129#53(192.168.233.129)
;; WHEN: Tue Mar 17 17:16:39 2015
;; MSG SIZE  rcvd: 89

## 在子域服务器上解析父域域名 
dig www.playground.com @192.168.233.129
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6_6.1 <<>> www.playground.com @192.168.233.129
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9272
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;www.playground.com.        IN  A

;; ANSWER SECTION:
www.playground.com. 600 IN  A   192.168.98.13

;; AUTHORITY SECTION:
playground.com.     600 IN  NS  dns.playground.com.

;; ADDITIONAL SECTION:
dns.playground.com. 600 IN  A   192.168.233.129

;; Query time: 15 msec
;; SERVER: 192.168.233.129#53(192.168.233.129)
;; WHEN: Tue Mar 17 17:18:02 2015
;; MSG SIZE  rcvd: 86

两次解析结果差别在于flags, 如果在子域解析父域,则少一个aa flag说明不是权威答案,只是参考答案

 

六、view视图, 实现主机对于不同IP访问对于同一域名产生不同的应答机制,用于解决不同网络间解析效率问题 ,需要注意的是,如果使用view则所有区域都必须在view中

1. 语法格式如下

以中国移动和中国联通为例 
        acl telecom {
            1.2.0.0/16;
            4.5.8.0/24;
        };

        acl unicom {

        };

        view telecom {
            match-clients { telecom; };
            zone "playground.com" IN {
                type master;
                file "playground.com.telecom";
            };
        };

        view unicom {
            match-clients { unicom; };
            recursion no;
            zone "playground.com" IN {
                type master;
                file "playground.com.unicom";
            };
        };

        view default {
            match-clients { any; };
            zone "playground.com" IN {
                type master;
                file "playground.com.unicom";
            };
        };

 

2. 实验事例,

假定有一个域,playground.com, 如果通过172.25.137.41访问则返回一组解析结果, 如果通过192.168.233.129 访问则返回另一组结果。

第一台主机,为DNS服务器, 拥有两个端口,192.168.233.128 和 172.25.137.40,这里笔者使用别名实现

另两台主句, 一台为192.168.233.129 一台为172.25.137.41

 

设置,DNS服务器IP

ifconfig eth0 192.168.233.128/24
ifconfig eth0:1 172.24.137.43/24
eth0      Link encap:Ethernet  HWaddr 00:0C:29:E0:A2:0E  
          inet addr:192.168.233.128  Bcast:192.168.233.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fee0:a20e/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:45186 errors:0 dropped:0 overruns:0 frame:0
          TX packets:32619 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:18628316 (17.7 MiB)  TX bytes:2974242 (2.8 MiB)

eth0:1    Link encap:Ethernet  HWaddr 00:0C:29:E0:A2:0E  
          inet addr:172.25.137.40  Bcast:172.25.137.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

 

修改bind配置文件,添加view

acl localArea {
    127.0.0.1/4;
};
 
acl vm1 {
    192.168.233.131/24;
    192.168.233.128/24; 
};
 
acl vm2 { 
    172.25.137.41/24;
    172.25.137.40/24;
};

 

view localArea { 
    match-clients { localArea; };
    zone "localhost.localdomain" IN {
        type master;
        file "named.localhost";
        allow-update { none; };
    };

    zone "localhost" IN {
        type master;
        file "named.localhost";
        allow-update { none; };
    };

    zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
        type master;
        file "named.loopback";
        allow-update { none; };
    };

    zone "1.0.0.127.in-addr.arpa" IN {
        type master;
        file "named.loopback";
        allow-update { none; };
    };

    zone "0.in-addr.arpa" IN {
        type master;
        file "named.empty";
        allow-update { none; };
    };
}; 

view vm1 {
    match-clients { vm1; }; 
    zone "playground.com" IN {
        type master; 
        file "playground.vm1";
    };

    zone "98.168.192.in-addr.arpa" IN { 
        type master; 
        file "192.168.98.vm1";
    };
};   
   

view vm2 {
    match-clients { vm2; };
    zone "playground.com" IN {
        type master; 
        file "playground.vm2";
    };

    zone "137.25.172.in-addr.arpa" IN { 
        type master; 
        file "172.25.137.vm2";
    };
};

view default {
    match-clients { any;};
    zone "." IN { 
        type hint; 
        file "named.ca"; 
    }; 
};

 

编辑vm1的正反向域区域文件

## vm1这是正向域 
$TTL 600
@       IN      SOA     dns.playground.com.     dnsadmin.playground.com. (
        20150305
        1H
        5M
        3D
        12H )
@       IN      NS      dns
@       IN      MX  10  mail
dns     IN      A       192.168.233.128
mail    IN      A       192.168.98.12
www     IN      A       192.168.98.13
ftp     IN      CNAME   www
pop     IN      CNAME   www
## vm1这是反向域 
$TTL 600
@       IN      SOA     dns.playground.com.     dnsadmin.playground.com.(
        20150305
        1H
        5M
        3D
        12H )
@       IN      NS      ns.playground.com.
128     IN      PTR     ns.playground.com.
12      IN      PTR     mail.playground.com.
13      IN      PTR     www.playground.com.

 

编辑vm2正反向域区域文件

## 这是vm2正向域 
$TTL 600
@       IN      SOA     dns.playground.com.     dnsadmin.playground.com. (
        20150305
        1H
        5M
        3D
        12H )
@       IN      NS      dns
@       IN      MX  10  mail
dns     IN      A       172.25.137.40
mail    IN      A       172.25.137.12
www     IN      A       172.25.137.13
ftp     IN      CNAME   www
pop     IN      CNAME   www
## 这是vm2反向域 
$TTL 600
@       IN      SOA     dns.playground.com.     dnsadmin.playground.com.(
        20150305
        1H
        5M
        3D
        12H )
@       IN      NS      dns.playground.com.
40      IN      PTR     dns.playground.com.
12      IN      PTR     mail.playground.com.
13      IN      PTR     www.playground.com.

 

全部设置完成后,修改权限重启服务,然后开始测试

## 测试192.168.233.128 
dig www.playground.com @192.168.233.128
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6_6.1 <<>> www.playground.com @192.168.233.128
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38934
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;www.playground.com.        IN  A

;; ANSWER SECTION:
www.playground.com. 600 IN  A   192.168.98.13

;; AUTHORITY SECTION:
playground.com.     600 IN  NS  dns.playground.com.

;; ADDITIONAL SECTION:
dns.playground.com. 600 IN  A   192.168.233.128

;; Query time: 1 msec
;; SERVER: 192.168.233.128#53(192.168.233.128)
;; WHEN: Sat Mar 14 14:34:47 2015
;; MSG SIZE  rcvd: 86

## 测试172.25.137.40 
 dig www.playground.com @172.25.137.40

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6_6.1 <<>> www.playground.com @172.25.137.40
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12736
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;www.playground.com.        IN  A

;; ANSWER SECTION:
www.playground.com. 600 IN  A   172.25.137.13

;; AUTHORITY SECTION:
playground.com.     600 IN  NS  dns.playground.com.

;; ADDITIONAL SECTION:
dns.playground.com. 600 IN  A   172.25.137.40

;; Query time: 0 msec
;; SERVER: 172.25.137.40#53(172.25.137.40)
;; WHEN: Sat Mar 14 14:35:39 2015
;; MSG SIZE  rcvd: 86

测试成功,我们可以看到,相同域名解析不同的IP

rkhunter安装及使用

u22e阅读(7487)

RKHunter 安装

[root@linuxprobe ~]# yum --enablerepo=epel -y install rkhunter 

rkhunter 相關的參數有

[root@test root]# /usr/local/bin/rkhunter --help
# 底下僅列出幾個比較常用的參數,更多參數請自行參考!
--checkall (-c)           :全系統檢測,rkhunter 的所有檢測項目
--createlogfile           :建立登錄檔,一般預設放在 /var/log/rkhunter.log
--cronjob                 :可以使用 crontab 來執行,不會有顏色顯示
--report-warnings-only    :僅列出警告訊息,正常訊息不列出!
--skip-application-check  :忽略套件版本檢測(如果您已確定系統的套件已patch)
--skip-keypress           :忽略按鍵後繼續的舉動(程式會持續自動執行)
--quiet                   :僅顯示有問題的訊息,比 --report-warnings-only 更少訊息
--versioncheck            :檢測試否有新的版本在伺服器上

配置和使用RKHunter,对于常规检查,检查脚本安装在cron.daily目录下,并由Cron每天执行

[root@u22e.com ~]# vi /etc/sysconfig/rkhunter
# recipient address for report
MAILTO=root@localhost
# if specified "yes", scan more detaily
DIAG_SCAN=no
# update database
[root@u22e.com ~]# rkhunter --update
# update system file properties
[root@u22e.com ~]# rkhunter --propupd
# execute checking
# --sk means sikpping to push Enter key
# if specified --rwo , display only warnings
[root@u22e.com ~]# rkhunter --check --sk

自动执行

想要讓程式每日自動執行一次,那就在 /etc/crontab 裡面加入這行:
10 3 * * * root rkhunter --checkall --cronjob

以後就會在 3:10 自動執行一次!不過,因為是 crontab 執行的,所以就不會有顏色的顯示了。

lynis扫描Linux的安全漏洞安装及使用

u22e阅读(4488)

作为系统管理员、Linux安全技术员或系统审查员,你的职责可能涉及下列任务:软件补丁管理、恶意软件扫描、文件完整性检查、安全审查、配置错误检查等等。要是有一款安全漏洞自动扫描工具,那么可以为你在检查常见安全问题方面节省大量的时间。

lynis就是Linux平台上的这样一款安全漏洞扫描工具。这款工具是开源工具(采用GPLv3许可证),实际上在包括Linux、FreeBSD和Mac OS在内的多个平台上得到支持。

lynis安装

yum --enablerepo=epel -y install lynis

lynis扫描Linux的安全漏洞

lynis --check-all -Q

一旦lynis开始扫描你的系统,它就会执行许多类别的审查工作:

•系统工具:系统二进制代码

•引导和服务:引导装入程序和启动服务。

•内核:运行级别、已装入模块、内核配置和核心转储

•内存和进程:僵尸进程和输入输出等待进程

•用户、用户组和验证:用户组编号、sudoers文件、可插拔验证模块(PAM)配置、密码老化和默认掩码

•外壳

•文件系统:挂载点、临时文件和根文件系统

•存储:USB存储(usb-storage)和火线开放式主机控制器接口(firewire ohci)

•NFS

•软件:名称服务:DNS搜索域和BIND

•端口和程序包:容易受到攻击/可以升级的程序包和安全存储库

•网络:名称服务器、混杂接口和连接。

•打印机和假脱机:通用Unix打印系统(CUPS)配置

•软件:电子邮件和消息传送

•软件:防火墙:iptables和pf

•软件:网站服务器:Apache和nginx

•SSH支持:SSH配置

•SNMP支持

•数据库:MySQL根密码

•LDAP服务

•软件:php:php选项

•Squid支持

•日志和文件:syslog守护程序和日志目录

•不安全服务:inetd

•banner信息和身份证明

•调度任务:crontab/cronjob和atd

•审计:sysstat数据和auditd

•时间和同步:ntp守护程序

•密码:SSL证书到期

•虚拟化

•安全框架:AppArmor、SELinux和grsecurity状态

•软件:文件完整性

•软件:恶意软件扫描工具

•主目录:外壳历史文件

实际运行中的lynis的屏幕截图如下所示:

一旦扫描完毕,你系统的审查报告就会自动生成,并保存在/var/log/lynis.log中。

审查报告含有该工具检测到的潜在安全漏洞方面的警告信息。

审查报告还含有许多建议措施,有助于加固你的Linux系统

grep Warning /var/log/lynis.log    #警告

grep Suggestion /var/log/lynis.log   #建议

扫描你系统的安全漏洞,作为一项日常计划任务,想最充分地利用lynis,建议经常来运行它,比如说将它安排成一项日常计划任务。在用“–cronjob”选项来运行时,lynis在自动的非交互式扫描模式下运行。

下面是日常计划任务脚本,在自动模式下运行lynis,以便审查你的系统,并且将每日扫描报告进行归档。

vi /etc/cron.daily/scan.sh

#!/bin/sh

AUDITOR="automated"
DATE=$(date +%Y%m%d)
HOST=$(hostname)
LOG_DIR="/var/log/lynis"
REPORT="$LOG_DIR/report-${HOST}.${DATE}"
DATA="$LOG_DIR/report-data-${HOST}.${DATE}.txt"

cd /opt/lynis
./lynis -c --auditor "${AUDITOR}" --cronjob > ${REPORT}

mv /var/log/lynis-report.dat ${DATA}

执行命令$ sudo chmod 755 /etc/cron.daily/scan.sh

 

rsync failed to set times on

u22e阅读(5011)

rsync: failed to set times on “.” (in bak): Operation not permitted (1)
sending incremental file list
./
rsync: failed to set times on “.” (in bak): Operation not permitted (1)
test.tt
4 100% 0.00kB/s 0:00:00 (xfer#1, to-check=0/2)
rsync: mkstemp “.test.tt.bo17HS” (in bak) failed: Permission denied (13)
sent 92 bytes received 30 bytes 244.00 bytes/sec
total size is 4 speedup is 0.03
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1039) [sender=3.0.6]
这个问题就是,因为 /etc/rsync.conf 文件内,你指定的uid 、 gid 的问题, 这样,你同步文件要写的目录 ,他的属主和属组 都要是/etc/rsync.conf 文件内指定的uid 、 gid ,

这样就不会 rsync: failed to set times on 之类的错误了 !
(1)修改前,rsync 推送文件到目标服务器出错 :

(2)去目标服务器查看 /etc/rsync.conf 文件,看uid和gid分别是什么
(3)然后根据配置文件,把目标服务器的目标目录,chown 目录的属主和属组

centos系统下安装rsync实现自动同步

u22e阅读(15491)

rsync是类unix系统下的数据镜像备份工具,从软件的命名上就可以看出来了——remote sync
它的特性如下:
可以镜像保存整个目录树和文件系统。
可以很容易做到保持原来文件的权限、时间、软硬链接等等。
无须特殊权限即可安装。
快速:第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件。rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽。
安全:可以使用scp、ssh等方式来传输文件,当然也可以通过直接的socket连接。
支持匿名传输,以方便进行网站镜象。

1.服务端安装rsync

yum -y install rsync

2.服务器配置

  • 添加配置并修改配置文件

# vi /etc/xinetd.d/rsync把原来的 disable = yes 改成 disable = no

配置/etc/rsyncd.conf(需要手动生成)

# vi /etc/rsyncd.conf

log file = /var/log/rsyncd.log //日志文件

pid file =/var/run/rsyncd.pid //pid文件路径

lock file = /var/run/rsyncd.lock //指定lock文件

secrets file = /etc/rsyncd.pas //指定用户密码对文件

motd file = /etc/rsyncd.motd //指定欢迎消息文件(此文件没有,可以自行添加)

read only = no //是否只读(若从客户端同步到服务器必须设置为NO)

hosts allow = 192.168.0.0/16,192.168.10.0/24 //允许的IP段

list = yes //是否允许列表

uid = nobody //rsync以什么用户身份启动

gid = nobody //rsync以什么用户组身份启动

use chroot = no //不使用chroot

max connections = 30 //最大连接数

[www] //模块

path = /var/www //模块目录

comment = www bak //描述信息,可以任意填写

auth users = root //认证的用户,服务器必须存在这个系统用户

#ignore errors # 可以忽略一些无关的IO错误
#exclude = cache/111/ cache/222/ #忽略的目录

(保存退出)

  • 修改密码配置

# vi /etc/rsyncd.pas

输入(用户密码对文件,用“:”隔开):

root:u22e.com

修改权限

# chmod 600 /etc/rsyncd.pas //权限必须为600,否则会出错

  • 配置欢迎消息

# vi /etc/rsyncd.motd

输入

welcome to rsync u22e.com

启动rsync服务端(独立启动)

# /usr/bin/rsync –daemon

3.客户端配置

客户端默认好像已经装了rsync,没有的话装下:
# yum -y install rsync

设定密码

# vi /etc/rsyncd.pas

u22e.com

修改权限

# cd /etc

# chown root.root rsyncd.pas

# chmod 600 rsyncd.pas

client连接SERVER

  • 从SERVER端取文件
# rsync -vzrtopg --progress --delete root@192.168.10.122::www /home/rsync/ --password-file=/etc/rsyncd.pas

这个命令行中-vzrtopg里的v是verbose,
z是压缩传输,
r是recursive,
topg都是保持文件原有属性如属主、时间的参数。
u是只同步已经更新的文件,避免没有更新的文件被重复更新一次,不过要注意两者机器的时钟的同步。
–progress是指显示出详细的进度情况,
–delete是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致。
后 面的rsync_user@192.168.0.2::rsync_module_name1中,之后的rsync_module_name1是模块名, 也就是在/etc/rsyncd.conf中自定义的名称,rsync_user是指定模块中指定的可以同步的用户名。
最后的/www是备份到本地的目录名。
在这里面,还可以用-e ssh的参数建立起加密的连接。
可以用–password-file=/password/path/file来指定密码文件,这样就可以在脚本中使用而无需交互式地输入验证密码了,这里需要注意的是这份密码文件权限属性要设得只有属主可读。

  • 向SERVER端上传文件
# rsync -vzrtopg --progress --password-file=/etc/rsyncd.pas /home/rsync/ root@192.168.10.122::www

rsync 常见错误及解决方法请访问如下网址

http://www.u22e.com/198.html