3. Linux OS 이용/관리
3.3. 명령어
3.3.6. 네트워크/방화벽 관리
3.3.6.0. 네트워크/방화벽이란
- 네트워크란(network), 서로 다른 단말/컴퓨터/장치들이 서로 정보를 통신할 수 있도록 구성된 구조/인프라를 의미한다.
- 방화벽이란(firewall), 보안장치를 의미하며, 특히 네트워크 방화벽이란 단말/컴퓨터/장치에 접근하기 전에 네트워크 단에서 동작하는 것을 의미한다. 동작 지점에 따라 어플리케이션/DB/클라우드 방화벽 등으로 분류할 수 있다.
3.3.6.1. ifconfig
- interface configuration. 네트워크 인터페이스 구성을 출력/변경한다.
- ifconfig/ip 대상
- 최신 리눅스에서는 ifconfig 대신 ip a/ip r이 기본 제공되며, ifconfig는 설치를 필요로 한다. ifconfig 유지보수진의 은퇴연령 진입으로 유지가 어려워졌고, 또한 ip는 ifconfig와 달리 IPv6를 충분히 지원하고 스크립트 친화적이어서 ip 명령어가 권장된다.
ifconfig 명령어 형태 | 내용 |
ifconfig | 전체 네트워크 인터페이스를 출력한다. |
ifconfig 인터페이스명 | 특정 네트워크 인터페이스만 출력한다. |
ifconfig 인터페이스명 IP주소 | 특정 네트워크 인터페이스의 IP주소를 정적으로 할당한다. |
ifconfig 인터페이스명 netmask IP주소 | 특정 네트워크 인터페이스의 넷마스크 IP주소를 변경한다. |
ifconfig 인터페이스명 broadcast IP주소 | 특정 네트워크 인터페이스의 브로드캐스트 IP주소를 변경한다. |
ifconfig 인터페이스명 MAC주소 | 특정 네트워크 인터페이스의 MAC주소를 변경한다. |
ifconfig 인터페이스명 down | 특정 네트워크 인터페이스를 비활성화한다. |
ifconfig 인터페이스명 up | 특정 네트워크 인터페이스를 활성화한다. |
항목 | 내용 | |
etho0 | 인터페이스명 | |
flags | 상태를 나타내는 플래그비트값으로, 값은 각 비트별로 상태를 상징하는 16비트의 10진수 값이다. | |
*4163 = 0001 0000 0100 0011, 작은 비트에서부터 UP / BROADCAST / DEBUG / LOOPBACK / POINTTOPOINT / RUNNING / NOARP / PROMISC / ALLMULTI / MASTER / SLAVE / MULTICAST / PORTSEL / AUTOMEDIA / DYNAMIC 의 활성 여부를 나타낸다.(1:활성/0:비활성) | ||
mtu | (maximum transfer unit)네트워크 인터페이스의 최대 전송 단위로, 보통 1500바이트이다. | |
inet | 해당 네트워크 인터페이스에 할당된 IPv4 주소(32비트) | |
netmask | 해당 네트워크 인터페이스에 할당된 서브넷마스크 주소 | |
*서브넷마스크 255.255.255.0 = 11111111.11111111.11111111.00000000는 상위 24비트는 상위 네트워크 영역을 표시하는 것이고, 하위 8비트만 쓸 수 있음을 표현한다. 따라서 예시의 IP주소에서 상위 24비트에 해당하는 192.168.1부분은 소속 상위 네트워크를, 192.168.1.0~255가 사용 가능한 IP주소를 나타낸다. CIDR표기법에 따르면 192.168.1.100/24 라고 표기한다. *자세한 건 네트워크 카테고리 참조. |
||
broadcast | 해당 네트워크 인터페이스에서 브로드캐스트에 사용하는 목적지 IP주소 *전통적으로 서브넷 네트워크의 마지막 IP주소는 브로드캐스트를 위한 IP주소로 예약되어 있다. |
|
inet6 | 해당 네트워크 인터페이스에 할당된 IPv6 주소(128비트) *IPv4 의 주소 포화를 우려를(특히 IoT분야) 해결하고, 보안과 전송 효율을 개선한 주소. |
|
prefixlen | 해당 네트워크 인터페이스에서 서브넷마스크로 사용할 비트수(IPv6의 서브넷마스크) *(prefixed length : 64). 네트워크 상위 영역에서 128비트 중 64비트(길이)를 이미 사용하고 있다는 것. |
|
scopeid | 해당 네트워크 인터페이스에 할당된 IPv6주소의 유효 범위 *통신할 수 있는 인터페이스에 해당하는지 여부를 식별한다. 들여다볼 수 있는 아이디카드.(scope id) |
|
ether | MAC 주소 | |
txqueuelen | transmit queue length. 송신 큐의 최대 길이. | |
RX packets | receive packets. 수신 패킷 정보 | |
TX packets | transmit packets.송신 패킷 정보 |
3.3.6.2. route
- route. 라우팅 테이블을 출력하거나 변경한다.
- route
- ifconfig와 마찬가지로 ip r이 권장된다.
옵션 | 내용 |
-n | 도메인 이름 대신 IP주소로 출력한다. |
add IP주소 netmask 서브넷마스크 gw 게이트웨이주소 | 해당 IP주소(들)에 대한 라우팅 테이블을 추가한다. |
del IP주소 | 해당 IP주소에 대한 라우팅 테이블을 삭제한다. |
항목 | 내용 |
Destination | 해당 목적지주소로 보내는 경우에는 같은 행의 라우팅테이블을 따른다는 의미. *Genmask와 함께 해야 의미가 있다 |
default(0.0.0.0)는 모든 목적지를 의미한다. | |
Gateway | 중간에 경유하는 게이트웨이의 IP주소 |
*0.0.0.0은 게이트웨이를 지나지 않는 경로라는 의미이다 | |
Genmask | generated mask. destination의 서브넷마스크로, 정확히는 목적지 네트워크의 범위를 지칭한다. |
*따라서 모든 목적지를 의미하는 기본 경로에서는 서브넷마스크는 아무런 의미가 없다. *단일호스트 대상 라우팅 테이블의 경우 서브넷마스크는 255.255.255.255(/32)이다. |
|
Flags | 경로의 상태를 나타내는 값. |
U: 활성상태 경로(Up) G: 경유지(게이트웨이)가 있는 경로 H: 단일 호스트에 대한 경로 D: 동적으로 할당되는 경로 M: 수정된 경로 |
|
Metric | 목적지 네트워크까지의 거리이자, 라우팅 우선순위. 값이 작을수록 거리가 가깝고 우선순위가 높다. |
Ref | 경로를 참조한 횟수 |
Use | 경로를 탐색한 횟수 |
Iface | 네트워크 인터페이스 이름 |
3.3.6.3. netstat
- network statement. 네트워크 통계 기타 상태를 출력한다.
- netstat
- 네트워크분야의 전통적인 명령어이다. 따라서 앞서 다룬 명령어들과 비슷한 문제로 ip명령어로의 대체가 권장된다.
옵션 | 내용 |
옵션없음 | 현재 열린 네트워크 연결과 개방된 소켓을 출력한다 |
-a | 모든 연결과 소켓을 출력한다(리스닝 상태를 포함) |
-l | 리스닝 상태인 포트만 출력한다. *서버가 클라이언트의 요청을 기다리고 있는 포트 |
-t | TCP 연결만 출력한다 |
-u | UDP 연결만 출력한다. |
-i | 네트워크 인터페이스별 통계 정보를 출력한다. |
-s | 네트워크 프로토콜별 통계 정보를 출력한다. |
-r | route명령과 동일한 결과를 출력한다. -rn옵션은 route -n과 같다. |
-c | 터미널을 점유하여 출력을 주기적으로 갱신한다. 즉 모니터링한다. |
3.3.6.4. arp
- address resolution protocol. IP주소와 MAC주소의 매핑테이블을 출력한다.
- arp
- 네트워크단에서의 통신은 IP주소를 통해 이루어진다. 그러나 IP주소는 L3에서 간편하게 조정할 수 있는 논리적 주소에 불과한 반면 MAC은 하드웨어의 고유한 물리적인 L2 주소를 의미하며, 통신은 종국적으로 IP주소가 아닌 MAC주소를 기반으로 삼는다. 수신 단말 입장은 목적지 IP주소가 ARP로 매핑된 MAC주소가 자신의 MAC주소와 일치해야 데이터를 처리하는 것이다. 그리고 보통 송신단말은 수신단말의 MAC주소를 모르고 IP주소만 알고 있다.
- 로컬 네트워크에 broadcast ARP request를 던지면(xxx.xxx.xxx.xxx IP주소 주인?) ARP reply의 응답을 받아(저요. 제 MAC주소는 ff:ff:ff:ff:ff:ff입니다) 매핑테이블을 유지한다. 비교적 가벼운 IP주소와 기기에 고유한 MAC주소를 매핑하는 것이 ARP이며, 이 매핑 테이블을 출력하는 것이 arp명령이다. 근데 웃긴게 문제는 ARP 테이블이 가볍다.(스푸핑,리다이렉션)
- ip n명령으로 대체될 수는 있으나, 딱히 권장되는 것도 지양되는 것도 아니다.
옵션 | 내용 |
-a | 모든 ARP 테이블을 출력한다. |
-v | 상세하게 출력한다 |
-n | 별칭 대신 호환성이 좋은 숫자 주소로 출력한다. |
-s IP MAC | 지정한 IP주소에 대한 매핑테이블을 추가한다. |
-d IP | 지정한 IP주소에 대한 매핑테이블을 제거한다. |
항목 | 내용 |
Address | IP주소 |
HWtype | 하드웨어타입을 나타낸다. |
ether(ethernet) : 대부분 유선연결의 네트워크인터페이스카드(NIC). wifi : 와이파이. |
|
HWaddress | MAC주소 |
Flags | 해당 ARP 테이블의 상태를 드러낸다. |
C(cache) : 해당 ARP 테이블이 동적으로 설정되어 캐시에 저장되어 있음을 표시한다. M(Manual) :해당 ARP테이블이 수동(정적)으로 설정되었음을 표시한다. |
|
Mask | 서브넷마스크. |
Iface | 해당 ARP 테이블이 속한 네트워크 인터페이스 |
3.3.6.5. ip.
- iproute. 네트워크 인터페이스 중 OBJ의 내용을 출력/변경한다.
- ip 옵션 OBJ CMD
- 네트워크 이용 기기량의 증가에 따른(휴대폰/IoT 등) IPv4주소의 포화를 걱정하며 IPv6 친화적이고 현대적 쓰임에 맞게 개선되어 등장하였다. ifconfig/route/netstat의 대체제로 권장된다.
옵션/OBJ(object, 대상)/CMD | 내용 |
-l | 사용할 수 있는 옵션과 OBJ들을 나열한다. |
-c | 색상을 추가해 가동성을 향상시킨다. |
-s | 통계정보를 추가해 출력한다. *ifconfig의 RX/TX packets 내용을 상세하게 출력한다 |
-s -s neigh flush all | ARP 캐시를 삭제한다. |
-d | 상세정보를 추가해 출력한다. |
l/link | 네트워크 인터페이스의 상태를 출력하거나 변경한다. |
set link 인터페이스명 | 해당 네트워크 인터페이스의 상태를 변경한다. |
up/down : 활성/비활성 name 인터페이스명B : 네트워크인터페이스 이름을 B로 변경한다. |
|
a/address | ip주소에 대한 내용을 출력하거나 변경한다. |
r/route | 라우팅 테이블을 출력하거나 변경한다. |
n/neighbor | ARP(address resolution protocol) 테이블을 출력하거나 변경한다. |
m/maddr | multicast address. 멀티캐스트 주소를 출력하거나 변경한다. |
OBJ add 주소 | 해당 OBJ에 입력한 인터페이스/주소/테이블을 추가한다. |
OBJ del 주소 | 해당 OBJ를 입력한 인터페이스/주소/테이블을 삭제한다. |
항목 | 내용 |
qdisc | queueing discipline. 해당 네트워크의 큐잉 메커니즘. |
noqueue : 큐잉 메커니즘이 없음 fq_code1 : 속도를 위한 공정 큐잉 메커니즘 pfifo_fast : 선입선출 방식의 큐잉 메커니즘 |
|
state | 해당 네트워크 인터페이스의 상태. |
UP: 네트워크 인터페이스가 활성화되어 있고, 사용할 준비가 되어 있음. DOWN: 네트워크 인터페이스가 비활성화됨. UNKNOWN: 드라이버가 상태를 명확히 정의하지 않음. DORMANT: 인터페이스가 활성화 대기 중 (예: VLAN 구성 시). |
|
group | 해당 네트워크 인터페이스의 소속 그룹 |
qlen | ifconfig의 txqueuelen과 같다. |
link | data link. OSI 7 계층의 L2를 의미한다. 즉 MAC주소이다. |
link/loopback: 자체통신을 위한 루프백 주소 (00:00:00:00:00:00) link/ether: 일반적인 의미의 통신을 위한 MAC 주소 brd : 브로드캐스트를 위해 사용되는 MAC주소 |
|
inet | IPv4주소/서브넷마스크. 브로드캐스트주소는 이 둘만으로 추론할 수 있다. |
scope | ifconfig의 scopeid에 대응되나 조금 더 상세한 정보를 출력한다. |
host : 오직 로컬 시스템에서만 유효한 IP주소 link : 같은 서브넷 네트워크 내에서만 유효한 IP주소 global : 네트워크 외부에서도 사용할 수 있는 IP주소 dynamic : DHCP에 의해 동적할당된 IP주소 permanent : 정적으로 할당된 IP주소 |
|
valid_ltf | valid lifetime. 해당 네트워크 인터페이스가 DHCP에 의해 동적할당된 IP주소를 사용할 수 있는 총 시간. *preferred lifetime이 만료되면 새로운 통신은 불가능하나, 다운로드 기타 진행중인 요청은 마무리할 수 있도록 여유를 주기에 valid는 preferred보다 크거나 같다. |
preferred_lft | preferref lifetime. 해당 네트워크 인터페이스에 DHCP로 동적할당된 IP주소가 보증되는 시간. *해당 IP주소를 기반으로 새로운 통신을 할 수 있는 시간 |
항목 | 내용 |
via | 게이트웨이 주소로, 경유하는(via) IP주소이다. |
전통적으로 서브넷 네트워크의 두번째 주소는 게이트웨이주소로 예약되어 있다.(첫번째 호스트주소) 서브넷 네트워크의 첫번째 주소는 서브넷 네트워크를 식별하기 위한 네트워크주소로 예약되어 있다. "192.168.1"으로 서브넷 네트워크를 식별하는 단순한 경우에는 주소낭비로 비춰질 수 있다. 그러나 상위 네트워크는 네트워크주소를 기점으로 하위 서브넷 네트워크들을 구별하기에 구조적으로 필요하다. 네트워크주소는 IP주소와 서브넷마스크의 32비트 AND연산으로 출력되는 것이지 192, 192.168, 192.168.1 처럼 딱 잘리는 것이 아니다. |
|
dev | 네트워크 인터페이스 이름을 의미한다. |
proto | protocol 사용하는 프로토콜을 의미한다. |
dhcp: DHCP 서버에서 자동으로 할당된 경로. static: 수동으로 설정한 정적 라우팅 경로. kernel: 커널에서 자동으로 설정된 경로. |
|
metric | 경로의 길이이자 경로의 우선순위. 값이 클수록 거리가 멀고 우선순위가 늦다. |
src | 출발지 IP주소. |
3.3.6.6. nmcli
- networkmanager command line interface. 네트워크 매니저인데(NM) 명령어 인터페이스를 기반으로 하는(CLI)
- nmcli 옵션 OBJ CMD
- systemctl을 기반으로 하는 강력한 네트워크 관리 도구로, 연결 관리 및 VPN 관리에 특화되어 있다.
OBJ/CMD | 내용 |
nmcli device | 모든 네트워크 상태를 네트워크 인터페이스별로 출력한다. |
nmcli device status | 모든 네트워크 인터페이스의 상태 보기 |
nmcli device status 네트워크인터페이스명 | 해당 네트워크 인터페이스의 상태 보기 |
nmcli connection show | 현재 연결된 모든 네트워크의 연결 정보 보기 *네트워크 이름을 확인할 수 있다. *네트워크이름은(wired connection 1) 네트워크인터페이스명과(eth0) 다르다. |
nmcli connection show 네트워크이름 | 해당 네트워크의 연결 정보 보기 |
nmcli connection up/down 네트워크이름 | 해당 네트워크의 연결 시작/끊기 |
nmcli networking on/off | nmcli의 네트워크 자동 관리기능 키기/끄기 |
3.3.6.7. ufw
- uncomplicated firewall. 간단하고 직관적인 방화벽을 설정도구이다.
- ufw
- 아래에서 서술할 iptables를 기반으로 하는 명령어로, iptables의 밀키트 버전이라 생각하면 쉽다.(고급진 말로는 iptables의 상위 추상화라 한다) 기본적으로 관리자 권한을 필요로 하며, 아래 표에서는 sudo를 생략한다.
명령형태 | 내용 | |
ufw status | 방화벽 설정 상태를 출력한다 | |
ufw status numbered | 방화벽 설정 상태를 규칙번호와 함께 출력한다. | |
ufw enable | 방화벽을 활성화한다 | |
ufw disable | 방화벽을 비활성화한다 | |
ufw default allow/deny incoming/outgoing | 인바운드/아웃바운드 허용/차단을 규칙의 기본값으로 설정한다. *당연하겠지만 ufw의 디폴트 설정은 인바운드차단, 아웃바운드 허용이다. |
|
ufw allow/deny 포트번호/서비스명 | 해당 포트/서비스를 허용/차단한다 *ssh(22), http(80), https(443) | |
ufw allow/deny from IP주소 | 해당 IP주소가 출발지인 경우 허용/차단한다 | 네트워크 기기 입장의 명령 구성이고, 인바운드/아웃바운드가 아니다. *any=모든IP주소 |
ufw allow/deny to IP주소 | 해당 IP주소가 목적지인 경우 허용/차단한다 | |
ufw allow/deny from A to B | 출발지가 A이고 목적지가 B인 경우 허용/차단한다 | |
ufw allow/deny in from/out to IP주소 | 해당 IP주소에 대한 인바운드/아웃바운드를 허용/차단한다. * "in/out"이 "to/from 명령단말의IP주소"를 대체한다. |
|
상기 IP주소에대한설정 port 포트번호 | 앞서 설정한 IP주소기반 방화벽설정을 해당 포트에 한정한다 *모든 포트에 대해 방화벽 설정이 유효함이 디폴트이다. |
|
ufw delete allow/deny 포트/서비스/규칙번호 | 포트번호/서비스명/규칙번호에 해당하는 개별적인 방화벽 설정을 제거한다. | |
ufw reset | 모든 방화벽 설정을 초기화한다. | |
ufw loging on/off | 방화벽 로그 활성화/비활성화 |
3.3.6.8. iptables
- ip tables. 정교하교 유연한 방화벽 설정 도구로, 가장 많이 사용된다.
- iptables -L/A/I/D/F
- 체인을 정하고, IP주소/포트번호/프로토콜를 정하고(-s/-d/-sport/-dport/-p), 처리한다(-j)
- ufw에서는 할 수 없는 NAT/포트포워딩/트래픽제어(Flooding 방어)/패킷필터링 등 고급네트워크설정도 가능하다. 기본적으로 관리자 권한을 필요로 하며, 아래 표에서는 sudo를 생략한다.
명령형태 | 내용 | |
iptables -L 또는 -list | 모든 방화벽 설정을 출력한다. | |
iptables -L --line-numbers | 방화벽 규칙번호와 함께 출력한다. | |
iptables -L 체인 | 해당 체인에 속하는 방화벽 설정만 출력한다. | |
iptabels -L 체인 -s X | 해당 체인에 속하고 IP주소X에서 출발하는 설정만 출력한다 | |
iptables -L 체인 -d Y | 해당 체인에 속하고 IP주소Y로 향하는 설정만 출력한다 | |
iptables -L 체인 --sport M | 해당 체인에 속하고 M번포트에서 출발하는 설정만 출력한다 | |
iptables -L 체인 --dport N | 해당 체인에 속하고 N번포트로 향하는 설정만 출력한다 | |
iptables -L 체인 -p P | 해당 체인에 속하고 P프로토콜에 따르는 설정만 출력한다 | |
-s/-d/--sport/--dport/-p/규칙번호의 조합으로 엄청나게 유연한 설정이 가능하다 *방화벽은 규칙번호 순서대로 매칭하여 가장 먼저 일치하는 규칙만 적용된다. 후순위 규칙은 무시된다. |
||
iptables -A | 방화벽 설정을 추가한다.(append) | |
iptables -A 체인 -s X -j 처리 | 해당 체인에 속하고 IP주소X에서 출발하는 패킷만 처리한다. | |
iptables -A 체인 -s X -d Y --dport --N -j 처리 | 해당 체인에 속하고 X에서 Y의 N포트로 향하는 패킷만 처리한다. *포트 지정이 없으면 모든 포트를 대상으로 한다 |
|
iptables -A 체인 -d Y -p P -j 처리 | 해당 체인에 속하고 Y로 향하는 P프로토콜 패킷만 처리한다. *프로토콜 지정이 없으면 모든 프로토콜을 대상으로 한다. |
|
iptables -A INPUT -p tcp --dport 80 -m recent --update --seconds 1 --hitcount 20 --name FLOODING -j DROP | 80번 포트로 인바운드되는 TCP 연결이 최근 1초에 20개 이상인 경우 패킷들을 FLOODING이라 라벨링하고 차단한다. | |
iptables -A INPUT -p tcp --syn --dport 80 -m state --state NEW -m recent --update --seconds 10 --hitcount 20 --name SLOW_FLOODING -j REJECT | 80번 포트로 인바운드되는 새로운 TCP SYN패킷이 10초에 20개 이상인 경우 패킷들을 SLOW_FLOODING이라 라벨링하고 거부/알린다. | |
iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT | 인바운드되는 TCP SYN패킷을 초당 1개씩만(최초 3번 제외) 허용한다. | |
-s/-d/--sport/--dport/-p/-m(모듈)/규칙번호의 조합으로 엄청나게 유연한 설정이 가능하다 | ||
iptables -I 체인 O 규칙내용 | 해당 체인의 O번 규칙에 방화벽 설정을 삽입한다. *O을 입력하지 않으면 1번에 삽입한다. |
|
-s/-d/--sport/--dport/-p/-m/규칙번호의 조합으로 엄청나게 유연한 설정이 가능하다 | ||
iptables -D | 방화벽 설정을 삭제한다. | |
iptables -D 체인 규칙번호 | 해당 체인의 해당 규칙번호에 해당하는 설정을 삭제한다. | |
-s/-d/--sport/--dport/-p/-m의 조합(규칙내용)으로 삭제하려는 방화벽 설정을 지정할 수도 있다. | ||
iptables -F | 모든 방화벽 설정을 초기화한다. |
체인 | 내용 | |
INPUT | 인바운드 트래픽 체인 (-d 생략) | |
OUTPUT | 아웃바운드 트래픽 체인 (-s 생략) | |
FORWORD | 경유 트래픽 체인 | |
처리 | 내용 | |
ACCEPT | 트래픽을 허용한다 | |
DROP | 트래픽을 차단한다. | |
REJECT | 트래픽을 거부하며, 이를 송신자에게 알린다. | |
LOG | 로그를 기록한다 |
'CS > OS' 카테고리의 다른 글
CS/OS운영체제 : 3.Linux OS 이용/관리 : 3.명령어 : 7. 편집기 (1) | 2024.12.17 |
---|---|
운영체제 : 3.Linux OS 이용/관리 : 3.명령어 : 5. 프로세스 관리 (0) | 2024.12.11 |
운영체제 : 3.Linux OS 이용/관리 : 3.명령어 : 4. 입력/실행/변경 (0) | 2024.12.06 |
운영체제 : 3.Linux OS 이용/관리 : 3.명령어 : 3. 와일드카드/정규표현식 (2) | 2024.12.06 |
운영체제 : 3.Linux OS 이용/관리 : 3.명령어 : 2. 호출/검색/필터링 (1) | 2024.12.05 |