Linux系统中的防火墙firewall与iptables

一、基础概念

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

管理方式:
firewall火墙策略管理工具,较简单
iptables相对来说更专业

二、Firewall相关

systemctl start firewalld        ##开启火墙
systemctl status firewalld      ##查看火墙状态
Linux系统中的防火墙firewall与iptables
systemctl enable firewalld      ##设置火墙开机自启动
Linux系统中的防火墙firewall与iptables
systemctl disable firewalld    ##设置火墙开机关闭
Linux系统中的防火墙firewall与iptables
systemctl mask firewalld          ##锁定firewall管理
Linux系统中的防火墙firewall与iptables
systemctl unmask firewalld        ##解锁firewall管理
Linux系统中的防火墙firewall与iptables

1.firewalld火墙管理的3种方式

firewall-cmd命令行管理
firewall-config图形管理
/etc/firewalld/下的配置文件管理

2.firewalld命令行管理

firewall-cmd --stat            ##查看当前火墙状态
firewall-cmd --get-active-zones              ##查看当前生效的域
firewall-cmd --get-default-zone               ##查看默认的域
firewall-cmd --get-zones                            ##查看所有的域
firewall-cmd --zone=public --list-all  ##查看public域的信息
firewall-cmd --get-services                      ##查看所有可以被允许的服务
firewall-cmd --list-all-zones                  ##查看所有域的信息
firewall-cmd --set-default-zone=public  ##设置默认的域为public
firewall-cmd --direct --get-all-rules     ##查看规则
firewall-cmd --reload           ##以ssh为例,以前连过的,执行此刷新命令不会断开
firewall-cmd --complete-reload                ##完全刷新

环境:
【服务端】eth0:172.25.254.173           eth1:1.1.1.173
【客户端】eth0:1.1.1.93

1.查看火墙的状态
Linux系统中的防火墙firewall与iptables
2.查看火墙正在使用的域
Linux系统中的防火墙firewall与iptables
3.查看火墙默认的域
Linux系统中的防火墙firewall与iptables
4.查看火墙所有的域
Linux系统中的防火墙firewall与iptables
5.查看public域的信息
Linux系统中的防火墙firewall与iptables
6.列出可使用的服务
Linux系统中的防火墙firewall与iptables
7.添加http服务到火墙允许的列表
Linux系统中的防火墙firewall与iptables
8.从永久列表移除http服务(需要reload)
Linux系统中的防火墙firewall与iptables
9.将指定的ip主机加入trusted域
Linux系统中的防火墙firewall与iptables
10.将指定的ip主机从trusted域删除
Linux系统中的防火墙firewall与iptables
11.移除eth1接口从public域
Linux系统中的防火墙firewall与iptables
12.将eth1接口添加进trusted域
Linux系统中的防火墙firewall与iptables
13.直接将eth1从原来的区域转到public这个区域
Linux系统中的防火墙firewall与iptables
14.将8080端口加入public域
Linux系统中的防火墙firewall与iptables
Linux系统中的防火墙firewall与iptables
15.只允许172.25.254.73进行ssh连接(确定ssh不在默认域里)
Linux系统中的防火墙firewall与iptables
16.除了172.25.254.73不能进行ssh连接,其他的都可以
Linux系统中的防火墙firewall与iptables
Linux系统中的防火墙firewall与iptables

三、Firewall的SNAT和DNAT

环境:
单网卡主机改网关:(此处修改全局网关)

vim /etc/sysconfig/network
3 GATEWAY=1.1.1.173

systemctl restart network
route -n
Linux系统中的防火墙firewall与iptables

1.SNAT(内核路由之后做的原地址转换)

【双网卡】

firewall-cmd --permanent --add-masquerade##开启内核路由功能
firewall-cmd --reload
Linux系统中的防火墙firewall与iptables
注意:
sysctl -a | grep forward底下的内容要是1,内核的路由功能才能打开
net.ipv4.ip_forward = 1
Linux系统中的防火墙firewall与iptables

测试:
Linux系统中的防火墙firewall与iptables
Linux系统中的防火墙firewall与iptables
在单网卡的主机连接172.25.254.73
w -i查看,链接的是172.25.254.173
Linux系统中的防火墙firewall与iptables

2.DNAT(内核路由之前做的目的地地址转换)

【双网卡】

