티스토리 뷰

[CentOS 6.X] 웹 페이지 느림 현상


웹페이지 로딩이 느리다고 한다... 오늘은 너무나도 활기찬 주말이다 하하하하하하ㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏ

멘탈을 다잡고.. ㅠ.... 콘솔을 연결하니... nf_conntrack table full 메시지가 발생중이다 킄...


1) 문제현상

Aug 21 20:28:06 -- kernel: possible SYN flooding on port 80. Sending cookies.

Aug 21 20:28:03 -- kernel: nf_conntrack: table full, dropping packet.


a) possible SYN flooding on port 80. Sending cookies.

-> syn flooding 공격이 들어왔을 때 리눅스에 syncookies가 설정되어 있을 때 나타나는 로그이다. syn flooding 공격이 해당 vm에 들어왔고 리눅스 내부에서 synflooding 공격을 막기 위해 syncookies 실행이 되어 짐.


b) nf_conntrack: table full, dropping packet.

-> nf_conntrack 의 테이블이 꽉차 패킷이 다운되었다는 로그이다. --> 현재 time_wait으로 묶여있는 패킷들이 많은데 synflooding 공격이 들어옴으로써 테이블이 꽉차버린것으로 추정된다.


2) 해결방안

a) sysctl의 변수값을 조정함으로써 네트워크에 여유를 준다.

b) iptables 룰셋 추가로 악의적인 패킷의 공격을 차단한다.

※ 현재 테스트환경에서는 iptables 룰셋 추가만으로 synflooding 공격이 차단되었다.



iptables set


잘못된 패킷 차단

이 규칙은 SYN 패킷이 아니며 설정된 TCP 연결에 속하지 않는 모든 패킷을 차단한다.

iptables -t mangle -A PREROUTING -m conntrack --ctstate INVALID -j DROP


SYN이 아닌 새 패킷 차단

iptables -t mangle -A PREROUTING -p tcp ! --syn -m conntrack --ctstate NEW -j DROP

이렇게하면 새 패킷(설정된 연결에 속하지 않음)이 모두 차단되고 SYN 플래그는 사용되지 않는다. 이 규칙은 "Block Invalid Packets" 규칙과 비슷하지만 다른 패킷이 포착하지 않는 패킷을 발견하게 된다.


흔하지 않은 MSS 값 차단

iptables -t mangle -A PREROUTING -p tcp -m conntrack --ctstate NEW -m tcpmss ! --mss 536:65535 -j DROP

위의 iptables 규칙은 공통적이지 않은 TCP MSS 값을 사용하는 새로운 패킷을 차단한다.(이전의 두 규칙에 따라 SYN 패킷만 새 패킷이 될 수 있다.) 이렇게하면 벙어리 SYN 플러드를 차단하는데 도움이 된다.


가짜 TCP 플래그가 있는 패킷 차단

iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP


iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,SYN FIN,SYN -j DROP


iptables -t mangle -A PREROUTING -p tcp --tcp-flags SYN,RST SYN,RST -j DROP


iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,RST FIN,RST -j DROP


iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,ACK FIN -j DROP


iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,URG URG -j DROP


iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,FIN FIN -j DROP


iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,PSH PSH -j DROP


iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL ALL -j DROP


iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL NONE -j DROP


iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP


iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL SYN,FIN,PSH,URG -j DROP


iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP

위의 룰셋은 가짜 TCP 플래그를 사용하는 패킷을 차단한다. (합법적인 패킷이 사용하지 않는 TCP 플래그)


iptables -t mangle -A PREROUTING -p icmp -j DROP

이렇게하면 모든 ICMP 패킷이 삭제된다. ICMP는 호스트가 아직 살아 있는지를 핑(ping)하는 데에만 사용된다.


ICMP는 일반적으로 필요하지 않으며 공격자가 악용할 수 있는 또 다른 취약점만을 나타내기 때문에 Ping of Death (ping flood), ICMP flood 및 ICMP fragmentation flood를 완화하기 위해 모든 ICMP 패킷을 차단한다.


iptables -t mangle -A PREROUTING -f -j DROP

이 규칙은 프래그맨테이션된 패킷을 차단한다. 일반적으로 UDP는 필요하지 않으며 UDP 단편화를 완화하는데 도움이 된다.



----CentOS 7----

SYNPROXY 사용이 CentOS7부터 가능하다 ㅎ

iptables -t raw -A PREROUTING -p tcp -m tcp --syn -j CT --notrack


iptables -A INPUT -p tcp -m tcp -m conntrack --ctstate INVALID,UNTRACKED -j SYNPROXY --sack-perm --timestamp --wscale 7 --mss 1460 


iptables -A INPUT -m conntrack --ctstate INVALID -j DROP




'OS > CentOS 6.X' 카테고리의 다른 글

[CentOS 6.X] DB Query 실행시 느림  (0) 2018.08.14
[CentOS 6.X] Owncloud 설치  (0) 2018.07.16
[CentOS 6.X] 센토스 mirror 사이트 구축(HTTP를 이용한 FTP구축)  (0) 2018.06.26
[CentOS 6.X] MySQL  (0) 2017.12.08
[CentOS 6.X] Apache  (0) 2017.12.07
댓글