Linux - Network / Firewall
<Network 관련 명령어>
# netstat [option] -> 네트워크 상태정보 및 프로토콜/포트 정보 확인
-a | 모든 소켓정보 출력 |
-n | 10진수 수치 정보로 출력 |
-r | Rounting 정보 확인 |
-p | 각 소켓에서 실행되는 프로그램이름과 프로세서 ID출력 |
-i | 모든 네트워크 인터페이스 정보 출력 |
-c | netstat 결과를 연속적으로 출력 |
-l | 현재 listen 중인 소켓정보 출력 |
-s | 각 프로토콜 통계정보 |
-t | tcp 소켓연결정보 출력 |
-A | 프로토콜 상태 별 확인 |
netstat 명령의 출력결과
LISTEN | 관련 프로세스 활성화 상태이며, 연결 가능한 상태 |
SYN-SENT | 클라이언트가 연결을 요청한 상태 |
SYN-RECEIVED | 연결요구에 대한 서버 응답 후 클라이언트의 확인 메세지 기다리는 상태 (여기까지 3단계를 3way handshake라고 부른다) |
ESTABLISHED | 앞의 3단계 연결과정 완료 후 데이터 통신이 가능한 상태 (3way handshake가 완료된 상태) |
FIN-WAIT1 | 연결 종료를 위한 신호를 보낸 상태 |
CLOSE-WAIT | 연결 종료 신호를 받은 상태 |
FIN-WAIT2 | 정말 연결 종료를 다시 한번 확인하는 상태 |
CLOSING | 전송된 메시지가 유실된 상태 |
TIME-WAIT | 연결 종료되었지만 한동안 유지하고 있는 상태 |
CLOSED | 연결 완전히 종료 |
옵션 사용 예시
# netstat -antp
22번포트를 열고 대기상태이다.
root@pts 계정이 192.168.131.1의 주소로 52178번포트를 사용하여
192.168.131.100 ip의 22번 포트로 접속한 상태라는 의미이다.
현재 푸티로 접속을 한 상태이기 때문에 ESTABLISHED로 나오는데 푸티를 종료하고
가상머신에서 터미널을 열어서 확인해보면 사라져있다.
그럼 다시 푸티를 연결하고 가상머신 터미널에서 확인하면
다시 나타나는 것을 확인 할 수 있다.
# systemctl stop sshd
이번엔 푸티가 사용중인 sshd를 삭제시키고
# netstat -antp
sshd가 사라진것을 확인할 수 있다.
다시 푸티를 접속해보자.
서비스가 없어진 상태이기 때문에 접속이 되지 않는다.
다시 sshd 실행
# systemctl start sshd
푸티접속 시도를 하면 다시 잘 접속인된다
# netstat -antp | grep ESTABLISHED
grep으로도 활용 가능
# ping [option]
- ICMP 프로토콜을 이용하여 TCP/IP 환경 장비들 간의 통신을 확인하는 용도로 사용됨.
-c | ping명령어 횟수 지정 (기본값 무제한) |
-s | 패킷의 Size를 지정 (기본값 56byte, 최대 76byte) |
-i | 패킷을 전송할 간격 지정 (기본값 1초) |
-t | TTL값 수동 지정 (기본값 보내는 쪽의 장치의 TTL값, 최대 255) |
ex)
# ping -c 4 -s 70 -i 0.1 8.8.8.8
# traceroute
경로를 추적한다.
거쳐가는 장비들이 몇 개이고, 각 장비들의 정보를 출력한다.
ex)
# traceroute 8.8.8.8
<Tracert와 Traceroute 차이>
[Tracert]
- ICMP Echo Request TTl값 조정 작업을 이용한 정보 취득(기본 3회씩 작업).
- 지속적으로 TTL값을 1씩 증가시키며 ICMP Echo Request 메시지를 전송한다.
- ICMP Echo Request TTL 메시지를 받은 장비에서 TTL 값이 만료될 경우 TTL 값 만료를 알리는.
메시지를 응답
- 응답받은 메시지를 통해 정보를 취득하는 방식
[Traceroute]
- UDP 데이터 전송을 통한 정보 취득(Port 번호 1개당 2회씩, TTL값당 총 6회 작업).
- UDP 데이터를 전송시 33434번 Port를 지정하여 최초 데이터를 전송하며, 번호를 1씩 증가시켜가며 데이터를 전송.
- UDP 데이터를 여러번 전송하면서, TTL값을 1씩 증가시키며 데이터를 전송한다.
- UDP 데이터를 받은 장비에서 TTL값이 만료될 경우 TTL 값 만료를 알리는 메시지를 응답.
- 응답받은 메시지를 통해 정보를 취득하는 방식.
- Traceroute 경우 ICMP가 차단되더라도 동작.
[Hostnamectl] : Server의 Host Name을 지정
# hostnamectl (Host Name 출력)
Host Name 이름지정
# hostnamectl set-hostname [Host Name]
변경해보자
# hostnamectl set-hostname HANN
# hostnamectl
명령으로 확인해보면
이렇게 바뀌어있지만
프롬프트에
아직도 root@localhost로 실질적으로 바뀌어지진 않았다.
변경사항을 적용하기 위해
# reboot
해보면
바뀌어 있는것을 확인할 수 있다.
[systemctl] : 서비스 관련 데몬을 관리하는 명령어
- 기본사용 형식 : systemctl [지시어] [데몬명]
[서비스 제어에 사용되는 지시어]
1. start : 서비스 시작
2. restart : 서비스 재시작
3. reload : 서비스 설정 새로 불러오기
4. stop : 서비스 정지
5. status : 서비스 상태확인
6. enable : 서비스 자동시작
7. disable : 서비스 자동시작 제거
[CentOS 7 기본 방화벽 : Firewalld]
블랙리스트 : 전부 허용, 특정 차단
화이트리스트 : 전부 차단, 특정 허용
식별된 일부 실체들의 특정 권한, 서비스, 이동, 접근, 인식에 대해 명시적으로 허가하는 목록
방화벽(보안정책)은 대부분 화이트리스트로 구성이된다.
보안면에서 화이트리스트가 훨씬 효과적이다.
여기서 허용과 차단은 포트번호로 구분/결정 해준다.
<기본값(영역)지정>
dmz
외부에 서비스를 제공해야 하는 상황에서 내부 자원을 보호하기 위해
내부 네트워크와 분리시킨 공간을 말한다.
외부에서 악의적인 의도를 가진 사람들이 실제 기업 내부의 PC나 서버 등에
직접 접속하지 못하게 하는 기술.
즉, 내부 네트워크와 외부 네트워크(인터넷) 사이에 DMZ라는 구간을 두어서
DMZ 내 서버의 침입으로부터
내부 네트워크를 보호할 수 있다.
들어오는 데이터 : SSH 제외 모두 거부
나가는 데이터 : 전부 허용
public
들어오는 데이터 : SSH, HDCPv6-Client 제외 모두 거부
나가는 데이터 : 전부 허용
trusted
들어오는 데이터 : 전부 허용
나가는 데이터 : 전부 허용
firewall-cmd (명령어) firewall 데몬을 활용한 규칙 설정 시 사용되는 명령어
[옵션]
--permanent : 영구적 설정을 의미
--reload : 영구적 설정에 정의된 규칙을 런타임에 적용
--add-service=서비스명 : 해당 서비스 규칙 추가
--remove-service=서비스명 : 해당 서비스 규칙 제거
--list-all : 적용되어있는 규칙 확인
방화벽 기본설정값 확인하는 방법
# firewall-cmd --get-default-zone
방화벽 기본설정값 변경하는 방법
# firewall-cmd --set-default-zone=dmz
# firewall-cmd --set-default-zone=public
Run-Time 영역
시스템의 전원을 차단하면 Run-Time에 들어있는 규칙들은 초기화된다.
그리고 전원이 인가되면 Permanent 영역에 있는 저장된 규칙들을 불러온다.
Run-Time 규칙을 확인
# firewall-cmd --list-all
Permanent 영역
특정 규칙들을 영구적으로 저장하는 저장소 역할.
Permanent 규칙을 확인
# firewall-cmd --list-all --permanent
테스트를 해보자
ftp 서비스를 추가
# firewall-cmd --add-service=ftp
확인
# firewall-cmd --list-all
그럼 서비스에 ftp가 새로 생겨 나타나는데
permanent를 확인해보면
# firewall-cmd --list-all --permanent
바뀌어있지 않은것을 확인할 수있다.
permanent 영역의 규칙을 Run-Time 으로 불러온다.
# firewall-cmd --reload
그럼 ftp가 다시 사라져있다.
즉, permanent에는 ftp가 추가되지 않았고, 당장 1차적으로만 추가가 된 것잇다.
permanent는 우리가 저장하고 사용하는 기본 세팅이라고 생각하면 되는데,
reload 명령은 이 permanent의 세팅을 불러오기 때문에
permanent에 추가없이 1차적으로만 ftp와 같은 서비스를 추가하고
reload하거나 시스템을 재부팅하면 사라진다.
즉 fpt를 영구적으로 사용하려면 permanent 설정에
추가를 해줘야한다.
영구적 규칙설정 방법
1단계
# firewall-cmd --permanent --add-service=ftp
# firewall-cmd --permanent --add-port=80/tcp
(서비스 이름을 명시하거나 포트번호로 명시하는 두 가지 방법.
대부분 포트번호로 명시)
삭제작업
# firewall-cmd --permanent --remove-service=ftp
# firewall-cmd --permanent --remove-port=80/tcp
2단계. 영구적 규칙 불러오기
# firewall-cmd --reload
1단계에서 원하는 서비스로 변경해주었지만 reload하는 이유는
1단계만 하고나서 # firewall-cmd --list-all를 해보면
안바뀌어있다. 즉, 변경한 내용을 적용해 주어야한다.
3단계. 확인
# firewall-cmd --list-all
이러한 서비스들의 종류를 확인해보자
서비스 종류 확인
# cd /usr/lib/firewalld/services/
# ls
서비스 내용 확인
수 많은 서비스들이 있는데 우리가 방금 작업할 때
이용했던 ftp도 이 안에 들어있다.
여기까지 Network / Firewall 에 대한 설명이 끝났다.