CentOS 80 포트 열기 - CentOS 80 poteu yeolgi

#개요

서버 설정하고 세팅하는데 정신없다.

항상 초기설정이 어렵다. 할때 찾아보고 뒤돌아서면 까먹으니까..

아래 테스트 및 내용은 CentOS에서 테스트한 기반으로 작성한 내용이다.

1. 현재 리눅스에서 열려있는 포트 확인

1.netstat -tnlp

TCP 중에서(t), Listening상태[열린포트]인 애들만(l), 상세정보까지(p), 10진수 숫자로(n) 표기한다.

[dklee@localhost ~]$ netstat -tnlp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN - tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN - tcp6 0 0 :::21 :::* LISTEN - tcp6 0 0 :::22 :::* LISTEN - tcp6 0 0 ::1:25 :::* LISTEN -

* netstat이 없으면 yum install net-tools 로 설치하면 netstat을 쓸 수 있다.

2.  상대방의 포트가 열려 있는지 확인

1. nc -z 호스트주소 포트

 특정 하나의 포트에 대해 통신을 확인한다.

 CentOS7의 경우 -z가 안붙는다. [nc 호스트주소 포트] 로 호출

//열린포트 [dklee@localhost ~]$ nc 1xx.1xx.2xx.1xx 873 @RSYNCD: 30.0 //열린포트 [dklee@localhost ~]$ nc 1xx.1xx.2xx.1xx 22 SSH-2.0-OpenSSH_7.4 //안열린포트 [dklee@localhost ~]$ nc 1xx.1xx.2xx.1xx 43 Ncat: Connection timed out.

* nc가 없으면 yum install nc 로 설치하면 nc를 쓸 수 있다.

2.telnet 호스트주소 포트

[dklee@localhost ~]$ telnet 1xx.1xx.2xx.1xx 22 Trying 1xx.1xx.2xx.1xx.. Connected to 1xx.1xx.2xx.1xx. Escape character is '^]'. SSH-2.0-OpenSSH_7.4

Connected to xxx.xxx.xxx.xxx... 가 뜨면 telnet 통신에 성공했다는 말이다.

.. Escape character is '^]'. SSH-2.0-OpenSSH_7.4 ^] telnet> quit Connection closed. [dklee@localhost ~]$

* telnet명령에서 빠져나오려면 Ctrl + ] 눌린다음에 quit 치면 된다.

[dklee@localhost ~]$ telnet 1xx.1xx.2xx.1xx 22 Trying 1xx.1xx.2xx.1xx...

* trying에서 멈춘다면 방화벽이 오픈이 안된 것이다.

[dklee@localhost ~]$ telnet 1xx.1xx.2xx.1xx 22 Trying 1xx.1xx.2xx.1xx... telnet: Unable to connect to remote host: Connection refused

* 바로 연결이 거부되면서 telnet: Unable to connect to remote host: Connection refused 가 뜬다면

방화벽은 열려있으나 저 포트에 해당되는 프로세스가 안올라가있는 것이다.

상대서버에서 netstat -ntlp로 확인해보면 해당 포트에 아무것도 없다는 말

3. 포트열기 (방화벽 오픈)

netstat으로 확인했을때 포트가 Listen 상태인데도 상대로부터 접속이 안되면 포트를 열어줘야된다.

포트를 연다는건 방화벽에서 해당 포트로의 접근을 OK 한다는것

1. 방화벽에 포트 허용하기

CentOS6 이하 : 

iptables -I INPUT 1 -p tcp --dport 12345 -j ACCEPT

I: 새로운 규칙을 추가한다.
p: 패킷의 프로토콜을 명시한다.
j: 규칙에 해당되는 패킷을 어떻게 처리할지를 정한다.

이 명령은 외부에서 들어오는(INBOUND) TCP포트 12345의 연결을 받아들인다는 규칙을 방화벽 1번 방화벽 규칙으로 추가한다는 의미이다.

