태그 보관물: CentOS

Network Bonding Configuration

개요

Network Bonding(또는 Link Aggregation)은 두 개 이상의 물리 네트워크 인터페이스를 하나의 논리 인터페이스로 묶어 대역폭을 늘리거나 이중화(failover)를 구현하는 기술입니다. 리눅스에서는 bonding 커널 모듈과 /etc/sysconfig/network-scripts/ 설정 파일로 구성하며, mode 0(balance-rr)부터 mode 6(ALB)까지 다양한 Bonding 모드를 지원합니다.

Network Bonding 활용 사례

Network Bonding(Link Aggregation)이 실무에서 사용되는 주요 사례는 크게 두 가지입니다. 첫째, 서버의 트래픽이 단일 NIC 대역폭(보통 1Gbps)을 초과할 때 여러 NIC를 묶어 대역폭을 확장합니다(mode 0, 2, 4). 둘째, 한 NIC나 케이블에 장애가 발생해도 서비스가 중단되지 않도록 이중화(failover)를 구성합니다(mode 1). 데이터센터 서버, 스토리지 서버, 가상화 호스트에서 흔히 사용합니다.

실제 환경에서는 스위치 지원 여부에 따라 mode 선택이 달라집니다. 스위치 없이 바로 사용하려면 mode 1(active-backup)이 가장 안정적입니다. 스위치에서 LACP(802.3ad)를 지원하면 mode 4로 대역폭 확장과 failover를 동시에 구현할 수 있습니다. mode 0(balance-rr)은 스위치 설정 없이도 동작하지만, 일부 네트워크 장비와 호환성 문제가 발생할 수 있습니다.

What is bonding?

  • 2개 이상의 물리적인 NIC(Network Interface Card)를 논리적인 NIC 1개로 묶어서 대역폭을 확장하거나 Active/Standby 구조로 구성하여 특정 NIC의 고장 또는 케이블의 단절로 인한 Disconnect를 예방하여 고가용성(High Availability) 또는 내결함성(Fault Tolerance)를 보장해줍니다.

Configuration

  • RHEL(CentOS) 7 & 6
// Bonding Interface 정의
# vi /etc/modprobe.d/bonding.conf
alias bond0 bonding

# vi /etc/sysconfig/network-script/ifcfg-bond0
DEVICE=bond0
IPADDR=192.168.12.117
NETMASK=255.255.255.0
GATEWAY=192.168.12.1
USERCTL=no
BOOTPROTO=none
ONBOOT=yes
BONDING_OPTS="mode=1 miimon=100"
※BONDING_OPTS에 primary=eth0 추가 하여 인터페이스 우선 순위 설정

// Bonding으로 묶을 NIC들의 설정 변경
# vi/etc/sysconfig/network-script/ifcfg-eth0
TYPE=Ethernet
NAME=eth0
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USERCTL=no

# vi/etc/sysconfig/network-script/ifcfg-eth1
TYPE=Ethernet
NAME=eth1
DEVICE=eth1
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USERCTL=no

// CentOS 7 서비스 재시작
# systemctl restart network

// CentOS 6 서비스 재시작
# service network restart
  • Common Configuration(BONDING_OPTS=mode)
0 balance-rr : (Round Robin) Load Balancing, 송신할 패킷마다 사용하는 물리적 NIC를 순차 변경
1 active-backup: Fault-Tolerance, bond내에서 한개의 Slave만 사용, 해당 NIC에 문제가 발생할 경우 다른 Slave가 Enable
2 balance-xor : Load Balancing, 소스와 목적지의 MAC을 XOR 연산을 통해 사용할 NIC를 결정하여 분배
3 Broadcast : Fault-Tolerance, 모든 Slave로 데이터전송(failover), 일반적으로는 잘 사용안함.
4 802.3ad : Dynamic Link Aggregation, IEEE 802.3ad 프로토콜을 이용하여 동적 Aggregation 작성 대역폭 상승, 부하 분산, Failover 지원(Switch LACP 구성 필요)
5 balance-tlb(TLB) : 적응형 송신 부하 분산, 송신패킷 로드밸런싱, 송신시 부하가 낮은 NIC이용 수신은 특정 NIC이용
6 balance-alb(ALB) : 적응형 부하 분산, 송수신패킷 로드밸런싱, 송수신시 부하가 낮은 NIC를 사용

