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)四表五链流程图
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 #(注意:后边这个文件路径可以自选,要是前边备份文件的位置)