防火墙--iptablesfirewalld

Posted 南岸青栀*

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了防火墙--iptablesfirewalld相关的知识,希望对你有一定的参考价值。

防火墙–iptables

(记录记录)

参考https://www.yuque.com/xiaoyaozone/tldaxg/efw2v9

前言

iptables是fedora系列上一代防火墙,是centos/rhel 6以及6之前发行版中默认使用的防火墙服务,在rhel/centos7时代,默认的防火墙服务已经换成了firewalld,firewalld底层是使用的iptables的库,此次升级防火墙是因为iptables的使用过于复杂,命令语法不够人性化。

iptables四表五链

四表

  • filter表——过滤数据包
  • Nat表——用于网络地址转换(IP、端口)
  • Mangle表——修改数据包的服务类型、TTL、并且可以配置路由实现QoS
  • Raw表——决定数据包是否被状态跟踪机制处理

五链

  • 在进行路由选择前处理数据包(PREROUTING)
  • 处理流入的数据包(INPUT)
  • 处理流出的数据包(OUTPUT)
  • 处理转发的数据包(FORWARD)
  • 在进行路由选择后处理数据包(POSTROUTING)

基本的命令参数

命令实例

# 清空防火墙规则
[root@localhost ~]# iptables -F

# 查看防火墙规则
[root@localhost ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
#默认INPUT全部允许
[root@localhost ~]# iptables -I INPUT -p icmp -j DROP 
[root@localhost ~]# iptables -L -n --line-numbers 
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    DROP       icmp --  0.0.0.0/0            0.0.0.0/0           
2    REJECT     icmp --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         

我们使用客户端ping服务器,可以发现规则id越小,优先级越高

我们使用ping可以测试drop和reject区别,drop就是把数据包直接丢弃,不回复过来的ack,reject是拒绝访问,会对数据包进行回复,使用drop可以很好的隐藏自己,使用reject会告诉对方自己是存在并且在线的。

[root@localhost ~]# iptables -L -n --line-numbers 
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    DROP       icmp --  0.0.0.0/0            0.0.0.0/0           
2    REJECT     icmp --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         
[root@localhost ~]# iptables -D INPUT 1
[root@localhost ~]# iptables -L -n --line-numbers 
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    REJECT     icmp --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination    

防火墙–firewalld

firewalld是centos/rhce7开始默认使用,使用的是iptables的接口作为底层,服务默认开启,默认区域是public,默认放心ssh服务的默认端口(22、tcp)的dhcpv6-client的默认端口(53、udp)

常用命令集

案例:给网页设置规则

安装apache服务后,修改防火墙配置使客户端能访问网页的几种方法

[root@localhost ~]# yum install httpd
[root@localhost ~]# systemctl restart httpd
# 启动服务后,我们在客户端访问,发现无法访问,进系统查看服务对应的端口号
[root@localhost html]# netstat -ntlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      6810/sshd           
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      7078/master         
tcp6       0      0 :::80                   :::*                    LISTEN      17683/httpd         
tcp6       0      0 :::22                   :::*                    LISTEN      6810/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      7078/master
# 我们发现是80端口,接下来可以尝试着将80端口放行看看是否能访问

法1:放行端口号

[root@localhost ~]# firewall-cmd --add-port=80/tcp
# 这条命令敲完后,80端口的放行会立即生效,但是却无法永久生效,防火墙配置重载或者服务重启之后,临时的配置会消失
# 防火墙服务重启的命令
[root@localhost ~]# systemctl restart firewalld.service 
# 防火墙重载的命令
[root@localhost ~]# firewall-cmd --reload

# 重载完之后用firewalld-cmd --list-all查看发现80端口的规则消失了
# 使用以下命令会永久写入配置

[root@localhost ~]# firewall-cmd --add-port=80/tcp --permanent
# 发现敲完之后,配置不会立即生效,要重启或者重载防火墙之后这条命令才会生效,如果只是加一条规则,建议先敲永久生效的命令,然后下面把这条命令最后的--permanent删除之后再执行一遍就能立即生效了

# 如果敲了很多了临时生效的命令,是因为忘记敲--permanent导致的,这时候不想再一条条敲了,可以用下面的命令让当前临时生效的规则永久保存
[root@localhost ~]# firewall-cmd --runtime-to-permanent

法2:放行服务

# 首先把定义的运行80端口访问的规则删除掉
[root@localhost ~]# firewall-cmd --remove-port=80/tcp --permanent

# 添加服务名规则
[root@localhost ~]# firewall-cmd --add-service=http --permanent 
[root@localhost ~]# firewall-cmd --add-service=http

以上是关于防火墙--iptablesfirewalld的主要内容,如果未能解决你的问题,请参考以下文章

Linux之Firewall防火墙iptablesfirewalld

Linux 防火墙概述

iptables防火墙

防火墙和安全组

Linux之Iptables

Linux20180510 iptablesfirewalld