当前位置:   article > 正文

Linux下iptables&firewalld学习与使用记录_terminating firewalld.service start operation time

terminating firewalld.service start operation timed out.


[总体比较]

相同点:
firewalld 与 iptables 都是 linux 中防火墙的管理程序,他们的作用都是用于维护规则,而真正的防火墙执行者是位于内核中的netfilter,只不过firewalld和iptables的结构以及使用方法不一样。

不同点:
1.iptables 仅能通过命令行进行配置;而 firewalld 提供了图形接口,类似windows防火墙的操作方式
2.iptables 每一个单独更改将清除所有旧的规则,并全部读取所有新的规则,会中断业务,而firewalld 在有规则变动后,可以仅仅应用修改的规则,其他规则不影响。
3.iptables 的配置文件在 /etc/sysconfig/iptables 中;而 firewalld 的配置文件在 /usr/lib/firewalld/ 和 /etc/firewalld/ 中的各种 XML 文件中
4.iptables 通过控制端口来控制服务,而 firewalld 则是通过控制协议来控制端口
5.iptables 没有守护进程,而 firewalld 有守护进程

[Iptables]

iptable工作数据流向图

在这里插入图片描述

  1. 网络数据包到达时,先走prerouting链,如果数据目的地是传给本机,则经过Input链,即:prerouting –> input
  2. 如果数据包目的地不是传给本机,则走forward链,然后由postrouting出去。即:prerouting –> forward –> postrouting
  3. 由本机用户进程/程序/服务发出的数据报文(主动发出或响应的报文): output –> postrouting

规则链

Input链: 对进入本机(即目的地址是本机)数据包的过滤
Output链: 对从本机出去(即源地址是本机)的数据包的过滤
forward链: 对仅仅通过本机转发(即源地址和目的地址都不是本机)的数据包进行过滤
prerouting链:对数据包作路由选择前应用此链中的规则(所有的数据包进来的时侯都先由这个链处理)
postrouting链:对数据包作路由选择后应用此链中的规则(所有的数据包出来的时侯都由这个链处理)

规则表

四种:raw,mangle,nat,filter,优先级顺序为:Raw——>mangle——>nat——>filter

raw: 表中的规则可以被哪些链使用:prerouting,output
mangle:表中的规则可以被哪些链使用:prerouting,input,forward,output,postrouting
nat:表中的规则可以被哪些链使用:prerouting,output,postrouting(centos7中还有input,centos6中没有)
filter: 表中的规则可以被哪些链使用:input,forward,output
在这里插入图片描述

iptables的语法格式

iptables [-t 表名] 命令选项 [链名] [条件匹配] [-j 目标动作或跳转]

##表名

raw
mangle
nat
filter(不指定时默认)

##命令选项

-A 在指定链的末尾添加一条新的规则
-D 删除指定链中的某一条规则,可以按规则序号和内容删除
-I 在指定链中插入一条新的规则,默认在第一行添加
-R 修改、替换指定链中的某一条规则,可以按规则序号和内容替换
-L 列出指定链中所有的规则
-E 重命名用户定义的链,不改变链本身
-F 清空
-N 新建一条用户自己定义的规则链
-X 删除指定表中用户自定义的规则链
-P 设置指定链的默认策略
-Z 将所有表的所有链的字节和数据包计数器清零
-n 使用数字形式显示输出结果
-v 查看规则表详细信息(verbose)的信息
-V 查看版本(version)
-h 获取帮助(help)

##链名

PREROUTING
INPUT
FORWARD
OUTPUT
POSTROUTING

##防火墙处理数据包的四种方式

ACCEPT 允许数据包通过
DROP 直接丢弃数据包,不给任何回应信息
REJECT 拒绝数据包通过,必要时会给数据发送端一个响应的信息。
LOG在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则

iptables使用及命令示例

1.centos7下默认是用的firewalld,需要停止与禁用firewalld,两个只能选一个

##停掉firewalld
systemctl stop firewalld
systemctl disable firewalld
#禁用firewalld服务
systemctl mask firewalld

#安装iptables
yum install -y iptables
#安装iptables-services
yum install -y iptables-services

