firewalld and iptables

这里写图片描述

1 firewalld

这里写图片描述

1.1 firewalld-config

使用firewalld-config &命令,后台调用防火墙图形管理。
这里写图片描述
这里写图片描述

firewalld分为如下几个网络区。其管理文件在如下目录:
这里写图片描述
这里写图片描述
在图形界面更改,可分为立即生效,重启服务失效;和永久更改,需要重启服务。
这里写图片描述
默认开启的网络区为public,可在此更改设定:Options—>Change Default Zone 。这里就不加演示了。

默认开启的网络区为public,可以看到火墙并没有允许http服务,所以,此时通过http访问此主机会出现下面的情况:
这里写图片描述
当火墙策略里面允许http服务时,访问会成功。此时的更改为立即生效,状态为runtime
这里写图片描述
这里写图片描述

上述更改是临时的,当我们重启防火墙时,策略会被删除,即会访问不到http服务。

这里写图片描述
这里写图片描述
更改设定为永久更改,并重启火墙,此时httpd服务将永久加入火墙策略。
这里写图片描述
这里写图片描述

在火墙配置文件中,可以看到http服务已被写入配置文件。永久生效。
这里写图片描述

http服务默认访问端口为80。可以在其配置文件中将端口更改为8080,并重启httpd服务,使其生效。做了上述更改后,还需要在火墙中加入开启8080端口。此时通过httpd服务访问时应加上8080端口。
这里写图片描述
这里写图片描述
这里写图片描述

1.2 使用命令行接口配置防火墙:

firewall-cmd --reload               ##不中断连接,重新加载火墙策略
firewall-cmd --complete-reload      ##中断所有连接,重新加载火墙策略
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 --permanent --zone=internal --add-source=172.25.254.0/24       ##永久,将172.25.254.0/24网段的ip加入internal网络区
firewall-cmd --permanent --zone=internal --remove-source=172.25.254.0/24    ##永久,将172.25.254.0/24网段的ip移出internal网络区
firewall-cmd --permanent --zone=internal --add-interface=eth1       ##永久,将eth1网卡加入internal网络区,此时,internal网络区被激活
firewall-cmd --permanent --zone=internal --change-interface=eth1    ##永久,将eth1网卡从原来的网络区移除并且加入internal网络区
firewall-cmd --permanent --zone=internal --remove-interface=eth1    ##永久,将eth1网卡移出internal网络区

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

firewall-cmd --permanent --zone=public --add-service=http
##永久,将http服务加入public网络区
firewall-cmd --permanent --zone=public --remove-service=http      ##永久,将http服务移出public网络区
firewall-cmd --zone=public --list-ports
##列出public网络区中所有端口
firewall-cmd --permanent --zone=public --add-port=8080/tcp
##永久,将8080/tcp端口加入public网络区
firewall-cmd --permanent --zone=public --remove-port=8080/tcp
##永久,将8080/tcp端口从public网络区移出

这里写图片描述

这里写图片描述

firewall-cmd --direct --get-all-rules
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -s 172.25.254.56 -p tcp --dport 80 -j REJECT

filter      表
INPUT 1     链的第一行
-s          指定数据来源
-p          指定协议
-dport      指定端口
-j          指定动作

这里写图片描述

firewall-cmd --add-forward-port=port=22:proto=tcp:toport=22:toaddr=172.25.254.56    ##端口转发:通过ssh(22端口)连接我的主机的统统转到ssh(22端口)去连接172.25.254.56主机
firewall-cmd --list-all         ##可以查询到上面设置的策略
firewall-cmd --add-masquerade   ##开启伪装:让本身两块网卡可以进行通信
sysctl -a | grep ip_forward     ##查看伪装状态,1开启,0关闭

这里写图片描述

这里写图片描述

这里写图片描述

2 iptables

这里写图片描述

