技术频道导航
HTML/CSS
.NET技术
IIS技术
PHP技术
Js/JQuery
Photoshop
Fireworks
服务器技术
操作系统
网站运营

赞助商

分类目录

赞助商

最新文章

搜索

【查看/添加/删除】Linux IPTABLES filter表防火墙规则的方法

作者:admin    时间:2019-3-5 13:33:15    浏览:

本文详细介绍Linux IPTABLES filter表防火墙规则的查看、添加及删除的方法,配置Linux服务器时常常用到。

查看本机关于IPTABLES的设置情况

[root@tp ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain RH-Firewall-1-INPUT (0 references)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 255
ACCEPT esp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT ah -- 0.0.0.0/0 0.0.0.0/0
ACCEPT udp -- 0.0.0.0/0 224.0.0.251 udp dpt:5353
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:631
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:25
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

可以看出我在安装linux时,选择了有防火墙,并且开放了22,80,25端口。如果你在安装linux时没有选择启动防火墙,是这样的:

[root@tp ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination

什么规则都没有。

iptables语法

iptables(选项)(参数)

选项

-t<表>:指定要操纵的表;
-A:向规则链中添加条目;
-D:从规则链中删除条目;
-i:向规则链中插入条目;
-R:替换规则链中的条目;
-L:显示规则链中已有的条目;
-F:清楚规则链中已有的条目;
-Z:清空规则链中的数据包计算器和字节计数器;
-N:创建新的用户自定义规则链;
-P:定义规则链中的默认目标;
-h:显示帮助信息;
-p:指定要匹配的数据包协议类型;
-s:指定要匹配的数据包源ip地址;
-j<目标>:指定要跳转的目标;
-i<网络接口>:指定数据包进入本机的网络接口;
-o<网络接口>:指定数据包要离开本机所使用的网络接口。

iptables命令选项输入顺序

iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作

表名包括:

  • raw:高级功能,如:网址过滤。
  • mangle:数据包修改(QOS),用于实现服务质量。
  • net:地址转换,用于网关路由器。
  • filter:包过滤,用于防火墙规则。

规则链名包括:

  • INPUT链:处理输入数据包。
  • OUTPUT链:处理输出数据包。
  • PORWARD链:处理转发数据包。
  • PREROUTING链:用于目标地址转换(DNAT)。
  • POSTOUTING链:用于源地址转换(SNAT)。

动作包括:

  • accept:接收数据包。
  • DROP:丢弃数据包。
  • REDIRECT:重定向、映射、透明代理。
  • SNAT:源地址转换。
  • DNAT:目标地址转换。
  • MASQUERADE:IP伪装(NAT),用于ADSL。
  • LOG:日志记录。

清除iptables原有规则

不管你在安装linux时是否启动了防火墙,如果你想配置属于自己的防火墙,那就清除现在filter的所有规则。

[root@tp ~]# iptables -F (清除预设表filter中的所有规则链的规则)
[root@tp ~]# iptables -X (清除预设表filter中使用者自定链中的规则)

我们再来看一下:

[root@tp ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination

什么都没有了吧,和我们在安装linux时没有启动防火墙是一样的。(注意:这些配置就像用命令配置IP一样,重启就会失去作用,怎么保存?

[root@tp ~]# /etc/rc.d/init.d/iptables save

这样就可以写到/etc/sysconfig/iptables文件里了,写入后还要把防火墙重启一下,才能起作用。

[root@tp ~]# service iptables restart

iptables常用命令

service iptables start #启动
service iptables restart #重启
service iptables save #保存
service iptables stop #停止
service iptables status #查询状态

现在IPTABLES配置表里什么配置都没有了,那我们开始我们的配置吧。

设定预设规则

[root@tp ~]# iptables -p INPUT DROP
[root@tp ~]# iptables -p OUTPUT ACCEPT
[root@tp ~]# iptables -p FORWARD DROP

上面的意思是,不符合(INPUT、FORWARD)这两个规则里的数据包就作DROP(放弃)处理,这是控制流入数据包的安全配置。而不符合(OUTPUT)这条规则的数据包就作ACCEPT(通过)处理,这是控制流出数据包的安全配置。

可以看出INPUT,FORWARD两个链采用的是允许什么包通过,而OUTPUT链采用的是不允许什么包通过。这样设置还是挺合理的,当然你也可以三个链都DROP,但这样做我认为是没有必要的,而且要写的规则就会增加,但如果你只想要有限的几个规则时,如只做WEB服务器,还是推荐三个链都是DROP。

特别注意:如果你是远程SSH登陆来操作的话,当你输入上述第一个命令iptables -p INPUT DROP,回车的时候就会自动退出远程,因为你还没有设置任何规则。所以务必先别设定预设规则,要添加完规则之后,再去设定预设规则。一旦被迫退出远程怎么办?如果是云主机,一般可以在管理后台通过VNC登录到服务器。不行的话,唯有联系服务商处理了。

添加iptables规则

首先添加INPUT链,INPUT链的默认规则是DROP,所以我们就写需要ACCETP(通过)的链。

为了能采用远程SSH登陆,我们要开启22端口。

[root@tp ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT

注意:如果你把预设规则OUTPUT设置成DROP的话iptables -p OUTPUT DROP,就要写上下面这条规则(好多人因为没有写这一条规则,导致始终无法SSH):

[root@tp ~]# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT

其他的端口也一样,如果开启了web服务器,OUTPUT设置成DROP的话,同样也要添加一条规则:

[root@tp ~]# iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT

如果做了WEB服务器,开启80端口:

[root@tp ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT

如果做了邮件服务器,开启25、110端口:

[root@tp ~]# iptables -A INPUT -p tcp --dport 110 -j ACCEPT
[root@tp ~]# iptables -A INPUT -p tcp --dport 25 -j ACCEPT

如果做了FTP服务器,开启20、21端口:

[root@tp ~]# iptables -A INPUT -p tcp --dport 21 -j ACCEPT
[root@tp ~]# iptables -A INPUT -p tcp --dport 20 -j ACCEPT

如果做了DNS服务器,开启53端口:

[root@tp ~]# iptables -A INPUT -p tcp --dport 53 -j ACCEPT

如果你还做了其他的服务器,需要开启哪个端口,照写就行了。

上面主要写的都是INPUT规则,凡是不在上面的规则里的,都作DROP(不通过)处理。

允许icmp包通过,也就是允许ping:

[root@tp ~]# iptables -A OUTPUT -p icmp -j ACCEPT (OUTPUT设置成DROP的话)
[root@tp ~]# iptables -A INPUT -p icmp -j ACCEPT (INPUT设置成DROP的话)

允许loopback!(不然会导致DNS无法正常关闭等问题):

IPTABLES -A INPUT -i lo -p all -j ACCEPT (如果是INPUT DROP)
IPTABLES -A OUTPUT -o lo -p all -j ACCEPT(如果是OUTPUT DROP)

下面写OUTPUT链,OUTPUT链默认规则是ACCEPT,所以我们就写需要DROP(放弃)的链。

减少不安全的端口连:

[root@tp ~]# iptables -A OUTPUT -p tcp --sport 31337 -j DROP
[root@tp ~]# iptables -A OUTPUT -p tcp --dport 31337 -j DROP

有些木马会扫描端口31337到31340(即黑客语言中的 elite 端口)上的服务。既然合法服务都不使用这些非标准端口来通信,阻塞这些端口能够有效地减少你的网络上可能被感染的机器和它们的远程主服务器进行独立通信的机会。

还有其他端口也一样,像31335、27444、27665、20034 NetBus、9704、137-139(smb)、2049(NFS)端口也应被禁止,我在这写的也不全,有兴趣的朋友应该去查一下相关资料。

当然出于更安全的考虑你也可以把OUTPUT链设置成DROP,那你添加的规则就多一些,就像上边添加允许SSH登陆一样,照着写就行了。

x
  • 站长推荐
/* 左侧显示文章内容目录 */