欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Linux防火墙

程序员文章站 2022-07-12 16:54:30
...

防火墙介绍

防火墙概念

防火墙通过制定一系列规则可以实现过滤数据报与限制特定服务的功能,但是防火墙并不能确保主机一定安全,防火墙并不能有效抵挡病毒或木马,而且对来自网络内部的攻击无法防护

防火墙的具体功能(包括但不限于)

  • 限制FTP服务只开放给子网,而不对外网提供服务
  • 限制服务器只接受客户端的WWW请求,不提供其他服务
  • 限制连接只能防火墙所在的由主机发起
  • 限制数据报进入主机的某些端口
  • 限制来自特定IP地址的主机的数据报
  • 限制特定状态的数据报,比如SYN报文
  • 限制来自特定MAC地址的报文

设定防火墙之前需要考虑

  • 信任的IP地址或网段以及不信任的IP地址或网段
  • 主机可以提供的服务以及受保护的服务
  • 主机可以接收与不可以接收的数据报状态(比如SYN报文、FIN报文)

防火墙类别

防火墙分为硬件防火墙和软件防火墙。硬件防火墙是将防火墙程序写入到硬件中,由硬件实现防火墙的功能;软件防火墙是通过操作系统中的软件实现的,包括Netfilter 与 TCP Wrappers。(后面讲的都是软件防火墙)。防火墙根据管理范围可以划分为网段型与单一主机型,根据功能划分为依据数据报过滤的Netfilter以及依据程序进行过滤的TCP Wrappers。Netfiler根据数据报中数据,比如MAC地址、IP地址、以及TCP、UDP、ICMP等数据报种类或状态进行过滤;TCP Wrappers依据程序名称对数据进行过滤,比如需要限制FTP服务,只要限制vsftpd这个程序即可

防火墙的网络布线

防火墙不仅可以保护防火墙所在的主机,也可以保护防火墙后边的主机,比如将防火墙架设在路由器上。
防火墙的布线方式主要有:
●将防火墙架设在本地网络(LAN)与外部网络之间的路由器上,从而保护本地网络中的主机,或者在本地网络与外部网络之间的防火墙上再架设代理服务器,使得客户端只能连接开放的WWW服务器
Linux防火墙
●在本地网路中架设防火墙,从而避免内部人员由于误操作破坏重要服务
Linux防火墙
●将防火墙架设在服务器与外部网络之间,比如多台服务器共享一个防火墙,使用同一个IP对外提供服务,安全性大大提高,而且由于服务器位于两个防火墙之间,内部网络出现问题,不会影响服务器
Linux防火墙

TCP Wrappers

TCP Wrappers首先查看客户端需要连接的服务名称**是否支持**TCP Wrappers,如果支持再查看/etc/hosts.allow是否含有客户端的IP地址,如果有,则允许数据进入主机,如果没有,则再查看/etc/hosts.deny文件中是否有客户端的IP地址,如果有,则拒绝数据进入主机,如果没有,则允许数据进入主机。

xinetd管理的服务即/etc/xinetd.d目录下的服务支持TCP Wrappers;含有libwrap.so模块的服务同样支持TCP Wrappers,可以使用lld以及grep命令查看服务是否含有libwrap.so模块,比如ldd $(which sshd)|grep libwrap

/etc/hosts.allow的配置方式

[aaa@qq.com ~]# vim /etc/hosts.allow
ALL: 127.0.0.1  允许本机全部的服务
rsync:192.168.1.0/255.255.255.0 指明rsync服务允许的特定IP网段
rsync:10.0.0.100 指明rsync服务允许的特定IP地址
也可以将多个地址放在一行,最好分行来写,更清晰

/etc/hosts.deny配置方式

[aaa@qq.com ~]# vim /etc/hosts.allow
rsync:192.168.1.0/255.255.255.0 指明rsync服务拒绝的特定IP网段,注意:只能使用子网掩码指定IP网段,不能使用CIDR的方式
rsync:10.0.0.100 指明rsync服务拒绝的特定IP地址

Netfilter

Netfilter是最常用的防火墙机制,可以通过iptables进行配置

数据报进入主机的流程

iptables会首先分析数据报的数据,然后根据预先设定好的规则逐一进行比对,如果数据报符合当前规则,则进入(ACCEPT)主机或被丢弃(DROP),具体是ACCEPT还是DROP取决于具体的规则,如果数据报不符合当前规则,则使用下一条规则,如果不符合所有规则,则执行预设策略(Policy):接受或丢弃。注意:规则的顺序十分重要
整个流程如下
Linux防火墙

iptables的表格和链

iptables含有多个表格,表格中含有多条链,链中含有多条规则
具体组成关系如下
Linux防火墙
iptables中至少含有filter、nat、mangle三个表格。
filter:用于管理数据报进出本机,常常使用!包含的链有以下几种INPUT:控制进入主机的数据报
●OUTPUT:控制送出主机的数据报
●FORWARD:传递数据报到后端主机
nat:用于源IP地址以及端口与目的IP地址以及端口的转换,与后端主机有关,包含的链有以下几种
●PREROUTING:在进行路由判断之前所要进行的规则(DNAT/REDIRECT)
●POSTROUTING:在进行路由判断之后所要进行的规则(SNAT/MASQUERADE)
●OUTPUT:控制送出主机的数据报
mangle:与特定状态的数据报有关

表格间的链之间的关系

Linux防火墙

