防火墙的三张表五条链
三张表:
fileter ##不经过内核的链组成
nat ##经过内核的链组成
mangle ##附加表
五条链:
INPUT ##输入
OUTPUT ##输出
FORWARD ##通过
PREROUTING ##目的地地址伪装
POSTROUTING ##源地址伪装
首先介绍iptables
开始前需要下载并打开iptables,并关闭firewalld
systemctl stop firewalld.service
systemctl disable firewalld.service
systemctl mask firewalld
yum install iptables-services -y
systemctl start iptables.server
systemctl 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 ACCEPT
iptables -A INPUT -m state --state NEW -i lo -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT
iptables -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 iptables
systemctl disable iptables.server
systemctl mask iptables.server
systemctl unmask firewalld.server
systemctl start firewalld.server
systemctl 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##添加网段/ip
firewall-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"##源地址伪装