#注册iptables服务,相当chkconfig iptables on
systemctl enable iptables.service
#启动服务
systemctl start iptables.service
#重启服务
systemctl restart iptables.service
#查看状态
systemctl status iptables.service
#保存规则
service iptables save
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  1. 显示防火墙列表
iptables -L
iptables -L -n
iptables -L -n --line-number
  • 1
  • 2
  • 3
  1. 增加端口访问规则(80和443示例,所有ip能访问)
#开放80端口(HTTP)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

#开放端口示例
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
  • 1
  • 2
  • 3
  • 4
  • 5
  1. 开放某个范围段内的端口
iptables -A INPUT -p tcp --dport 20:1024 -j ACCEPT 
iptables -A OUTPUT -p tcp --sport 20:1024 -j ACCEPT
  • 1
  • 2
  1. 开放多个不连续的端口
iptables -A INPUT -p tcp -m state --state NEW -m multiport --dports 7001,8001,9001 -j ACCEPT
  • 1
  1. 对192.168.56.1和192.168.56.102开放22端口
iptables -A INPUT -p tcp -s 192.168.56.1,192.168.56.102 --dport 22 -j ACCEPT
  • 1
  1. 删除规则
#使用iptables -L -n  --line-number  可以查看到每个规则chain  的序列号,只能这样才能删除指定的规则
iptables -L -n  --line-number

#删除INPUT链中第9条规则
iptables -D INPUT 9
  • 1
  • 2
  • 3
  • 4
  • 5
  1. linux端口映射,启用网卡转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8022 -j ACCEPT
iptables -t filter -A INPUT -p tcp -m state --state NEW -m tcp --dport 8022 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8022 -j DNAT --to-destination 192.168.60.206:22
iptables -t nat -A POSTROUTING -s 192.168.60.0/16 -d 192.168.60.206 -p tcp -m tcp --dport 22 -j SNAT --to-source 192.168.60.62
  • 1
  • 2
  • 3
  • 4
  • 5
  1. 本地端口转发
iptables -t nat -A PREROUTING -p tcp --dport 8022 -j REDIRECT --to-ports 22
iptables -t nat -A OUTPUT -d localhost -p tcp --dport 8022 -j REDIRECT --to-ports 22
iptables -t nat -A PREROUTING -d localhost -p tcp --dport 8022 -j REDIRECT --to-ports 22
  • 1
  • 2
  • 3
  1. iptables保存到文件及从文件中恢复规则
iptables-save >xxx.txt  ##保存文件xxx.txt
iptables-restore <xxx.txt  ##加载规则
  • 1
  • 2
  1. 端口映射1
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p tcp --dport 18080 -j DNAT --to-destination 192.167.1.201:8080
iptables -t nat -A POSTROUTING -d 192.167.1.201 -p tcp --dport 8080 -j SNAT --to-source 192.167.1.204
  • 1
  • 2
  • 3
  1. 端口映射2
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p tcp --dport 18080 -j DNAT --to-destination 192.168.60.133:8899
iptables -t nat -A POSTROUTING -d 192.168.60.133 -p tcp --dport 8899 -j SNAT --to-source 192.168.56.2
  • 1
  • 2
  • 3
  1. 一个很严格的iptables例子

很严格的iptables例子,INPUT和OUPUT都是drop的,需要开放端口时,需要在INPUT和OUTPUT两条链中都加,比如8888端口号,
另外,也最好把如下本地回环的两条链也加上,
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT

[root@localhost porttranstest]# more /etc/sysconfig/iptables
# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT DROP [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8888 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A OUTPUT -p tcp --sport 22 -j ACCEPT
-A OUTPUT -p tcp --sport 8888 -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
COMMIT
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

[Firewalld]

firewalld的基本使用

启动: systemctl start firewalld
关闭: systemctl stop firewalld
查看状态: systemctl status firewalld
开机禁用 : systemctl disable firewalld
开机启用 : systemctl enable firewalld

配置firewalld-cmd

查看版本: firewall-cmd --version
查看帮助: firewall-cmd --help
显示状态: firewall-cmd --state
查看所有打开的端口: firewall-cmd --zone=public --list-ports
更新防火墙规则: firewall-cmd --reload
查看区域信息: firewall-cmd --get-active-zones
查看指定接口所属区域: firewall-cmd --get-zone-of-interface=eth0
拒绝所有包:firewall-cmd --panic-on
取消拒绝状态: firewall-cmd --panic-off
查看是否拒绝: firewall-cmd --query-panic
查看防火墙列表:firewall-cmd --list-all

