반응형

앞 장에서는 포트의 state를 확인하는 법을 배웠다.

 

이번에는 iptables를 이용하여 리눅스방화벽 ufw를 조작하는 법을 말해보겠다.


리눅스에서 아래 명령어를 쳤을 때 No command가 나오면 iptables를 설치해줘야한다.

 

$ iptables -nL

$ apt-get install iptables-persistent  //리눅스 방화벽 ufw를 disable시킨 상태에서 iptables를 설치한다.

$ cp /usr/share/netfilter-persistent/plugins.d/15-ip4tables /etc/init.d/iptables → 해당 파일 init.d에 복사한다.

$ sudo /etc/init.d/iptables start  //iptables를 시작한다.

$ /etc/init.d/iptables flush → iptables를 종료한다. (이것은 왠만하면 실행않는다.)

 

 

제대로 설치되었다면 아래 명령어를 치면 ip들이 쭈루룩 뜰것이다.

$ sudo iptables -nL

 

특정 포트를 외부에서 접속할 수 있게 방화벽을 해제하기

- TCP PORT일 경우

$ iptables -I INPUT -p tcp --dport 5006 -j ACCEPT   //5006 포트를 외부에서 연결할수 있도록 OPEN

- UDP PORT일 경우

$ iptables -I INPUT -p udp --dport 5006 -j ACCEPT   //5006 포트를 외부에서 연결할수 있도록 OPEN

 

 

-I: 새로운 규칙을 추가한다. (알파벳 엘이 아니고 아이다.)

-p: 패킷의 프로토콜을 명시한다.

-j: 규칙에 해당되는 패킷을 어떻게 처리할지를 정한다. 

 

$ iptables -L -v  | grep 5006 // 방금 추가한 설정을 조회

-L: 규칙을 출력

-v: 자세히 

 

$ service iptables save //변경 사항 저장

$ /etc/init.d/iptables restart  //재시작

추가한 규칙을 삭제하고 싶을 때

 

a) 규칙번호로 삭제

$ iptables -D INPUT 1 // 1번규칙 삭제

 

b) 추가한 규칙 그대로 삭제. (-D는 delete)

$ iptables -D INPUT -p tcp --dport 5006 -j ACCEPT

$ iptables -D INPUT -p udp --dport 5006 -j ACCEPT

방화벽 활성화 & 비활성화

1. 켜기

$ /etc/init.d/iptables start

 

2. 끄기

$ /etc/init.d/iptables flush

 

 

우분투의 경우는 ufw 명령어도 사용할 수 있다.

 

$ sudo ufw enable  //ufw 켜기

$ sudo ufw disable  //ufw 끄기

 

$ sudo ufw allow 5006/tcp  //tcp 5006 port 허용

$ sudo ufw allow 5006/udp  //udp 5006 port 허용

 

$ sudo ufw deny 5006/tcp  //tcp 5006 port 거부

$ sudo ufw deny 5006/udp  //udp 5006 port 거부

 

ufw 상태보기

$ sudo ufw status

$ sudo ufw status verbose


--------------------------

 

참고로 TCP는 송신자와 수신자가 상호작용을 하며 응용계층으로부터 데이터를 받아 TCP 헤더를 추가한 후에 이를 IP로 보낸다.

하지만 UDP는 수신자가 데이터를 받는지 마는지 관심이없다. 즉, UDP는 신뢰성을 보장해주지 않지만 간단하고 속도가 빠르다.

 

 

TCP(Transfer Control Protocol)                                           UDP(User Datagram Protocol)

연결이 성공해야 통신 가능(연결형 프로토콜) 비연결형 프로토콜(연결 없이 통신이 가능)
데이터의 경계를 구분하지 않음(Byte-Stream Service) 데이터의 경계를 구분함(Datagram Service)
신뢰성 있는 데이터 전송(데이터의 재전송 존재) 비신뢰성 있는 데이터 전송(데이터의 재전송 없음)
일 대 일(Unicast) 통신 일 대 일, 일 대 다(Broadcast), 다 대 다(Multicast) 통신

 

 

 

반응형
반응형

리눅스 자체 방화벽에서 포트를 열고 닫는데 이때 다른 컴퓨터나 VM에서 접속하려고 하면 안되는 경우가 있다.

 

포트가 닫혀있는지 확인하는 법은

 

cmd에서는 ping이나 tcping을 사용하면 된다.

 

아래처럼 나오면 연결이 안된다는 뜻

아래처럼 나오면 연결이 잘 동작한다는 뜻이다.

 

하지만 특정 포트에 알아보고 싶으면 tcping을 쓰면 된다.

 

설치방법은 C:\Windows\System32 경로에 아래 파일을 복사하면된다.

tcping.exe
0.25MB

 

그리고 cmd창에 tcping이라고 입력하면 쭈루룩 무언가가 뜨는데, 이러면 설치 성공이다.

 

5009포트에 대해서 tcping 테스트를 해보면 아래와 같이나온다.

 

No response라고 뜨는데, 이는 5009 포트가 닫혀있다는 것을 의미한다.

 

5006 포트는 열려있기에 아래와 같이 정상적으로 작동한다.

 

 

