ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • LINUX Centos 7 방화벽 설정 및 확인
    System of Infra/LINUX 2021. 6. 1. 22:32
    반응형

    LINUX로고이미지

    LINUX Centos 7 방화벽 설정 및 확인

    [root@test_svr1 /]# netstat -ntl
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address Foreign Address State
    tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
    tcp 0 0 0.0.0.0:6000 0.0.0.0:* LISTEN
    tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
    tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
    tcp 0 0 0.0.0.0:8088 0.0.0.0:* LISTEN
    tcp6 0 0 :::3306 :::* LISTEN
    tcp6 0 0 :::111 :::* LISTEN
    tcp6 0 0 :::6000 :::* LISTEN
    tcp6 0 0 :::22 :::* LISTEN
    tcp6 0 0 ::1:631 :::* LISTEN
    tcp6 0 0 :::33060 :::* LISTEN

    -> 시스템의 방화벽과 관련된 포트를 확인합니다. netstat -ntl 명령어를 통해서 방화벽에서 관리하는 포트를 나타냅니다. 현재 LISTEN 상태로 포트는 열려 있지만 연결을 되어 있지 않은 상태입니다.

    [root@test_svr1 /]# firewall-cmd --state
    running

    -> 방화벽의 데몬을 간단하게 확인을 할 수 있습니다. firewall-cmd -state 명령어를 통해서 running 상태를 확인할 수 있습니다.

    [root@test_svr1 /]# systemctl status firewalld
    * firewalld.service - firewalld - dynamic firewall daemon
    Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
    Active: active (running) since Fri 2021-05-28 14:21:11 KST; 2h 3min ago(현재 활성화 되어 있는 상태)
    Docs: man:firewalld(1)
    Main PID: 4540 (firewalld)
    Tasks: 2
    CGroup: /system.slice/firewalld.service
    `-4540 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
    
    May 28 16:08:29 test_svr1 firewalld[4540]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -w --tabl...n?).
    May 28 16:08:29 test_svr1 firewalld[4540]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -w --tabl...n?).
    May 28 16:08:29 test_svr1 firewalld[4540]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -w --tabl...n?).
    May 28 16:08:29 test_svr1 firewalld[4540]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -w --tabl...ame.
    May 28 16:08:29 test_svr1 firewalld[4540]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -w --tabl...ame.
    May 28 16:08:29 test_svr1 firewalld[4540]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -w --tabl...n?).
    May 28 16:08:29 test_svr1 firewalld[4540]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -w --tabl...n?).
    May 28 16:08:29 test_svr1 firewalld[4540]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -w --tabl...n?).
    May 28 16:08:29 test_svr1 firewalld[4540]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -w --tabl...n?).
    May 28 16:08:29 test_svr1 firewalld[4540]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -w --tabl...n?).
    Hint: Some lines were ellipsized, use -l to show in full.

    -> firewall의 데몬의 상태를 자세하게 확인을 하기 위해서 해당 명령어를 사용하여 확인합니다.

    [root@test_svr1 /]# firewall-cmd --get-zones
    block dmz drop external home internal public trusted work

    -> 현재 시스템의 방화벽에 설정되어 있는 ZONE을 모두 확인할 수 있는 명령어 입니다. 출력을 통해서  block, dmz, drop, external, home, internal, public, trusted, work의 ZONE으로 구성되어 있는걸 확인 할 수입니다. 추가적으로 Public의 경우 일반적으로 default로 지정되어 있는 ZONE일 가능성이 높습니다.

    [root@test_svr1 /]$ firewall-cmd --get-default-zone
    public

    -> 여러 ZONE 중에서 현재 default의 ZONE이 public 인 것을 확인할 수  있습니다.

    [root@test_svr1 /]$ firewall-cmd --get-active-zones
    public
    interfaces: bond0 enp7s0f1 enp7s0f0

    -> 추가적으로 현재 default의 ZONE이 public 이면서 IP 통신을 할 수 있는 Interface의 구성도 함께 확인을 할 수 있습니다.

    [root@test_svr1 bonding]$ cat bond0
    Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
    
    Bonding Mode: fault-tolerance (active-backup)
    Primary Slave: enp7s0f0 (primary_reselect always)
    Currently Active Slave: enp7s0f0
    MII Status: up
    MII Polling Interval (ms): 100
    Up Delay (ms): 0
    Down Delay (ms): 0
    
    Slave Interface: enp7s0f1
    MII Status: up
    Speed: 1000 Mbps
    Duplex: full
    Link Failure Count: 0
    Permanent HW addr: 80:c1:6e:6d:xx:xx
    Slave queue ID: 0
    
    Slave Interface: enp7s0f0
    MII Status: up
    Speed: 1000 Mbps
    Duplex: full
    Link Failure Count: 0
    Permanent HW addr: 80:c1:6e:6d:xx:xx
    Slave queue ID: 0

    -> 해당 시스템의 경우 Interface를 통해서 bonding 이중화로 네트워크 구성되어 있는 것을 확인할 수 있습니다.

    [root@test_svr1 /]# firewall-cmd --list-all
    public (active)
    target: default
    icmp-block-inversion: no
    interfaces: bond0 enp7s0f1 enp7s0f0
    sources:
    services: ssh dhcpv6-client http https
    ports: 22/tcp
    protocols:
    masquerade: no
    forward-ports:
    source-ports:
    icmp-blocks:
    rich rules:

    -> 방화벽 설정 항목 list를 통해서 현재 bonding으로 구성되어 있는 Interface와 현재 사용하고 있는 서비스 프로토콜 및 포트를 확인할 수 있습니다.

    [root@test_svr1 /]# firewall-cmd --zone=public --list-all
    public (active)
    target: default
    icmp-block-inversion: no
    interfaces: bond0 enp7s0f1 enp7s0f0
    sources:
    services: ssh dhcpv6-client http https
    ports: 22/tcp
    protocols:
    masquerade: no
    forward-ports:
    source-ports:
    icmp-blocks:
    rich rules:

    -> 현재 default가 public으로 구성되어 있고 public ZONE에 구성되어 있는 설정 상태를 확인할 수 있습니다. 현재는 ssh, dhcpv6-client, http, https와 같은 서비스 프로토콜을 사용하고 있고 있고 포트는 22/tcp 포트를 사용하고 있는 것을 볼 수 있습니다.

    [root@test_svr1 /]# firewall-cmd --add-service=ftp
    success

    -> 현재 구성되어 있는 서비스 외에 서비스를 방화벽 설정에 추가를 할 경우 add 명령어를 통해서 ftp 서비스를 추가해 보도록 하겠습니다.

    [root@test_svr1 /]# firewall-cmd --zone=public --list-all
    public (active)
    target: default
    icmp-block-inversion: no
    interfaces: bond0 enp7s0f1 enp7s0f0
    sources:
    services: ssh dhcpv6-client http https ftp(추가)
    ports: 22/tcp 
    protocols:
    masquerade: no
    forward-ports:
    source-ports:
    icmp-blocks:
    rich rules:

    -> default인 public ZONE에서 서비스 부분에 https의 뒤로 ftp 서비스가 추가된 것을 확인할 수 있습니다.

    [root@test_svr1 /]# firewall-cmd --remove-service=ftp
    success

    -> 반대로 방화벽 설정에 추가되었던 ftp 포트를 remove를 통해서 삭제해보도록 하겠습니다.

    [root@test_svr1 /]# firewall-cmd --zone=public --list-all | grep -i services
    services: ssh dhcpv6-client http https

    -> 마찬가지로 default인 public ZONE에서 서비스 부분에 https의 뒤로 ftp 서비스가 사라진 것을 확인할 수 있습니다.

    [root@test_svr1 /]# netstat -an | grep -i 8090

    -> 이번에는 프로토콜이 아닌 포트를 추가해주기 위해서 임시로 8090 포트가 현재 사용 중인지 확인을 하였고 현재 netstat 경로에 8090 포트가 사용되지 않는 것을 확인할 수 있습니다.

    [root@test_svr1 /]# firewall-cmd --add-port=8090/tcp
    success

    -> 8090 포트를 방화벽 설정에 추가합니다.

    [root@test_svr1 /]#iptables -nL
    Chain IN_public_allow (1 references)
    target prot opt source destination
    ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 ctstate NEW
    ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 ctstate NEW
    ...(생략)
    ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8090 ctstate NEW

    -> iptable에 추가한 방화벽 포트가 룰로 생성되어 있는 것을 확인할 수 있습니다.

    [root@test_svr1 /]# iptables -nL | grep -i 8090
    ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8090 ctstate NEW

    -> 특정 포트를 grep으로 필터링하여 확인합니다.

    [root@test_svr1 /]# firewall-cmd --zone=public --list-all | grep -i 8090/tcp
    ports: 22/tcp  8090/tcp

    -> 방화벽의 설정에서 기존 22 ssh 포트만 사용하고 있던 방화벽 설정에서 8090 포트가 추가된 것을 확인할 수 있습니다.

    [root@test_svr1 /]# firewall-cmd --remove-port=8090/tcp
    success

    -> 추가하였던 8090 포트를 삭제하도록 합니다.

    [root@test_svr1 /]# iptables -nL | grep -i 8090
    Chain IN_public_allow (1 references)
    target prot opt source destination
    ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 ctstate NEW
    ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 ctstate NEW
    ...(생략)

    -> iptable에 추가되었던 8090 포트가 사라진 것을 확인할 수 있습니다.

    [root@test_svr1 /]# firewall-cmd --zone=public --list-all
    public (active)
    target: default
    icmp-block-inversion: no
    interfaces: bond0 enp7s0f1 enp7s0f0
    sources:
    services: ssh dhcpv6-client http https
    ports: 22/tcp 
    protocols:
    masquerade: no
    forward-ports:
    source-ports:
    icmp-blocks:
    rich rules:

    -> firewall 방화벽 설정 역시 port 항목에 처음과 같이 22/tcp 포트만 남고 삭제가 된 것을 확인할 수 있습니다.

    [root@test_svr1 /]# firewall-cmd --list-all
    block
    target: %%REJECT%%
    icmp-block-inversion: no
    interfaces:
    sources:
    services:
    ports:
    protocols:
    masquerade: no
    forward-ports:
    source-ports:
    icmp-blocks:
    rich rules:
    ...(생략)
    dmz
    target: default
    icmp-block-inversion: no
    interfaces:
    sources:
    services: ssh
    ports:
    protocols:
    masquerade: no
    forward-ports:
    source-ports:
    icmp-blocks:
    rich rules:

    -> 현재 시스템의 방화벽 ZONE list를 모두 확인합니다.

    [root@test_svr1 /]# firewall-cmd --zone=dmz --add-service=ftp
    success

    -> 그렇다면 기존에는 default에 add 항목으로 자동으로 추가되었지만 사용하지 않고 있는 ZONE에 서비스 프로토콜에 추가를 하기 위해서 DMZ ZONE에 ftp 서비스를 추가하도록 하겠습니다.

    [root@test_svr1 /]# firewall-cmd --list-all-zone 
    dmz
    target: default
    icmp-block-inversion: no
    interfaces:
    sources:
    services: ssh ftp
    ports:
    protocols:
    masquerade: no
    forward-ports:
    source-ports:
    icmp-blocks:
    rich rules:

    -> default의 ZONE public이 아닌 DMZ에 할당을 해주었기 때문에 services: ftp가 추가된 것을 확인할 수 있습니다. 

    [root@test_svr1 /]# firewall-cmd --zone=dmz --remove-service=ftp
    success

    -> 위에서 사용했던 명령어 동일하게 ZONE을 dmz로 주고 ftp를 삭제하도록 합니다.

    [root@test_svr1 /]# firewall-cmd --list-all-zone 
    dmz
    target: default
    icmp-block-inversion: no
    interfaces:
    sources:
    services: ssh
    ports:
    protocols:
    masquerade: no
    forward-ports:
    source-ports:
    icmp-blocks:
    rich rules:

    -> 방화벽 DMZ 설정에서 해당 서비스가 ssh와 ftp로 구성되어 있는 상태에서 ftp가 삭제된 것을 확인할 수 있습니다. 이와 마찬가지로 포트를 추가해주는 것도 동일하게 적용시키면 될 것 같습니다.

     

    PS. 포스팅의 내용은 제 기준으로 작성한 것이기 때문에 참고해서 보시면 감사하겠습니다.

    포스팅 과정의 오류 및 오타 그리고 궁금한 점에 대해서는 댓글 남겨주세요.

    반응형

    댓글

Designed by Tistory.