第五天(11月30日)
第五天的主要内容是关于安全方面的相关知识。
RHCE认证培训+考试七天实录 系列文章 http://www.linuxidc.com/search.aspx?where=nkey&keyword=15815
1、端口扫描与网络嗅探
在服务器server上执行netstat命令查看是否开放了21端口:
[root@localhost ~]# netstat -an | grep :21
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN
在客户端client上用nmap工具扫描服务器开放的端口,首先安装nmap:
# yum install nmap
nmap命令的常用选项:
这里扫描服务器端的tcp端口:
此时如果在服务器端启用防火墙,那么用nmap将扫描不到任何端口。在防火墙上将ftp设为可信服务:
在客户端上再次用nmap扫描就能看到21端口了:
下面首先在服务器上启用tcpdump进行嗅探,并将嗅探结果保存到ftp.txt文件中:
# tcpdump -w ftp.txt
然后在客户端访问服务器上的ftp服务:
[root@localhost ~]# ftp 192.168.0.114
Connected to 192.168.0.114 (192.168.0.114).
220 (vsFTPd 2.2.2)
Name (192.168.0.114:root): mike
331 Please specify the password.
Password:
回到服务器端,按Ctrl+c中止嗅探。
保存在ftp.txt中的嗅探结果是无法直接查看的,需要用wireshark进行协议分析。在服务器端安装wireshark:
# yum install wireshark*
然后执行wireshark命令打开图形化的wireshark,在其中打开刚才生成的ftp.txt文件,过滤ftp协议,可以看到客户端访问时输入的用户名mike和密码123。
2、为网卡设置IP别名
IP别名即为一块网卡配多个IP。
要实现该功能首先要禁用NetworkManager服务(即图形化界面下的网络配置工具):
[root@desktop3 ~]# service NetworkManager stop
停止 NetworkManager 守护进程: [确定]
[root@desktop3 ~]# chkconfig NetworkManager off
下面生成一个名为eth0:1的虚拟网卡,并设置IP:
# ifconfig eth0:1 10.1.1.1 netmask 255.255.255.0
再修改配置文件ifcfg-eth0:1(该文件可以拷贝ifcfg-eth0生成),使之永久生效:
# cp ifcfg-eth0 ifcfg-eth0:1
# vim ifcfg-eth0:1
DEVICE=”eth0:1″
BOOTPROTO=”static”
HWADDR=”00:0C:29:3A:CD:16″
ONBOOT=”yes”
IPADDR=10.1.1.1
NETMASK=255.255.255.0
保存退出,重启服务生效:
service network restart
3、配置内核参数
某些功能需要修改Linux的内核才能实现,如过滤掉ICMP数据包(当然用防火墙也可以)、启用路由功能等。
修改内核参数可以使用sysctl命令,但该命令修改的内核参数是临时的,系统重启后就将失效,如果希望永久更改内核参数,需要修改/etc/sysctl.conf文件。
例1:过滤icmp数据包。
首先在一台客户机上ping服务器,能够ping通。
执行“sysctl –a | grep icmp”命令查看当前与icmp有关的内核参数设置:
[root@server14 ~]# sysctl -a | grep icmp
net.netfilter.nf_conntrack_icmpv6_timeout = 30
net.netfilter.nf_conntrack_icmp_timeout = 30
net.ipv4.icmp_echo_ignore_all = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.icmp_errors_use_inbound_ifaddr = 0
net.ipv4.icmp_ratelimit = 1000
net.ipv4.icmp_ratemask = 6168
net.ipv6.icmp.ratelimit = 1000
其中“net.ipv4.icmp_echo_ignore_all = 0”表示允许接收所有的icmp数据包。
修改配置文件,加入这一行,把值改为1,过滤所有的icmp数据包。
# vim /etc/sysctl.conf
net.ipv4.icmp_echo_ignore_all = 1
保存退出。
执行“sysctl -p”使/etc/sysctl.conf文件生效。
此时在客户端上再ping 192.168.0.114就不通了。
例2:启用路由功能。
启用路由功能通过修改配置文件/etc/sysctl.conf,启用其中的IP转发功能实现:
net.ipv4.ip_forward = 0
将该项的值改为1,即net.ipv4.ip_forward = 1。
保存退出,执行“sysctl -p”命令生效。
在Linux中提供了一款路由软件quagga,可以提供比较强的路由功能,对于一个一百台以内主机的小型网络,完全可以使用该软件配置软路由。
# yum install quagga
# cd /etc/quagga
# ls
bgpd.conf.sample ripd.conf.sample zebra.conf bgpd.conf.sample2
ripngd.conf.sample zebra.conf.sample ospf6d.conf.sample vtysh.conf
ospfd.conf.sample vtysh.conf.sample
手工生成quagga的配置文件并启用服务:
# touch ripd.conf
[root@localhost quagga]# service ripd start
启动ripd: [确定]
[root@localhost quagga]# touch ospfd.conf
[root@localhost quagga]# service ospfd start
启动ospfd: [确定]
执行vtysh命令进入路由配置模式,此时可以像配置思科路由器一样的执行路由交换命令:
[root@localhost quagga]# vtysh
Hello, this is Quagga (version 0.99.15).
Copyright 1996-2005 Kunihiro Ishiguro, et al.
localhost.localdomain# conf t
localhost.localdomain(config)#
4、配置防火墙
netfilter是Linux内核中真正的防火墙,iptables是netfilter的管理工具,为防火墙体系提供过滤规则和策略。
防火墙的基本概念
(1)规则链
规则链是防火墙规则/策略的集合。
默认的5种规则链:
INPUT:处理入站数据包
OUTPUT:处理出站数据包
FORWARD:处理转发数据包
POSTROUTING链:在进行路由选择后处理数据包(主要用于NAT)
PREROUTING链:在进行路由选择前处理数据包(主要用于NAT)
(2)规则表
规则表是规则链的集合。
默认的4个规则表:
raw表:确定是否对该数据包进行状态跟踪
mangle表:为数据包设置标记
nat表:修改数据包中的源、目标IP地址或端口
filter表:确定是否放行该数据包(过滤)
常用的主要是filter表和nat表,对于主机防火墙只涉及filter表,而且对于filter表中的OUTPUT链一般不做限制,FORWARD链也较少使用,最常用到的就是INPUT链,也就是对入站的数据进行过滤。
例:使用iptables命令设置防火墙规则
iptables是Linux系统中最复杂的命令之一,iptables命令的语法格式:
iptables [-t 表名] 管理选项 [链名] [条件匹配] [-j 目标动作或跳转]
(1)“表名”可以不写,默认就是filter表。
(2)“管理选项”告诉iptables要做什么事情,是添加规则、修改规则还是删除规则。管理选项必须是大写,其中常用的是:
“-A”,在规则表的末尾添加规则。
“-I”,-I后面跟着一个序号,表示在规则表中插入一条规则。
“-P”,设置默认规则。
(3)“链名”必须用大写字母,最常设置的是INPUT链。
(4)“条件匹配”必须用小写字母,常用的选项有:
-p,指定协议类型。如“-p tcp sport 1024”指定源端口,“-p tcp dport 80”指定目的端口。
-s,指定源IP地址或子网。如“-s 192.168.0.0/24”。
-d,指定目的IP地址或子网。如“-d 192.168.0.0/24”。
(5)“-j 目标动作或跳转”动作必须用大写字母。常用的动作有:
-j ACCEPT,将与规则匹配的数据包放行。
-j REJECT,拒绝所匹配的数据包,并向该数据包的发送者回复一个ICMP错误通知。
-j DROP,丢弃所匹配的数据包,不回复错误通知(较少使用)。
iptables命令的3个常用用法:
“iptables –L” 显示防火墙规则
“iptables –F” 删除filter表中的所有规则。
“service iptables save ” 保存防火墙规则
下面是一个防火墙规则的配置实例:
iptables -F 删除所有规则
iptables –P INPUT DROP 将默认规则设为拒绝所有
iptables –A INPUT –I lo –j ACCEPT 允许本机可以访问自己的回环接口
iptables –A INPUT –m state –state ESTABLISHED,RELATED –j ACCEPT 允许接收由本机主动发出请求之后而回来的响应包
iptables –A INPUT –p tcp –dport 80 –j ACCEPT 允许访问本机的80端口
iptables –A INPUT –s 192.168.0.0/24 –p tcp –dport 21 –j ACCEPT 只允许指定网段访问本机的21端口
iptables –A INPUT –p icmp –j ACCEPT 允许接收icmp包
service iptables save 保存防火墙规则
iptables –L 显示防火墙规则