miimon=100 : NIC가 활성화되어 있는지 확인하는 단위 시간 0.1초
  • RHEL(CentOS) 5
// Bonding Interface 정의
# vi /etc/modprobe.conf
alias bond0 bonding
alias bond1 bonding

// NIC 설정 방식 동일

// 서비스 재시작
# service network restart
  • Network Manager 서비스가 기동중일 경우 설정중인 파일이 서비스 재기동과 관계 없이 반영될 수 있으므로 Network Manager 서비스를 종료 후 작업을 추천 드립니다.
// CentOS 7 서비스 재시작
# systemctl stop NetworkManager

// CentOS 6 서비스 재시작
# service NetworkManager stop
  • bonding 상태 확인
# cat /proc/net/bonding/bond0
# ethtool bond0
Bonding Mode와 Slave NIC의 상태를 확인 가능

RHEL 8/9 및 Ubuntu에서의 Bonding

위 설정 방식은 CentOS 6/7(/etc/sysconfig/network-scripts/) 기반입니다. RHEL 8/9 및 Rocky Linux 9부터는 이 방식이 deprecated되었으며, NetworkManager와 nmcli 명령으로 bonding을 구성합니다. nmcli con add type bond로 bond 인터페이스를 생성하고 각 slave NIC를 추가하는 방식입니다. Ubuntu에서는 Netplan(/etc/netplan/*.yaml)에서 bonds: 블록으로 설정합니다. 운영 중인 OS 버전에 맞는 방식을 사용해야 설정이 영구 반영됩니다.

설정 완료 후 /proc/net/bonding/bond0 파일에서 현재 active slave, bonding mode, MII 상태를 실시간으로 확인할 수 있습니다. Kernel bonding 드라이버는 miimon 값(밀리초) 주기로 각 slave NIC의 링크 상태를 폴링하여 장애 감지와 failover를 자동 처리합니다.

참고

참고 문서: RHEL 7 Network Bonding 설정 가이드 · IEEE 802.3ad Link Aggregation

리눅스 Shell 및 ssh 계정 잠금 설정

개요

리눅스 서버에서 SSH 로그인 실패가 반복되는 경우 해당 계정을 자동으로 잠금(lock)하도록 PAM(Pluggable Authentication Modules)을 설정할 수 있습니다. pam_tally2 또는 pam_faillock 모듈을 사용해 일정 횟수 로그인 실패 시 계정을 잠그고, 관리자가 수동으로 잠금을 해제하는 방법을 정리합니다.

  • 콘솔 및 원격 접속(ssh)시 로그인 실패시 계정 잠금 설정
  • pam_tally.so와 pam_tally2.so은 기본값 및 옵션 차이가 있음
// CentOS 5.X 버전 이하용
# /etc/pam.d/system-auth , /etc/pam.d/password-auth 에 이하 설정 추가

// 3회 입력 실패시 계정이 잠기며 잠금 초기화 간격은 2분, root 계정은 잠기지 않고 로그인이 성공하면 실패 횟수는 초기화
auth required pam_tally.so no_magic_root deny=3 unlock_time=120
account required pam_tally.so no_magic_root reset
// CentOS 6.X 버전 이상부터는 pam_tally2.so를 사용할 수 있으므로 이하 설정 권고
# /etc/pam.d/system-auth , /etc/pam.d/password-auth 에 이하 설정 추가

// 3회 입력 실패시 계정이 잠기며 잠금 초기화 간격은 2분, 기본적으로 root 계정은 잠기지 않고 성공하면 실패 횟수는 초기화됨
// even_deny_root 인수를 사용하게 되면 root 비밀번호 입력 실패시 계정이 잠길 수 있음
auth required pam_tally2.so deny=3 unlock_time=120
account required pam_tally2.so

RHEL 8 / 9에서의 pam_faillock 사용

RHEL 8 및 CentOS Stream 8 이상에서는 pam_tally2가 deprecated되고 pam_faillock으로 대체되었습니다. pam_faillock은 기존 pam_tally2와 설정 방식이 다르며, /etc/security/faillock.conf 파일을 통해 중앙에서 정책을 관리합니다. authselect 프로파일과 연동되어 PAM 설정을 일관성 있게 관리할 수 있습니다.

# /etc/security/faillock.conf 주요 설정
deny = 3              # 3회 실패 시 계정 잠금
unlock_time = 120     # 120초 후 자동 해제
even_deny_root        # root 계정도 잠금 대상 포함 (운영 환경 주의)
fail_interval = 300   # 실패 횟수 집계 기간(초)

# pam_faillock 활성화 (RHEL 8/9, authselect 사용)
# authselect select sssd with-faillock --force
# 또는 /etc/pam.d/system-auth, /etc/pam.d/password-auth에 직접 추가:
# auth required pam_faillock.so preauth silent
# auth required pam_faillock.so authfail
# account required pam_faillock.so

계정 잠금 상태 확인 및 수동 해제

계정이 잠금 상태인지 확인하고 관리자가 직접 잠금을 해제하는 방법은 pam_tally2와 pam_faillock 모두 전용 명령어를 제공합니다. 잠긴 계정을 해제하지 않으면 unlock_time이 경과해야만 자동으로 풀리므로, 업무 시간 중 긴급하게 해제해야 하는 경우 아래 명령어를 사용합니다.

# pam_tally2 (RHEL 6/7)
# 특정 계정의 실패 횟수 확인
pam_tally2 --user <admin-user>

# 잠금 해제 (실패 횟수 초기화)
pam_tally2 --user <admin-user> --reset

# pam_faillock (RHEL 8/9)
# 특정 계정의 잠금 상태 확인
faillock --user <admin-user>

# 잠금 해제
faillock --user <admin-user> --reset

PAM 잠금 정책 적용 후에는 정책이 실제로 동작하는지 테스트 계정으로 반드시 검증합니다. root 계정 잠금(even_deny_root)은 운영 서버에서는 콘솔 접근이 불가능해질 위험이 있으므로 신중히 적용해야 합니다.

SSH 접근 제어와 PAM 잠금 정책의 연계

PAM 계정 잠금 설정은 SSH 서비스의 접근 제어 설정과 함께 적용하면 더 강력한 보안을 구현할 수 있습니다. /etc/ssh/sshd_config에서 MaxAuthTries를 낮게 설정하면 SSH 레이어에서 먼저 접속을 끊고, PAM 레이어에서 누적 실패 횟수를 집계하여 계정을 잠급니다. 두 설정은 독립적으로 동작하므로 함께 적용해야 시너지를 발휘합니다.

운영 서버에 권장되는 SSH 보안 강화 항목은 다음과 같습니다. PermitRootLogin no로 root SSH 직접 로그인을 차단하고, PasswordAuthentication no로 공개키 인증만 허용하면 brute force 공격 시도 자체를 원천 차단할 수 있습니다. 공개키 인증만 허용하는 환경에서는 PAM 비밀번호 잠금의 실질적 의미가 줄어들지만, su/sudo 등 로컬 인증 경로를 통한 무차별 대입 공격 방지를 위해 PAM 잠금 정책은 여전히 유효합니다.

PAM 설정 변경 후에는 반드시 별도의 세션(SSH 창)을 열어둔 상태에서 변경 사항을 적용해야 합니다. 잘못된 설정으로 모든 인증이 차단될 경우 콘솔 접근이나 다른 열린 세션을 통해 복구할 수 있습니다.

참고

참고 문서: pam_tally2 매뉴얼 페이지 · RHEL PAM 보안 강화 가이드