1.什么是防火墙?
Firewalld概述:动态防火墙后台程序 firewalld 提供了一个 动态管理的防火墙, 用以支持网络 “ zones” , 以分配对一个网络及其相关链接和界面一定程度的信任。它具备对 IP v4 和 IP v6 防火墙设置的支持。它支持以太网桥 , 并有分离运行时间和永久性配置选择。
2.实验环境配置
服务端:
双网卡:eth0:172.25.254.216
eth1:1.1.1.126
客户端:
单网卡:eth0:1.1.1.126
真机:
ip:172.25.254.16
3.firewall和iptables service区别
firewalld 和 iptables service 之间最本质的不同是 :iptables service 在 /etc/sysconfig/iptables 中储存配置;firewalld 将配置储存在 /usr/lib/firewalld/ 和/etc/firewalld/ 中的各种 XML 文件里 。
4.用图形方式配置防火墙
防火墙的域:
firewall-config ##打开图形配置
更改默认域:
左上角option-change defaults-zone-域为block
yum install httpd -y
vim /var/www/html/index.html
点击trusted域选择sources添加ip:172.25.254.16
5.使用命令方式配置防火墙
命令:
- systemctl start firewalld 打开防火墙
- firewall-cmd --state 查看防火墙状态
- 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=dmz 将默认域改为dmz
- firewall-cmd --remove-interface=eth1 删除eth1网卡
systemctl start firewalld ##打开防火墙
systemctl enable firewalld ##设为开机启动
firewall-cmd --state ##查看防火墙状态
6:为域添加访问ip
在服务端:
安装http服务,并编写测试内容
yum install httpd
systemctl start httpd
vim /var/www/html/index.html
firewall-cmd --list-all ##查看防火墙所以参数
此时服务端开放的域为public,不允许http访问
将172.25.254.16添加到trusted域
此时可以真机(172.25.254.16)访问
7.接口控制访问不同域
firewall-cmd --list-all
此时两个网卡都可以ping通
将网卡eth1加入block域
此时网卡eth1,ping不通
8.firewall-cmd --reload与firewall-cmd --complete-reload
此时服务端eth1端口开放ssh服务
客户端(1.1.1.126)可以正常使用ssh服务
服务端:
firewall-cmd --permanent --remove-service=ssh ##永久移除ssh服务
firewall-cmd --reload ##重新加载firewall
若在重新加载防火墙之前已经通过ssh访问服务端,则不受影响(未退出前)
若使用完全加载,则已经使用ssh的会卡住无法进行有效操作。此时可以使用killall -9 ssh强制关闭。
9.添加端口:(默认端口为80,改为8080)可以改配置文件,也可以通过命令修改
1.通过配置文件
firewall-cmd --list-all
firewall-cmd --add-service=http
vim /etc/httpd/conf/httpd.conf ##编辑配置文件更改端口
systemctl restart httpd
vim /usr/lib/firewalld/services/http.xml 更改http端口
systemctl restart httpd
补充,防火墙配置文件
cd /etc/firewalld/zones ##防火墙新旧配置
2.通过命令
apache用法
修改前本机selinux=enforcing
vim /etc/httpd/conf/httpd.conf
43 Listen 8080 ##修改默认端口为8080
firewall-cmd --permanent --add-port=8080/tcp ##若出现killed则说明此添加端口已被使用过。
firewall-cmd --reload
10.Direct Rules 详细规则
服务端:
永久删除ssh
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -s 172.25.254.16 -p --dport 22 -j ACCEPT ##只有16可以访问ssh
-p:类型 -s:转化成 -j:有三种: ACCEPT(接收),REJUCT(拒绝),DROP(丢弃)
测试:
此时真机(16)仍可以访问ssh
firewall-cmd --direct --remove-rule ipv4 filter INPUT 1 -s 172.25.254.16 -p --dport 22 -j ACCEPT
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 ! -s 172.25.254.16 -p --dport 22 -j ACCEPT ##只有16不可访问ssh
测试:
真机(16)
客户端(216)
11.Rich Rules 高级规则
伪装(在路由前):
firewall-cmd --add-forward-port=port=22:proto=tcp:toport=22:toaddr=1.1.1.216 目的地转化到1.1.1.216
firewall-cmd --masquerade
测试:
查看内核路由功能是否打开:
sysctl -a | grep ip_forward
vim /etc/sysctl.conf
若=0则进入/etc/sysctl.conf在最后写入
端口转换
服务端:
firewall-cmd --permanent --change-interface=eth1 --zone=public ##将eth1端口加入public域
systemctl restart firewalld ##重启防火墙
firewall-cmd --add-masquerade ##打开伪装功能
客户端:
修改网关为1.1.1.116
iptables命令管理
内核的3张表,5条列
filter表:经本机内核的数据:input,forward,ouput
nat表:不经过本机内核的数据:input,ouput,prerouting,postrouting
mangel表:所有经过主机的数据:input,forward,ouput,prerouting,postrouting
iptables的一些参数含义:
-t | 指定表名称,不加默认指filter |
---|---|
-n | 不作解析 |
-L | 列出指定表中的策略 |
-A | 增加策略,不能指定加的位置,默认加到最后 |
-p | 网络协议 |
–dport | 端口 |
-s | 数据来源 |
-j | 动作 |
ACCEPT | 允许 |
REJECT | 拒绝 |
DROP | 丢弃 |
-N | 增加链 |
-E | 修改链名称 |
-X | 删除链 |
-D | 删除指定策略 |
-F | 刷掉原有策略 |
-I | 插入,默认插入到最前面,可以指定位置 |
-R | 修改策略,更改,刷新 |
-P | 修改默认策略 |
yum search iptables
yum install iptables-services -y
systemctl start iptables
systemctl enable iptables
显示内核三张表信息
iptables -nL ##列出信息-n不做解析
查看nat表
查看mangle表
刷新
iptables -F
保存当前
service iptables save
表里信息保存在/etc/sysconifg/iptables里
iptables -t filter -A INPUT -i lo -j ACCEPT 给filter表中加回环接口,动作是accept
iptables -nL 查看有没有添加成功
iptables -t filter -A INPUT -s 172.25.254.16 -j ACCEPT 给filter表添加这个ip,这个ip可以访问all prot
iptables -nL 查看有没有添加成功
iptables -t filter -A INPUT -s 172.25.254.10 -j REJECT 给filter表添加ip这个ip禁止reject
但是策略读取是从前往后的2生效后就不执行3了。
iptables -D INPUT 3 删除第三条
iptables -nL
iptables -R INPUT 2 -s 172.25.254.16 -j REJECT 修改第二条的accept为reject
iptables -nL
此时真机(172.25.254.16)无法ssh服务端
iptables -I INPUT 2 -s 172.25.254.16 -p tcp --dport 22 -j ACCEPT
将端口为22的ip为10的插入到第二条,指定位置
iptables -nL
其他主机能不能连接取决于此时的policy是accept还是reject还是drop,除了设定的主机之外的其他主机都走的是默认的设定。
因为先执行2所以真机可以ssh服务端
其他主机也能使用ssh连接服务端
iptables -P INPUT DROP 将默认的动作设置为drop,其他主机此时连接不上
iptables -nL
此时真机可以ssh服务端,但其他主机则不能连接上显示连接超时。
iptables -N westos 增加链westos
iptables -E westos XUPT 修改连名称为XUPT
iptables -X WESTOS 删除WESTOS
iptables -nL
nat表的一些参数设定:
iptables -t nat -nL 查看
地址伪装 从外面进来 ,伪装成别人的地址 ,路由之后,不经过内核
端口转发 从里面出去
地址转换,编辑nat表。
dnat 目的地址转换
snat 源地址转换
-o出去
地址伪装:
服务端:
查看内核路由功能是否打开:
sysctl -a | grep ip_forward
vim /etc/sysctl.conf
若=0则进入/etc/sysctl.conf在最后写入
客户端:(1.1.1.216可以ping通172.25.254.16)
端口转发:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 22 -j DNAT --to-dest 1.1.1.216:22 ##进来,目的地址转换
从eth0进,把要连接双网卡主机eth0网卡的ip172.25.254.116的端口22,目的地址转化称到1.1.1.216的22端口 -i input
##路由前端口转发,连接 172.25.254.116的22端口会转到1.1.1.216 的22端口
iptables -t nat -nL 查看
测试:真机连接eth0172.25.254.116 会自动转化为client端的eth0 1.1.1.216