防火墙,也相当于一个内核上的插件
两种编写防火墙策略的工具ip table,firewalld
防火墙策略,控制进出
firewalld的域
trusted信任域, 接受所有的网络连接
home家庭域 用于家庭网络,仅接受ssh,mdns,ipp-client,samba-client,dhcpv6-client服务连接
internal内部域 用于内部网络,仅接受ssh,mdns,ipp-client,samba-client,dhcpv6-client服务连接
work工作域 用于工作区,仅接受ssh,ipp-client或dhcpv6-client服务连接
public公共域 在公共区域使用。仅接受ssh或dhcpv6-client服务连接,为firewalld的默认区域
external外部域 出去的ipv4网络连接通过此区域伪装和转发,仅接受ssh服务连接
dmz非军事区 仅接受ssh服务连接
block限制 拒绝所有网络连接
drop丢弃 任何接受的网络数据包都被丢弃,没有任何回复
启用和关闭firewalld
yum install -y firewalld firewall-config
systemctl start firewalld
systemctl enable firewalld
systemctl disable firewalld
systemctl stop firewalld
yum install -y iptables-services
systemctl start iptables
systemctl start ip6tables
systemctl enable iptables
systemctl enable ip4tables
iptables -nL
使用命令行接口配置防火墙
firewall-cmd --state ##查看防火墙状态
firewall-cmd --get-active-zones ##查看现在的信息
firewall-cmd --get-default-zone ##查看防火墙现在的域
firewall-cmd --get-zones ##查看防火墙所有域
firewall-cmd --zone=pub --list-all ##查看pub域支持的服务
firewall-cmd --get-services ##查看防火墙可以开启的服务
firewall-cmd --list-all-zones ##查看所有域支持的服务
firewall-cmd --set-default-zone=dmz ##更改防火墙的域
五种状态 input output preouting(路由前做SNAT) postouting(路由后做DNAT) forward
filter 访问本机服务(内核) input output forward
net 经过防火墙但与内核无关 input output preouting postouting
mangle 除了前两种 input output preouting postouting forward
设置防火墙的信任ip,防火墙不开启ssh,但信任ip依旧可以ssh连接
firewall-cmd --permanent --zone=trusted --add-source=172.25.254.26
firewall-cmd --get-active-zones
firewall-cmd --permanent --zone=trusted --remove-source=172.25.254.26
firewall-cmd --zone=public --remove-interface=eth0 ##将eth0从public域的取出
firewall-cmd --zone=trusted --add-interface=eth0 ##将eth0放入trusted域
firewall-cmd --reload ##重启防火墙
firewall-cmd --list-all --zone=trusted ##查看trusted支持的信息
firewall-cmd --zone=trusted --remove-interface=eth0
firewall-cmd --zone=public --add-interface=eth0 ##恢复
可以看出即使火墙策略没有apache服务,仍然可通过访问信任网卡ip,访问httpd
firewall-cmd - --zone=public --remove-service=ssh ##临时阻止ssh服务(刷新后恢复)
firewall-cmd --permanent --zone=public --list-ports##查看防火墙永久允许的端口
firewall-cmd --zone=public --list-ports ##查看防火墙临时允许的端口
firewall-cmd --permanent --zone=public --add-port=8080/tcp##永久添加防火墙允许的端口
firewall-cmd - --zone=public --add-port=8080/tcp ##临时添加防火墙允许的端口
firewall-cmd --permanent --zone=public --remove-port=8080/tcp##删除永久允许端口
firewall-cmd --reload ##刷新:不会中断当前已连接的服务
firewall-cmd --complete-reload ##完全刷新:切断所有正在连接的服务
Direct Rules
通过firewall-cmd工具,可以使用–direct选项在运行时间里增加或移除链,如果不熟悉 iptables,使用直接接口非常危险,因为可能无意间导致防火墙被入侵,直接端口模式,适用于服务或者程序,以便在运行时间内增加特定的防火墙规则。直接端口模式添加的规则优先应用
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -p tcp --dport 22 -s 172.25.254.26 -j ACCEPT##为26主机开启22端口(ssh服务的端口)
firewall-cmd --direct --get-all-rules##查看所有规则
firewall-cmd --direct --remove-rule ipv4 filter INPUT 1 -p tcp --dport 22 -s 172.25.254.26 -j ACCEPT##删除开启端口
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -p tcp --dport 22 ! -s 172.25.254.26 -j ACCEPT##为除了26主机的其他主机开启22端口(ssh服务的端口)
防火墙的伪装与转发
(1)伪装
服务端(两块网卡。一个1.1.1.126一个172.25.254.226):
firewall-cmd --permanent --add-masquerade ##开启防火墙伪装功能
firewall-cmd --reload
firewall-cmd --list-all
客户端测试:
vim /etc/sysconfig/network-scripts/ifcfg-eth0
IPADDR0=1.1.1.126
GATEWAY0=1.1.1.126
systemctl restart network
route -n
ssh [email protected]>w -i ##查看谁在连接
firewall-cmd --permanent --zone=public --add-forward-port=port=22:proto=tcp:toport=22:toaddr=1.1.1.126 ##转发22端口的请求服务到1.1.1.226
firewall-cmd --reload
firewall-cmd --list-all
ssh [email protected]>ifconfig##查看以连接的客户端ip--->w -i##查看谁在连接
二.iptables
1.服务部署:
yum install -y iptables-services
systemctl stop firewalld
systemctl disable firewalld
systemctl start iptables
systemctl enable iptables
iptable
-t ##指定表名称
-n ##不做解析
-L ##列出指定表中的策略
-A ##增加策略
-p ##网络协议
--dport ##端口
-s ##数据来源
-j ##动作
ACCEPT ##允许
REJECT ##拒绝
DROP ##丢弃
-N ##增加链
-E ##修改链名称
-X ##删除链
-D ##删除指定策略
-I ##插入
-R ##修改策略
-P ##修改默认策略
iptables的策略
iptables -t filter -nL ##查看filter表中的策略
iptables -nL ##查看所有策略
service iptables save ##保存当前策略
vim /etc/sysconfig/iptables ##策略保存文件
iptables -F ##刷掉filter表中所有策略,的那个-t没有指定,默认为filter
iptables -nL
systemctl restart iptables
iptables -nL ##如果刷掉之前保存过策略,重启服务后,会恢复
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 445 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 3260 -j ACCEPT
iptables -A INPUT -m state --state NEW -j REJECT
iptables -nL
iptables -P INPUT DROP ##更改INPUT工作模式为丢掉所有的包,并不回复
iptables -nL
iptables -P INPUT ACCEPT ##更改INPUT工作模式为允许所有
iptables -nL
drop模式,ssh连接时,会连接超时
设回accept工作模式时,便可以连接
iptables -P INPUT DROP
iptables -A INPUT -p tcp --dport 22 -s 172.25.254.26 -j ACCEPT##允许172.25.254.26
的22端口发来的tcp请求通过
iptables -nL
iptables -D INPUT 1 ##删除INPUT的第一条策略
iptables -nL
iptables -I INPUT 1 -s 172.25.254.26 -p tcp --dport 22 -j ACCEPT##添加策略到指定顺序
iptables -nL
iptables -R INPUT 1 -s 172.25.254.226 -p tcp --dport 22 -j ACCEPT##更改指定位置的策略
iptables -nL
iptables -N redhat ##添加策略表
iptables -E redhat westos ##更改策略表名称
iptables -X westos ##删除策略表
iptables -nL
(1)iptables的伪装
服务端:
iptables -t nat -nL
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.226
在nat表中添加,若一个ip连接26时,通过本主机的eth0伪装成172.25.254.226这个ip去连接的策略
iptables -nL -t nat
ssh [email protected] --->w -i
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 22 -j DNAT --to 1.1.1.126
##将给eth0的22端口发来的请求转发给1.1.1.126
iptables -nL -t nat
ssh [email protected] ----> w -y---->ifconfig