7) firewall-cmd

리눅스의 방화벽을 컨트롤하는 유틸이다. firewall이 실행되고 있다는것은 (허용한 포트 외) 방화벽으로 막혀있다는 의미이다.
리눅스 방화벽으로 구글링하면 가장 많이 나오는 iptables인데, 기존 CentOS 6 이전에 방화벽 컨트롤을 위해 사용되던 iptables가 CentOS7 이후 firewalld로 대체되었다. 더 사용하기쉽게 개발된 것.
아래는 firewalld 기준으로 설명하였다.

firewalld 상태 확인
systemctl 구문을 통해 firewalld 상태를 확인할 수 있다.
# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since 금 2018-01-19 11:01:34 KST; 4h 57min ago
   Docs: man:firewalld(1)
   Process: 19556 ExecStart=/usr/sbin/firewalld --nofork --nopid $FIREWALLD_ARGS (code=exited, status=0/SUCCESS)
Main PID: 19556 (code=exited, status=0/SUCCESS)

firewalld 서비스 구동
# systemctl start firewalld

다시 status로 상태를 확인하면
Active: active (running) since 금 2018-01-19 16:26:18 KST; 7s ago 
이렇게 바뀐 것 확인된다.


서로다른 장비에서 telnet을 통해 방화벽을 확인해본다.

1번 장비에서 firewalld를 구동한 뒤,
[root@tech3 ~]# systemctl start firewalld

2번 장비에서 telnet을 통해 방화벽 상태를 확인하면 방화벽으로 막혀있음을 알 수 있다.
[root@intra-consulting ~]# telnet 192.168.0.113 22581
Trying 192.168.0.113...
telnet: connect to address 192.168.0.113: No route to host

다시 1번 장비에서 firewalld 구동을 중지하면
[root@tech3 ~]# systemctl stop firewalld

아래와같이 정상 커넥션 된다. (현재 22581에 프로세스 떠있는 상태)
[root@intra-consulting ~]# telnet 192.168.0.113 22581
Trying 192.168.0.113...
Connected to 192.168.0.113.
Escape character is '^]'.




firewalld의 ZONE 과 RULE
방화벽의 zone(영역)에 rule들을 설정한다.
 
모든 zone 확인
# firewall-cmd --list-all-zone

기본 zone 확인
# firewall-cmd --get-default-zone
public
public이라는 zone이 기본값으로 설정되어있음을 알 수 있다.

public zone의 configuration 확인
# firewall-cmd --zone=public --list-all


--permanent 
--permanent 옵션을 붙이면 설정파일(.xml)이 수정되는데, 정상 반영되려면 반드리 reload를 해야한다. (#firewall-cmd --reload)
--permanent 옵션을 붙이지 않으면, 일시적으로 즉시 반영되고 재부팅 시 룰 삭제 된다 (설정파일에 반영 안되었으니까)


특정 포트 허용/차단
예제를 통해 설명한다.

1번 장비에 firewalld 구동한다
[root@tech3 ~]# systemctl start firewalld

2번 장비에서 22581 포트로 telnet 접속해보려고 하면 방화벽으로 막힌다.
[root@intra-consulting ~]# telnet 192.168.0.113 22581
Trying 192.168.0.113...
telnet: connect to address 192.168.0.113: No route to host

1번장비에 22581/tcp 포트를 허용하는 구문 수행
[root@tech3 ~]# firewall-cmd --zone=public --add-port=22581/tcp
success

public zone에서 허용하고있는 port 확인
[root@tech3 ~]# firewall-cmd --zone=public --list-ports
22581/tcp


2번 장비에서 포트허용이 잘 되어있는지 확인해보니 잘 열려있다.
[root@intra-consulting ~]# telnet 192.168.0.113 22581
Trying 192.168.0.113...
Connected to 192.168.0.113.
Escape character is '^]'.

^]
telnet>

다시 22581/tcp포트를 차단하기 위해, 포트 제거 구문 수행
[root@tech3 ~]# firewall-cmd --zone=public --remove-port=22581/tcp
success

public zone에서 허용하고있는 port를 확인해보면, 허용하고 있는 포트가 없음이 확인된다.
[root@tech3 ~]# firewall-cmd --zone=public --list-ports



2번 장비에서 포트차단이 잘 되어있는지 확인
[root@intra-consulting ~]# telnet 192.168.0.113 22581
Trying 192.168.0.113...
telnet: connect to address 192.168.0.113: No route to host



+ Recent posts