리눅스 네트워크 보안
IT 위키
더 많은 작업
리눅스 서버를 노리는 네트워크 침해 유형과 그 대응 방법을 정리한 문서이다. 계정·권한·인증 같은 호스트 보안은 리눅스 시스템 보안 문서에서 다룬다.
서비스 거부 공격(DoS)은 시스템 자원이나 네트워크 대역을 고갈시켜 정상 사용자가 서비스를 쓰지 못하게 한다. 여러 대의 좀비 PC를 동원하면 분산 서비스 거부 공격(DDoS)이다.
| 공격 | 방식 | 대응 |
|---|---|---|
| SYN 플러딩 | TCP 연결 요청(SYN)만 대량으로 보내고 응답하지 않아 연결 대기 큐를 채운다. | SYN 쿠키(net.ipv4.tcp_syncookies=1), 백로그 큐 확대, 방화벽 속도 제한 |
| 스머프 공격 | 출발지를 피해자로 속인 ICMP Echo 요청을 브로드캐스트 주소로 보내 응답이 피해자에게 몰리게 한다. | 라우터에서 directed broadcast 차단, 브로드캐스트 ICMP 무시(net.ipv4.icmp_echo_ignore_broadcasts=1) |
| Ping of Death | 최대 크기(65,535바이트)를 넘는 ICMP 패킷을 조각내 보내 재조립 과정에서 시스템을 멈추게 한다. | 패치된 커널, ICMP 차단 |
| 티어드롭 공격 | 조각난 IP 패킷의 오프셋을 겹치게 조작해 재조립 오류를 일으킨다. | 패치된 커널 |
| 랜드 공격 (Land) | 출발지와 목적지 주소·포트를 모두 피해자로 같게 만든 패킷을 보낸다. | 출발지와 목적지가 같은 패킷 차단 |
| UDP 플러딩 | 대량의 UDP 패킷으로 대역폭과 자원을 소모시킨다. | 불필요한 UDP 서비스 중지, 속도 제한 |
| HTTP GET 플러딩 | 정상적인 HTTP 요청을 대량으로 보내 웹 서버 자원을 소모시킨다. | 요청 수 제한, 웹 방화벽 |
| 반사·증폭 공격 | DNS·NTP 같은 UDP 서비스에 출발지를 속인 작은 요청을 보내 큰 응답이 피해자에게 가게 한다. | 오픈 리졸버 차단, NTP monlist 비활성화 |
- DDoS 도구 예 : Trinoo, TFN(Tribe Flood Network), TFN2K, Stacheldraht
| 공격 | 방식 | 대응 |
|---|---|---|
| 스니핑 | 네트워크를 지나는 패킷을 엿듣는다. 랜카드를 무차별(promiscuous) 모드로 둔다. | SSH·TLS 같은 암호화 통신, 스위치 사용, 무차별 모드 점검(ip link, ifconfig의 PROMISC) |
| ARP 스푸핑 | 거짓 ARP 응답으로 다른 호스트의 MAC 주소를 자기 것으로 속여 통신을 가로챈다. | 정적 ARP 항목(arp -s), ARP 감시 도구 |
| IP 스푸핑 | 출발지 IP 주소를 속여 신뢰 관계를 악용한다. | 신뢰 기반 인증(rlogin, rsh) 제거, 경계에서 내부 주소를 출발지로 쓴 외부 패킷 차단 |
| DNS 스푸핑 | 거짓 DNS 응답을 먼저 보내 사용자를 가짜 사이트로 보낸다. | DNSSEC, /etc/hosts에 중요한 주소 고정 |
| 세션 하이재킹 | 인증이 끝난 TCP 세션의 순서 번호를 가로채 세션을 빼앗는다. | 암호화 통신, 비동기화 상태 감지 |
- 스푸핑 문서도 참조
- 포트 스캔 : 열린 포트와 서비스를 찾아 공격 대상을 고른다. TCP Connect, SYN(half-open), FIN, NULL, Xmas, UDP 스캔 등
- 버퍼 오버플로우 : 입력 길이를 검사하지 않는 프로그램의 메모리를 덮어써 임의 코드를 실행한다. 대응은 패치, 스택 보호, ASLR
- 루트킷 : 침입 흔적을 숨기고 root 권한을 유지하는 도구 모음
- 백도어 : 정상 인증을 거치지 않고 다시 들어올 수 있게 만든 통로
- 트로이 목마, 웜, 랜섬웨어 같은 악성 코드
- 무차별 대입(Brute Force) : SSH·FTP 비밀번호를 계속 대입한다. 대응은 fail2ban, 키 인증, 로그인 실패 잠금
Rocky Linux 8의 기본 방화벽은 firewalld이며, 내부적으로 nftables를 쓴다. 방화벽 참조
# 상태와 현재 규칙 # firewall-cmd --state # firewall-cmd --list-all # 서비스·포트 영구 허용 후 반영 # firewall-cmd --permanent --add-service=https # firewall-cmd --permanent --add-port=8080/tcp # firewall-cmd --reload
자세한 내용은 리눅스 firewall-cmd 문서를 본다.
iptables는 netfilter 규칙을 직접 다루는 전통적인 도구이다.
- 테이블 : filter(기본, 패킷 허용·차단), nat(주소 변환), mangle(패킷 변경), raw
- filter 테이블 체인 : INPUT(들어오는 패킷), OUTPUT(나가는 패킷), FORWARD(지나가는 패킷)
- nat 테이블 체인 : PREROUTING(DNAT), POSTROUTING(SNAT, MASQUERADE), OUTPUT
- 타깃 : ACCEPT, DROP(응답 없이 버림), REJECT(거부 응답), LOG
# 기본 정책 : 들어오는 패킷 차단 # iptables -P INPUT DROP # 이미 연결된 세션과 루프백 허용 # iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # iptables -A INPUT -i lo -j ACCEPT # SSH 허용 # iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 특정 주소 차단 # iptables -I INPUT -s 203.0.113.5 -j DROP # 규칙 확인 (-n 숫자, -v 상세, --line-numbers 번호) # iptables -L -n -v --line-numbers # 내부망 공유 (SNAT) # iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE
- 규칙 저장·복원 : iptables-save, iptables-restore
- 옵션 : -A 추가, -I 삽입, -D 삭제, -R 교체, -F 모두 삭제, -L 목록, -P 기본 정책, -N 새 체인
/etc/sysctl.conf 또는 /etc/sysctl.d/*.conf에 적고 sysctl -p로 반영한다.
net.ipv4.tcp_syncookies = 1 # SYN 플러딩 대응 net.ipv4.icmp_echo_ignore_broadcasts = 1 # 스머프 공격 대응 net.ipv4.icmp_echo_ignore_all = 1 # 모든 ping 무시 net.ipv4.conf.all.accept_source_route = 0 # 소스 라우팅 패킷 거부 net.ipv4.conf.all.rp_filter = 1 # 출발지 주소 위조 패킷 거부 net.ipv4.ip_forward = 0 # 라우팅 기능 끄기
- TCP Wrapper : /etc/hosts.allow, /etc/hosts.deny (RHEL 7까지)
- xinetd의 only_from, no_access
- 탐지·점검 도구
- 불필요한 서비스를 중지하고(systemctl disable --now 서비스) 최신 보안 패치를 적용한다.
- 공격 이름과 방식 짝짓기 (SYN 플러딩, 스머프, Ping of Death, 티어드롭, 랜드)
- 대응 커널 매개변수 tcp_syncookies, icmp_echo_ignore_broadcasts
- iptables 테이블·체인·타깃, 옵션 -A / -I / -D / -P / -L
- firewall-cmd --permanent 뒤 --reload가 필요하다.