图中显示了iptables控制数据报的三种流向
●数据报的目的地为主机(路径A):经路由判断后,数据报的目的地为主机,那么filter的INPUT链会对数据报的流向进行控制
●数据报的目的地是主机后的主机(路径B):在路由对数据分析之前,发现数据报的目的地是主机后的主机,那么filter的FORWARD链和nat 的 POSTROUTING, PREROUTING链会对数据报的流向进行控制
●数据包经主机向外发送(路径C):经路由判断后,数据报是向外发送,比如服务器响应客户端请求或服务器主动向外发送数据报,filter 的 OUTPUT 链以及 nat 的 POSTROUTING链会对数据报的流向进行控制
总结:如果防火墙只是保护主机本身,只需要设置filter的INPUT链以及OUTPUT链即可;如果防火墙需要保护局域网中的主机,那么还需要设置filter 的 FORWARD 链以及 nat 的 PREROUTING, POSTROUTING 以及 OUTPUT 链

iptables语法

查看防火墙

iptables 选项
选项
-t :指定表格,比如nat、filter ,默认为filter
-L :显示表格的规则
-n :加快信息显示速度
-v :显示详细信息,包括数据报的总位数
eg

[aaa@qq.com /]# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
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:3306 
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:8000 
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:8001 
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:8002 
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:8003 
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:6666 
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:8888 
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:9001 
REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination  

字段说明
●policy:后边跟预设策略,比如ACCEPT
●target:执行的动作, ACCEPT 是放行, REJECT 是拒绝, DROP是丢弃
●prot:代表使用数据报类型,比如 tcp, udp 及 icmp
●opt:额外说明
●source:指明规则针对的数据报的源IP地址
●destination:指明规则针对的数据报的目的IP地址
input链的规则说明
●只要数据报的状态为RELATED或ESTABLISHED就接受
●只要是icmp数据报就接受
●所有数据报均接受,注意:此规则针对的是环回接口lo
●只要是传给端口22/80/3306/8000/8001/8002/8003/6666/8888/9001端口的tcp数据报均接受
●全部的数据报均拒绝
此外,还可以使用iptables-save查看防火墙规则

清除防火墙规则(不会清除预设策略!

iptables 选项
选项
-t 指定表格,默认是filter
-F :清除所有的已制定的规则
-X :杀掉所有使用者自定义的 chain
-Z :将所有的 chain 的计数与流量统计归零

指定预设策略(policy)

iptables 选项
选项
-t 指定表格,默认为filter
-P 指定策略(P为大写)
eg

iptables -P INPUT DROP 将filter的INPUT链的预设策略指定为DROP

设定防火墙规则

设定防火墙规则可以仅使用iptables命令即可或修改/etc/sysconfig/iptables文件然后重启防火墙(service iptables restart)

iptables 选项
选项
-A 为指定定链插入规则,新增规则插入到已有规则的最后边
-I 为指定链插入规则,新增规插入到已有规则的最前边
-i 数据报所进入的网卡,比如eth0、lo,需与 INPUT 链配合
-o 数据报所出的网卡,比如eth0、lo,需与 OUTPUT 链配合
-p 指定数据报的种类,比如tcp, udp, icmp 、all
-s 指定数据报的源IP地址或源IP网段,可以使用!表示非
-d 指定数据报的目的IP地址或源IP网段,可以使用!表示非
-j 指定动作,比如ACCEPT、DROP、REJECT、LOG。LOG是指符合规则的数据报的信息会被写入到/var/log/messages进行记录
–sport :限制源端口号,端口号可以是连续的,比如1024:1334,必须使用-p指定数据报为tcp或udp
–dport :限制目的端口号,必须使用-p指定数据报为tcp或udp
–syn :syn报文
-m:指定模块,可以是mac模块或state模块,通过模块分析是否允许数据报通过,比如数据报的状态为ESTABLISHED,则允许通过
- -state:指定数据报的状态,比如INVALID代表无效的数据报、ESTABLISHED:代表已经建立连接的数据报、NEW代表新建立连接的数据报、RELATED代表数据报与已发送出的数据报有关,最常用!-m选项和- -state选项一起使用
- -mac-source :指定mac地址
–icmp-type:指定icmp报文的类型,使用数字表示报文类型,从而设置主机是否响应ping,如果主机为路由器,则不要过滤icmp报文,因为客户端需要使用icmp判断网络状况
注意:设定规则之前,需要先清除已有规则,然后逐条加入规则
eg

iptables -A INPUT -i eth1 -p udp -s ! 192.168.100.10/255.255.255.0 --dport 81:88 -j ACCEPT
只要不是来自192.168.100.10/255.255.255.0网段的数据报,就接受。注意:没有指定的字段,代表字段值为各种值都被主机接受

iptables -A INPUT -i eth0 -p tcp --sport 1:1023 --dport 1:1023 --syn -j DROP
源端口为11023时,统统丢弃,因为客户端的端口都是大于1023的,但是并不适用与FTP服务!

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
只要是已建立连接的数据报或相关的数据报均允许通过

iptables -A INPUT -m state --state INVALID -j DROP
只要是无效的数据报均丢弃

iptables -A INPUT -m mac --mac-source aa:bb:cc:dd:ee:ff -j ACCEPT
只要数据报的mac地址为aa:bb:cc:dd:ee:ff均通过

iptables -A INPUT -i eth0 -p icmp --icmp-type 8 -j DROP
丢弃回送请求icmp报文