서론
ELITE HACKER Bootcamp 3rd 1주차 수업 공부 내용
aws 우분투 서버 하나 파서 연습
ip, port, 방화벽, ufw
ifconfig, ip, netstat
IP와 PORT
IP(Internet PRotocol) 주소란, 네트워크 장치의 위치를 식별하기 위한 고유한 번호이다. 네트워크 상에서 일종의 주소 역할을 한다.
현재 IPv4, IPv6 버전이 있고, IPv4같은 경우 4바이트로 구성되어 있고(0.0.0.0~255.255.255.255, 각 자리마다 1바이트(8비트)를 숫자로 표현), IPv6같은 경우 16바이트로 구성되어 있다.
현재 IPv4 같은 경우 거의 다 사용했다 라는 얘기가 나오기에... 각 아이피에서 내부적으로 아이피들을 부여하고 있다.
PORT(포트)란, 네트워크에서 프로세스나 서비스를 식별하기 위한 논리적 번호이다. 흔히 프로그램이 ip주소를 통해서 주소에 도착하면 해당 프로그램 또는 데이터를 어디에 올릴지 를 포트를 통해서 결정한다. 여러 개의 네트워크 서비스를 구분하기 위해 사용되는데, http 웹 서비스의 경우 80번 포트, ssh의 경우 22번포트 이런식으로 각 포트에서 마다 서비스를 구분한다.
0~1000번까지는 흔히 우리에게 많이 알려지고 많이 사용된 애들에게 약속으로 정해지고, 그 뒤 나머지 부분은 우리가 원하는 대로 사용할 수 있다.
내부 IP vs 외부 IP
내부 IP는 로컬에서 내부적으로 통신할 때 사용하는 ip이다. 그렇기에 인터넷으로 직접적으로 노출되지 않는다. 아까 위에서 언급했듯이 대부분의 ipv4 주소는 사용되었기에, 내부적으로 내부 ip를 할당하여 이를 토대로 서로 통신을 주고 받는다. 그리고 외부로 나갈 때, NAT(Network Address Translation)를 통해 인터넷에 접속할 때 공용 IP로 변환된다. 내부 IP는 다른 네트워크에서도 동일하게 사용할 수 있으며, IP 충돌은 해당 네트워크 내부에서만 발생된다. 내부 IP는 외부에 직접적으로 노출되지 않으므로, 인터넷 공격에 덜 노출된다.
이걸 내부 IP에서 쓰라고 RFC 1918 규약이라고 있는데, 내부 IP를 쓸 때는 반드시
- 클래스 A : 10.0.0.0~10.255.255.255
- 클래스 B : 172.16.0.0~172.31.255.255
- 클래스 C : 192.168.0.0~192.168.255.255
이렇게 쓰게 되어있다. 보통 우리들 집에서 공유기 사용하는 집에서 ipconfig 같은 걸로 ip를 확인하면 192.168.x.x 이렇게 나오는 이유가 내부 ip를 통해서 부여받았기 때문.
외부 IP는 이제 진짜 인터넷에 연결된 장치에 부여되는 고유 번호이다. 인터넷 서비스 제공자(ISP)가 네트워크에 있는 라우터나 장치에 할당하며, 전 세계에서 고유해야 한다. 그렇기에 외부 IP에서는 IP주소 충돌이 일어날 수가 없다. 왜? 고유해야하니까. 외부 IP 주소는 IP 등록 기관에 의해 관리되며, 일반 사용자나 조직은 ISP로부터 외부 IP를 할당받아야한다. 다만 외부 IP는 인터넷에 노출되므로..방화벽 등으로 공격으로부터 방어해야한다.
그럼 어떻게 내부 - 외부 가 연결되냐? 이게 NAT를 이용한다.
NAT는 내부 IP 주소를 외부 IP 주소로 변환하여 인터넷에 데이터를 전송할 때 사용되는데,
내부에서 192.168.0.55 ip를 쓴다고 했을 때, 이를 외부로 전송하기 위해서 외부 IP로 바뀌고, 밖으로 전송된다. 상대측에서 수신받았으면 그것을 다시 내부 IP를 통해서 원하는 애한테 전달하게 된다.
IP주소와 PORT 번호 확인하기
#ip 주소 확인하기
ifconfig #옛날 거
ip addr
보면 내부 IP로 10.0.0.15 쓰고 있는 것을 inet을 통해서 알 수 있다.
ip show도 마찬가지!
포트번호 확인은 netstat을 이용해야하는데
- -t: TCP 연결만 표시
- -u: UDP 연결만 표시
- -l: 현재 열려 있는 포트(리스닝 중인 포트)만 표시
- -n: IP 주소와 포트 번호를 숫자 형식으로 표시
이렇게 4가지 속성이 있다.
netstat -tuln #옛날 거
ss -tuln
으로 확인해보자.
방화벽
아까 말했듯이 외부 IP의 경우, 외부에 노출되기에 공격에 더 취약하다. 방화벽(Firewall)은 컴퓨터 네트워크 보안을 위한 시스템 또는 장치로, 허용된 네트워크 트래픽만 통과시키고 차단된 트래픽은 거부하는 역할을 하여, 네트워크와 시스템을 외부 위협으로부터 보호하고, 내부 네트워크 트래픽을 제어할 수 있다.
방화벽을 설정하는 도구는 대표적으로 많이 쓰는 건, iptables 와 ufw 이다. 그 중에서 ufw만 알아보자.
UFW는 iptables의 복잡한 명령어를 쉽게 사용할 수 있도록 하는 iptables의 프론트엔드 도구로써, 초보자와 중급 사용자에게 적합하며, 직관적인 명령어로 빠르게 방화벽 규칙을 설정 할 수 있다.
우선 방화벽의 설정을 확인하기 위해서는
sudo ufw status
sudo ufw status verbose # 더 상세한 정보 출력
를 이용한다.
지금은 방화벽이 켜져있지 않다고 나온다. 방화벽을 설정하기 전에 우선 포트부터 열고 닫아보자.
(1) 포트 열고 닫기
sudo ufw allow 22 # 기본적으로 TCP 포트 22 허용 (SSH)
sudo ufw allow 80/tcp # TCP 포트 80 (HTTP) 허용
sudo ufw allow 53/udp # UDP 포트 53 (DNS) 허용
이렇게 sudo allow를 통해서 포트를 열 수 있다. / 뒤에 tcp, udp를 붙이는데, 기본값은 tcp이다.
반대로 닫을려면?
sudo ufw deny 22
sudo ufw deny 80
sudo ufw deny 53/udp
이렇게 사용한다.
여러개의 포트를 지정하려면?
sudo ufw allow 1000:2000
으로 1000~2000까지 포트를 열어주었다.
그다음에 이제 방확벽을 키기 위해서
sudo ufw enables
를 하고 status로 상태를 확인해보자.
잘 열렸다.
이거 경험담인데, aws에서 장고 8000번포트와 리액트 3000번 포트 서로 방화벽 열어두고 실행시켰다가 그 뒤로 평생 접속하지 못하였다...22번 포트...닫은채로 방화벽 켜버려서..
그래서 저상태로 한 번 나갔다 들어와볼까...?
휴 잘 접속 다시 되는 구먼..
(2) 아이피 열고 닫기
여기도 sudo ufw allow/deny 까지는 똑같다. 이제 ip를 위해서는 from 을 붙여야한다
sudo ufw allow from 192.168.1.100 # 192.168.1.100 IP에서 오는 모든 트래픽 허용
이렇게 from 192.168.0.100으로 아이피 허용을 시켜줬고, 저 아이피 차단하려면
sudo ufw deny from 192.168.1.100 # 192.168.1.100 IP에서 오는 모든 트래픽 허용
이렇게 사용한다.
sudo ufw allow in on eth0 to any port 80
sudo ufw allow out on wlan0 to any port 443
eth0 으로 들어오는 포트만 열고, 막 이렇게도 쓰일 수도 있고...많다.
자세한 건 생략.
도전
그래서 한 번 생각해보자.
1. 모든 ip를 차단한다면?
sudo ufw default deny incoming
외부에서 들어오는 모든 접속을 차단한다. 이는 방을 만들었는데, 방 문을 안 달아놔서 아예 내부에 들어갈 수가 없는 구조.
2.22번 port를 차단한다면? (또는 ssh를 차단한다면?)
sudo ufw deny 22/tcp
이건 호텔에서 키를 전등 키는 곳에다가 꽂아두고 그대로 방문 닫았을 때 같은 상황이다. 다시 못들어간다;
경험담이다. aws 서버 그래서 통째로 날렸다. ㅜ
'KnockOn' 카테고리의 다른 글
[KnockOn] Linux/Ubuntu C언어 및 컴파일 (0) | 2024.11.11 |
---|---|
[KnockOn] Linux/Ubuntu SSH, NC (0) | 2024.11.07 |
[KnockOn] Linux/Ubuntu 리눅스 권한, 유저, 그룹 (3) | 2024.11.07 |
[KnockOn] Linux/Ubuntu 운영체제의 패키지 (0) | 2024.11.07 |
[KnockOn] Linux/Ubuntu Symbolic Link (0) | 2024.11.07 |