iptables&firewalld防火墙

来源:互联网 发布:怎么在淘宝申请开店 编辑:程序博客网 时间:2024/06/05 11:42

防火墙的三张表五条链
三张表:
fileter ##不经过内核的链组成
nat ##经过内核的链组成
mangle ##附加表
五条链:
INPUT ##输入
OUTPUT ##输出
FORWARD ##通过
PREROUTING ##目的地地址伪装
POSTROUTING ##源地址伪装

首先介绍iptables
开始前需要下载并打开iptables,并关闭firewalld

systemctl stop firewalld.servicesystemctl disable firewalld.servicesystemctl mask firewalldyum install iptables-services -ysystemctl start iptables.serversystemctl enable iptables.service

相关命令
iptables -L##默认查看fileter表的策略
-nL ##不做转换直接显示ip
-t 表名 ##查看指定张表的策略
这里写图片描述
iptables -t filter -F##清除指定表的所有策略,临时更改
service iptables save##永久保存
这里写图片描述
当清除所有的策略之后,我们所有的服务都无法正常使用
1.添加策略
iptables -A INPUT -i lo -j ACCEPT ##允许回环接口通过
iptables -A INPUT -j REJECT##拒绝所有请求
iptables -I INPUT 2 -s 172.25.254.105 -p tcp --dport 22 -j ACCEPT ##只允许172.25.254.105访问tcp的22端口
iptables -I INPUT 3 -p tcp --dport 80 -j ACCEPT##插入策略到第三条,允许通过使用tcp协议的80端口,-I 是插入到某条,-A 是加入到最后

2.删除策略
iptables -D INPUT -j REJECT 删除此条策略

3.修改策略
iptables -R INPUT 3 -s 172.25.254.105 -p tcp --dport 80 -j ACCEPT ##修改第三条策略,为后面所填写的

4.自定义表
iptables -N westos ##添加一张表名为westos的表
iptables -E westos redhat ##修改westos表名为redhat
iptables -X redhat ##删除表redhat

当我们iptables中有很多策略时,一个数据包进入我们服务器,就需要逐条去匹配,这样很浪费时间。
我们可以根据一个数据包的状态来判断给该数据包是否通过
数据包的状态可以分为
NEW ##第一次访问的新数据包
RELATED ##再次访问的数据包
ESTABLISHED ##一直在访问的数据包
我们可以修改策略,当RELATED和ESTABLISHED数据包访问时直接通过
当NEW数据包来访问时,来判断是否让其通过
下面表示当回环接口的NEW数据包,让其通过,来自TCP的22端口的数据包让其通过,其他的均不让其通过

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPTiptables -A INPUT -m state --state NEW -i lo -j ACCEPTiptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPTiptables -A INPUT -j REJECT

这里写图片描述

iptables的地址伪装
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.105 ##源地址地址伪装
iptables -t nat -A PREROUTING -i eth0 -j DNAT --to-dest 172.25.0.205##目的地地址伪装
service iptables save

sysctl -a | grep forward ##查看内核的地址转换功能是否打开
这里写图片描述
将托黑部分修改为net.ipv4.ip_forward = 1 填入/etc/sysctl.conf文件中
sysctl -p ##加载修改

拥有源地址伪装后,我们可以让不在同一个网段的主机去访问另一台主机
当我们在被访问的主机上查看的,还是跟他在同一个网段的那个ip的访问
当他回应时,数据包就会发回跟他同一个网段的主机,跟我们的需求不一样
如图:我们ssh访问的是不同网段的主机
这里写图片描述
目的地地址伪装后,我们可以让被访问的主机,回应的虽然是跟他在同一个网段的主机,但被回应的主机,会把数据包发给访问的主机
如图:我们ssh访问的是254.105,但我们最终看到的访问的是0.205
这里写图片描述

下面我们来介绍firewalld
开始前同样需要并打开firewalld,关闭iptables

systemctl stop iptablessystemctl disable iptables.serversystemctl mask iptables.serversystemctl unmask firewalld.serversystemctl start firewalld.serversystemctl enable firewalld.service

这里写图片描述
firewall-cmd --get-default-zone##查看当前的域
firewall-cmd --set-default-zone=trusted##设置当前域为trusted
firewall-cmd --list-all##查看当前firewall的详细信息

这里写图片描述
当前主机的域为public 且只允许dhcp,ssh服务
我们现在需要添加允许的服务
1.可以更改配置文件/etc/firewalld/zones/public.xml
这里写图片描述
模仿添加完成后,重启或重新加载服务就添加成功了
firewall-cmd --reload##重新加载
2.可以使用命令来修改

firewall-cmd --add-service=ftp##添加ftp服务,临时添加firewall-cmd --permanent --add-service=ftp##永久添加firewall-cmd --permanent --add-port=8080/tcp##添加接口firewall-cmd --permanent --add-interface=eth0##添加网络端口firewall-cmd --permanent --add-source=172.25.254.0/24##添加网段/ipfirewall-cmd --permanent --remove-X ##删除X表表示前面添加的

临时添加重新加载后消失,永久挂载重新加载后启用。
firewalld也有详细的配置,此配置与iptables作用相同语法类似可参照
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -s 172.25.254.205 -p tcp -j ACCEPT ##允许205通过
firewall-cmd --permanent --direct --remove X##移除写的配置

配置完成后重新加载
firewall-cmd --direct --get-all-rules##查看写的详细配置

firewalld的地址伪装
与iptabls作用相同

firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address=172.25.254.5 forward-port port=22 protocol=tcp to-port=22 to-addr=172.25.0.205"##目的地地址伪装,此处与iptables不同的是,他确定了端口,只有22端口可以进行目的地地址伪装firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address=172.25.254.105 masquerade"##源地址伪装

重新加载后可以查看到我们写的规则
这里写图片描述

原创粉丝点击