리눅스 시스템에서 방화벽이 구동 중인지 확인하려면 몇가지 명령어를 통해 서비스 실행 여부를 확인해야 합니다.
리눅스 방화벽 상태 확인 방법
먼저 방화벽 서비스 구동 여부는 service 또는 systemctl 명령어를 사용하여 확인할 수 있습니다. systemctl(systemd)은 최신 리눅스에서만 지원하기 때문에 운영체제에 따라 올바른 명령어를 사용해야 합니다.
iptables
주의: 최신 리눅스에서는 iptables가 아닌 firewalld 를 사용하는 경우가 있습니다. 하단의 명령어로 iptables.service unit not found 에러가 발생한다면 건너뛰고 firewalld 서비스를 확인합니다.
# service iptables status 또는 # systemctl status iptables
출력된 결과에서 Active의 값에 따라 구동 여부를 확인할 수 있습니다.
- 실행 중인 경우
Active: active (exited) - 실행 중이지 않은 경우
Active: inactive (dead)
ufw (Ubuntu에서만 해당됨)
ufw의 경우 두 가지 명령어가 있습니다.
# ufw status
이 명령어를 사용하면 간단하게 실행 여부를 확인할 수 있습니다.
- 실행 중인 경우
Status: active - 실행 중이지 않은 경우
Status: inactive
또 다른 명령어는 위와 같습니다.
# service ufw status 또는 # systemctl status ufw
출력된 결과에서 Active의 값에 따라 구동 여부를 확인할 수 있습니다.
- 실행 중인 경우
Active: active (exited) - 실행 중이지 않은 경우
Active: inactive (dead)
firewalld
firewalld는 최신 리눅스에서 기본으로 구성되는 방화벽 소프트웨어입니다. firewalld가 설치되어 있다면 iptables가 비활성화 되어있을 수 있습니다.
마찬가지로 두 가지 방법이 있습니다.
# firewall-cmd --state
이 명령어를 사용하면 간단하게 실행 여부를 확인할 수 있습니다.
- 실행 중인 경우
not running - 실행 중이지 않은 경우
running
service와 systemctl 명령어로도 확인이 가능합니다.
# service firewalld status 또는 # systemctl status firewalld
출력된 결과에서 Active의 값에 따라 구동 여부를 확인할 수 있습니다.
- 실행 중인 경우
Active: active (exited) - 실행 중이지 않은 경우
Active: inactive (dead)
리눅스 방화벽 규칙 확인 방법
이제 실행 중인 방화벽에서 어떠한 규칙이 사용되고 있는지 확인해보도록 하겠습니다. root 권한을 사용해야 될 수도 있습니다.
iptables로 확인
# iptables -L [chain [rulnum]]
대략적인 결과는 아래와 같습니다.
# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED ACCEPT all -- anywhere anywhere INPUT_direct all -- anywhere anywhere INPUT_ZONES_SOURCE all -- anywhere anywhere INPUT_ZONES all -- anywhere anywhere DROP all -- anywhere anywhere ctstate INVALID REJECT all -- anywhere anywhere reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED ACCEPT all -- anywhere anywhere FORWARD_direct all -- anywhere anywhere FORWARD_IN_ZONES_SOURCE all -- anywhere anywhere FORWARD_IN_ZONES all -- anywhere anywhere FORWARD_OUT_ZONES_SOURCE all -- anywhere anywhere FORWARD_OUT_ZONES all -- anywhere anywhere DROP all -- anywhere anywhere ctstate INVALID REJECT all -- anywhere anywhere reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT) target prot opt source destination OUTPUT_direct all -- anywhere anywhere Chain FORWARD_IN_ZONES (1 references) target prot opt source destination FWDI_public all -- anywhere anywhere [goto] FWDI_public all -- anywhere anywhere [goto] ... (생략)
전체 규칙 리스트는 -L 옵션만 붙이면 되지만, 결과가 많아지기 때문에 특정 체인(INPUT, OUTPUT, FORWARD 등)의 값을 입력하거나 grep 을 사용하여 원하는 프로토콜 이름으로만 검색해볼 수 있습니다.
# iptables -L INPUT 또는 # iptables -L | grep ssh
ufw로 확인
ufw는 간단한 명령어로 확인이 가능합니다. 위에서 입력했던 ufw status 명령어로 현재 열려있는 포트 확인이 바로 가능합니다. 내용이 없을 경우 규칙이 설정되지 않았다는 의미입니다.
root@myServer:~# ufw status Status: active To Action From -- ------ ---- 22 ALLOW Anywhere 177/udp ALLOW Anywhere 6000:6010/tcp ALLOW Anywhere 80/tcp ALLOW Anywhere 177/tcp ALLOW Anywhere 22 (v6) ALLOW Anywhere (v6) 177/udp (v6) ALLOW Anywhere (v6) 6000:6010/tcp (v6) ALLOW Anywhere (v6) 80/tcp (v6) ALLOW Anywhere (v6) 177/tcp (v6) ALLOW Anywhere (v6)
firewalld로 확인
firewalld는 firewall-cmd 명령어를 사용하여 규칙을 추가하거나 확인할 수 있습니다.
firewalld는 다양한 zone을 가지고 있습니다. 각 zone에 대한 규칙을 지정할 수 있고 일반적으로 public 으로 zone이 기본 지정되어 있습니다. 아래 명령어로 확인이 가능합니다.
# firewall-cmd --get-default-zone public
public zone에 대한 방화벽 규칙을 확인하려면 아래 명령어를 사용합니다. 먼저 알려진 서비스로 규칙을 추가하였다면 –list-services 옵션을 붙여 확인할 수 있습니다.
# firewall-cmd --zone=public --list-services ssh dhcpv6-client smtp
방화벽 규칙을 추가할 때 알려진 서비스가 아닌 임의 포트 규칙을 사용함으로서 특정 포트를 추가했다면, 아래 명령어로 허용된 포트를 확인할 수 있습니다.
public zone에 대해 허용되고 있는 포트를 확인하려면 –list-ports 옵션을 붙여서 사용할 수 있습니다. –zone 옵션을 붙이지 않으면 모든 zone에 대한 정책을 보여줍니다.
# firewall-cmd --zone=public --list-ports 22/tcp 80/tcp 3360/tcp 21/tcp