找回密码
 注册
查看: 4793|回复: 5

CentOS7使用firewalld打开关闭防火墙与端口

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2018-6-22 11:15:44 | 显示全部楼层 |阅读模式
1、firewalld的基本使用
% x5 g" [; D" p) {启动: systemctl start firewalld
, V9 |$ x' N4 ]" b$ u* g7 o7 |: F查看状态: systemctl status firewalld
: b9 n7 r8 i% K# y  B停止: systemctl disable firewalld* a" S7 t0 D! n4 a% I" e) U
禁用: systemctl stop firewalld
' b4 F: c0 p) J9 b+ s& k% U3 L8 N 0 \. I: D; e7 ^- D( k" V( L3 K
2.systemctl是CentOS7的服务管理工具中主要的工具,它融合之前service和chkconfig的功能于一体。
6 h$ Y5 i7 I; w" {# t启动一个服务:systemctl start firewalld.service
/ j- b# ?' X8 b: T; ?关闭一个服务:systemctl stop firewalld.service* K! R) o  f# b, p
重启一个服务:systemctl restart firewalld.service
: t, P3 D% ]# Z7 X) P; {显示一个服务的状态:systemctl status firewalld.service7 J2 ?3 ?5 |$ l' H; f
在开机时启用一个服务:systemctl enable firewalld.service4 H0 O; A0 ]6 i; p7 U; q
在开机时禁用一个服务:systemctl disable firewalld.service1 U/ {( `. i; N
查看服务是否开机启动:systemctl is-enabled firewalld.service
3 m. V# u8 O& U查看已启动的服务列表:systemctl list-unit-files|grep enabled
3 G" K# p( |5 K# Q% p; n查看启动失败的服务列表:systemctl --failed
" }0 G2 B+ ?) u& C* y% T& ^# x4 B& C3 F. K. k
3.配置firewalld-cmd* ^9 x# m% U( w/ h0 G9 s. \  P

! L7 S) ]0 {  A6 b$ E查看版本: firewall-cmd --version
. a. i: O+ {" c1 Q: a/ B查看帮助: firewall-cmd --help) d! y) e1 l0 S$ u5 Q: X. a8 c2 E
显示状态: firewall-cmd --state
8 {2 q  y: M* h7 M. y$ T' ?查看所有打开的端口: firewall-cmd --zone=public --list-ports
9 l5 f4 C, o- R4 d4 f更新防火墙规则: firewall-cmd --reload
" c% V, r& Q/ t查看区域信息:  firewall-cmd --get-active-zones- C- M: K+ H8 L3 [# P
查看指定接口所属区域: firewall-cmd --get-zone-of-interface=eth0 ,  firewall-cmd --get-zone-of-interface=eno16777736& H. q. l0 M" }" c
拒绝所有包:firewall-cmd --panic-on" `( k+ k% x/ Y* K' \2 O
取消拒绝状态: firewall-cmd --panic-off. t1 `( i% L: R: y$ I: M
查看是否拒绝: firewall-cmd --query-panic8 E4 r  i" g, n6 \! e  b9 M
; U0 w# B0 h! ]
那怎么开启一个端口呢
0 Y5 _) Q( g' W9 f9 [: j8 M1 D8 Y添加6 ]+ n. U) G* H* ^. T2 \) Q
firewall-cmd --zone=public --add-port=80/tcp --permanent   ,  firewall-cmd --zone=public --add-port=22/tcp --permanent(--permanent永久生效,没有此参数重启后失效). n' |% @3 C+ C! I
重新载入
9 M* A0 w* ~. V: Pfirewall-cmd --reload
1 f/ ^  B4 N* N7 H; f查看0 J1 j/ p7 {) q
firewall-cmd --zone= public --query-port=80/tcp
$ u0 L  B4 B; W; }/ f删除
- R3 Z' P- k! s' e$ @: H8 Efirewall-cmd --zone= public --remove-port=80/tcp --permanent

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2018-6-22 11:16:39 | 显示全部楼层
查看firewall是否运行,下面两个命令都可以# v% D  D6 V: p$ S+ c

- [2 d$ U$ g5 z6 ^systemctl status firewalld.service
* r1 H8 m( ]# i8 L1 K$ Z
' D! M5 d) F* T, ^firewall-cmd --state
! b( @5 Y9 D% ]( q( i! r* ^$ l6 H6 Z$ s% ~) w0 ~
% U$ m7 \  C1 m: E( ]
+ h7 m  }+ M+ b+ S4 L% u
查看当前开了哪些端口
0 o6 ^9 w/ o% q3 j+ `
7 {5 ^3 N$ `7 V, m: I) Q4 f其实一个服务对应一个端口,每个服务对应/usr/lib/firewalld/services下面一个xml文件。
! b( j& x8 K/ T# ]& @% e4 c6 t% _$ M: L/ ?# x
firewall-cmd --list-services
: e* {9 v/ J/ ]  P: I; u
+ ^. ~2 d) N, t: d( I6 q
, p8 z" X2 J9 @+ I+ U' G" {8 ]/ \( c( Q& G. I$ d" F5 E

9 K5 ^- w  ~( Q. B( Z6 T6 |" h0 k: q0 w
查看还有哪些服务可以打开' B6 @% y0 u' S

" o; C% [7 F; m+ W  x% z2 W; vfirewall-cmd --get-services
  Q4 ~) L6 F( M* U) u% j# ^+ c" K8 H0 O% J+ z9 T% b
/ l4 |8 t+ C0 W3 j: B  a: u

: N3 f1 d$ ^! _: W6 ^) b  O/ F: }9 c

! O/ r+ H6 U' h. \/ h( u查看所有打开的端口:
9 Z. E$ h+ {' E7 a7 q! J* @) M/ @8 [2 P$ J9 D0 |
firewall-cmd --zone=public --list-ports
6 T$ S2 q* [$ g" s7 r- B  `) {$ m7 e6 O
% r8 j! P2 ^* U) q9 h& A. P& B- V+ o0 y/ `! P9 ~; _1 _
7 H1 N7 _. j7 W1 [4 `$ ]
- S; f% j8 ^" U
7 h# W# _& ~& m4 t
0 {0 |4 m( m( C( _# |" s! v
7 I4 d7 v$ D, H1 ?
更新防火墙规则:
- c" O2 m& D" @* k/ G6 P+ ?* Q0 b2 O, J* y8 |
firewall-cmd --reload

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2018-6-22 13:39:59 | 显示全部楼层
[root@dockerserver ~]# firewall-cmd --zone=public --list-ports 2 W/ |* a9 O0 C+ V& J
22/tcp
  B9 Q5 x) n1 @9 d- ?8 K& e) \, X! z, L+ x+ D/ m- \
[root@dockerserver ~]# firewall-cmd --zone=public --add-port=80/tcp --permanent+ l( a3 b4 _& a" f# c( A+ Q" f
success
  x" ]# f3 n/ z' [# V: R) X1 V3 W[root@dockerserver ~]# firewall-cmd --zone=public --list-ports + M' W) D* A2 S
22/tcp
6 G5 v6 X4 D( E1 [[root@dockerserver ~]# firewall-cmd --reload
" L2 k/ |( }2 y. w1 r& Rsuccess7 z: E5 [, B6 W8 s( S: ^% p
[root@dockerserver ~]# firewall-cmd --zone=public --list-ports
, f( I& m0 ~/ I6 Z80/tcp 22/tcp) |4 @! B0 Z* V& M( j: `

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2018-7-6 14:37:08 | 显示全部楼层
下面的是对特定ip允许访问8080端口(你也可以自己改)+ U5 ^) \6 }2 }" ^7 h
firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.0.4/24" port protocol="tcp" port="8080" accept"

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2018-7-6 14:39:12 | 显示全部楼层
1.drop禁止特定ip连接ssh/22服务" o3 R- y3 f4 p, b, H: F

3 p6 r, Y6 F% y/ M5 mfirewall-cmd --permanent --zone=public --add-rich-rule="rule family=ipv4 source address=‘x.x.x.x/24‘ service name=‘ssh‘ drop"
" C) m0 [  a+ r/ `, v. Afirewall-cmd --reload9 R" A- f8 d8 u( h. ?1 `
    ##重新加载防火墙配置,不然firewall-cmd --list-all-zones不会显示刚加上的规则$ l0 }1 C  Q3 a5 f0 @

$ w" S8 U1 q. G: c1 P( W% D5 G0 w% X3 j6 q' C/ l( e2 ?$ I
2.reject禁止特定ip连接ssh/22服务6 f3 K/ J* T9 \. t( b* z

- O+ i" }7 v6 A/ Yfirewall-cmd --permanent --zone=public --add-rich-rule="rule family=‘ipv4‘ source address=‘x.x.x.x/24‘ service name=‘ssh‘ reject"
5 r- o7 l# B8 E5 y8 z1 ifirewall-cmd --permanent --zone=public --add-rich-rule="rule family=‘ipv4‘ source address=‘x.x.x.x/24‘ port port=22 protocol=tcp reject"
$ ?7 B6 I, S; o4 j: P7 U# `firewall-cmd --reload5 X+ j. x3 ^% R! R; F
    ##重新加载防火墙配置,不然firewall-cmd --list-all-zones不会显示刚加上的规则0 }" x- J3 n; W9 S
% J( K9 Y/ b; |5 x% U6 n
3 }8 {) `+ o$ D" b
3.accept运行特定ip连接ssh/22服务
! c: Q" v" D9 r& ^# J$ p6 X
8 k2 l/ s: Q" I5 w" h* ^. z- z2 }firewall-cmd --permanent --zone=public --add-rich-rule="rule family=ipv4 source address=‘x.x.x.x/24‘ port port=22 procotol=tcp accept"
1 T5 u$ h# U7 g: V% U* Q8 F% rfirewall-cmd --reload1 E6 y$ @" D4 e6 J9 Y5 k: m
# m+ m; _/ w& Q+ w6 ~
# j8 ^0 Y& s& p& ^1 ?: t# O+ I5 l
防火墙内的策略动作有DROP和REJECT两种,区别如下:5 l3 r5 @" ~& a( o4 t! v
1、DROP动作只是简单的直接丢弃数据,并不反馈任何回应。需要Client等待超时,Client容易发现自己被防火墙所阻挡。
2 o( @2 F9 v2 p2、REJECT动作则会更为礼貌的返回一个拒绝(终止)数据包(TCP FIN或UDP-ICMP-PORT-UNREACHABLE),明确的拒绝对方的连接动作。连接马上断开,Client会认为访问的主机不存在。REJECT在IPTABLES里面有一些返回参数,参数如下:ICMP port-unreachable、ICMP echo-reply 或是 tcp-reset(这个封包会要求对方关闭联机),进行完此处理动作后,将不再比对其它规则,直接中断过滤程序。
, @# ?0 F5 h3 e5 H  |# l
, g7 q, W( w# ^" z- I( g至于使用DROP还是REJECT更合适一直未有定论,因为的确二者都有适用的场合。REJECT是一种更符合规范的处理方式,并且在可控的网络环境中,更易于诊断和调试网络/防火墙所产生的问题;而DROP则提供了更高的防火墙安全性和稍许的效率提高,但是由于DROP不很规范(不很符合TCP连接规范)的处理方式,可能会对你的网络造成一些不可预期或难以诊断的问题。因为DROP虽然单方面的中断了连接,但是并不返回任何拒绝信息,因此连接客户端将被动的等到tcp session超时才能判断连接是否成功,这样早企业内部网络中会有一些问题,例如某些客户端程序或应用需要IDENT协议支持(TCP Port 113, RFC 1413),如果防火墙未经通知的应用了DROP规则的话,所有的同类连接都会失败,并且由于超时时间,将导致难以判断是由于防火墙引起的问题还是网络设备/线路 故障。
; h5 L6 g6 d2 p& g& T$ q( Q* \! J) ~9 O0 R8 d( X3 ]0 C
一点个人经验,在部署防火墙时,如果是面向企业内部(或部分可信任网络),那么最好使用更绅士REJECT方法,对于需要经常变更或调试规则的网络也是如此;而对于面向危险的Internet/Extranet的防火墙,则有必要使用更为粗暴但是安全的DROP方法,可以在一定程度上延缓黑客攻击的进度(和难度,至少,DROP可以使他们进行TCP-Connect方式端口扫描时间更长)。6 ?9 e* \8 v/ h4 V* s7 c0 J

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2018-7-6 14:46:27 | 显示全部楼层
查看firewalld的状态:+ T/ L- T2 ^. A% l- N( A: @/ R! v
[root@lockey Desktop]# firewall-cmd --state
$ y5 b- w  ^+ K) V) B% E& c2 Y: R查看当前活动的区域,并附带一个目前分配给它们的接口列表:
* ]9 T: z; w9 H/ D* C4 \[root@lockey Desktop]# firewall-cmd --get-active-zones
9 l9 p* P7 Q& |2 `8 u1 w4 q查看默认区域:+ @% q' Q( o) l: ?7 |& ]
[root@lockey Desktop]# firewall-cmd --get-default-zone. C( [* C' X& x% Y, l% v; M
查看所有可用区域:! i3 h! a/ L9 q' @# ]
[root@lockey Desktop]# firewall-cmd --get-zones
2 B% H8 P8 h& N9 `& |9 I列出指定域的所有设置:1 D- F9 j- ]! [
[root@lockey Desktop]# firewall-cmd --zone=public --list-all
. o' ?5 I" F! |+ n8 v列出所有预设服务:& U' {+ h9 k! ^& M5 ~$ I8 F4 i; g
[root@lockey Desktop]# firewall-cmd --get-services
" n0 ^5 I8 ]( ]& w% w. }5 N(这样将列出 /usr/lib/firewalld/services/ 中的服务器名称。注意:配置文件是以服务本身命名的service-name. xml)  k3 j4 _7 P. H7 \0 y* U' a
列出所有区域的设置:8 r0 v1 j+ R, `1 ^/ r3 q, S0 @
[root@lockey Desktop]# firewall-cmd --list-all-zones; ]5 [& U3 z, |# e: e
设置默认区域:5 G, p7 r; ?, c
[root@lockey Desktop]# firewall-cmd --set-default-zone=dmz9 ]4 x6 f: u, C* |
设置网络地址到指定的区域:
& E, @1 m, Q9 w+ y[root@lockey Desktop]# firewall-cmd --permanent --zone=internal --add-source=172.25.254.0/24
7 M8 n% S# J8 [* }(--permanent参数表示永久生效设置,如果没有指定--zone参数,那么会加入默认区域)* s0 o, L. E8 _: ^0 p
删除指定区域中的网路地址:
2 K7 m5 t. t/ z! Z" S[root@lockey Desktop]# firewall-cmd --permanent --zone=internal --remove-source=172.25.254.0/24
  H, J; J8 G0 \' s' r添加、改变、删除网络接口:
3 M, g  Q4 G- v* B6 f0 _+ M( ~- ?: Q[root@lockey Desktop]# firewall-cmd --permanent --zone=internal --add-interface=eth0! ~" v8 J2 W8 N6 m8 q0 N5 ?
[root@lockey Desktop]# firewall-cmd --permanent --zone=internal --change-interface=eth0: z$ `9 P+ R6 I; P
[root@lockey Desktop]# firewall-cmd --permanent --zone=internal --remove-interface=eth07 \+ J/ c7 v4 I8 e- q0 H
添加、删除服务:# M4 o2 d" J2 R9 G. H8 L' E& M3 p, J
[root@lockey Desktop]# firewall-cmd --permanent --zone=public --add-service=smtp
4 Q& Y9 z+ `5 t: p7 d[root@lockey Desktop]# firewall-cmd --permanent --zone=public --remove-service=smtp
3 N: u5 F8 m6 j7 i9 B7 g列出、添加、删除端口:
2 o) Y/ ^! \0 P% e/ r3 r2 K3 m[root@lockey Desktop]# firewall-cmd --zone=public --list-ports% Q( {" W' S/ s. Z
[root@lockey Desktop]# firewall-cmd --permanent --zone=public --add-port=8080/tcp
' Y. v. |% P( v* h( ~* a' {[root@lockey Desktop]# firewall-cmd --permanent --zone=public --remove-port=8080/tcp
: H# R6 Y  J- H重载防火墙:5 }4 F& b% c" E9 u1 I
[root@lockey Desktop]# firewall-cmd --reload
6 r5 ~( W% Y+ b9 d2 c  x(注意:这并不会中断已经建立的连接,如果打算中断,可以使用 --complete-reload选项)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 00:10 , Processed in 0.017087 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表