이렇게 추가한 규칙은 조회나 삭제가 가능하다.

CentOS7 : 

firewall-cmd --permanent --zone=public --add-port=22/tcp

2.추가한 설정 조회하기

CentOS6 이하 : 

iptables -L -v

CentOS7 :

firewall-cmd --list-all

3.추가한 설정 삭제

CentOS6 이하 :

규칙번호로 삭제하기

iptables -D INPUT 1

추가한 규칙으로 삭제하기

iptables -D INPUT -p tcp --dport 12345 -j ACCEPT

CentOS7 :

firewall-cmd --permanent --zone=public --remove-port=22/tcp

=========끗========

RHEL 7 부터는 방화벽을 관리하는 데몬이 firewalld 로 변경되었고 방화벽 설정은 복잡한 iptables 명령어대신 firewall-cmd (콘솔), firewall-config(X-Windows) 명령어를 사용하는 것을 권장합니다.

firewall-cmd 는 iptables 를 쓰기 쉽게 하는 wrapper 이고 복잡한 규칙을 사용할 경우 --direct 옵션으로 iptables 내부에 접근해야 합니다.

설치

yum install firewalld systemctl start firewalld systemctl enable firewalld

CODE

설정

설정 파일

기본 설정은 /usr/lib/firewalld/ 에 위치하고 있으며 미리 설정된 zone과 zone 별 허용하는 서비스등은 이 폴더를 보면 확인할 수 있습니다.

시스템 개별 설정은 /etc/firewalld/ 에 위치하며 default zone 등 firewall 의 동작은 /etc/firewalld/firewalld.conf 에서 지정할 수 있으며 예로 default zone 을 dmz로 변경하려면 아래와 같이 설정하고 firewalld 를 재시작하면 됩니다.

/etc/firewalld/firewalld.conf

DefaultZone=dmz

CODE

커스터마이징된 zone 설정은 /etc/firewalld/zones//[ZONE].xml 에서 확인할 수 있으며 예로 public 존은 /etc/firewalld/zones/public.xml 에 설정합니다.

<?xml version="1.0" encoding="utf-8"?> <zone> <short>Public</short> <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accept ed.</description> <service name="dhcpv6-client"/> <service name="http"/> <service name="ssh"/> <service name="https"/> </zone>

CODE

재구동

서비스 재구동시 service iptables restart 대신 firewall-cmd 명령어를 사용합니다.

firewall-cmd --reload

CODE

zone

존은 서버의 용도에 맞게 사전에 정의된 네트워크의 신뢰 레벨을 의미.

사전 정의된 존 목록 출력

firewall-cmd --get-zones work drop internal external trusted home dmz public block

CODE

전체 존 목록을 상세하게 출력

firewall-cmd --list-all-zones

CODE

기본 존 출력

default 로 설정된 존 출력

firewall-cmd --get-default-zone public

CODE

활성화된 존 출력

firewall-cmd --get-active-zone

CODE

새로운 존 추가

--new-zone=ZONENAME 으로 추가

firewall-cmd --permanent --new-zone=webserver

CODE

존 삭제

--delete-zone=ZONENAME 으로 삭제

firewall-cmd --permanent --delete-zone=webserver

CODE

서비스 목록

사전에 정의된 서비스의 목록은 --get-services 으로 확인 가능

firewall-cmd --get-services RH-Satellite-6 amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns freeipa-ldap freeipa-ldaps freeipa-replication ftp high-availability http https imaps ipp ipp-client ipsec iscsi-target kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind rsyncd samba samba-client smtp ssh telnet tftp tftp-client transmission-client vdsm vnc-server wbem-https

CODE

permanent 로 등록된 서비스 목록

dmz 존에 영구적으로 등록된 서비스 목록 확인

firewall-cmd --permanent --list-all --zone=dmz

CODE

서비스 추가

--add-service=SERVICE_NAME 으로 추가할 서비스 지정

