***某台电脑有不少种途径,其中经过端口进行***比较广泛,并且一经成功危害比较大。特别是做为服务器的计算机,把没必要要的端口关闭,这是经常使用的作法。web 对端口的处理 经常使用的作法:浏览器 关闭全部端口,只打开要对外使用的端口。 安全 例如:做为web服务器 咱们能够关闭全部端口,只打开80端口。服务器 |
# iptables -L -ndom
看到 INPUT ACCEPT, FORWARD ACCEPT , OUTPUT ACCEPTssh
咱们能够这样理解,iptables 由3个部分组成INPUT, FORWARD 和 OUTPUT,咱们先看 INPUT 和 OUTPUT(policy ACCEPT) 表示是彻底接受 全部的数据,也就是说如今的iptables 防火墙 没有起到任何做用。tcp
修改防火墙的默认设置:ide
# iptables -P INPUT DROP网站
# iptables -P INPUT ACCEPTgoogle
只容许某个端口访问
配置服务器时每每是只打开某个端口,其余的端口所有关闭来提升咱们服务器的安全性。 下面我就用端口22来举个例子如何实现,只容许端口22的访问 其余端口所有都不能访问的, 端口22就是咱们经过ssh来进行远程访问Linux默认端口。 |
看我如今服务器的状况:
经过命令 netstat -tnl 能够查看当前服务器打开了哪些端口
[root@localhost ~]# netstat -tnl
下面咱们关闭全部的端口
]# iptables -P INPUT DROP
]# iptables -P FORWARD DROP
]# iptables -P OUTPUT DROP
再查看一下 iptables -L -n
好成功关闭了全部端口。
下面我只打开22端口,就是下面2个语句
]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
]# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
]# service iptables save
下面我只打开53端口,就是下面2个语句
针对本地服务的设置
]# iptables -A INPUT -p tcp --sport 53 -j ACCEPT
]# iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
针对DNS服务器的设置
]# iptables -A INPUT -p tcp --dport 53 -j ACCEPT
]# iptables -A OUTPUT -p tcp --sport 53 -j ACCEPT
]# service iptables save
再查看下 iptables -L -n 是否添加上去, 看到添加了
[root@localhost ~]# netstat -tnl
]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT ]# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT 针对这2条命令进行一些讲解吧 -A 参数就当作是添加一条 INPUT 的规则 -p 指定是什么协议 咱们经常使用的tcp 协议,固然也有udp 例如53端口的DNS 到时咱们要配置DNS用到53端口 你们就会发现使用udp协议的 而 --dport 就是目标端口 当数据从外部进入服务器为目标端口 反之 数据从服务器出去 则为数据源端口 使用 --sport -j 就是指定是 ACCEPT 接收 或者 DROP 不接收 |
不少时候咱们出于安全的角度须要禁止某个ip访问本服务器,或者只能接受某个ip访问。 例如发现服务器受到某个ip***,就能够拒绝该ip的访问。 还有就是我这台服务器里面不少保密资料,不容许任何ip访问,就只容许给某一个ip能够访问。 |
1. 首先第一种状况 禁止某个ip访问个人网站
要禁止 192.168.1.1 访问
]# iptables -P INPUT DROP
]# iptables -P FORWARD DROP
]# iptables -P OUTPUT DROP
]# iptables -A INPUT -p tcp -s 192.168.1.1 -j DROP
2. 只容许某台电脑访问
只容许 ip为 192.168.1.2 的电脑访问, 只设置 INPUT 经过仍是不行;还要设置 OUTPUT 才行。
[root@localhost ~]# iptables -A INPUT -p tcp -s 192.168.1.2 -j ACCEPT
[root@localhost ~]# iptables -A OUTPUT -p tcp -d 192.168.1.2 -j ACCEPT
[root@localhost ~]# iptables -L -n
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- 192.168.1.2 0.0.0.0/0
Chain FORWARD (policy DROP)
target prot opt source destination
Chain OUTPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 192.168.1.2
3. 删除规则
删除一些规则 咱们常常会添加一些规则,可是当咱们再也不使用了其中一条规则,就要删除。或者添加写错了一些数据,也须要删除。 |
咱们都知道 iptables -L -n 能够查看iptables 的设置状况
经过 iptables -L -n --line-number 能够显示规则和相对应的编号,多了 num 这一列, 这样就能够用规则对应的 编号进行删除了
iptables -D INPUT 2
删除INPUT链编号为2的规则。
下面我把其他的 也删除掉。 删除完了。
]# netstat -nltp
]# iptables -L -n
]# iptables -L -n --line-number
]# iptables -D INPUT 2
]# iptables -D OUTPUT 2
]# iptables -D FORWARD 2
再 iptables -L -n 查看一下 已经被清除了。
以前咱们配置过iptables只开放某些端口,可是想安全点的话,还须要过滤一些无效的数据包,怎样才算无效? 不是正常请求回应的数据包。 |
为何这样说呢? 例如,如今有台Linux服务器,只开放22和80端口,也就是 INPUT和OUTPUT都是开放的,这个2个端口。
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
Chain FORWARD (policy DROP)
target prot opt source destination
Chain OUTPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:22
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:80
状况就像如今这样。为何说不够安全呢 ??
假设有人进入了服务器,或者有病毒***程序,它能够经过22,80端口向服务器外传送数据。它的这种方式就和咱们正常访问22,80端口有区别。它发向外发的数据不是咱们经过访问网页请求而回应的数据包。
下面咱们要禁止这些没有经过请求回应的数据包,通通把它们堵住掉。iptables 提供了一个参数 是检查状态的,下面咱们来配置下 22 和 80 端口,防止无效的数据包。
]# iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
能够看到和咱们之前使用的:
]# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
多了一个状态判断。
一样80端口也同样, 如今删掉原来的2条规则,iptables -L -n --line-number这个是查看规则并且带上编号。咱们看到编号就能够删除对应的规则了。
这样就能够防止别人利用22和80端口,随意发出没有通过请求的数据包了。
上几回视频咱们作了端口方面的设置, 若是你发现不能解析一些域名,说明DNS不可用,而DNS不能用了,有几种可能性,其中一种就是防火墙把DNS端口给关闭了。 |
如何设置iptables来打开DNS端口,DNS端口对应的是53
ping 一下域名也是不通(iptables限制了域名解析请求)
[root@localhost ~]# ping www.google.com
ping: unknown host www.google.com
下面演示下如何使用 iptables 来设置DNS 53这个端口,若是你不知道 域名服务端口号,你
能够用命令 : grep domain /etc/services
[root@localhost ~]# grep domain /etc/services
domain 53/tcp # name-domain server
domain 53/udp
domaintime 9909/tcp # domaintime
domaintime 9909/udp # domaintime
同时还要设置
]# iptables -A INPUT -p udp --dport 53 -j ACCEPT
]# iptables -A OUTPUT -p udp --sport 53 -j ACCEPT
ping 方面可能还要设置些东西。
用 nslookup 看看吧
[root@localhost ~]# nslookup
> www.google.com
Server: 192.168.1.1
Address: 192.168.1.1#53
Non-authoritative answer:
www.google.com canonical name = www.l.google.com.
www.l.google.com canonical name = www-china.l.google.com.
Name: www-china.l.google.com
Address: 64.233.189.147
Name: www-china.l.google.com
Address: 64.233.189.99
Name: www-china.l.google.com
Address: 64.233.189.104
说明本机DNS正常, iptables 容许53这个端口的访问。
我以前也作过iptables容许某个端口访问的视频,为何还要作ftp端口这个演示?由于ftp端口真的比较特殊,并不像80,22这些端口。
FTP服务使用了两个端口20,21
[root@localhost root]# iptables -A INPUT -p tcp --dport 21 -j ACCEPT
[root@localhost root]# iptables -A INPUT -p tcp --dport 20 -j ACCEPT
[root@localhost root]# iptables -A OUTPUT -p tcp --sport 21 -j ACCEPT
[root@localhost root]# iptables -A OUTPUT -p tcp --sport 20 -j ACCEPT
这样就添加完了,咱们用浏览器访问一下ftp,出现超时。因此我刚才说 ftp 是比较特殊的端口,它还有一些端口是数据传输端口,例如目录列表, 上传 ,下载 文件都要用到这些端口。而这些端口是任意端口。这个任意真的比较特殊。
若是不指定什么一个端口范围, iptables 很难对任意端口开放的,若是iptables容许任意端口访问, 那和不设置防火墙没什么区别,因此不现实的。那么咱们的解决办法就是指定这个数据传输端口的一个范围。
下面咱们修改一下ftp配置文件。
我这里使用vsftpd来修改演示。
[root@localhost root]# vi /etc/vsftpd.conf
在配置文件的最下面 加入
pasv_min_port=30001
pasv_max_port=31000
而后保存退出。
这两句话的意思告诉vsftpd, 要传输数据的端口范围就在30001到31000 这个范围内传送。这样咱们使用 iptables 就好办多了,咱们就打开 30001到31000 这些端口。
[root@localhost root]# iptables -A INPUT -p tcp --dport 30001:31000 -j ACCEPT
[root@localhost root]# iptables -A OUTPUT -p tcp --sport 30001:31000 -j ACCEPT
[root@localhost root]# service iptables save
最后进行保存, 而后咱们再用浏览器范围下 ftp。能够正常访问
上传和下载都正常。。 再查看下 iptables 的设置
[root@localhost root]# iptables -L -n
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:21
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:20
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpts:30001:31000
Chain FORWARD (policy DROP)
target prot opt source destination
Chain OUTPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:22
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:21
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:20
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spts:30001:31000
能够添加一些对数据包的验证例如 -m state --state ESTABLISHED,RELATED 等等要求更加高的验证