环境:三台主机
主机1 | 172.25.60.250/24 |
---|---|
主机2 | 172.25.60.1/24 和 1.1.1.100/24 |
主机3 | 1.1.1.200/24 |
注:相同网段的可以相互ping通
火墙规则配置在主机2(双网卡)上操作
firewalld与iptables service
本质区别:
iptables service :在 /etc/sysconfig/iptables 中储存配置
firewalld :将配置储存在 /usr/lib/firewalld/ 和/etc/firewalld/ 中的各种 XML 文件里
一、firewalld
firewalld域:
1.firewall的开启与关闭
yum install firewalld firewall-config -y //下载安装firewalld
systemctl start firewall //打开火墙
systemctl enable firewalld //开机自启动
systemctl disable firewall //开机不自启动
systemctl stop firewall //关闭火墙
2.图形化管理
firewall-config
3.命令管理
firewall-cmd --state //查看火墙状态
firewall-cmd --get-active-zones //有效域
firewall-cmd --get-default-zone //默认域
firewall-cmd --get-zones //查看所有的域
firewall-cmd --list-all-zones //查看所有域的详细信息
firewall-cmd --zone=public --list-all //查看指定域(public域)的详细信息
firewall-cmd --list-all //查看默认域的详细信息
firewall-cmd --get-services //可以添加的服务
firewall-cmd --set-default-zone=public //设置默认的域为public
(1)设置ip—指定特定的ip访问时走指定的域,使用指定域的规则进行访问
firewall-cmd --zone=trusted --add-source=172.25.60.250
//指定172.25.60.250
firewall-cmd --zone=trusted --add-source=172.25.254.0/24
//指定172.25.254.0/24网段
(2)设置网卡
方法一:
firewall-cmd --remove-interface=eth1 --zone=public //将eth1移出public域
firewall-cmd --add-interface=eth1 --zone=trusted //将eth1添加到trusted域
方法二;
firewall-cmd --change-interface=eth1 --zone=public //将eth1移动到public域
(3)设置服务
firewall-cmd --zone=public --add-service=smtp //指定的域添加smtp服务
firewall-cmd --zone=public --remove-service=smtp //指定的域删除smtp服务
不指定域时,便是对默认域的设定:
firewall-cmd --add-service=ssh //在默认域添加ssh
firewall-cmd --remove-service=ssh //在默认域删除ssh
(4)设置端口
firewall-cmd --zone=public --add-port=8080/tcp //在指定的域添加端口
firewall-cmd --zone=public --remove-port=8080/tcp //在指定的域删除端口
firewall-cmd --zone=public --list-ports //查看指定的域端口信息
不指定域时,便是对默认域的设定:
firewall-cmd --add-port=8080/tcp //在默认的域添加端口
firewall-cmd --remove-port=8080/tcp //在默认的域删除端口
firewall-cmd --list-ports //查看默认域的端口信息
(5)刷新火墙规则
firewall-cmd --reload //刷新火墙会则:已连接的不会断开--动态配置
firewall-cmd --complete-reload //完全刷新火墙规则:会断开已经连接的--类似于重启服务
上面的所有设定都没有加--permanent
,将配置写到了内存,立即生效,重启系统就会失效,恢复为以前的设定;设定时加上--permanent
,将配置信息写入文件中,如果不刷新火墙规则,新修改的设定就不会生效。
两个重要的目录:
-
/etc/firewalld/zones/
使用--permanent
,两个文件内的内容都会改变:
public.xml: 更改后的规则,刷新之后生效
public.xml.old: 更改前的规则,没有刷新它依旧生效 -
/lib/firewalld/services/
里面的有默认信息,更改之后就无法使用:更改ssh使用的端口,firewall-cmd --reload
刷新火墙规则之后,重新ssh连接就会失败
(6)Driect Rules
当我们允许某一台主机连接时,可以通过设定ip的方式允许它访问;但当我们只允许某台主机来访问我们指定的端口时,就需要用到下面的这种更加详细的设定规则。
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -s 172.25.60.250 -p tcp --dport 22 -j ACCEPT
指定来源 指定协议 指定端口 响应
//只允许172.25.60.250访问本机的22端口(ssh连接)
firewall-cmd --direct --remove-rule ipv4 filter INPUT 1 -s 172.25.60.250 -p tcp --dport 22 -j ACCEPT
//删除filter表中规则
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 ! -s 172.25.60.250 -p tcp --dport 22 -j ACCEPT
//只拒绝172.25.60.250访问本机的22端口
ACCEPT | 接受(有回应) |
---|---|
REJECT | 拒绝(有回应) |
DROP | 丢弃(无回应):尽量不使用,收不到回应,会一直发送请求,增大了服务器的负载 |
(7)端口转发与地址伪装
主机1 | 172.25.60.250/24 |
---|---|
主机2 | 172.25.60.1/24 和 1.1.1.100/24 |
主机3 | 1.1.1.200/24 |
地址伪装:
主机1与主机3处于不同的网段,无法直接通信,但主机2可以与他们两个直接通信;现在为了让主机3直接与主机1通信,可以通过主机2进行地址伪装,实现与值机1的通信
第一步:设置主机3的网关为与主机2处于同一网段的ip
vim /etc/sysconfig/network-scripts/ifcfg-eth0
第二步:配置主机2
firewall-cmd --list-all //查看masquerade是否打开
firewall-cmd --permanent --add-masquerade //添加:改为yes,使其具有地址伪装功能
firewall-cmd --permanent --remove-masquerade //移除:改为no
sysctl -a | grep ip_forward //查看内核路由是否开启,=1为开启
vim /etc/sysctl.conf //若没有开启,需要修改配置文件,添加上就好
net.ipv4.ip_forward=1
第三步:主机3测试
端口转发:
当主机1连接主机2时,让他连接到主机3
第一步:主机2上添加规则
firewall-cmd --add-forward-port=port=22:proto=tcp:toprot=22:toaddr=1.1.1.200
第二步:主机1测试:
二、iptables
实验环境:为了消除其他的影响,需要关闭firewall
systemctl stop firewalld.service
systemctl mask firewalld.service
iptables的“四表五链”
四表:
filter | 过滤,防火墙 |
---|---|
nat | network address translation 网络地址转换 |
mangle | 拆解报文,作出修改,封装报文 |
raw | 关闭nat表上启用的链接追踪机制 |
五链:
PREROUTING | 数据包进入路由之前 |
---|---|
INPUT | 目的地址为本机 |
FORWARD | 实现转发 |
OUTPUT | 原地址为本机,向外发送 |
POSTROUTING | 发送到网卡之前 |
1.iptables的开启与关闭
yum install iptables-services -y //安装iptables
systemctl start iptables.service //开启iptables
systemctl enable iptables.service //iptables开机自启动
systemctl disable iptables.service //iptables开机不自启动
systemctl stop iptables.service //关闭iptables
注:如果因为iptables锁定,开启时报错,需要先解锁再开启;如果锁定了需要关闭也是同样的道理(刚下载的不存在这样的问题)
2.iptables的管理
基本参数:
-t | 指定表名 |
---|---|
-n | 不做解析 |
-L | 列出指定表中的策略 |
-A | 增加策略 |
-p | 网络协议 |
–dport | 端口 |
-s | 数据来源 |
-j | 动作(ACCEPT;REJECT;DROP) |
-D | 删除指定的策略 |
-I | 插入 |
-R | 修改策略 |
-P | 修改默认策略(动作) |
-N | 增加链 |
-E | 修改链名称 |
-X | 删除链 |
-i | input |
-o | output |
(1)规则的查看与刷新
iptables -nL //不指定表时,默认为filter表
iptables -t nat -nL
iptables -t mangle -nL
iptables -F //刷掉filter表中的策略,不指定默认是filter表
service iptables save //保存当前策略,重启之后生效保存的策略
(2)规则的添加、修改与删除
iptables -A INPUT -i lo -j ACCEPT //添加规则
iptables -A INPUT -s 1.1.1.200 -j ACCEPT //添加规则,默认添加在最后
iptables -I INPUT 2 -s 1.1.1.222 -j ACCEPT //指定添加位置
iptables -R INPUT 2 -s 1.1.1.222 -j REJECT //修改指定位置的规则
iptables -D INPUT 2 //删除指定的规则
(3)默认策略的修改
iptables -P INPUT DROP //修改默认策略为DROP
iptables -P INPUT ACCEPT //修改默认策略为ACCEPT
//注:不能修改为REJECT
(4)链的增加、修改与删除
iptables -N haha //增加haha链
iptables -E haha WESTOS //修改haha链名为WESTOS
iptables -X WESTOS //删除WESTOS链
(5)iptables的端口转发和地址伪装
主机1 | 172.25.60.250/24 |
---|---|
主机2 | 172.25.60.1/24 和 1.1.1.100/24 |
主机3 | 1.1.1.200/24 |
地址伪装:
第一步:设置主机3的网关为与主机2处于同一网段的ip
vim /etc/sysconfig/network-scripts/ifcfg-eth0
第二步:配置主机2
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.1
//将所有从eth0的地址都伪装为172.25.60.1
sysctl -a | grep ip_forward //查看内核路由是否开启,=1为开启
vim /etc/sysctl.conf //若没有开启,需要修改配置文件,添加上就好
net.ipv4.ip_forward=1
第三步:主机3测试
端口转发:
第一步:配置主机2
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 22 -j DNAT --to-dest 1.1.1.200:22
//将所有从eth0进来访问22端口的都转发到1.1.1.200的22端口上
第二步:主机1测试