一不小心出了国
分类: LINUX
2007-12-03 11:10:58
正文
编辑/etc/hosts.allow 和/etc/hosts.deny,设置TCP内核级的访问控制。
若需要允许/禁止所有地址对所有服务的访问,添加如下条目:
all:all
若需要允许/禁止192.168.1.100对ssh服务的访问,添加如下条目:
ssh:192.168.1.100
当两个文件中的策略发生冲突时,以hosts.allow中的条目优先。
配置 iptables防火墙,如果不具备娴熟的技巧,建议一定要在所配置主机的本地控制台上进行,不要远程配置,因为,一旦配置了一条与当前连接匹配的过滤规则,则会马上生效,并终止当前的连接,甚至某些规则会导致即使在本地主机上也无法登录,比如将"iptables -P INPUT -j DROP" 作为的一条过滤规则命令发布就会导致这种情况,此时,任何远程或者本地都无法登录主机,可以冷启动主机解决此问题,因为尚未发布iptables- save 命令来保存规则设置。
inconfig interface [[-net|-host] address [parameters]]
ipconfig eth0 192.168.0.1
ipconfig eth1 203.99.9.9
promisc 参数用于把此以太接口置于“混乱”状态, -promisc 取消此状态。
netstat -r 显示路由信息
netstat -i 以IP地址格式显示
netstat -i 列出配置特性
netstat -a 列出内核中所有接口
netstat -t 仅列出TCP连接
netstat -u 仅列出UDP连接
/etc/host.conf bind 服务器的核心配置文件
/etc/resolv.conf bind 服务器的解析配置文件
DNS的数据库中包含三种类型的记录:
主机名如果以“.“结尾,代表是绝对主机名,即一个完整的包含域名的规范主机名(如:),否则是一个相对主机名,代表主机名与某一个域名相关联。
SOA记录中的特殊名“@”代表其自身的域名。如果希望解析domain.com 本身到某个IP地址,则使用“@”作为主机名即可。如果希望解析所有xxx.domain.com 到某个IP 地址(xxx可以是任何字母),则使用“*”作为主机名。
/etc/services文件定义了服务名到端口号的转换。
查看磁盘使用情况
$ df -kl
把 *.tar.Z的文件包解压缩成.tar文件,
$ gunzip -dv filename.tar.Z
再用tar 命令进行解包,其中,-v用于显示解包过程
$ tar -xvf filename.tar
把目录打成一个tar包
$ tar -cvf newfile.tar directory
一次完成解压缩和解包.tar.gz 文件的命令
$ tar -zxvf filename.tar.gz
重新启动xinetd服务,用于修改xinetd配置文件后,不需重起主机而重新装载文件。
# /etc/init.d/xinetd reload
其他的参数:start, stop, restart, status...
此命令需要root权限执行。
以root的身份执行xinetd命令, 并不更改当前shell
$ su - root -c xinetd reload #
也可以:
$ su - root -c '(cmd1;cmd2)'
解开 '.bz2' 文件
$ bzip2 -d *.tar.bz2
对于iso文件,linux可以采用mount命令读取,如:
$ mkdir /mnt/iso
$ mount -t iso9660 -o loop disc1.iso /mnt/iso
$ ls /mnt/iso
把一张光盘制作成iso文件(首先mount好光驱):
$ cp /mnt/cdrom disc1.iso
解压.zip文件到新的目录:
$ unzip -d newdir file.zip
查看文件或目录所占用的磁盘块多少,目前linux版本下每个磁盘块默认是1k:
$ du /tmp
$ du /tmp/log.txt
查看文件目录所占用的详细字节数:
$ du -ab /tmp
$ du -ab /tmp/log.txt
命令行下通过http协议下载文件:
$ wget
支持续传:
$ wget -c url
还有很多其他参数,设置cache、http用户认证和代理认证等。
rcp命令可以用于在linux主机间copy文件
列出系统中的所有服务,查看在各个系统启动级别的启动设置:
# chkconfig --list
更改服务启动设置(会修改所有系统启动级别的设置):
# chkconfig srvname on|off
仅修改特定级别的启动设置,n可以指定从1至5:
# chkconfig --level n srvname on|off
启动或者停止某个服务:
# service srvname start|stop
查看所有服务状态:
# service --status-all
查看某个服务状态:
# service srvname status
系统的syslogd服务会写日志文件/var/log/messages,一般其他应用程序的消息也会通过syslogd记录在此文件。
可是用如下命令监视:
给一个目录设置粘连位,设置了粘连位的目录在属性中的最后一位有一个字母t,使用ls -l查看。设置了粘连位的目录中,用户只能删除自己创建的文件。
$ chmod +t dir_name
比如一般linux发布中,/tmp目录默认被设置粘连位。
$ ls -ld /tmp
drwxrwxrwt 27 root root 8192 Nov 29 23:12 /tmp
另外还有两个文件许可位,suid与sgid。设置了suid或者sgid许可位的文件在执行时,不依赖于当前执行的用户(或当前执行用户的组),而使用此文件所有者(或所有者的组)的身份来执行。
设置了suid或者sgid位的文件,相应许可位rwx中的x变为s。
使用如下命令设置设置suid位:
# chmod u+s filename
# ls -l filename
-rwsr-xr-x
使用如下命令设置sgid位:
# chmod g+s filename
# ls -l filename
-rwxr-sr-x
使用下面的命令可以列出系统中所有的suid或者sgid程序:
# $ find / \( -perm -02000 -o -perm -04000 \) -ls
定期使用命令
# grep -i 'authentication failure' /var/log/messages > failed_logins.txt
查看系统是否有未成功的登录企图是很有用的,不同的linux发布可能有不同的特征串,其中-i参数指定匹配中忽略大小写。
也可以把这个命令作为一个任务定期运行,但要注意文件的输出问题,以及定期做检查与清理工作。
可以设置一个文件为追加模式,只能加入内容,不允许删除,或者减少内容的操作,只有root能够设置这个属性。
# chattr +a filename
注意,设置了+a 的文件即使root本身也不无法修改和删除,除非使用去除属性设置:
# chattr -a filename
这个操作可以应用于系统的日志文件,这些文件正常情况下只是追加,即使root也不会有删除这些文件内容的需要,这会给已取得root权限的黑客造成一点小的障碍,延误他破坏的进程,虽然只是一小步。
设置了+s属性的文件,在删除时,会把磁盘块清零。
查看一个文件使用chattr设置的属性。
# lsattr filename
LIDS,一个内核级的Linux入侵检测系统,可以检测到Nmap、SATAN等工具所作的半公开扫描、SYN秘密扫描、秘密FIN以及Xmas等。可讲检测到的扫描通过syslog后者email记录下来。
下载地址:
安装lids之后需要重新编译内核,再次安装并重启动linux系统。
Linux系统的日志主要分为两种类型:
前者是由用户进程或其他系统服务进程自行生成的日志,比如apache服务器的access_log与error_log日志文件。
后者是由系统syslog记录的日志,任何希望记录日志的系统进程或者用户进程都可以给调用syslog来记录日志,这是一个面对多数应用程序记录日志的通用解决方法。
一般这个消息会发送给/dev/log,然后由syslog记入日志文件。
syslogd是linux系统中默认的系统日志守护进程,可以通过/etc/syslog.conf进行配置消息的去向。如下行取自/etc/syslog.conf文件:
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;news.none;authpriv.none;cron.none /var/log/messages
# The authpriv file has restricted access.
authpriv.* /var/log/secure
# Log all the mail messages in one place.
mail.* /var/log/maillog
# Log cron stuff
cron.* /var/log/cron
# Save boot messages also to boot.log
local7.* /var/log/boot.log
syslog中的功能划分如下:
syslog的日志级别:
syslog.conf 的第一列用来指定日志功能和日志级别,中间用.隔开,可以使用*来匹配所有的日志功能和日志级别
第二列是消息的分发目标,可以有如下格式:
/path/to/filename 将消息追加到指定的文件尾,最常用
@loghost 将消息写到loghost主机上的syslog服务器
|/path/to/named_pipe 将消息写到指定的命名管道(便于外部程序过滤消息)
user1, user2 将消息写到指定的用户
* 将消息写到所有的用户
/de/console, /dev/tty1 等 将消息写到指定的终端
一个好的syslog.conf应该如下:
# Log ALL messages to /var/log/messages
# for easy scanning by log checkers
*.debug /var/log/messages
# write to terminals for really bad situations
kern,daemon.crit /dev/console
kern,daemon.crit root
*.emerg *
# Separate out other logs to be easier to read
# Debug level for more important facilities
kern.debug /var/log/kern.log
mail.debug /var/log/mail.log
daemon.debug /var/log/daemon.log
auth.debug /var/log/auth.log
syslog.debug /var/log/syslog.log
authpriv.debug /var/log/authpriv.log
fpt.debug /var/log/ftp.log
# Notice fine for others
user.notice /var/log/user.log
lpr.notice /var/log/lpr.log
news.notice /var/log/news.log
uucp.notice /var/log/uucp.log
cron.notice /var/log/cron.log
local0,local1,local2.notice /var/log/local.log
local3,local4,local5.notice /var/log/local.log
local6.notice,local7.notice /var/log/local.log
在修改了syslog.conf文件的同时,别忘了,应该把旧的日志文件归档到一个统一的目录,比如: old_log,这样可以使日志文件更清晰一些。但要注意,新的日志文件中,也使用了messages这个文件。
syslogd也可以在shell中被调用,任何验证的用户都可以通过如下调用,在日志中产生一行:
$ logger -p kern.alert -t 'su(pam_unix)' "authentication failure..."
这与一条失败验证产生的日志一模一样。而且黑客可能会大量的产生无用日志信息,用来塞满日志系统,使日志发生轮回,以清除旧的日志,或者使日志塞满,无法再记录新的日志。
因为,我们在保护日志的同时,也必须认识到,日志中的内容并不是完全可信的。
日志文件的许可设置原则:
只有root可以写入日志文件,并且只有logs组的用户才有读权限,如下
# addgroup logs
# cd /var/log
# chgrp -R logs .
# find . -type -d | xargs chmod 750
# find . -type -f | xargs chmod 640
# chmod 750 .
还需要保证/var/log 目录只有root才能写入,否则日志可以被别人删除:
# ls -ld /var/log
drwxr-xr-x 17 root root 4096 Nov 29 01:52 /var/log
一种保护日志的方式,在网络中设定一台秘密的syslog主机,把这台主机的网卡设为混杂模式,用来监听子网内所有的syslog包,这样把所有需要传送日志的主机配置为向一台不存在的主机发送日志即可。
这样即使黑客攻陷了目标主机,也无法通过syslog.conf文件找到备份日志的主机,那只是一个不存在的主机。实际操作中还可以辅以交换机的配置,以确保syslog包可以被备份日志主机上的syslog进程接受到。
比如把syslog.conf中的传送日志主机设为 @192.168.0.13,但实际网络中不存在这个日志主机,实际可能是192.168.0.250或者其他主机正在接受syslog包。
子网掩码30意味着这个子网中只有2台主机。
对于域名拥有者来讲,保存在域名中心的个人信息即是某种正当的需要,同时也暴露了很多个人的隐私,因为这些个人信息一般都填写的是真实有效的。
在unix中,通过如下命令,就可以取到这些的信息,而这对于那些打算展开社交攻击的黑客们已经足够了。
$ whois domain.com
对于有些whois的版本,在第一次仅会查出有关这个域名的基本信息,但其中包含了用于进一步查找这个域名的服务器:
Whois Server: whois.xxxxxx.xxx
可以通过如下命令进一步查找更详细的信息:
whois domain.com@whois.xxxxxx.xxx
当前在redhat 9发布版本中所带的whois版本已经可以自动进行这种进一步查找,你只需要简单的发布一次:
$ whois domain.com
对于一个IP地址,也可以使用whois服务器查询这个IP地址被分配给了那个组织。这需要使用whois.arin.net数据库:
$ whois ip@whois.arin.net
一般会返回详细信息,包括组织的地址与电话,如果这个whois数据库不包含具体信息,一般会返回一个ReferralServer,比如:
ReferralServer: whois://whois.apnic.net
这是亚太地区的一个服务器,可以继续查询:
$ whois ip@whois.apnic.net
一般这会返回这个ip所属的组织详细信息。
touch命令可用来修改文件属性
# touch -t 200411280000.00 filename
如下命令可以用于找出
# touch -t 200411280000.00 /tmp/comparison
# find / \( -newer /tmp/comparison -o -cnewer /tmp/comparison \) -ls
有关系统漏洞方面的最受推荐的一个邮件列表:
其他还有Vulnwatch和Linux Security等。