만약 내가 리눅스OS에서 5006 포트를 열었는데 타PC에서 접속할때 No response가 뜬다면 리눅스 방화벽이 원인이고 이는 여러 방법으로 해결할 수 있다.

 

netstat을 이용한 port 스캔

 

$ netstat -tnlp       // 현재 가동 중인 포트 들을 보여준다.

이와 더불어 netstat -nap도 열려있는 모든 포트를 보여준다. grep을 사용하여 포트번호를 검색할 수 도 있다.

 

$ netstat 

namp을 이용한 포트 확인

 

nmap을 이용한 port 스캔

리눅스 상에 아래 명령어를 치면 Usage: Nmap으로 나오면 nmap이 이미 설치되어 있는 것.

$ nmap

 

Command 'nmap' not found가 나온다면 설치를 해줘야 한다.

아래 명령어로 namp을 설치 한다.

 

$ sudo apt install nmap

 

그리고 아래 명령어를 실행 해본다.

 

$ nmap -sT 172.26.12.120      // 172.26.12.120에서 열린 port들을 보여준다.

$ nmap -sT 172.26.12.120 -p 5006     // 172.26.12.120의 5006포트가 열렸는지 닫혔는지 보여준다.

$ nmap -Pn 172.26.12.120 -p 5006     // 172.26.12.120의 5006포트가 열렸는지 닫혔는지 보여준다.

 

-sT 또는 -Pn을 주로 쓴다.

-sT 일반적인 TCP 포트스캐닝.
-sS 이른바 'half-open' 스캔으로 추적이 어렵다.
-sP ping 을 이용한 일반적인 스캔.
-sU UDP 포트 스캐닝.
-PO 대상 호스트에 대한 ping 응답을 요청하지 않음 .
log 기록과 filtering 을 피할 수 있다.
-PT 일반적이 ICMP ping이 아닌 ACK 패킷으로 ping 을 보내고
RST 패킷으로 응답을 받는다.
-PI 일반적인 ICMP ping 으로 방화벽이나 필터링에 의해 걸러진다.
-PB ping 을 할 때 ICMP ping 과 TCP ping을 동시에 이용한다.
-PS ping 을 할 때 ACK 패킷대신 SYN 패킷을 보내 스캔.
-O 대상 호스트의 OS 판별.
-p 대상 호스트의 특정 포트를 스캔하거나, 스캔할 포트의 범위를 지정.
ex) -p 1-1024
-D Decoy 기능으로 대상 호스트에게 스캔을 실행한 호스트의 주소를 속인다.
-F /etc/services 파일 내에 기술된 포트만 스캔.
-I TCP 프로세서의 identd 정보를 가져온다.
-n IP 주소를 DNS 호스트명으로 바꾸지 않는다. 속도가 빠르다.
-R IP 주소를 DNS 호스트명으로 바꿔서 스캔. 속도가 느리다.
-o 스캔 결과를 택스트 파일로 저장.
-i 스캔 대상 호스트의 정보를 지정한 파일에서 읽어서 스캔.
-h 도움말 보기

 

PORT의 state가 open이면 열렸다는 것, closed면 닫혔거나 존재하지 않는다는 것, filtered면 열렸지만 방화벽으로 가로막혔다는 것을 뜻한다.

 

filtered면 방화벽을 해제함으로써 다른 pc에서 통신할수 있게끔 할수 있다. 다음장에 계속

 

 

 

 

 

반응형
반응형

리눅스는 대표적으로 우분투, CentOS, KaliLinux 등이 있지만 Ubuntu 기준으로 기술한다.

 

1. 리눅스에서 실행되고 있는 프로세스 확인하기

 

ps 명령어를 사용한다.

 

옵션 설명
-e 모든 프로세스를 출력해 준다.
-f 풀 포맷으로 보여준다. (UIP, PID)
-l 긴 포맷으로 보여준다.
-p 특정 PID의 프로세스를 보여준다.
-u 특정 사용자의 프로세스를 보여준다.

여기서 PID는 프로세스를 구별하는 유일한 요소이며, UID는 프로그램을 실행한 사람의 정보를 나타내는 요소이다.

그리고 PPID는 프로세스를 만든 부모 프로세스의 PID를 나타내는 값이다.

 

옵션으로는 aux, -e 등 많지만 -ef나 -el을 grep과 함께 많이 사용한다.

 

 

$ ps -el | grep "찾을 문자열"
예) $ ps -el | grep ripple

 

2. 파일 찾기

리눅스는 CLI 기반이라서 파일이 어디있는지 찾기 힘든 경우가 많다.

 

단순히 아래 명령어를 치면 폴더가 검색되어 나온다.

$ find | grep "찾을 문자열"

 

아래만 명심하면 된다.

 

* r로 시작하는 폴더만 찾기

$ find -name "r*" -type d

 

* r로 시작하는 파일만 찾기

$ find -name "r*" -type f

 

3. 프로세스 죽이기

sudo kill -9 "PID번호"

ps -el | grep "찾는 문자열"   << 이 명령어로 PID 확인 가능

 

 

4. 로그 파일 열기

tail -f "로그파일명"

-f는 로그파일을 계속 감시한다는 것을 뜻한다.

이때 해당 폴더 안에 있거나 정확한 디렉토리명을 입력해줘야한다.

 

 

 

 

 

반응형

+ Recent posts