利⽤iptables来配置linux禁⽌所有端⼝登陆和开放指定端
⼝的⽅法
1、关闭所有的 INPUT FORWARD OUTPUT 只对某些端⼝开放。
下⾯是命令实现:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
再⽤命令 iptables -L -n 查看是否设置好,好看到全部 DROP 了
这样的设置好了,我们只是临时的,重启服务器还是会恢复原来没有设置的状态
还要使⽤ service iptables save 进⾏保存
看到信息 firewall rules 防⽕墙的规则其实就是保存在 /etc/sysconfig/iptables
可以打开⽂件查看 vi /etc/sysconfig/iptables
2、下⾯我只打开22端⼝,看我是如何操作的,就是下⾯2个语句
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
再查看下 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
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
现在Linux服务器只打开了22端⼝,⽤测试⼀下是否可以链接上去。
可以链接上去了,说明没有问题。
最后别忘记了保存对防⽕墙的设置
通过命令:service iptables save 进⾏保存
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 不接收
3、禁⽌某个IP访问
1台Linux服务器,2台windows xp 操作系统进⾏访问
Linux服务器ip 192.168.1.99
xp1 ip: 192.168.1.2
xp2 ip: 192.168.1.8
下⾯看看我2台xp 都可以访问的
192.168.1.2  这是 xp1 可以访问的,
192.168.1.8 xp2 也是可以正常访问的。
那么现在我要禁⽌ 192.168.1.2 xp1 访问, xp2 正常访问,
下⾯看看演⽰
通过命令 iptables -A INPUT -p tcp -s 192.168.1.2 -j DROP
这⾥意思就是 -A 就是添加新的规则,怎样的规则呢?由于我们访问⽹站使⽤tcp的,我们就⽤ -p tcp , 如果是 udp 就写udp,这⾥就⽤tcp了, -s就是来源的意思,ip来源于 192.168.1.2 ,-j 怎么做我们拒绝它这⾥应该是 DROP
好,看看效果。好添加成功。下⾯进⾏验证⼀下是否⽣效
⼀直出现等待状态最后该页⽆法显⽰,这是 192.168.1.2 xp1 的访问被拒绝了。
再看看另外⼀台 xp 是否可以访问,是可以正常访问的 192.168.1.8 是可以正常访问的
4、如何删除规则
⾸先我们要知道这条规则的编号,每条规则都有⼀个编号
通过 iptables -L -n --line-number 可以显⽰规则和相对应的编号
num  target    prot opt source              destination
1    DROP      tcp  --  0.0.0.0/0            0.0.0.0/0          tcp dpt:3306
2    DROP      tcp  --  0.0.0.0/0            0.0.0.0/0          tcp dpt:21
3    DROP      tcp  --  0.0.0.0/0            0.0.0.0/0          tcp dpt:80
多了 num 这⼀列,这样我们就可以看到刚才的规则对应的是编号2
linux所有命令都无法使用那么我们就可以进⾏删除了
iptables -D INPUT 2
删除INPUT链编号为2的规则。
再 iptables -L -n 查看⼀下已经被清除了。
5、过滤⽆效的数据包
假设有⼈进⼊了服务器,或者有病毒⽊马程序,它可以通过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
这个是查看规则⽽且带上编号。我们看到编号就可以删除对应的规则了。
iptables -D OUTPUT 1    这⾥的1表⽰第⼀条规则。
当你删除了前⾯的规则,编号也会随之改变。看到了吧。
好,我们删除了前⾯2个规则,22端⼝还可以正常使⽤,说明没问题了
下⾯进⾏保存,别忘记了,不然的话重启就会还原到原来的样⼦。
service iptables save    进⾏保存。
Saving firewall rules to /etc/sysconfig/iptables:          [  OK  ]
其实就是把刚才设置的规则写⼊到 /etc/sysconfig/iptables ⽂件中。
6、DNS端⼝53设置
下⾯我们来看看如何设置iptables来打开DNS端⼝,DNS端⼝对应的是53
⼤家看到我现在的情况了吧,只开放22和80端⼝,我现在看看能不能解析域名。
le    输⼊这个命令后,⼀直等待,说明DNS不通
出现下⾯提⽰:
;; connection timed out; no servers could be reached
ping ⼀下域名也是不通
[root@localhost ~le
ping: unknown le
我这⾥的原因就是 iptables 限制了53端⼝。
有些服务器,特别是Web服务器减慢,DNS其实也有关系的,⽆法发送包到DNS服务器导致的。下⾯演⽰下如何使⽤ 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
看到了吧,我们⼀般使⽤ udp 协议。
好了,开始设置。。。
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
这是我们 ping ⼀个域名,数据就是从本机出去,所以我们先设置 OUTPUT,
我们按照ping这个流程来设置。
然后 DNS 服务器收到我们发出去的包,就回应⼀个回来
iptables -A INPUT -p udp --sport 53 -j ACCEPT
同时还要设置
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp --sport 53 -j ACCEPT
好了,下⾯开始测试下,可以⽤ iptables -L -n 查看设置情况,确定没有问题就可以测试了[root@localhost ~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:80
ACCEPT    udp  --  0.0.0.0/0            0.0.0.0/0          udp spt:53
ACCEPT    udp  --  0.0.0.0/0            0.0.0.0/0          udp dpt:53
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 state ESTABLISHED
ACCEPT    tcp  --  0.0.0.0/0            0.0.0.0/0          tcp spt:80 state ESTABLISHED
ACCEPT    udp  --  0.0.0.0/0            0.0.0.0/0          udp dpt:53
ACCEPT    udp  --  0.0.0.0/0            0.0.0.0/0          udp spt:53
可以测试⼀下是否 DNS 可以通过iptables 了。
[root@localhost ~le
le is an alias for le.
le has address 64.233.189.104
le has address 64.233.189.147
le has address 64.233.189.99
正常可以解析 google 域名。
ping ⽅⾯可能还要设置些东西。
⽤ nslookup 看看吧
[root@localhost ~nslookup
> le
Server:        192.168.1.1
Address:        192.168.1.1#53
Non-authoritative answer:
le        canonical name = le.
Name:  le
Address: 64.233.189.147
Name:  le
Address: 64.233.189.99
Name:  le
Address: 64.233.189.104
说明本机DNS正常, iptables 允许53这个端⼝的访问。
7、iptables对ftp的设置
现在我开始对ftp端⼝的设置,按照我们以前的视频,添加需要开放的端⼝
ftp连接端⼝有2个 21 和 20 端⼝,我现在添加对应的规则。
[root@localhost rootiptables -A INPUT -p tcp --dport 21 -j ACCEPT
[root@localhost rootiptables -A INPUT -p tcp --dport 20 -j ACCEPT
[root@localhost rootiptables -A OUTPUT -p tcp --sport 21 -j ACCEPT
[root@localhost rootiptables -A OUTPUT -p tcp --sport 20 -j ACCEPT
好,这样就添加完了,我们⽤浏览器访问⼀下ftp,出现超时。
所以我刚才说 ftp 是⽐较特殊的端⼝,它还有⼀些端⼝是数据传输端⼝,例如⽬录列表,上传,下载⽂件都要⽤到这些端⼝。
⽽这些端⼝是任意端⼝。。。这个任意真的⽐较特殊。
如果不指定什么⼀个端⼝范围, iptables 很难对任意端⼝开放的,如果iptables允许任意端⼝访问,那和不设置防⽕墙没什么区别,所以不现实的。
那么我们的解决办法就是指定这个数据传输端⼝的⼀个范围。
下⾯我们修改⼀下ftp配置⽂件。
我这⾥使⽤vsftpd来修改演⽰,其他ftp我不知道哪⾥修改,⼤家可以资料。
[root@localhost rootvi /f
在配置⽂件的最下⾯加⼊
pasv_min_port=30001
pasv_max_port=31000
然后保存退出。
这两句话的意思告诉vsftpd, 要传输数据的端⼝范围就在30001到31000 这个范围内传送。
这样我们使⽤ iptables 就好办多了,我们就打开 30001到31000 这些端⼝。
[root@localhost rootiptables -A INPUT -p tcp --dport 30001:31000 -j ACCEPT
[root@localhost rootiptables -A OUTPUT -p tcp --sport 30001:31000 -j ACCEPT
[root@localhost rootservice iptables save
最后进⾏保存,然后我们再⽤浏览器范围下 ftp。可以正常访问
⽤个账号登陆上去,也没有问题,上传⼀些⽂件上去看看。
看到了吧,上传和下载都正常。。再查看下 iptables 的设置
[root@localhost rootiptables -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
这是我为了演⽰ftp特殊端⼝做的简单规则,⼤家可以添加⼀些对数据包的验证
例如 -m state --state ESTABLISHED,RELATED  等等要求更加⾼的验证
以上这篇利⽤iptables来配置linux禁⽌所有端⼝登陆和开放指定端⼝的⽅法就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。