리눅스 시스템은 기본적으로 보안 기능이 내장되어 있지만, 기본 설정만으로는 다양한 네트워크 공격에 취약할 수 있습니다. 특히 SYN Flooding, ICMP Redirect 공격, 소스 라우팅 기반 스푸핑 등의 공격을 차단하려면 적절한 커널 튜닝이 필요합니다.
이 문서에서는 리눅스 커널 파라미터를 조정하여 네트워크 보안 및 성능을 최적화하는 방법을 설명합니다.
주요 보안 커널 튜닝 항목
(1) SYN Flooding 방어 - Syncookies 활성화
SYN Flooding 공격은 TCP 연결을 과도하게 생성하여 시스템 리소스를 고갈시키는 공격입니다. 이를 방어하기 위해 syncookies 기능을 활성화해야 합니다.
- Syncookies 개념
Syncookies는 TCP 3-Way Handshake에서 SYN 요청이 급격히 증가할 경우 일반적인 SYN Queue 대신 암호화된 쿠키 값을 이용하여 응답하는 방식입니다. 이를 통해 불필요한 리소스 소모를 방지할 수 있습니다. - Syncookies 활성화 방법
sysctl -w net.ipv4.tcp_syncookies=1 echo "net.ipv4.tcp_syncookies=1" >> /etc/sysctl.conf sysctl -p
- 공격 감지 로그 확인
tail -f /var/log/messages | grep 'SYN flooding'
(2) ICMP 기반 공격 차단
ICMP 패킷을 이용한 DoS 공격(예: Smurf 공격, Ping Flood 등)을 방어하기 위해 다음 설정을 적용합니다.
sysctl -w net.ipv4.icmp_echo_ignore_all=1 # 모든 ICMP Echo 요청 무시
sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1 # 브로드캐스트 핑 차단
sysctl -w net.ipv4.icmp_ignore_bogus_error_responses=1 # 잘못된 ICMP 응답 무시
sysctl -w net.ipv4.icmp_timeexceed_rate=1 # ICMP Time Exceed 패킷 수 제한
sysctl -w net.ipv4.icmp_destunreach_rate=1 # 목적지 도달 불가 패킷 수 제한
위 설정을 /etc/sysctl.conf
파일에 추가한 후 sysctl -p
를 실행하면 지속 적용됩니다.
(3) 소스 라우팅 차단
소스 라우팅을 허용하면 공격자가 우회적인 라우팅 경로를 설정하여 신뢰할 수 없는 트래픽을 유입시킬 수 있습니다. 이를 차단하려면 다음과 같이 설정합니다.
sysctl -w net.ipv4.conf.all.accept_source_route=0
sysctl -w net.ipv4.conf.default.accept_source_route=0
sysctl -w net.ipv4.conf.eth0.accept_source_route=0
sysctl -w net.ipv4.conf.lo.accept_source_route=0
(4) ICMP Redirect 공격 차단
ICMP Redirect는 패킷을 특정 경로로 리디렉션하는 기능으로, 공격자가 이를 악용하면 트래픽을 가로채는 MITM(중간자 공격)이 가능해집니다. 따라서 이 기능을 차단해야 합니다.
sysctl -w net.ipv4.conf.all.accept_redirects=0
sysctl -w net.ipv4.conf.default.accept_redirects=0
sysctl -w net.ipv4.conf.eth0.accept_redirects=0
sysctl -w net.ipv4.conf.lo.accept_redirects=0
(5) 패킷 포워딩 차단
게이트웨이가 아닌 일반 서버라면 패킷 포워딩을 차단하여 불필요한 트래픽을 줄일 수 있습니다.
sysctl -w net.ipv4.ip_forward=0
(6) 패킷 관련 기타 보안 설정
네트워크 패킷 처리 관련 설정을 최적화하여 보안성을 강화합니다.
sysctl -w net.ipv4.conf.all.rp_filter=1 # 역방향 경로 필터링 활성화
sysctl -w net.ipv4.tcp_max_syn_backlog=1280 # SYN 요청 백로그 증가
sysctl -w net.ipv4.tcp_syn_retries=3 # SYN 패킷 재전송 횟수 제한
sysctl -w net.ipv4.tcp_retries1=3 # 연결 재시도 횟수 제한
sysctl -w net.ipv4.tcp_retries2=7 # 재전송 시도 횟수 제한
sysctl -w net.ipv4.tcp_fin_timeout=30 # FIN-WAIT 상태 유지 시간 단축
sysctl -w net.ipv4.tcp_keepalive_time=30 # Keepalive 패킷 전송 주기 설정
sysctl -w net.ipv4.tcp_tw_buckets=720000 # TIME-WAIT 소켓 수 조정
설정 유지 방법
위에서 설정한 값들은 재부팅하면 기본값으로 복원되므로, 영구적으로 유지하려면 /etc/sysctl.conf
에 추가해야 합니다.
echo "net.ipv4.tcp_syncookies=1" >> /etc/sysctl.conf
echo "net.ipv4.icmp_echo_ignore_all=1" >> /etc/sysctl.conf
echo "net.ipv4.icmp_echo_ignore_broadcasts=1" >> /etc/sysctl.conf
echo "net.ipv4.conf.all.accept_redirects=0" >> /etc/sysctl.conf
echo "net.ipv4.conf.all.accept_source_route=0" >> /etc/sysctl.conf
echo "net.ipv4.ip_forward=0" >> /etc/sysctl.conf
echo "net.ipv4.tcp_max_syn_backlog=1280" >> /etc/sysctl.conf
echo "net.ipv4.tcp_syn_retries=3" >> /etc/sysctl.conf
echo "net.ipv4.tcp_fin_timeout=30" >> /etc/sysctl.conf
sysctl -p # 변경 사항 즉시 적용
추가적인 보안 강화 방법
- iptables을 활용한 DoS 공격 방어
iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT iptables -A INPUT -p tcp --syn -j DROP
- Fail2Ban을 이용한 공격 IP 차단
yum install fail2ban -y systemctl enable fail2ban systemctl start fail2ban
리눅스 커널 튜닝을 통해 네트워크 공격을 효과적으로 차단하고 시스템의 보안성을 강화할 수 있습니다. 위 설정을 적용하면 SYN Flooding, ICMP 기반 공격, 소스 라우팅 공격, Redirect 공격 등 다양한 보안 위협을 방어할 수 있습니다.
이 설정을 적용한 후, 로그를 지속적으로 모니터링하며 시스템의 네트워크 트래픽을 분석하여 추가적인 보안 조치를 시행하는 것이 중요합니다.
댓글