Linux防火墙:iptables和firewalld

概述

netfilter/iptables框架是集成在Linux内核中的防火墙系统,由于netfilter在内核空间,用户通常无法对其进行修改,所以就需要一个命令行工具。常见的有iptables和firewalld工具。

一、iptables防火墙

iptables通过四个规则表和五个数据链来实现防火墙策略,所有的防火墙策略都被分别写入这些表与链中

1、四个表:

filter表:过滤规则表
nat表:地址转换规则表
mangle:修改数据标记位i规则表
raw:跟踪数据表规则表

2、五个链:

INPUT:入站数据过滤
OUTPUT:出站数据过滤
FORWARD:转发数据过滤
PREROUTING:路由前过滤
POSTROUTING:路由后过滤
应用场景:
外部主机发送数据到防火墙本机:–PREROUTING->-INPUT -
本机发送到外部主机:–OUTPUT–>--POSTROUTING–
防火墙本机作为路由转发数据:PREROUTING–>-FORWARD–>POSTROUTING–

3、语法:

iptables -t 表名(默认filter) {选项} 链名
选项:
-t 指定表
-A 追加防火墙规则
-D删除
-I 插入
-F 清空
-L 列出
-R 替换
-P 设置链规则
匹配参数:
-p 匹配协议 (icmp等)
-s 匹配源地址
-d 目标地址
–sport 源端口
–dport 目标端口
-i 匹配入站网卡接口
-o 出站网卡接口
参数前加!,表示取反,如:!-s 192.168.1.1
触发动作:
用-j参数指定动作
ACCEPT 允许数据包通过
DROP 丢弃数据包
REJECT 拒绝数据包通过
LOG 将数据包信息记录为syslog
DNAT 目标地址转化
SNAT 源地址转换
举例:
1)在filter表中添加一条新的入站规则,拒绝192.168.0.1 ping本机
iptables -A input -s 192.168.0.1 -p icmp -j reject
2)允许客户端访问服务器的http服务
iptables -A input -p tcp --dport 80 -j accept

4、案例分析:

案例一:

需求: 公司有一公网IP(124.126.199.84),使用防火墙实现局域网中所有主机通过SNAT共享上网。局域网内所有192.168.0.0/24网段的主机访问外网时,防火墙自动将数据包的源地址修改为公网IP
分析: 需要添加NAT表,匹配到私有网段,设置SNAT源地址转换动作,并写入POSTROUITNG(路由后过滤链),最后转换到公网地址
步骤:
1)在/etc/sysctl.conf文件中开启路由转发功能,并使其生效,sysctl -p
net.ipv4.ip_forward = 1
2)添加防火墙规则
iptables -t nat -I postrouitng -s 192.168.0.0/24 -j snat --to-source 124.126.199.84

案例二:

需求: 公司有一个公网IP(124.126.199.84),内部有HTTP(192.168.0.100),MAIL(192.168.0.10)两台核心服务器,通过防火墙可以实现从互联网任意位置能够访问这两台内部服务器
分析: 案例一是源地址转换SNAT,本例是目标地址转换DNAT
步骤:
1)开启路由转发规则
2)添加防火墙规则
iptables -t nat -I prerouting -d 124.126.199.84 -p tcp --dport 80 -j dnat --to-destination 192.168.0.100
iptables -t nat -I prerouting -d 124.126.199.84 -p tcp --dport 25 -j dnat --to-destination 192.168.0.101
iptables -t nat -I prerouting -d 124.126.199.84 -p tcp --dport 110 -j dnat --to-destination 192.168.0.101
端口80、25、110分别是HTTP、SMTP、POP3z的服务端口

二、firewalld防火墙

firewalld是Centos7之后默认的系统防火墙。是更加高级的防火墙工具,但也是调用了底层的iptables来实现的
firewalld将所有网络流量都分类汇集到zone,通过管理zone来管理防火墙规则。每一个进入系统的数据包,都会检查他的源IP地址和进出网卡的接口,如果地址与某个zone匹配,则该zone的规则将生效
用firewall-cmd命令来操作。如果和任何一个zone都匹配不到,则将该数据包匹配到默认zone,一般是public。

1、firewall的9个zone:

trusted: 允许所有入站流量
public: 允许其他主机入站访问本机的预定义服务(ssh等),允许本机访问其他主机的返回入站流量,拒绝其他所有入站数据包
home、internal、work、external、dmz、block、drop

2、命令语法

通过 firewall-cmd 命令操作
命令常用选项
–get-default-zone 获取默认的zone,一般是public
–set-default-zone=【zone】 设置默认zone
–get-active-zone 获取当前正在使用的zone
–get-services 显示系统预定义的服务名称
–get-zone-of-interface=【interface】 查看指定接口与哪个zone匹配
–list-all-zones 显示所有zone的规则
–add-service=【service】 --zone=【zone】 向zone中添加允许访问的服务
–add-port=【port】/【portcol】 --zone=【zone】 向zone中添加允许访问的端口及网络服务类型(tcp/udp等)
–add-interface=【interface】 --zone=【zone】 将接口与zone绑定
–add-source=【source】 --zone=【zone】 将源地址与zone绑定
–list-all 列出默认zone的规则,后面跟 --zone= 列出指定zone的规则
–remove-service=【service】 --zone=【zone】 从zone中移除某个服务
–remove-port、interface、source=… 与add类似
–permanent 使规则永久生效
–reload 重新加载firewall

你可能感兴趣的:(Linux防火墙:iptables和firewalld)