Linux - 외부에서의 접속을 허용하기 위한 TCP 포트 여는 방법
예전에 Centos 7 환경에서 firewall-cmd 명령어를 이용해 방화벽 제어를 했었는데요, 그런데 방화벽 설정이 없는데도,
$ sudo firewall-cmd --permanent --zone=public --add-port=10240/tcp
FirewallD is not running
외부에서 "telnet ...ip... 10240"으로 접속 테스트가 안 됩니다. 음... 뭔가 또 다른 방화벽 시스템이 있는 듯한데요, 한참을 헤맨 끝에 iptables라는 것이 그 역할을 한다는 것을 알게 되었습니다. ^^;
How To List and Delete Iptables Firewall Rules
; https://www.digitalocean.com/community/tutorials/how-to-list-and-delete-iptables-firewall-rules
예를 들어, 아래와 같이 명령을 수행해 얻은 출력을 보면,
$ sudo iptables -L INPUT
Chain INPUT (policy ACCEPT)
target prot opt source destination
tcp -- anywhere anywhere
neutron-openvswi-INPUT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere multiport dports fs-agent /* 001 aodh-api incoming aodh_api */
ACCEPT tcp -- anywhere anywhere multiport dports 8777 /* 001 ceilometer-api incoming ceilometer_api */
ACCEPT tcp -- anywhere anywhere multiport dports 8776 /* 001 cinder-api incoming cinder_api */
ACCEPT tcp -- anywhere anywhere multiport dports armtechdaemon /* 001 glance incoming glance_api */
ACCEPT tcp -- anywhere anywhere multiport dports 8041 /* 001 gnocchi-api incoming gnocchi_api */
ACCEPT tcp -- anywhere anywhere multiport dports http /* 001 horizon 80 incoming */
ACCEPT tcp -- anywhere anywhere multiport dports commplex-main /* 001 keystone incoming keystone */
ACCEPT udp -- anywhere anywhere multiport dports bootps /* 001 neutron dhcp in incoming neutron_dhcp_in_192.168.0.9 */
ACCEPT tcp -- anywhere anywhere multiport dports 9696 /* 001 neutron server incoming neutron_server_192.168.0.9 */
ACCEPT tcp -- anywhere anywhere multiport dports 8773,8774,8775,8778 /* 001 nova api incoming nova_api */
ACCEPT tcp -- anywhere anywhere multiport dports 6080 /* 001 novncproxy incoming */
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT icmp -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
"multiport dports 8777"라는 것에서 8777 포트에 대해 "telnet ...[ip]... 8777"로 연결하면 외부에서 접속이 됩니다. 그러니까, 위의 테이블에 포트를 등록하면 되는 것 같습니다. 이를 위해,
How to Open Ports in iptables
; https://www.ipserverone.info/knowledge-base/how-to-open-ports-in-iptables/
예를 들어 10240번 포트를 허용하고 싶다면 이렇게 명령어를 내릴 수 있습니다.
// 10240 포트로 들어오는 접속 허용
$ iptables -I INPUT -p tcp --dport 10240 -j ACCEPT
다시 iptables를 확인하면 해당 포트가 추가돼 있고,
$ sudo iptables -L INPUT
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:10240
tcp -- anywhere anywhere
neutron-openvswi-INPUT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere multiport dports fs-agent /* 001 aodh-api incoming aodh_api */
ACCEPT tcp -- anywhere anywhere multiport dports 8777 /* 001 ceilometer-api incoming ceilometer_api */
ACCEPT tcp -- anywhere anywhere multiport dports 8776 /* 001 cinder-api incoming cinder_api */
ACCEPT tcp -- anywhere anywhere multiport dports armtechdaemon /* 001 glance incoming glance_api */
ACCEPT tcp -- anywhere anywhere multiport dports 8041 /* 001 gnocchi-api incoming gnocchi_api */
ACCEPT tcp -- anywhere anywhere multiport dports http /* 001 horizon 80 incoming */
ACCEPT tcp -- anywhere anywhere multiport dports commplex-main /* 001 keystone incoming keystone */
ACCEPT udp -- anywhere anywhere multiport dports bootps /* 001 neutron dhcp in incoming neutron_dhcp_in_192.168.0.9 */
ACCEPT tcp -- anywhere anywhere multiport dports 9696 /* 001 neutron server incoming neutron_server_192.168.0.9 */
ACCEPT tcp -- anywhere anywhere multiport dports 8773,8774,8775,8778 /* 001 nova api incoming nova_api */
ACCEPT tcp -- anywhere anywhere multiport dports 6080 /* 001 novncproxy incoming */
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT icmp -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
실제로 외부에서 10240 포트로의 접속이 가능해집니다.
참고로, 삭제는 위의 추가 명령어에서 옵션만 "I"가 아닌 "D"로 바꾸면 됩니다.
$ sudo iptables -D INPUT -p tcp --dport 10240 -j ACCEPT
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]