특정 프로세스에 대한 PORT 관련 확인을 할 일이 있어서
방화벽을 올렸다 내렸다 하면서, PORT에 대한 확인을 하려고 한다

관련하여 구글링하면 정보가 가장 많이 나오는 iptables.

일단 root계정으로 들어가서 확인해보면 설치되어있는것(?)이 확인되는데
[root@sunje ~]# iptables --version
iptables v1.4.21

구동을 위해 서비스를 열면 아래와 같은 메시지가 뜬다
[root@tech3 ~]# systemctl start iptables
Failed to execute operation: No such file or directory

이게 왜그러냐면 
기존 CentOS 6 이전에 방화벽 컨트롤을 위해 사용되던 iptables가 
CentOS7 이후 firewalld로 대체되었다. 더 사용하기쉽게 개발된 것

그래서 CentOS7에서 iptables도 설치가 되어있지만, 
firewalld 사용을 권고하기 위해 service로는 등록을 안해둔것. 
그래서 iptables의 구문은 사용할 수 있지만 service나 systemctl등으로 컨트롤할 수는 없다. (따로 설정하지 않는다는 가정)
iptables 연습 많이했지만....새로운 firewalld로 GoGo...



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 
이렇게 바뀐 것 확인된다.


113번장비(tech3 ), 240번장비(intra-consulting) 두대에서 telnet을 통해 방화벽을 확인해본다.

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

다른 장비에서 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

다시 113번 장비에서 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 옵션을 붙이지 않으면, 일시적으로 즉시 반영되고 재부팅 시 룰 삭제 된다 (썰정파일에 반영 안되었으니깐)





포트 허용에 대한 테스트
113번장비(tech3), 240번장비(intra-consulting)에서 수행한다

113번 장비에 firewalld 오픈한다
[root@tech3 ~]# systemctl start firewalld


240번 장비에서 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

이 상태에서 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


240번 장비에서 포트허용이 잘 되어있는지 확인해보니 잘 열려있다.
[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



240번 장비에서 포트차단이 잘 되어있는지 확인
[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





firewalld로 컨트롤할수있는(?) 서비스 목록은 첫번째 구문 또는 두번째줄 디렉토리에서 확인 가능하다.
# firewall-cmd --get-service
# ls /usr/lib/firewalld/services/

public zone에 등록된 서비스 확인
[root@tech3 ~]# firewall-cmd --zone=public --list-service
dhcpv6-client ssh

telnet 서비스를 public 존에 추가
[root@tech3 ~]# firewall-cmd --zone=public --add-service=telnet
success

telnet2라는 서비스는 firewalld에 등록이 안되어있어서 오류
[root@tech3 ~]# firewall-cmd --zone=public --add-service=telnet2
Error: INVALID_SERVICE: telnet2

public에 추가 된 telnet 서비스 확인
[root@tech3 ~]# firewall-cmd --zone=public --list-service
dhcpv6-client ssh telnet




**
telnet 서비스를 추가하면, telnet서비스는 무조건 허용인가? 생각했는데 그건 아닌듯.
telnet 서비스 추가 된 상태에서도 No route to host가 뜬다. (차단되어있음)

[root@tech3 ~]# firewall-cmd --zone=public --list-service
dhcpv6-client ssh 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

zone에 서비스를 추가한다는게 무엇을 의미하는지 모르겠다. => 알아볼것
'서비스에서 사용하는 룰을 적용하려면 아래와 같이 서비스를 추가하면 됩니다.' 라고 하는데 이것도 무슨말인지 모르겠.. https://conory.com/blog/42477


일단 내가 필요한 PORT에 대한 허용/차단은 확인했으니
이번건 마무리





+ Recent posts