iptables -t filter -L       #查看火墙filter表中策略
iptables -t filter -nL      #不做解析查看火墙策略
iptables -nL                ##默认查看filter表中策略
iptables -F                 ##临时清空火墙策略,重启服务后复原
service iptables save       ##将此时的火墙策略写进配置文件
iptables -A INPUT -p tcp --dport 80 -j ACCEPT  ##在INPUT表中添加80/tcp端口,动作为接受
iptables -P INPUT DROP      ##将INPUT表默认状态设定为DROP
iptables -P INPUT ACCEPT    ##将INPUT表默认状态设定为ACCEPT
iptables -A INPUT -j REJECT ##将INPUT表剩下所有未设定动作的服务全设定为REJECT
iptables -D INPUT 3         ##删除IPNUT表中第三条策略
iptables -I INPUT 2 --dport 80 -j ACCEPT    ##添加第二条策略
iptables -R INPUT 4 --dport 80 -j REJECT    ##修改INPUT表第4条策略为拒绝80端口的访问
service iptables save       ##保存当前状态的火墙策略并写进配置文件永久生效。(/etc/sysconfig/iptables)
iptables -N WESTOS          ##添加一个WESTOS表
iptables -E WESTOS LINUX    ##将WESTOS表改名为LINUX
iptables -X LINUX           ##删除LINUX表

这里写图片描述
这里写图片描述

仔细查看这张火墙策略表,可以看到第一条为接受22/tcp端口进来的数据,第二条为拒绝所有未设定动作的端口,第三条为接受80/tcp端口进来的数据。由于计算机读取策略是从上到下依次匹配,匹配到了就不再继续查询,所以当80/tcp端口,在第二条被拒绝后不再查询,即第三条的设定无效且http服务不能通过火墙被访问。
这里写图片描述

这里写图片描述

从上到下依次读取火墙策略,在INPUT表中ssh和http服务可以通过火墙,其他均被阻挡。
这里写图片描述

这里写图片描述

一个简易的火墙策略布置练习
这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

POSTROUTING链
    我们最后的任务应该是构造网络地址转换,对吧?至少对我来说是的。我们在nat表的POSTROUTING里只加入了一条规则,它会对所有从Internet接口(对我来说,这是eth0)发出的包进行NAT操作。选项-t指定要在哪个表里插入规则,这里是nat表。命令-A说明我们要把规则添加到POSTROUTING链末尾。-o$INET_IFACE指定要匹配所有从接口INET_IFACE出去的包,这里我们使用的是eth0。最后,我们把target设置为SNAT。这样,所有匹配此规则的包都会由SNAT target处理之后,它们的源地址就是Internet接口的地址了。不要忘了SNAT可是一定要有IP地址的,用--to-source来设置哦。

iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.156   
sysctl -a | grep ip_forward     ##/etc/sysctl
sysctl -p

这里写图片描述
测试方法一:ping不同的网段
这里写图片描述
测试方法二:ssh连接不同的网段
这里写图片描述

iptables -t nat -A PREROUTING -i eth0 -d 172.25.254.156 -j DNAT --to-dest 172.25.56.156
路由之前做网络地址转换工作的
PREROUTING链
    顾名思义,PREROUTING链(nat表的)是在路由之前做网络地址转换工作的。然后,包再经过路由,就会被送到filter表的INPUT或FORWARD链。我们在这里讨论这个链的唯一原因是,我们觉得有责任再次指出你不应该在此链中做任何过滤。PREROUTING链只会匹配流的第一个包,也就是说,这个流的所有其他包都不会被此链检查。

iptables -t nat -nL
SNAT: Source Network Address Translation,是修改网络包源ip地址的。
DNAT: Destination Network Address Translation,是修改网络包目的ip地址的。

修改源ip地址的目的一般都是为了让这个包能再回到自己这里,所以在iptables中,SNAT是在出口,也即POSTROUTING链发挥作用。

修改目的ip地址的原因一般就是为了改变包发送的目的地,让包走出去,而不是留下来,所以在iptables中,DNAT是在入口,也即PREROUTING链中发挥作用,以便让包进入FORWARD表。

DNAT target 这个target是用来做目的网络地址转换的,就是重写包的目的IP地址。如果一个包被匹配了,那么和它属于同一个流的所有的包都会被自动转换,然后就可以被路由到正确的主机或网络。DNAT target是非常有用的。比如,你的web服务器在LAN内部,而且没有可以在Internet上使用的真实IP地址,那就可以使用这个target让防火墙把所有到它自己HTTP端口的包转发给LAN内部真正的web服务器。目的地址也可以是一个范围,这样的话,DNAT会为每一个流随机分配一个地址。因此,我们可以用这个target做某种类型的负载平衡。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值