firewalld的命令示例

  1. 开启一个端口
#添加
firewall-cmd --zone=public --add-port=80/tcp --permanent    (--permanent永久生效,没有此参数重启后失效)
#重新载入
firewall-cmd --reload
#查看
firewall-cmd --zone=public --query-port=80/tcp
#删除
firewall-cmd --zone=public --remove-port=80/tcp --permanent
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  1. 开放端口(开放固定的ip访问):
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.56.1" port protocol="tcp" port="1080" accept"
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.56.1" port protocol="tcp" port="1080" accept"
  • 1
  • 2
  1. 批量开放端口
firewall-cmd --add-port 30000-40000/tcp --permanent
firewall-cmd --add-port 30000-40000/udp --permanent
  • 1
  • 2
  1. 配置文件位置

配置规则在以下文件中:more /etc/firewalld/zones/public.xml

  1. CentOS7系统配置firewalld使用NAT方法将网络共享给内部局域网机器
####开启NAT转发
firewall-cmd --permanent --zone=public --add-masquerade
####开放DNS使用的53端口,否则可能导致内网服务器虽然设置正确的DNS,但是依然无法进行域名解析。
firewall-cmd --zone=public --add-port=53/tcp --permanent
####重启防火墙
systemctl restart firewalld.service
#### 检查是否允许NAT转发
firewall-cmd --query-masquerade
#### 关闭NAT转发
firewall-cmd --remove-masquerade
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

开启后,局域网内的其他机器可以将默认网关设置为已开启 NAT 转发的服务器IP ,即可上网。

  1. 如何利用 CentOS 进行端口转发TCP+UDP协议转发
开启NAT(一辈子只需要执行一次)
firewall-cmd --add-masquerade --permanent

添加转发
1.开放TCP端口转发(本机端口31002转发到 10.0.1.2:3389)
firewall-cmd --add-forward-port=port=31002:proto=tcp:toport=3389:toaddr=10.0.1.2 --permanent

2.开放UDP端口转发(本机端口31002转发到 10.0.1.2:3389)
firewall-cmd --add-forward-port=port=31002:proto=udp:toport=3389:toaddr=10.0.1.2 --permanent

3.开放TCP和UDP端口(开放端口31002 的TCP和UDP)
firewall-cmd --add-port 31002/tcp --permanent
firewall-cmd --add-port 31002/udp --permanent

4.重载应用配置(配置完毕后必须进行这一步)
firewall-cmd --reload

其余操作
1.如果不生效检查一下 协议是否开启转发(编辑文件:/etc/sysctl.conf ),保存后执行:sysctl -p

net.ipv4.ip_forward = 1

3.查看所有映射情况
firewall-cmd --list-all

删除操作
1.如删除端口转发(40000端口转发到10.0.2.243389 TCP协议转发)
firewall-cmd --remove-forward-port=port=40000:proto=tcp:toport=3389:toaddr=10.0.2.24 --permanent
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

Centos7 启动 firewalld 防火墙失败,提示超时处理

错误信息:

firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: failed (Result: timeout) since Tue 2022-11-01 09:31:24 CST; 41s ago
     Docs: man:firewalld(1)
  Process: 13082 ExecStart=/usr/sbin/firewalld --nofork --nopid $FIREWALLD_ARGS (code=exited, status=0/SUCCESS)
 Main PID: 13082 (code=exited, status=0/SUCCESS)

Nov 01 09:29:53 webserver systemd[1]: Starting firewalld - dynamic firewall daemon...
Nov 01 09:31:23 webserver systemd[1]: firewalld.service start operation timed out. Terminating.
Nov 01 09:31:24 webserver systemd[1]: Failed to start firewalld - dynamic firewall daemon.
Nov 01 09:31:24 webserver systemd[1]: Unit firewalld.service entered failed state.
Nov 01 09:31:24 webserver systemd[1]: firewalld.service failed.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

处理方式如下:

#关闭firewalld服务
systemctl stop firewalld;

#关闭firewalld进程
pkill -f firewalld;

#启动firewalld服务
systemctl start firewalld;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/888587
推荐阅读
相关标签
  

闽ICP备14008679号