防火墙指的是一个由软件和硬件设备组合而成,内部和外部网络的环境间产生一种保护的屏障,是一种获取安全性方法的形象说法,它是一种计算机硬件和软件的结合,从而实现对计算机不安全网络因素的阻断。本文主要介绍Linux iptables防火墙的使用配置。

1、 Linux 防火墙简介

Linux 防火墙是一种位于内部网络与外部网络之间的网络安全系统,是一项信息安全的防护系统,依照特定的规则,允许或是限制传输的数据通过。防火墙主要通过Netfilter与TCPwrappers两个机制来管理的。

管理防火墙的两种方式:

1)firewalld

使用相对简单,firewalld是交由内核层面的nftables包过滤框架来处理。

2)iptables

使用较为复杂,但功能强大。iptables 是交由内核层面的netfilter网络过滤器来处理。

2、iptables的规则表和链

iptables包含4个表,5个链。iptables内置了4个表,即 filter表、nat表、mangle表和raw表,分别用于实现包过滤,网络地址转换、包重构(修改)和数据跟踪处理。表的处理优先级:raw > managle > nat > filter

链(chains)就是规则的集合。针对特定数据包的各种防火墙规则,按照顺序依次放入对应的链中。五链是PREROUTING 、INPUT、FORWARD、OUTPUT、POSTROUTING。

1)4个表

filter

过滤数据包

nat

网络地址转换(端口映射、地址映射等。)

mangle

用于对特定数据报的修改。

raw

优先级最高,设置raw时一般是为了不再让iptables做数据报的链接跟踪处理,提高性能。

2)五个链

PREROUTING

数据包进入路由表之前,对数据包做路由选择前应用此链路中的规则,所有的数据包进来的时候都先由这个链处理

INPUT

通过路由表后目的为本机,进来的数据报应用此规则链上的策略

FORWARD

通过路由表后,目标地址不为本机,做转发数据报时应用此规则链上的策略

OUTPUT

由本机产生的外出的数据包向外转发时,应用此规则链中的策略

POSTROUTING

数据报做路由选择后发送后到网卡接口之前应用此链中的规则,所有的数据包出来的时候都先由这个链处理

3)表与链之间的包含关系

filter

INPUT、FORWARD、OUTPUT

nat

PREROUTING(DNAT)、OUTPUT、POSTROUTING(SNAT)

mangle

PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING

raw

PREROUTING、OUTPUT

4)四表五链流程图

httpswwwcjavapycom

3、iptables命令

写法:

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

参数说明:

1)表名

raw:高级功能,如:网址过滤。

mangle:数据包修改(QOS),用于实现服务质量。

net:地址转换,用于网关路由器。

filter:包过滤,用于防火墙规则。

2)规则链名

INPUT链:处理输入数据包。

OUTPUT链:处理输出数据包。

PORWARD链:处理转发数据包。

PREROUTING链:用于目标地址转换(DNAT)。

POSTOUTING链:用于源地址转换(SNAT)。

3)动作

ACCEPT:接收数据包。

DROP:丢弃数据包。

REDIRECT:重定向、映射、透明代理。

SNAT:源地址转换。

DNAT:目标地址转换。

MASQUERADE:IP伪装(NAT),用于ADSL。

LOG:日志记录。

4、常用命令

1)查看iptables规则

iptables -L -n -v

2)清空配置

iptables -F #清楚规则链中已有的条目;使用iptables -F 要小心,搞不好,你就马上同服务器断开连接了
iptables -X #删除没有用户配置文件相关的chain
iptables -Z #清空规则链中的数据包计算器和字节计数器;

3)配置规则

#配置,禁止进,允许出,允许回环网卡
iptables -P INPUT DROP
iptables -A OUTPUT -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
#允许ping
iptables -A INPUT -p icmp -j ACCEPT
#允许ssh
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
#允许ftp
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -j ACCEPT
#允许ftp被动接口范围,在ftp配置文件里可以设置
iptables -A INPUT -p tcp --dport 20000:30000 -j ACCEPT
#学习felix,把smtp设成本地
iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT -s 127.0.0.1
iptables -A INPUT -p tcp -m tcp --dport 25 -j REJECT
#允许DNS
iptables -A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 53 -j ACCEPT
#允许http和https
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
#允许已建立的或相关连的通行
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#禁止其他未允许的规则访问
iptables -A INPUT -j REJECT #(注意:如果22端口未加入允许规则,SSH链接会直接断开。)
iptables -A FORWARD -j REJECT

4)屏蔽IP

iptables -I INPUT -s 123.45.6.7 -j DROP       #屏蔽单个IP的命令
iptables -I INPUT -s 123.0.0.0/8 -j DROP      #封整个段即从123.0.0.1到123.255.255.254的命令
iptables -I INPUT -s 124.45.0.0/16 -j DROP    #封IP段即从123.45.0.1到123.45.255.254的命令
iptables -I INPUT -s 123.45.6.0/24 -j DROP    #封IP段即从123.45.6.1到123.45.6.254的命令

5)删除已添加的iptables规则

#假设之前用iptables -A INPUT -s 192.168.1.4 -j DROP 添加的规则
iptables -D INPUT -s 192.168.1.4 -j DROP
#或者
#查出当前规则的列表,使用当前列表下的序号:由下至下顺序
iptables -D INPUT 3 #删除第三条

6)修改规则

#如之前用iptables -A INPUT -s 192.168.1.4 -j DROP 添加的规则
iptables -R INPUT -s 192.168.1.4 -j DROP
#或者
#查出当前规则的列表,使用当前列表下的序号:由下至下顺序
iptables -R INPUT 3 -j ACCEPT

5、iptables配置文件

使用iptables配置规则时,需要永久生效可以直接修改配置文件,或者配置完成后进行保存到配置文件中,最后需要重启生效。

命令如下:

vim /etc/sysconfig/iptables
service iptables restart

或者

service iptables save && service iptables restart

6、iptables规则备份与还原

1)保存配置

iptables-save > /etc/iptables #(注意:后边这个文件路径可以自选)

2)还原配置

iptables-restore < /etc/iptables #(注意:后边这个文件路径可以自选,要是前边备份文件的位置)

推荐文档