PART II、简易防火措施篇
第7章、限制Linux对外联机的端口
1. 如何观察你Linux主机上已经打开了多少端口?
如果仅想单纯了解正在监听中的端口,可以使用
netstat -tul
,如果还想知道已经建立了多少联机,可以使用
netstat -an
。
2. 如何观察程序?
利用
ps -aux
或
top
查看均可。
3. 请问监听的端口与daemon的关系为何?
正在监听中的端口均是由某些服务(
daemons
)所启动,所以要启动端口就得启用某个服务,要了解某个端口是由哪个
daemon
启动的,利用
netstat -tulp
来查阅。
4. 请解释三次握手的原理与包传输的方向。
三次握手为较可靠的包传输的一种确认方式,因此只有
TCP
包才能具有三次握手。它利用(
1
)
Client
对
Server
主动联机时带有的
SYN
标志;(
2
)
Server
回应时的
SYN/ACK
;(
3
)最终
Client
确认的
ACK
标志来确认包的可靠性。更详细的说明请参考第
2
章。
5. 请问stand alone与super daemon各是什么?
Linux
系统的服务有独立启动(
stand alone
)及超级服务(
super daemon
)两种方式。挂在
super daemon
下的服务可以经由
super daemon
控管,以加强安全功能,不过由于还要经过
super daemon
的管理,所以服务的连接速度上会比
stand alone
慢一点。详细的说明请参考《鸟哥的
Linux
私房菜――基础学习篇》一书第
21
章。
6. 请问你的Linux主机(不论是哪个版本)有关daemon 启动与关闭的脚本与文件放置在哪个目录下?
各个
daemons
的启动与关闭的脚本放置在
/etc/rc.d/init.d
里,至于
super daemon
的控管参数文件则在
/etc/xinetd.d
里!
7. 请将你的Linux主机对外的联机端口全部关闭。
请参考本章的做法,利用
ntsysv
或
chkconfig
等功能加
reboot
,或
netstat
配合
kill
的方式!
第8章、Linux网络套件升级
1. 请依照你的Linux系统进行适合的网络套件升级程序(一步一步写下来),并说明为何选择这样的网络升级程序?
本题请参考本章内容,选择
APT
或其他
Linux
版本网站提供的在线升级方式进行你的套件升级。
第9章、多IP与路由器的架设
1. 请问如何将你的eth0接口改为192.168.100.2在网域192.168.100.0/25之内的网络参数内容?
因为
192.168.100.0/25
的
netmask
为
255.255.255.128
,所以可以这样做:
ifconfig eth0 192.168.100.2 netmask 255.255.255.128 up
。如果尚需其他参数,则需要以文件形式来输入,如
vi /etc/sysconfig/network-scripts/ifcfg-eth0
,并修改为:
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.100.2
NETMASK=255.255.255.128
NETWORK=192.168.100.0
BROADCAST=192.168.100.127
2. 请手动设定eth0:1这个虚拟接口,使其为网络参数:192.168.200.2,网域在192.168.200.0/24。
ifconfig eth0:1 192.168.200.2 up
3. 如何观察路由表?
使用
route -n
即可查阅。要注意
0.0.0.0
那个目标(默认网关)。
4. 如何启动Linux的IP Forward功能?
直接以
echo "1" > /proc/sys/net/ipv4/ip_forward
即可。
5. 假设你是一个学校的信息管理员,学校内有200台计算机,奉上面的旨意,必须将200台计算机分为4个子网,请问应该如何布线(请画出示意图)?而这4个子网的网络参数如何选择(请自行选择)?是否需要路由器?如果需要,假设每个路由器仅能有两个网络实体接口,那么该如何布线?(注:不要使用虚拟接口。)
我的布线如下图所示:
每个路由器都有两个接口,且
4
个路由器的右接口都在同一个网段内!那么
Router 1
怎么跟
Router 2
的内部网域进行沟通?利用
route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.5.2
即可。
6. 万一你的网络有点停顿,发现可能是网络上某个节点出了问题,你应该如何确认是哪一台路由器出了问题?
使用第
5
章中提到的
traceroute
指令来查询。
第10章、认识网络安全
1. 我老是发现我的系统怪怪的,似乎有点停顿,怀疑可能是CPU 负荷太大,所以要检查一下系统相关的信息。请问,我该以什么指令检查我的系统相关信息?
可以使用
top
、
sar
、
free
、
ps -aux
、
uptime
、
last
等指令查询系统相关信息。
2. 我怀疑我的系统上有过多的具有SUID的文件存在,导致一般用户可以随意取得root权限,请问,我要如何找出这些具有SUID权限的文件?
因为
SUID
是
4000
这个权限,所以可以这样做:
find / -perm +4000
3. 我由国内一些ftp网站下载了Red Hat公司发布的套件,我想安装它,但又不知道该套件文件是否被修改过!请问我该如何确定这个套件的可用性?
利用最简易的
MD5
编码来测试,例如
md5sum
套件名称,再比对与原始套件发布的
MD5
数据是否相同。
4. 良好的密码规划是防备主机的第一要务,请问Linux系统中,密码相关的文件与规则设定在哪些文件里?
密码的设定规则在
/etc/login.defs
里!密码文件在
/etc/shadow
内!
5. 简易说明当一台主机被入侵后,应该如何处理?
找出问题、重新安装、漏洞修补、数据还原!请参考本章最后的修补工作内容。
第11章、简易防火墙架设
1.为什么我架设了防火墙,我的主机还是可能中毒?
防火墙不是万灵丹,它还是可能被病毒或木马程序所入侵!此外,如果你的主机本身已经提供了多个网络服务,则当该网络服务的套件有漏洞时,防火墙仍然无法克服该服务的漏洞。因此仍然需要持续进行主机的监视工作!
2. 请说明为何架设了防火墙,我的主机还是可能被入侵?入侵的依据可能是什么?
因为防火墙仅抵挡某些不受欢迎的包,如果你开放
WWW
服务,则要求主机端口
80
的包可直接进入你的主机,万一
WWW
套件有漏洞,那么就可能被入侵了!所以套件的更新很重要。
3. 我们知道核心为2.4的Linux使用的防火墙机制为iptables,请问,如何知道我的Linux核心版本?
利用
uname -r
可以查到!
4. 请列出iptables 默认的两个table,以及各个table里的链与各个链所代表的意义;
filter
为默认的
Table
,里面默认的链有:
•
INPUT
:来自外部,想要进入主机的包;
•
OUTPUT
:来自主机,想要离开主机的包;
•
FORWARD
:主机内部网域与外部网域的包(不论进出),但该包不会进入主机。
还有
nat
这个
table
:
•
PREROUTING
:进行路由之前的包传送过程;
•
OUTPUT
:离开主机的包传送过程;
•
POSTROUTING
:经过路由之后才进行的过滤规则。
5. 什么是iptables的默认政策(Policy)?
当包的所有属性都不在防火墙规则中时,这个包能否顺利通过防火墙,则以
Policy
作为这个包的最终动作!
6. 假设今天我的Linux仅作为Client之用,并没有对Internet 提供任何服务,那么你的防火墙规划应该如何设定?
既然没有对
Internet
提供任何服务,那么(
1
)请将所有的对外端口先关闭(
2
)防火墙规则中,最重要的是
INPUT
的
Policy
一定要
DROP
,然后将
iptables -A INPUT -m state --state RELATED -j ACCEPT
即可。
7. 我要将来自192.168.1.50这个IP来源,只要向我的21~23端口发出请求的包,都将它抵挡,应该如何输入iptables指令?
iptables -A INPUT -p tcp -s 192.168.1.50 --dport 21:23 -j DROP
8. 我要将我自己主机ping的响应功能取消,应该如何输入iptables指令?
因为
ping
能否响应用的是
icmp
的
type 8
(请参考第
2
章内的
ICMP
相关内容),所以我可以这样做:
iptables -I INPUT -p icmp --icmp-type 8 -j DROP
9. 请说明为何这个指令是错误的iptables -A INPUT -p udp --syn -s 192.168.0.20 -j DROP。
只有
TCP
包才会具有
SYN
标志,
UDP
并没有
SYN
标志,所以上面的指令是错误的!
10. DNS的要求是必需的,那么我该如何设定我的主机可以接受请求DNS的响应呢?
因为
DNS
的来源是端口
53
,因此要接受来自端口
53
的包:
iptables -A INPUT -p udp --sport 53 -j ACCEPT
iptables -A INPUT -p tcp --sport 53 -j ACCEPT
11. 如何取消我的系统上的iptables?
先要清除规则,才能将
iptables
移除!不过,我们主要将规则清除即可。
iptables -F; iptables -X; iptables -Z
iptables -t nat -F; iptables -t nat -X; iptables -t nat -Z
12. 如何保存当前的防火墙机制,以及如何将上次保存的机制回复到当前系统中?
请利用
iptables-save
及
iptables-restore
这两个指令,配合命令重导向即可。
第12章、申请合法的主机名称
1. 请简易说明 /etc/hosts的用途。
这个文件早期用于进行主机名称与
IP
的解析,目前常用在内部网域的名称解析上,可以加快内部网域的反查!
2. 请说明合法授权的主机名称需要做什么?
如果想要合法授权,就需要向上层
DNS
主机注册,而且还要上层
DNS
主机管理员愿意将域名的解析权限授权给你。
3. 什么是动态DNS系统?(仅说明Client端)
因为我们的
Client
拨号时,得到的
IP
不是固定的,所以无法以
DNS
系统进行固定
IP
对应主机名称的工作,此时就需要动态
DNS
系统。以
DNS
主机提供的动态更新主机名称对应
IP
的机制,可以让我们的不同
IP
对应到同一个主机名称!
4. 如果你使用adsl拨号上网设定服务器,那么该申请哪类主机名称?为什么?
因为我是以
ADSL
拨号上网,所以
IP
是不固定的,此时需要申请动态
DNS
主机的主机名称,例如
adsldns.org
以及
no-ip.org
等!
PART III、服务器架设篇
第13章、简易Telnet与SSH主机设定
1. Telnet与SSH都是远程联机服务器,为何我们都推荐使用SSH而避免使用Telnet?原因何在?
因为
Telnet
除了使用明码传送数据外,本身
telnet
就是很容易被入侵的一个服务器,所以当然比较危险。至于
SSH
,其实也不是很安全!由中国台湾计算机危机处理小组的文件可以明显发现,
openssl + openSSH
也是常有漏洞发布!不过,比起
telnet
来说,确实会安全一些!
2. 请尝试说明SSH在Server与Client端联机时的包加密机制。
利用
key pair
实现加密机制:
Server
提供
Public Key
给
Client
端计算
Private key
,以提供包传送时的加密、解密!
3. 请问SSH的配置文件是哪个?如果我要修改让root无法使用SSH联机进入我的SSH主机,应该如何设定?另外,如果要让badbird这个用户无法登入SSH主机,该如何设定?
SSH
配置文件名为
sshd_config
,通常放置在
/etc/ssh/sshd_config
内;如果不想让
root
登入,可以修改
sshd_config
内的参数成为
PermitRootLogin no
,并重新启动
SSH
来设定!如果要让
badbird
用户无法登入,同样在
sshd_config
里面设定为:「
DenyUsers badbird
」即可!
4. 在Linux上,默认的Telnet与SSH服务器使用的埠口(端口 number)各为多少?
telnet
与
SSH
的埠口分别是:
23
与
22
!请参考
/etc/services
喔!
5. 如果发现我无法在Client端使用SSH程序登入我的Linux主机,但是Linux主机却一切正常,可能的原因为何?(防火墙、known_hosts……)
无法登入的原因可能有很多,最好先查询
/var/log/messages
里的错误信息来判断,当然,还有其他可能原因为:
1.
被防火墙挡住了,请以
iptables -L -n
来查看,当然也要查看
/etc/hosts.deny
;
2.
可能由于主机重新开机过,
public key
改变了,请修改你的
~/ssh/known_ hosts
里面的主机
IP
;
3.
可能由于
/etc/ssh/sshd_config
里面的设定问题,导致你这个用户无法使用;
4.
在
/etc/passwd
里,你的
user
不具有可以登入的
shell
;
5.
其他因素(如账号密码过期等等)
6. 既然ssh是比较安全的数据包传送方式,那么就可以在Internet上开放我的Linux主机的SSH服务了吗?请说明你选择的答案的原因。
最好不要对
Internet
开放你的
SSH
服务,因为
SSH
的加密函数库使用的是
openssl
,一般
Linux
版本使用的
SSH
是
openssh
,这两个套件事实上仍被发布过不少漏洞,因此,最好不要对
Internet
开放,毕竟
SSH
对于主机的使用权限是很高的!