linux中的防火墙
一.什么是防火墙:
动态防火墙后台程序 firewalld 提供了一个 动态管理的防火墙,用以支持网络 “zones”,以分配对一个网络及其相关链接和界面一定程度的信任。它具备对 IPv4 和 IPv6 防火墙设置的支持。它支持以太网桥,并有分离运行时间和永久性配置选择。它还具备一个通向服务或者应用程序以直接增加防火墙规则的接口。
二.firewalld和iptables:
firewalld自身并不具备防火墙的功能,而是和iptables一样需要通过内核的netfilter来实现,也就是说firewalld和iptables一样,他们的作用都是用于维护规则,而真正使用规则干活的是内核的netfilter,只不过firewalld和iptables的结构以及使用方法不一样罢了。
##企业七以前的版被都使用iptables,之后才使用的firewalld。两个作用相同,只是firewalld在使用上可以通过指定端口来通过服务。
firewalld:
开启 systemctl start firewalld
关闭 systemctl stop firewalld
查看状态 systemctl status firewalld
查看服务 firewall-cmd -list-all
冻结 systemctl mask firewalld
解冻 systemctl unmask firewalld
开机自启 systemctl enable firewalld
iptables:
下载 yum install iptables -y
开启 systemctl start iptables.service
关闭 systemctl stop iptables.service
查看状态 systemctl status iptables.service
查看服务 iptables -nL
##DELATED 验证过的
##ESTABLISHED 现在验证了的
冻结 systemctl mask iptables.service
解冻 systemctl unmask iptables.service
开机自启 systemctl enable iptables.service
三.使用命令行接口配置防火墙:
###################### firewalld域 ########################
trusted(信任):可连接所有网络,
home(家庭) |
internal(内部) |
work(工作) \ 电脑上常见的域,其中home的权限最多,external的最少
public(公共) /
external(外部) |
dmz(非军事区),
block(限制):拒绝所有网络连接但是会收到拒绝的请求
drop(丢弃):任何接收的网络数据包都被丢弃,没有任何回复
#############################################################
查看防火墙当前状态 firewall-cmd --state
查看默认使用的域 firewall-cmd --get-default-zone
查看当前使用的域 firewall-cmd --get-active-zone
查看当前系统中拥有的域 firewall-cmd --get-zones
查看某个域中的信息 firewall-cmd --zone=域 --list-all
查看当前可以添加的服务 firewall-cmd --get-service
修改默认域 firewall-cmd --set-default-zone=域
添加某个IP使用某个域 firewall-cmd --add-source=IP --zone=域
删除某个IP使用某个域 firewall-cmd --remove-source=IP --zone=域
添加某个接口使用某个域 firewall-cmd --add-interface=接口 --zone=域
删除某个接口使用某个域 firewall-cmd --remove-interface=接口 --zone=域
##如果使用 --permanent 表示设定永久生效,但是需要再使用firewall-cmd --reload让设定生效
重新加载 firewall-cmd --reload ##此时修改防火墙策略不会终止当前正在进行服务
firewall-cmd --complete-reload ##此时会终止当前所有服务并重新开启(通常在防火墙出现严重
问题时,这个命令才会被使用。比如,防火墙规则是正确的,但却出现状态信息问题和无法建立连接。)
firewall的配置文件:
/lib/firewalld/ 存放所有文件,是系统配置文件,预置文件
/etc/firewalld/ 当前配置的文件,时用户配置文件
四.特定的规则:
1.三张表五条链:
filter表 ###控管访问本机时经过本机内核的数据
input
forward
output
nat表 ###控管不经过内核的数据转化和路径转换
input
output
prerouting ##路由前做的目的地址转换
postouting ##路由之后做的源地址转换
mangle表 ###所有数据都包含,在filter表和nat表不够时使用
2.直接端口模式规则:
##通过firewall-cmd工具,使用--direct选项在运行时间里增加或者移除链。
查看规则 firewall-cmd --direct --get-all-rules
添加只允许IP连接本机 firewall-cmd --direct --add-rule { ipv4 | ipv6 | eb } <table> <chain> <priority> -s IP -p 协议 --dport 端口号 -j ACCEPT
##<table>:filter, nat, mangle
<chain>:INPUT, OUTPUT, FORWARD, PREROUTING, POSTOUTING
<priority>:1, 2, 3, 4, 5
添加只允许除IP外所有连接本机 firewall-cmd --direct --add-rule { ipv4 | ipv6 | eb } <table> <chain> <priority> ! -s IP -p 协议 --dport 端口号 -j ACCEPT
删除只允许IP连接本机 firewall-cmd --direct --remove-rule { ipv4 | ipv6 | eb } <table> <chain> <priority> -s IP -p 协议 --dport 端口号 -j ACCEPT
以只允许172.25.254.22连接本机为例firewall-cmd --direct --add-rule ipv4 filter INPUT 2 -s 172.25.254.22 -p tcp --dport 22 -j ACCEPT
3.设定端口转发:
服务端: firewall-cmd --permanent --add-masquerade
firewall-cmd --reload
firewall-cmd --add-forward-port=port=22:proto=tcp:toport=22:toaddr=172.25.254.222 ##地址转化,客户通过ssh(22) 通过访问,转化到172.25.254.222
firewall-cmd --list-all
客户端: ssh [email protected]
ifconfig
w -i
4.路由设置:
当服务端有两个网卡的时候,并且这两个网卡在不同的网关,开启地址伪装后,客户端设置ip网关设置和eth1相同,可以ping通eth0
服务端: ifconfig
firewall-cmd --list-all
vim /etc/sysctl.conf
添加 net.ipv4.ip_forward=1
sysctl -p
客户端: vim /etc/sysconfig/network-scripts/ifcfg-eth0
IPADDR0=172.25.0.222
GATEWAY0=172.25.0.122 ##设置网关为服务端eth1的ip
reboot
ping 172.25.254.122
5.iptables的指令:
##所有的命令默认在filter表进行,如果在其他表进行,加入 -t 表名 即可
查看策略 iptables -nL ##默认为filter表
清空策略 iptables -F ##只是暂时清空,重启后配置依然存在
保存当前策略 service iptables save ##重启后执行保存后策略
##iptables的配置文件 /etc/sysconfig/iptables
添加策略 iptables -A INPUT -i lo -j ACCEPT
添加策略 iptables -A INPUT -s 172.25.254.22 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 本机IP
替换策略 iptables -R INPUT 2 -j ACCEPT
插入至第1条 iptables -I INPUT -s 172.25.254.111 -j REJECT
删除第二条策略 iptables -D INPUT 2
设置表的默认规则 iptables -P INPUT DROP
创建一个链 iptables -N WESTOS
将自己创建的链更名 iptables -E WESTOS LINUX
删除自己创建的链 iptables -X LINUX
## -i 进入的网络接口 -o 出去的网络接口
-s 数据包的来源 -d 数据包的去向
-p 使用的协议 -j
SNAT 改变转发数据包的源地址
DNAT 改变转达数据包的目的地址