불량 패킷을 차단하고 싶습니다. CSF를 사용하여 csfpost.sh에 추가했지만...이러한 문제를 방지하고 싶습니다(플래그: SYN ECN CWR).
자, 이것이 내 규칙입니다..
#!/bin/bash
# Drop Various Attacks
iptables -A INPUT -p tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
iptables -A INPUT -p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN -j DROP
iptables -A INPUT -p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP
iptables -A INPUT -p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP
iptables -A INPUT -p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
iptables -A OUTPUT -p udp -j DROP
ip6tables -A OUTPUT -p udp -j DROP
iptables -A INPUT -p tcp --destination-port 8080 -j DROP
iptables -t mangle -A PREROUTING -p tcp ! --syn -m conntrack --ctstate NEW -j DROP
iptables -A INPUT -p tcp --tcp-flags SYN,ECN,CWR -j DROP
# Prevent source address 127.0.0.1 from sending data through various interfaces
iptables -A INPUT -p all -s localhost -i wlan0 -j DROP
iptables -A INPUT -p all -s localhost -i eth0 -j DROP
# Drop Fragments
iptables -A INPUT -f -j DROP
# Drop ICMP (Ping) Packets
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j DROP
# Do not respond to pings
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j DROP
# Drop Invalid Packets
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP
iptables -A OUTPUT -m state --state INVALID -j DROP
# Drop LAND (Local Area Network Denial) Packets
# In this attack, a packet is spoofed to make the source address appear as the IP-address of the target. In other words, the source and destination IP-addresses are the same.
iptables -A INPUT -s 127.0.0.0/8 -j DROP
# Drop Null Packets
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
# Drop excessive RST Packets to avoid Smurf-Attacks
iptables -A INPUT -p tcp -m tcp --tcp-flags RST RST -m limit --limit 2/second --limit-burst 2 -j ACCEPT
## Drop Smurf-Attacks
# Smurf-Attacks send a large number of ICMP "echo broadcast" packets with a spoofed source IP-address being the target's IP-address. The machines on the network recieve this broadcast message and reply to the target with "echo reply" packets. One way to block this attack is to block all the ICMP packets. However, if that cannot be done, then a limit may be applied to the ICMP packets allowed.
iptables -A INPUT -p icmp -m icmp --icmp-type address-mask-request -j DROP
iptables -A INPUT -p icmp -m icmp --icmp-type timestamp-request -j DROP
iptables -A INPUT -p icmp -m limit --limit 2/second --limit-burst 2 -j ACCEPT
iptables -A INPUT -p icmp -j DROP
# Drop Spank DoS Attacks
# Computers answer TCP packets that are coming from a multicast-address. This can be used for the Spank DoS Attack or stealth-scans.
iptables -A INPUT -s 224.0.0.0/4 -j DROP
iptables -A INPUT -d 224.0.0.0/4 -j DROP
iptables -A INPUT -s 240.0.0.0/5 -j DROP
iptables -A INPUT -d 240.0.0.0/5 -j DROP
iptables -A INPUT -s 0.0.0.0/8 -j DROP
iptables -A INPUT -d 0.0.0.0/8 -j DROP
iptables -A INPUT -d 239.255.255.0/24 -j DROP
iptables -A INPUT -d 255.255.255.255 -j DROP
# Drop SYN Flood Packets
# This is a type of DOS (Denial Of Service) attack.
iptables -A INPUT -p tcp -m state --state NEW -m limit --limit 2/second --limit-burst 2 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -j DROP
# Drop XMAS Packets
# A Christmas-Tree Packet is a packet that has all flags of any protocol set. The FIN, URG, and PSH bits in the TCP header are set. This packet is called an "Xmas Tree" packet because all the fields of header are "lightened up".
iptables -A INPUT -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
# Prevent Port-scans
# Use only one of the two given port-scan lock-out systems
# Lock-out systems that attempted a port-scan (lock lasts a day)
iptables -A INPUT -m recent --name portscan --rcheck --seconds 86400 -j DROP
iptables -A FORWARD -m recent --name portscan --rcheck --seconds 86400 -j DROP
iptables -A INPUT -m recent --name portscan --remove
iptables -A FORWARD -m recent --name portscan --remove
# Lock-out systems that attempted a port-scan (lock lasts a week)
iptables -A INPUT -m recent --name portscan --rcheck --seconds 604800 -j DROP
iptables -A FORWARD -m recent --name portscan --rcheck --seconds 604800 -j DROP
iptables -A INPUT -m recent --name portscan --remove
iptables -A FORWARD -m recent --name portscan --remove
# Log Port-Scan Attempts
iptables -A INPUT -m recent --name portscan --set -j LOG --log-prefix "Portscan:"
iptables -A INPUT -m recent --name portscan --set -j DROP
iptables -A FORWARD -m recent --name portscan --set -j LOG --log-prefix "Portscan:"
iptables -A FORWARD -m recent --name portscan --set -j DROP
# Block Packets used by Port-Scans
iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j DROP
iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j DROP
iptables -A INPUT -p tcp --tcp-flags ACK,URG URG -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL FIN -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL SYN,FIN -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL URG,PSH,FIN -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL URG,PSH,SYN,FIN -j DROP
iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
iptables -A INPUT -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j DROP
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
답변1
하려고 노력하다가능한 모든 나쁜 것들을 나열하고 폐기하십시오.목록은 무한하고 확실히 계속 확장될 것이기 때문에 헛된 것입니다. 대신 방화벽 규칙을 설계할 때 권장되는 원칙은 다음 유형의 트래픽을 허용하는 규칙을 정의하는 것입니다.필요한시스템이 작업을 수행하도록 두고 최종 규칙을 추가합니다.다른 모든 것을 버리십시오.
귀하의 "CSF"가서버 방화벽을 구성하고,그렇다면 이 원칙에 따라 설계되었을 가능성이 높습니다.
귀하의 규칙이 들어왔고 csfpost.sh
모두 명령으로 나타나서 iptables -A
CSF가 만든 규칙 체인 끝에 새로운 규칙을 추가했다고 말했습니다. 그러나 CSF가 잘 설계되면 규칙 끝에 "수용되지 않은 모든 항목을 폐기합니다"라는 규칙을 추가합니다. 규칙은 순차적으로 확인되므로 수동 규칙의 긴 목록은 실제로진짜 효과 전혀 없음마지막 CSF 규칙 뒤에 추가되기 때문입니다.
스크립트에는 규칙 세트의 시작 부분에 배치하면 실제로 해로울 수 있는 일부 규칙도 포함되어 있습니다. 예를 들어:
iptables -A OUTPUT -p udp -j DROP
ip6tables -A OUTPUT -p udp -j DROP
나가는 모든 UDP 트래픽을 차단하고 있습니다. IP 멀티캐스트는 제어에는 IGMP만, 데이터 전송에는 UDP만 사용할 수 있습니다. 이러한 규칙은 시스템이 유용한 IPv4 또는 IPv6 멀티캐스트 메시지를 전혀 보낼 수 없음을 의미합니다. IPv6은 기본적으로 브로드캐스트를 멀티캐스트로 대체하므로 IPv6가 효과적으로 약화됩니다. IPv4 측에서는 가장 기본적인 DNS 쿼리인 NTP 및 DHCP를 차단합니다.
iptables -A INPUT -s 127.0.0.0/8 -j DROP
이 규칙은 외부 인터페이스에만 국한되지 않으므로 루프백 인터페이스에도 적용되며 해당 인터페이스의 모든 트래픽을 효과적으로 삭제합니다. 루프백 인터페이스를 차단하면 많은 소프트웨어가 작동하지 않거나 매우 이상하게 동작할 수 있습니다.
iptables -A INPUT -d 224.0.0.0/4 -j DROP
...
iptables -A INPUT -d 239.255.255.0/24 -j DROP
그러면 모든 IPv4 멀티캐스트도 제거됩니다. 두 번째 규칙은 첫 번째 규칙에서 이미 다루고 있으므로 불필요합니다.
iptables -A INPUT -d 255.255.255.255 -j DROP
시스템이 DHCP 서버로 작동하는 경우 해당 기능이 중단됩니다. (DHCP 클라이언트는 시작할 때 자신의 IP 주소를 알지 못하므로 소스 주소가 0.0.0.0이고 대상 주소가 255.255.255.255인 브로드캐스트만 보낼 수 있습니다. 이러한 브로드캐스트가 한 네트워크 세그먼트에서 다른 네트워크 세그먼트로 전달되는 경우 또 다른 세그먼트는 심각하게 잘못 구성된 라우터를 통과합니다.
iptables -A INPUT -p tcp -m state --state NEW -m limit --limit 2/second --limit-burst 2 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -j DROP
초당 2개의 새로운 TCP 연결만 들어오는데, 버퍼가 어떻게 2개의 연결을 더 보유할 수 있습니까? 단일 웹 브라우저로 이러한 요구 사항을 쉽게 충족할 수 있습니다.
iptables -A INPUT -p tcp --tcp-flags SYN,ECN,CWR -j DROP
ECN은 단일 플래그가 아니라 여러 개의 새로운 TCP 플래그를 포함하는 기술입니다.Linux 커널은 이미 ECN을 지원합니다. 간단한 iptables 규칙으로 수행할 수 있는 것보다 더 정확한 온전성 검사가 이미 내장되어 있을 수 있습니다.
iptables -A INPUT -f -j DROP
IP 조각을 제거하는 것은 아마도 오래된 조언일 것입니다. 이에 관계없이 Linux 커널은 필요에 따라 모든 조각을 자동으로 재조립하고 온전성을 검사할 수 있으며 그렇게 할 것입니다. 이는 연결 추적이 패킷을 처리하기 전에 발생하므로 iptables
규칙이 어떤 것과도 일치하지 않을 수 있습니다.
전반적으로 귀하는 다양한 방화벽 규칙의 의미를 완전히 이해하지 못한 채 수집하고 있거나, 오래되거나 불완전한 조언을 따르고 있는 것으로 보입니다.
개별 명령 수준에서 효과적인 방화벽 규칙을 설계하려면 iptables
시스템이 해당 작업을 수행하기 위해 허용해야 하는 모든 유형의 네트워크 트래픽을 이해하고 최소한 관련 프로토콜에 대한 기본적인 이해가 있어야 합니다. "좋은" 트래픽 유형과 어떤 관련이 있는지 이해하지 못한 채 가능한 모든 나쁜 항목에 대한 규칙을 수집하려고 하면 항상 실패하게 됩니다. 이 길을 계속 따라가면, 이것을 어려운 방법으로 배우게 될 것입니다. 경고를 받았다고 생각하십시오.