linux:iptables与firewalld防火墙

在公网与企业内网 之间充当保护屏障的防火墙虽然有软件或硬件之分,但主要功能都是依据策略对 穿越防火墙自身的流量进行过滤。防火墙策略可以基于流量的源目地址、端口号、协议、应 用等信息来定制,然后防火墙使用预先定制的策略规则监控出入的流量,若流量与某一条策 略规则相匹配,则执行相应的处理,反之则丢弃。这样一来,就可以保证仅有合法的流量在 企业内网和外部公网之间流动了。

在 RHEL 7 系统中,firewalld 防火墙取代了 iptables 防火墙。

其实,iptables 与 firewalld 都不是真正的防火墙, 它们都只是用来定义防火墙策略的防火墙管理工具而已,或者说,它们只是一种服务。iptables 服务会把配置好的防火墙策略交由内核层面的 netfilter 网络过滤器来处理,而 firewalld 服务 则是把配置好的防火墙策略交由内核层面的 nftables 包过滤框架来处理。

iptables:

iptables 服务把用于处理或过滤流量的策略条目称之为规则,多条规则可以组成一个规则 链,而规则链则依据数据包处理位置的不同进行分类,具体如下:

在进行路由选择前处理数据包(PREROUTING);

处理流入的数据包(INPUT);
处理流出的数据包(OUTPUT);使用最多的就是INPUT 规则链

处理转发的数据包(FORWARD);

在进行路由选择后处理数据包(POSTROUTING)。

iptables 服务 的术语中分别是 ACCEPT(允许流量通过)、REJECT(拒绝流量通过)、LOG(记录日志信息)、 DROP(拒绝流量通过)。“允许流量通过”和“记录日志信息”都比较好理解,这里需要着重 讲解的是 REJECT 和 DROP 的不同点。就 DROP 来说,它是直接将流量丢弃而且不响应; REJECT 则会在拒绝流量后再回复一条“您的信息已经收到,但是被扔掉了”信息,从而让 流量发送方清晰地看到数据被拒绝的响应信息。

当把 Linux 系统中的防火墙策略设置为 REJECT 拒绝动作后,流量发送方会看到端口不 可达的响应

而把 Linux 系统中的防火墙策略修改成 DROP 拒绝动作后,流量发送方会看到响应超时 的提醒。但是流量发送方无法判断流量是被拒绝,还是接收方主机当前不在线

iptables 中基本的命令参数

iptables -L   查看已有防火墙规则

iptables -P INPUT DROP     把INPUT规则链的默认策略设置成为DROP

防火墙策略规则的设置有两种:通和堵。当把 INPUT 链设置为默认拒绝后, 就要在防火墙策略中写入允许策略了,否则所有到来的流量都会被拒绝掉。另外,需要注意 的是,规则链的默认拒绝动作只能是 DROP,而不能是 REJECT。

向 INPUT 链中添加允许 ICMP 流量进入的策略规则:

iptables -I INPUT -p icmp -j ACCEPT

删除 INPUT 规则链中刚刚加入的那条策略(允许 ICMP 流量),并把默认策略设置为 允许:

iptables -D INPUT 1

iptables -P INPUT ACCEPT

将 INPUT 规则链设置为只允许指定网段的主机访问本机的 22 端口,拒绝来自其他所有 主机的流量:

iptables -I INPUT -s 192.168.10.0/24 -p tcp --dport 22 -j ACCEPT

再次重申,防火墙策略规则是按照从上到下的顺序匹配的,因此一定要把允许动作放到 拒绝动作前面,否则所有的流量就将被拒绝掉,从而导致任何主机都无法访问我们的服务。

向 INPUT 规则链中添加拒绝所有人访问本机 12345 端口的策略规则:

iptables -IINPUT -p tcp --dport 12345 -j REJECT

iptables -I INPUT -p udp --dport 12345 -j REJECT

向 INPUT 规则链中添加拒绝 192.168.10.5 主机访问本机 80 端口(Web 服务)的策略规则:

iptables -I INPUT -p tcp -s 192.168.10.5 --dport 80 -j REJECT

向 INPUT 规则链中添加拒绝所有主机访问本机 1000~1024 端口的策略规则:

iptables -A INPUT -p tcp  --dport 1000:1024 -j REJECT

ptables -A INPUT -p udp  --dport 1000:1024 -j REJECT

特别注意,使用 iptables 命令配置的防火墙规则默认会在系统下一次重启时失效,如果
想让配置的防火墙策略永久生效,还要执行保存命令:service iptables save

 

 举例:设置linux服务器为应用网关

vim /etc/sysctl.conf

net.ipv4.ip_forward=1      启动数据包转发功能

