linux防火墙简单应用整理


 



***某台电脑有不少种途径,其中经过端口进行***比较广泛,并且一经成功危害比较大。特别是做为服务器的计算机,把没必要要的端口关闭,这是经常使用的作法。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端口

下面我只打开22端口,就是下面2个语句

]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT

]# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT

]# service iptables save

打开53端口(原始文件没有)

下面我只打开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访问,就只容许给某一个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.-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服务器,只开放2280端口,也就是 INPUTOUTPUT都是开放的,这个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


状况就像如今这样。为何说不够安全呢 ??






假设有人进入了服务器,或者有病毒***程序,它能够经过2280端口服务器外传送数据。它的这种方式就和咱们正常访问2280端口区别。它发向外发的数据不是咱们经过访问网页请求而回应的数据包。


下面咱们要禁止这些没有经过请求回应的数据包,通通把它们堵住掉。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这个是查看规则并且带上编号。咱们看到编号就能够删除对应的规则了。


这样就能够防止别人利用2280端口,随意发出没有通过请求的数据包了。



DNS端口53


上几回视频咱们作了端口方面的设置, 若是你发现不能解析一些域名,说明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这个端口的访问。


FTP服务设置

我以前也作过iptables容许某个端口访问的视频,为何还要作ftp端口这个演示?由于ftp端口真的比较特殊,并不像8022这些端口。


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, 要传输数据的端口范围就在3000131000 这个范围内传送。这样咱们使用 iptables 就好办多了,咱们就打开 3000131000 这些端口。


[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  等等要求更加高的验证



wKioL1Xib7GjmuMIAABngpxKQnk972.jpg

相关文章
相关标签/搜索