firewall-cmd --permanent --zone=public --add-forward-port=port=22:proto=tcp:toport=22:toaddr=1.1.1.93        ##在public这个域,使连接172.25.254.173这个端口的主机实际链接的是1.1.1.93这个22端口
firewall-cmd --reload
firewall-cmd --list-all
Linux系统中的防火墙firewall与iptables

测试:
在刚才已经连接的73身份上连接172.25.254.173
ifconfig查看,链接的是1.1.1.93
Linux系统中的防火墙firewall与iptables

四、iptables

iptables(网络过滤器)是一个工作于用户空间的防火墙应用软件。
防火墙在做信息包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的信息包过滤表中,而这些表集成在linux内核中。

iptables有三张表五条链:

三表:
Filter表:过滤数据包
NAT表:用于网络地址转换(IP、端口)
Mangle表:修改数据包的服务类型、TTL、并且可以配置路由实现QOS
五链:
INPUT链——进来的数据包应用此规则链中的规则
OUTPUT链——外出的数据包应用此规则链中的规则
FORWARD链——转发数据包时应用此规则链中的规则
PREROUTING链——对数据包作路由选择前应用此链中的规则
POSTROUTING链——对数据包作路由选择后应用此链中的规则

五、iptables相关

systemctl stop firewalld         ##关闭firewall
systemctl disable firewalld    ##设置开机不自启
systemctl mask firewalld         ##锁定firewall
systemctl start iptables         ##开启iptables
systemctl enable iptables       ##设置iptables开机自启动
Linux系统中的防火墙firewall与iptables

1.iptables命令

-t ##指定表名称
-n ##不作解析
-L ##列出指定表中的策略
-A ##增加策略
-p ##网络协议
--dport ##端口
-s ##数据来源
-j ##动作
ACCEPT ##允许
REJECT ##拒绝
DROP ##丢弃
-N ##增加链
-E ##修改链名称
-X ##删除链
-D ##删除指定策略
-I ##插入
-R ##修改策略
-P ##修改默认策略

1.查看火墙的策略(不加t默认是filter)
Linux系统中的防火墙firewall与iptables
2.查看filter表中的策略
Linux系统中的防火墙firewall与iptables
3.刷新火墙策略
Linux系统中的防火墙firewall与iptables
4.策略存储文件
Linux系统中的防火墙firewall与iptables
5.保存iptables策略(刷新之后不保存重启服务,会恢复默认)
Linux系统中的防火墙firewall与iptables
6.修改默认策略为DROP(连接是无响应)
Linux系统中的防火墙firewall与iptables
7.设置ssh连接时会被refused
Linux系统中的防火墙firewall与iptables
Linux系统中的防火墙firewall与iptables
8.只允许172.25.254.73进行ssh连接

9.删除INPUT链的第二条策略
iptables -D INPUT 2
10.在第一条插入,插入默认是第一条,可以不加1
Linux系统中的防火墙firewall与iptables
Linux系统中的防火墙firewall与iptables
11.修改第一条策略
Linux系统中的防火墙firewall与iptables
12.添加链
Linux系统中的防火墙firewall与iptables
Linux系统中的防火墙firewall与iptables
13.修改链的名字
Linux系统中的防火墙firewall与iptables
14.删除链
Linux系统中的防火墙firewall与iptables

六、iptables的SNAT和DNAT

1.SNAT(内核路由之后做的原地址转换)

起初,单网卡ping172.25.254.73不通
Linux系统中的防火墙firewall与iptables

【双网卡】
Linux系统中的防火墙firewall与iptables
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.173    ##(eth1~eth0已经做了路由伪装)让从eth0出去的做地址转换(用93去连73,实际连的是173)
Linux系统中的防火墙firewall与iptables

测试:

【单网卡】

连接172.25.254.73,w -i 看到的是173
Linux系统中的防火墙firewall与iptables

2.DNAT(内核路由之前做的目的地地址转换)

【双网卡】

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 22 -j DNAT --to-dest 1.1.1.93      ##让从eth0进来的做地址转换(在上个测验的连接基础上,连接172.25.254.173,实际链接的是1.1.1.93)
Linux系统中的防火墙firewall与iptables
测试:
【单网卡】
连接172.25.254.173,ifconfig看到的是1.1.1.93
Linux系统中的防火墙firewall与iptables