再设置iptables的转发功能

iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j MASQUERADE

可以把这条语句加入/etc/rc.local文件,开机自启动

 

firewalld

firewalld 中常见的区域名称(默认为 public)以及相应的策略规则

firewalld-cmd命令:

与 Linux 系统中其他的防火墙策略配置工具一样,使用 firewalld 配置的防火墙策略默认
为运行时(Runtime)模式,又称为当前生效模式,而且随着系统的重启会失效。如果想让配
置策略一直存在,就需要使用永久(Permanent)模式了,方法就是在用 firewall-cmd 命令正
常设置防火墙策略时添加--permanent 参数,这样配置的防火墙策略就可以永久生效了。

如果想让配置的策略立即生效,需要手动执行 firewall-cmd --reload 命令。

查看 firewalld 服务当前所使用的区域:firewall-cmd --get-default-zone

查询 eno16777728 网卡在 firewalld 服务中的区域:firewall-cmd --get-zone-of-interface=eno16777728

把 firewalld 服务中 eno16777728 网卡的默认区域修改为 external,并在系统重启后生效。

firewall-cmd --permanent --zone=external --change-interface=eno16777728

分别查看当前与永久模式下的区域名称:

firewalld-cmd --get-zone-interface=eno16777728

firewalld-cmd --permanent --get-zone-interface=eno16777728

把 firewalld 服务的当前默认区域设置为 public:firewall-cmd --set-default-zone=public

启动/关闭 firewalld 防火墙服务的应急状况模式,阻断一切网络连接(当远程控制服务器
时请慎用):firewall-cmd --panic-on   
firewall-cmd --panic-off

查询 public 区域是否允许请求 SSH 和 HTTPS 协议的流量:

firewall-cmd --zone=public --query-service=ssh

firewall-cmd --zone=public --query-service=https

把 firewalld 服务中请求 HTTPS 协议的流量设置为永久允许,并立即生效:

firewall-cmd --permanent --zone=public --add-service=https

firewall-cmd --reload

把 firewalld 服务中请求 HTTP 协议的流量设置为永久拒绝,并立即生效:

firewall-cmd --permanent --zone=public --remove-service=http

firewall-cmd --reload

把在 firewalld 服务中访问 8080 和 8081 端口的流量策略设置为允许,但仅限当前生效:

firewall-cmd --zone=public --add-port=8080-8081/tcp

firewall-cmd --zone=public --list-ports

把原本访问本机 888 端口的流量转发到 22 端口,要且求当前和长期均有效:

流量转发命令格式为 firewall-cmd --permanent --zone=<区域> --add-forward-port=port=
<源端口号>:proto=<协议>:toport=<目标端口号>:toaddr=<目标 IP 地址>

firewall-cmd --permanent --zone=public --add-forward-port=port=888:proto=tcp:toport=22:toaddr=192.168.10.10

firewalld 中的富规则表示更细致、更详细的防火墙策略配置,它可以针对系统服务、端
口号、源地址和目标地址等诸多信息进行更有正对性的策略配置。它的优先级在所有的防火
墙策略中也是最高的。

在 firewalld 服务中配置一条富规则,使其拒绝192.168.10.0/24 网段的所有用户访问本机的 ssh 服务(22 端口):

firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.10.0/24" service name="ssh" reject"

firewalld-config:firewalld的图形管理工具

服务的访问控制列表

TCP Wrappers 是 RHEL 7 系统中默认启用的一款流量监控程序, 它能够根据来访主机的地址
与本机的目标服务程序作出允许或拒绝的操作。换句话说, Linux 系统中其实有两个层面的防火
墙,第一种是前面讲到的基于 TCP/IP 协议的流量过滤工具,而 TCP Wrappers 服务则是能允许或
禁止 Linux 系统提供服务的防火墙

TCP Wrappers 服务的防火墙策略由两个控制列表文件所控制,用户可以编辑允许控制列表文
件来放行对服务的请求流量,也可以编辑拒绝控制列表文件来阻止对服务的请求流量。控制列表
文件修改后会立即生效,系统将会先检查允许控制列表文件(/etc/hosts.allow),如果匹配到相应
的允许策略则放行流量;如果没有匹配,则去进一步匹配拒绝控制列表文件(/etc/hosts.deny) ,若
找到匹配项则拒绝该流量。如果这两个文件全都没有匹配到,则默认放行流量

TCP Wrappers 服务的控制列表文件中常用的参数

在配置 TCP Wrappers 服务时需要遵循两个原则:

编写拒绝策略规则时,填写的是服务名称,而非协议名称;

建议先编写拒绝策略规则,再编写允许策略规则,以便直观地看到相应的效果。

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值