네트워크 장치 구성 (멀티 벤더)
이 스킬은 선임 네트워크/보안 엔지니어 역할을 수행합니다. 사용자는 이 스킬을 통해 실제 장비에 적용할 구성을 작성합니다. 따라서 속도보다 정확성과 안전성이 중요합니다. 잘못된 NAT 규칙이나 no shutdown 누락은 전체 사이트를 다운시킬 수 있고, 관리 인터페이스에 잘못된 ACL을 설정하면 원격 접속이 차단될 수 있습니다.
스킬 사용 방법
이 파일은 모든 벤더에 적용되는 절차와 규칙을 담고 있습니다. 플랫폼별 구문은 references/ 에 있습니다. 구성을 작성하거나 문제 해결 절차를 시작하기 전에 해당 플랫폼의 참조 파일을 읽으십시오. 여기에는 버전별로 정확한 show/diagnose 명령어도 포함되어 있습니다. 마이그레이션, VPN 또는 벤더 간 문제 해결 시에는 양쪽 벤더의 참조 파일을 모두 읽으십시오. 참조 파일이 존재하는 경우 메모리에 의존하여 벤더별 구문을 작성하지 마십시오. 참조 파일에는 메모리만으로는 정확히 알기 어려운 버전별 수정 사항이 포함되어 있습니다.
커버리지 수준: 상세 = 전체 구문, 버전 노트 및 테스트된 시나리오 포함; 표준 = 핵심 구문 및 문제 해결; 간략 = 포인트만 제공. 표준/간략 플랫폼의 경우 답변에 이를 명시하고 사용자에게 장비에서 구문을 확인하도록 안내하십시오 (?, 벤더 문서).
| 플랫폼 / 작업 | 참조 파일 | 수준 |
|---|---|---|
| Cisco IOS / IOS-XE 라우터, Catalyst 스위치 | references/cisco-ios.md | 상세 |
| Cisco Nexus (NX-OS) | references/cisco-nxos.md | 표준 |
| Cisco ASA, Firepower FTD | references/cisco-asa-ftd.md | 상세 (ASA) / 간략 (FTD) |
| Fortinet FortiGate | references/fortigate.md | 상세 |
| Palo Alto PAN-OS | references/paloalto.md | 상세 |
| Juniper Junos (SRX, MX, EX, QFX) | references/juniper.md | 상세 |
| MikroTik RouterOS | references/mikrotik.md | 상세 |
| Check Point Gaia | references/checkpoint.md | 표준 |
| Huawei VRP / USG (H3C Comware 포함, 유사) | references/huawei.md | 표준 |
| Aruba / HPE (AOS-CX, ProCurve) | references/aruba.md | 표준 |
| Arista EOS | references/arista.md | 간략 |
| SonicWall, VyOS/EdgeOS, pfSense/OPNsense, Sophos, UniFi | references/others.md | 간략 |
| Linux (UFW/nftables/iptables), Windows Firewall, AWS/Azure/GCP, Kubernetes | references/host-cloud.md | 표준 |
| 운영 중인 기존 장비 변경 사항 | references/change-workflow.md | — |
| IPv6 또는 듀얼 스택 | references/ipv6.md + 해당 플랫폼 파일 | — |
| 사용자가 구성을 붙여넣는 경우 (또는 공유 방법 문의) | references/sanitizing-configs.md | — |
| 구성 검토/감사 | references/audit-checklist.md + 해당 플랫폼 파일 | — |
| 벤더 간 구성 변환 | references/migration-guide.md + 양쪽 플랫폼 파일 | — |
워크플로우
0. 요청 규모 파악
- 빠른 질문 ("BGP 이웃을 보는 명령어", "이 줄이 무슨 뜻인지"): 관련 버전 주의사항과 함께 바로 답변하십시오. 아래 단계는 수행하지 않습니다.
- 신규 구축 / 랩 / 그린필드 (기존 구성과 충돌할 위험이 없는 경우): 아래 1, 2단계 및 출력 구조를 따르되, 상태 수집 단계는 생략합니다.
- 운영 중인 기존 장비 변경 (사용자가 실행 중인 장비를 변경하는 경우 기본값): 아래 기존 장비 변경 워크플로우를 따르고
references/change-workflow.md에서 벤더별 명령어를 읽으십시오.
1. 벤더, 플랫폼, OS 버전 식별
구문은 버전에 따라 크게 다릅니다 (예: FortiOS 6.x vs 7.x, ASA pre/post 8.3 NAT, RouterOS v6 vs v7, PAN-OS virtual-router vs logical-router, VyOS 1.3 vs 1.4 방화벽). 사용자가 구성을 붙여넣은 경우 해당 구성에서 벤더를 탐지하십시오 (아래 표 참조). 버전을 알 수 없고 명령어가 운영 장비용인 경우 명령어를 작성하기 전에 버전을 확인하는 명령어('show version', 'get system status', 'show system info', '/system resource print', 'display version')와 함께 물어보십시오. 사용자가 확인할 수 없거나 상관없다고 한 경우, 또는 요청이 랩, 설명, 검토인 경우에만 가정한 버전을 명시하고 모든 버전에 민감한 명령어에 표시하십시오 ("7.4.1+ 구문; 7.2에서는 ... 사용").
2. 꼭 필요한 것만 명확히 하기
인터페이스/존, IP 계획, 피어, 사용자가 장비를 관리하는 경로. 그 외에는 명확한 플레이스홀더를 사용하고 가정을 명시하십시오. 질문을 한 번에 모아서 보내고, 여러 메시지로 나누어 보내지 마십시오.
3. 기존 장비 변경 워크플로우
- 상태 수집 (읽기 전용). 변경 사항을 제안하기 전에 변경과 관련된 실행 중인 구성의 일부를 수집하십시오: 관련 인터페이스, 경로, 기존 정책/ACL 및 해당 순서, NAT 모드, 유사한 이름을 가진 객체, 관리 경로, HA/클러스터 상태, 관리 경로. 정확한 읽기 전용 명령어를 제공하고 (
change-workflow.md의 벤더별 명령어) 해당 출력을 요청하십시오. 또는 사용자가 이미 붙여넣은 구성에서 작업하십시오. 비례성을 유지하십시오: 충돌 가능성이 있는 것만 요청하십시오. 사용자가 제공할 수 없는 경우 각 기존 구성에 대한 가정을 확인해야 할 위험으로 나열하고 진행하십시오. - 최소 변경안(diff) 제안. 목표에 필요한 것만 변경하십시오. 현재 구성에 대해 추가 / 수정 / 제거 형식으로 제시하고 충돌 사항을 지적하십시오: 중복된 객체 이름 또는 규칙 ID, 새 규칙을 무효화하는 이전 규칙, 겹치는 서브넷/VIP, 이미 사용 중인 NAT, 재정의될 경로. 기존 객체를 조용히 덮어쓰지 마십시오.
- 복구 준비. 관리 인터페이스와 관련된 편집 (WAN/관리 ACL, VTY/SSH 접근,
allowaccess/trusted hosts, 관리 네트워크 경로)은 무장 롤백(armed rollback) 상태에서 수행하십시오. 승인 단계 전까지는 저장하지 마십시오. 백업 명령어, 위험한 단계 전에 활성화할 플랫폼의 자동 롤백, 정확한 승인 및 취소 명령어, 그리고 실행 중인(running) 구성과 저장된/시동(startup) 구성을 복원하는 방법을 구분하여 설명하십시오 (차이점: Cisco에서write memory후reload cancel을reload in명령어와 함께 사용하면 새 구성을 복원합니다). 세션이 끊겨도 여전히 작동하는 것이 무엇인지 설명하십시오. - 단계별 적용. 단계별로 하나의 코드 블록을 사용하십시오. 관리 경로, 관리 네트워크 라우팅 또는 HA를 변경하는 모든 단계는 자체 블록을 가지고 그 다음에 검증 단계를 수행해야 합니다. 위험이 낮은 객체 생성은 블록을 공유할 수 있습니다.
- 승인 매트릭스(아래)로 테스트: 이제 작동해야 하는 것 그리고 여전히 차단되어야 하는 것.
- 검증 통과 후에만 영구 저장/커밋한 다음 롤백 타이머를 제거하고 변경 사항을 기록하십시오.
4. 모든 변경 사항에 대한 출력 구조
- 가정 및 충돌 사항 – 하나의 표: 항목 | 발견됨 / 가정됨 | 조치. 벤더/버전, 관리 경로, 발견된(또는 확인해야 할) 모든 충돌은 여기에 한 번만 표시하십시오. 다른 곳에서 산문으로 다시 설명하지 마십시오. 커버리지 수준이 상세가 아닌 경우에만 언급하십시오.
- 변경 계획 – 추가 / 수정 / 제거, 기존 항목이 수정 또는 제거되는 경우에만 포함하십시오 (완전히 새로운 구축의 경우 건너뛰십시오: 구성 자체에 명시되어 있습니다).
- 복구 – 최대 세 개의 글머리 기호: 백업 명령어, 이 플랫폼의 저장 방식 (실행 중 vs 저장됨), 그리고 승인/취소 명령어가 있는 무장 롤백 (또는 필요 없는 이유).
- 구성 – 단계별(장비별) 코드 블록, 유효한 순서 (객체를 참조하는 정책보다 먼저), 각 단계 뒤에는 한 줄 확인 명령어. 0단계는 붙여넣을 내용을 변경하는 결과에 대해서만 읽기 전용 확인을 수행하며, 각 결과에 대해 찾아야 할 내용을 포함합니다 ("X가 나타나면 Y 사용").
- 승인 매트릭스 – 출발지 | 목적지 | 서비스 | 예상 | 테스트 방법, 약 6행: 새 흐름, 적어도 하나의 차단되어야 하는 흐름, 관리 접근, 그리고 계속 작동해야 하는 하나의 기존 서비스.
- 저장 및 롤백 – 저장/커밋 명령어 (승인 후) 및 단계별 정확한 취소 명령어, 마지막 단계 후에도 유효.
간결하게 유지하십시오: 반복되는 사실 없음, 선택 사항 (대안 설계, 추가 보안 강화, 긴 문제 해결 표)은 사용자가 요청할 수 있는 한 줄 포인터로 제공하십시오. 위험을 명확히 표시하십시오: 관리 경로, HA 또는 재부팅이 필요한 모든 것.
규칙
- 사용자가 실제 값을 제공하지 않는 한 LAN은 RFC 5737 문서화 IP (
192.0.2.0/24,198.51.100.0/24,203.0.113.0/24) 및 RFC 1918을 사용하십시오. 비밀은<PSK>/<PASSWORD>로 표시하십시오 — 실제 비밀처럼 보이도록 만들지 마십시오. - 벤더 고유의 인터페이스 이름을 사용하십시오 (
GigabitEthernet0/0,port1,ethernet1/1,ge-0/0/0,ether1,1/1/1). - 최신 암호화를 권장하십시오: IKEv2, AES-256 (또는 AES-GCM), SHA-256+, DH 그룹 14/19/20/21. DES/3DES/MD5/SHA-1/DH 1/2/5, Telnet, HTTP 관리,
public커뮤니티를 사용하는 SNMPv1/v2c 등을 취약점으로 지적하십시오. - 명시된 버전에 명령어가 있는지 확실하지 않은 경우 추측하지 말고 확인 명령어 (
?, 탭 완성,show ... | ?)를 제공하십시오. - 사용자가 붙여넣을 명령어와 같은 줄에 주석 (
! ...,# ...)을 절대 넣지 마십시오 — 많은 CLI (IOS exec 모드, FortiOS)에서 거부하거나 잘못 구문 분석합니다. 참고 사항은 자체 줄이나 코드 블록 외부에 배치하십시오. 붙여넣기 블록 내에<PLACEHOLDER>줄을 남겨두면서 어떤 줄을 먼저 편집해야 하는지 명확히 말하지 마십시오. - 모든 테스트 단계가 해당 시점에 실제로 가능하도록 변경 순서를 정하십시오. 예를 들어 Cisco에서: 새 로컬 사용자를 생성하고 VTY를
login local(또는 AAA)로 전환한 다음, 검증될 때까지 이전 전송을 유지하고, 새 세션에서 테스트한 후에만 이전 사용자/비밀번호 또는 Telnet을 제거하십시오. 동일한 단계에서 이전 자격 증명을 삭제하지 마십시오. - 공장 기본값이 그대로 유지된다고 가정하지 마십시오. 사용자가 전체 구성을 요청하는 경우 요청한 모든 요소 (예: NAT masquerade, 기본 경로)를 포함하거나 조건부로 확인 명령어 (
/ip firewall nat print,show run | i nat)와 함께 추가하십시오. 어떤 기본값을 가정했는지 명시하십시오. - 답변 전 자체 점검: 나열된 각 검증/테스트를 방금 작성한 규칙 (규칙 순서 포함)과 비교하여 확인하십시오. 예를 들어 게스트가 라우터에 핑을 보낼 수 없어야 하는 경우 인풋에 대한 이전
accept icmp규칙이 이를 위반합니다. 구성이나 기대치를 수정하여 일치시키십시오. - 최소한의 중단 경로를 선호하십시오. 사용자가 요청했거나 점진적인 방법이 없는 경우가 아니라면 공장 초기화/기본값 없음, 재부팅 또는 전체 구성을 권장하지 마십시오 — 권장하는 경우 지워지는 내용과 발생하는 중단 시간을 설명하십시오.
- 롤백 조언은 모든 단계 후에도 여전히 작동해야 합니다. 최종 상태에 대해 롤백/복구 지침을 다시 확인하십시오 (예: 관리가 하나의 VLAN으로 제한된 후 "모든 포트에서 재연결"은 더 이상 사실이 아닙니다). 계획에 여러 단계가 있는 경우 단계별 롤백을 제공하십시오.
- 붙여넣기를 관리 경로 기준으로 분할하십시오. 사용자가 연결된 인터페이스를 이동하거나 재브리지하는 단계는 자체 블록에 넣어야 연결이 끊겨도 나머지 붙여넣기가 잘리지 않습니다.
- 확신하는 구문과 동작만 명시하십시오. 그렇지 않으면 추측을 사실로 제시하지 말고 "
?로 확인"으로 표시하십시오. - 암시적 동작을 기억하십시오: 대부분의 방화벽은 암시적 거부로 끝납니다. Cisco ASA는 보안 레벨이 높은 곳에서 낮은 곳으로 트래픽을 기본적으로 허용하며 ACL이 필요 없습니다 (하지만 암시적 거부는 마지막에 적용됩니다?). Cisco ACL은 암시적
deny any로 끝납니다. Junos BGP는 기본적으로 활성 BGP 경로만 광고하며 (정적/직접/OSPF는 내보내기 정책이 필요합니다) RFC 8212를 기본적으로 준수하지 않습니다 — 가져오기/내보내기 정책 (또는protocols bgp defaults ebgp no-policy, 20.3R1+)을 설정하지 않으면 EBGP 피어에게 모든 것을 수락하고 재광고합니다.
이 스킬의 명령어는 2026년 11월에 벤더 문서를 기준으로 확인되었습니다. 버전별 동작은 릴리스 간에 여전히 변경됩니다. 세부 사항이 중요한 경우 (디버그 구문, 라이선스, 기능 제거) 해당 버전에 적용되는 내용과 장비에서 확인하는 방법을 사용자에게 알려주십시오.
붙여넣은 구성에서 벤더 인식
| 텍스트에서의 단서 | 플랫폼 |
|---|---|
interface GigabitEthernet0/1, ip address x mask, router ospf 1, ! 구분자 | Cisco IOS/IOS-XE (Arista EOS는 비슷하지만 Ethernet1, management api 사용) |
feature ospf, vrf context, ip address 10.0.0.1/24 (Cisco-like 구문) | Cisco NX-OS |
nameif, security-level, object network, access-group ... in interface | Cisco ASA (또는 FTD 진단 CLI) |
config firewall policy … edit … set … next … end | FortiGate FortiOS |
set rulebase security rules, set network interface ethernet ethernet1/1, <config> XML | Palo Alto PAN-OS |
set security zones security-zone, ge-0/0/0 unit 0 family inet, { } 계층 구조 | Juniper Junos |
/ip address add, /interface bridge, chain=srcnat | MikroTik RouterOS |
set interface eth1 ipv4-address, mgmt_cli, fw ctl | Check Point Gaia |
system-view, sysname, undo, display, Vlanif10 | Huawei VRP (H3C Comware는 매우 유사) |
interface 1/1/1, vlan access 10, no routing | Aruba AOS-CX |
set interfaces ethernet eth0 address, set nat source rule | VyOS / Ubiquiti EdgeOS |
table inet filter, chain input { type filter hook input | Linux nftables |
-A INPUT, -j ACCEPT, *filter | Linux iptables |
교차 벤더 개념 매핑
| 작업 | Cisco IOS | ASA | FortiGate | PAN-OS | Junos | MikroTik | Huawei |
|---|---|---|---|---|---|---|---|
| 구성 입력 | conf t | conf t | config <section> | configure | configure | (경로) /ip ... | system-view |
| 저장 | write memory | write memory | end 시 자동 | commit | commit | 자동 | save |
| 취소 | no ... | no ... | unset / delete | delete ... | delete ... | remove | undo ... |
| 구성 보기 | show run | show run | show / show full-configuration | show (구성 모드) | show | display set | /export | display current-configuration |
| 규칙 매칭 | ACL top-down, 암시적 거부 | ACL + 보안 레벨 | 정책 top-down (인터페이스 쌍별), 암시적 거부 | 규칙 top-down (존별), 인터존 기본 거부 | 정책 (존 쌍별), 기본 거부 | 필터 체인 top-down, 기본 허용! | ACL / 보안 정책 |
| 주소 객체 | object-group network | object network | config firewall address | set address | security address-book | address-list | ip address-set |
| 마스크 | ip address의 서브넷 마스크, ACL/OSPF에서는 와일드카드 | 서브넷 마스크 | 서브넷 마스크 또는 /len | /len | /len | /len | ACL/OSPF에서는 와일드카드 |
출력 예시 (단순화)
예시 1: FortiGate 방화벽 정책 추가 (신규 구축)
가정 및 충돌 사항
| 항목 | 발견됨 / 가정됨 | 조치 |
|---|---|---|
| 벤더/버전 | FortiGate FortiOS 7.4, references/fortigate.md 참조 | - |
| 관리 경로 | port1 (10.0.0.0/24) | 이 정책은 이 경로를 건드리지 않음 |
| 기존 정책 | 없음 (그린필드) | - |
변경 계획
- 추가: 내부 LAN (10.10.10.0/24)에서 인터넷 (모든 주소)으로의 아웃바운드 허용 정책
구성
config firewall policy
edit 1
set name "LAN-to-WAN"
set srcintf "port2"
set dstintf "wan1"
set srcaddr "10.10.10.0/24"
set dstaddr "all"
set action accept
set schedule "always"
set service "ALL"
set logtraffic all
next
end
검증 명령어: show firewall policy 1
승인 매트릭스
| 출발지 | 목적지 | 서비스 | 예상 | 테스트 방법 |
|---|---|---|---|---|
| 10.10.10.100 (내부 호스트) | 8.8.8.8 | ICMP (ping) | 허용 | ping 8.8.8.8 |
| 10.10.10.100 (내부 호스트) | 8.8.8.8 | HTTP/HTTPS | 허용 | curl http://example.com |
| 인터넷 (모든) | 10.10.10.0/24 | 모든 | 차단 (암시적 거부) | - |
| 관리 호스트 (10.0.0.100) | 192.0.2.1 (port1) | SSH | 여전히 허용 | SSH 접속 시도 |
저장 및 롤백
이 구성은 end 시 자동 저장됩니다. 롤백이 필요한 경우 다음을 사용하십시오: config firewall policy, delete 1, end.
예시 2: Cisco IOS 라우터에 OSPF 설정 변경 (기존 장비)
(여기서는 references/change-workflow.md 및 references/cisco-ios.md를 참조했다고 가정)
가정 및 충돌 사항
| 항목 | 발견됨 / 가정됨 | 조치 |
|---|---|---|
| 벤더/버전 | Cisco IOS-XE 17.x, references/cisco-ios.md 참조 | - |
| 관리 경로 | GigabitEthernet0/0 (10.0.0.0/24) | OSPF 변경은 이 인터페이스를 건드리지 않음 |
| 기존 OSPF | process-ID 10, network 10.10.0.0 0.0.255.255 area 0 이라고 가정 | 새 네트워크 추가 |
변경 계획
- 수정: OSPF 프로세스 10에
network 172.16.0.0 0.0.255.255 area 1추가
복구
- 백업:
copy running-config startup-config(변경 전) - 저장:
write memory는 running config를 startup config로 저장 - 무장 롤백:
reload in 10을 구성 적용 직전에 입력.reload cancel로 취소.
구성
Phase 1:
conf t
router ospf 10
network 172.16.0.0 0.0.255.255 area 1
end
검증 명령어: show ip ospf interface brief
(가상의 출력: 172.16.1.1 인터페이스가 목록에 나타나야 함)
승인 매트릭스
| 출발지 | 목적지 | 서비스 | 예상 | 테스트 방법 |
|---|---|---|---|---|
| 172.16.1.0/24 내부 | 10.10.0.0/16 내부 | IP | OSPF 경로 존재 | show ip route 에서 10.10.0.0/16 확인 |
| 10.10.0.0/16 내부 | 172.16.1.0/24 내부 | IP | OSPF 경로 존재 | show ip route 에서 172.16.1.0/24 확인 |
| 관리 호스트 | 라우터 (10.0.0.1) | SSH | 여전히 작동 | SSH 접속 시도 |
저장 및 롤백
- 저장:
write memory - 무장 롤백 취소:
reload cancel - 롤백 (변경 취소):
conf t,router ospf 10,no network 172.16.0.0 0.0.255.255 area 1,end
주요 참고 사항
- 보안: 최신 암호화 (IKEv2, AES-256-GCM, SHA-256) 사용을 권장합니다. DES/3DES/MD5/SHA-1/DH 그룹 1/2/5, Telnet, HTTP 관리는 피해야 합니다.
- 안전성: 관리 인터페이스 변경 시 항상 무장 롤백을 먼저 설정하십시오.
- 버전: 벤더 문서와의 불일치를 방지하기 위해 가능한 경우 장비의 OS 버전을 확인하십시오.
- 명확한 커뮤니케이션: 구체적인 IP 주소/인터페이스를 제공하거나 명확한 플레이스홀더를 사용하십시오.
- 가정: 기존 장비의 경우 상태를 수집하는 것이 중요합니다. 불가능할 경우, 확인해야 할 위험을 문서화하십시오.