firewall-cmd --permanent --zone=dmz --add-service=http firewall-cmd --permanent --zone=dmz --add-service=https

CODE

서비스 삭제

--remove-service=SERVICE_NAME 으로 삭제할 서비스 지정

firewall-cmd --permanent --zone=dmz --remove-service=http

CODE

포트 추가

--add-port=<portid>[-<portid>]/<protocol> 옵션을 사용하여 포트 추가

포트 추가/변경, IP 추가/변경는 --reload 옵션을 실행해야 반영됨.

firewall-cmd --permanent --zone=public --add-port=8080/tcp

CODE

포트를 범위로 지정하려면 - 구분자를 넣어서 설정

4000 ~ 4100 포트 오픈

firewall-cmd --permanent --zone=public --add-port=4000-4100/tcp

BASH

포트 삭제

--remove-port=<portid>[-<portid>]/<protocol> 옵션 사용

firewall-cmd --permanent --zone=public --remove-port=8080/tcp

CODE

허용 IP 추가

--add-source=<source range>/netmask 옵션을 사용하여 IP 추가

아래 예는 192.168.1. 대역에서 ssh 접근을 허용

firewall-cmd --permanent --zone=public --add-source=192.168.1.0/24 --add-port=22/tcp firewall-cmd --reload

CODE

rich-rule

  • //fedoraproject.org/wiki/Features/FirewalldRichLanguage

보다 복잡한 규칙 설정이 필요할때나 firewall-cmd에서 필요로 하는 옵션을 제공하지 않을 경우 rich rule 언어를 사용하여 직접 방화벽 규칙을 설정할 수 있음.

새로운 룰 추가는 --add-rich-rule='<rule>' 와 같은 형식으로 설정

firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.10.0/24" port protocol="tcp" port="9000" accept"

CODE

direct

--direct 옵션을 사용하면 기존의 iptables 명령처럼 직접 방화벽 내부에 접근해서 설정할 수 있음

$ sudo firewall-cmd --direct --get-all-rules ipv4 filter INPUT 0 -p tcp -m multiport --dports ssh -m set --match-set fail2ban-sshd src -j REJECT --reject-with icmp-port-unreachable

CODE

firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -o eth_ext -j MASQUERADE

CODE

서비스 설정

웹 서버 방화벽 설정

  1. 새로운 zone 생성

    firewall-cmd --permanent --new-zone=webserver

    CODE

  2. 활성화

    firewall-cmd --set-default-zone=webserver

    CODE

  3. 방화벽에 포트 추가

    firewall-cmd --permanent --zone=webserver --add-service=http firewall-cmd --permanent --zone=webserver --add-service=https

    CODE

    기본 zone이 webserver 이므로 --zone=webserver 옵션은 생략 가능

  4. firewalld 재시작

    firewall-cmd --reload

    CODE

  5. 정상 설정 여부 확인

    firewall-cmd --list-services --zone=webserver   dhcpv6-client http https ssh

    CODE

apache 웹서버 설정

  1. 서비스 활성화

    systemctl enable httpd

    CODE

  2. 서비스 시작

    systemctl start httpd

    CODE

nginx 설정

  1. 기존에 아파치 httpd 가 설치되어 있으면 비활성화

    systemctl stop httpd systemctl disable httpd

    CODE

  2. 서비스 활성화

    systemctl enable nginx.service

    CODE

  3. 시작

    systemctl start nginx.service

    CODE

같이 보기

  • firewalld 방화벽 사용
  • firewall-cmd 로 특정 IP 차단하기

Ref

  • //www.digitalocean.com/community/tutorials/additional-recommended-steps-for-new-centos-7-servers
  • //access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Migration_Planning_Guide/sect-Red_Hat_Enterprise_Linux-Migration_Planning_Guide-Security_and_Access_Control.html
  • //access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Security_Guide/sec-Using_Firewalls.html
  • //stackoverflow.com/questions/24729024/centos-7-open-firewall-port

Toplist

최신 우편물

태그