이것은 대부분의 서버와 마찬가지로 멀리서 지속적으로 공격을 받는 cPanel 서버에 관한 것입니다. 미국과 캐나다의 클라이언트만 맡는다는 점을 고려하면 아시아나 남미와 같은 지역에 대한 전체 액세스를 허용할 이유가 없습니다.
방화벽 규칙이 너무 많으면 지연 시간이 늘어나거나, 최악의 경우 방화벽이 손상될 수 있습니다. 하지만 일일 공격 건수가 많기 때문에 최대 7000개의 규칙을 관리하도록 CSF를 구성했습니다. 공격이 적은 날도 있지만, 1일에는 SMTP(669)와 cPanel(2)에 접속을 시도하던 중 671개의 IP가 차단됐다.
이 문제를 더 잘 제어하기 위해 모든 사람의 웹 액세스를 허용하고 특정 청크의 FTP 또는 SMTP 액세스를 차단하는 것을 고려했습니다. 그래서 이것이 제가 CSF 사전 규칙 [/usr/local/csf/bin/csfpre.sh]에 넣은 것입니다.
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 21:25 -s 1.0.0.0/8 -j DROP
iptables -A INPUT -p tcp --dport 21:25 -s 2.0.0.0/8 -j DROP
iptables -A INPUT -p tcp --dport 21:25 -s 112.0.0.0/8 -j DROP
iptables -A INPUT -p tcp --dport 21:25 -s 113.0.0.0/8 -j DROP
iptables -A INPUT -p tcp --dport 21:25 -s 117.0.0.0/8 -j DROP
iptables -A INPUT -p tcp --dport 21:25 -s 190.0.0.0/8 -j DROP
이제 저는 제 iptables 기술에 완전히 자신이 없기 때문에 이에 대한 의견을 듣고 싶습니다. 물론 여기에 문제가 있는 경우 피드백도 받고 싶습니다.
나는 이것이 잠재적으로 좋은 이메일을 많이 차단할 뿐만 아니라 서버에서 호스팅되는 사이트에서 작업하기 위해 고용된 해당 분야의 모든 웹 개발자를 차단할 것이라는 것을 알고 있습니다. 내 생각에는 유효한 이메일이 이러한 IP 범위에서 나올 가능성이 훨씬 적습니다. 또한 공격 횟수에 따라 블록을 선택했습니다.
예를 들어 러시아의 실제 IP 블록을 6000~7000개 로드하는 대신 전체 클래스 A 블록을 일괄 차단하는 데만 집중하면 방화벽 규칙을 크게 줄이고 단순하게 유지할 수 있습니다.
저는 이 사이트를 사용하여 차단될 국가를 확인합니다. tcpiputils.com
답변1
스팸 소프트웨어가 이 상황을 더 잘 처리할 수 있을까요? 하루에 670개의 호스트는 많은 수의 호스트가 아닙니다. 이 규모에서는 모든 사람이 허용되도록 호스트에 대한 속도 제한을 고려할 수도 있지만 누군가 반복적으로 연결하여 스팸을 시도하는 경우 차단할 수 있습니다. 이는 연결 추적을 통해 수행할 수 있습니다. 수백만 개의 호스트가 연락하는 경우 연결 추적이 크게 잘못될 수 있지만 하루에 670번 정도는 괜찮습니다. 이는 다음과 같은 의미입니다(테스트되지 않음, 죄송합니다).
iptables -A INPUT -p tcp --dport 21:25 -i eth0 -m conntrack --ctstate NEW -m recent --update --seconds 300 --hitcount 20 -j DROP
iptables -A INPUT -p tcp --dport 21:25 -i eth0 -m conntrack --ctstate NEW -m recent --set
(물론 대량 이메일을 보내는 사람을 허용 목록에 추가할 수도 있습니다.)
답변2
글쎄요, 아직 좋은 반응을 얻지 못했습니다. 이를 달성하기 위해 무엇이 효과적인지 알아내기 위해 시행착오와 모니터링이 필요할 것입니다.
실행 파일에서 전체 경로를 사용해야 하기 때문에 위의 예가 모든 시스템에서 작동하지 않을 수 있도록 뭔가가 필요하다는 것을 알았습니다. 또한 포트 범위를 지정할 때 --match multiport를 추가해야 합니다. 그렇지 않으면 규칙이 완전히 무시됩니다. 마지막으로 쉘이 스크립트를 올바르게 실행할 수 있도록 상단에 shebang을 추가했습니다.
이것이 최종 버전입니다.
/usr/local/csf/bin/csfpre.sh
#!/bin/sh
/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 443 -j ACCEPT
/sbin/iptables -A INPUT -p all -s 60.168.112.0/20 -j DROP
/sbin/iptables -A INPUT -p tcp --match multiport --dport 21:26 -s 1.0.0.0/8 -j DROP
/sbin/iptables -A INPUT -p tcp --match multiport --dport 21:26 -s 112.0.0.0/7 -j DROP
/sbin/iptables -A INPUT -p tcp --match multiport --dport 21:26 -s 116.96.0.0/12 -j DROP
/sbin/iptables -A INPUT -p tcp --match multiport --dport 21:26 -s 116.118.0.0/16 -j DROP
/sbin/iptables -A INPUT -p tcp --match multiport --dport 21:26,110,465,587,995 -s 117.0.0.0/8 -j DROP
이제 CSF 방화벽이 설치된 cPanel 서버에서 어떤 일이 발생하는지 자세히 살펴보겠습니다.
CSF를 사용하면 별도의 그룹에서 실행되는 사용자 지정 규칙을 추가할 수 있습니다. 모든 그룹은 궁극적으로 iptables에 의해 실행됩니다. 먼저 csfpre.sh, CSF, csfpost.sh입니다.
csfpre.sh 파일이 없으면 생성합니다. /etc/ 폴더에 넣을 수도 있지만 항상 /usr/local/csf/bin/에 있는 버전에 우선순위가 부여됩니다.
상단에 shebang을 추가합니다.
!/빈/sh
내 계획은 csfpre.sh를 통해 일부 포트 차단을 수행하는 것이지만 모든 규칙을 실행하도록 하는 대신 먼저 연결이 웹 액세스용인지 감지합니다. 이를 먼저 확인하면 지연시간/응답시간을 줄일 수 있습니다.
포트 80 및 443은 HTTP 및 HTTPS 프로토콜에 사용됩니다. 먼저 이러한 포트에 대한 규칙을 입력하는 경우 이 csfpre 그룹에 대한 규칙 확인을 수락하고 중지합니다.
/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 443 -j ACCEPT
이제 다음 줄이 다음과 같으면 80과 443을 제외한 다른 모든 포트를 완전히 차단할 수 있습니다.
/sbin/iptables -A Enter -p all -s 60.168.112.0/20 -j 삭제
모든 네트워크 트래픽이 허용되므로 이 범위 내의 웹사이트 트래픽은 차단되지 않습니다. 이 줄이 먼저 나타나면 네트워크 트래픽을 포함한 모든 트래픽이 차단됩니다. 나는 전체 서브넷을 차단하여 좋은 사용자가 사이트를 보는 것을 막고 싶지 않습니다.
- 차단이 특정 포트로 축소되면 특정 포트, 범위, 목록 또는 이러한 포트의 조합을 차단할 수 있습니다.
FTP만 차단:
/sbin/iptables -A INPUT -p tcp --dport 21 -s 1.0.0.0/8 -j DROP
FTP는 실제로 몇 가지 다른 포트를 사용하여 연결을 설정하고 표준 포트가 22인 SFTP/SSH도 사용하므로 콜론으로 구분된 시작 및 끝 포트를 사용하여 범위를 차단하는 것이 가장 좋습니다.
/sbin/iptables -A INPUT -p tcp --match multiport --dport 21:26 -s 1.0.0.0/8 -j DROP
범위나 목록을 사용하는 경우 여러 포트에 대해 --match를 사용해야 합니다. 목록은 15개 포트를 초과할 수 없으며 범위의 각 포트는 총 15개 포트에 포함됩니다.
표준 SMTP 이메일 포트를 차단할 수도 있습니다.
/sbin/iptables -A INPUT -p tcp --match multiport --dport 110,465,587,995 -s 117.0.0.0/8 -j DROP
그리고 목록의 범위를 사용하여 규칙에서 실제로 FTP 및 메일 포트를 차단할 수 있습니다.
/sbin/iptables -A INPUT -p tcp --match multiport --dport 21:26,110,465,587,995 -s 117.0.0.0/8 -j DROP
스크립트를 저장하고 방화벽을 다시 시작하십시오.
필요에 따라 CSF 및 cpHulk가 개별 IP 주소를 차단하도록 합니다.
로컬 연결 없이 스마트폰을 사용해 테스트할 수 있습니다. 휴대폰의 IP 주소를 확인하고 사용할 컴퓨터와 다른지 확인하세요. 그런 다음 서버 및 FTP 프로그램을 통해 이메일을 확인하거나 보내도록 휴대폰을 설정했다고 가정하여 모든 시나리오를 실행할 수 있습니다.
차단하기 위해 전체 서브넷에 대해 FTP에 대한 액세스를 제한하고 일부 경우에는 SMTP에 대한 액세스를 제한하기로 결정했습니다. 이를 줄이기 위해 수신되는 모든 경고를 분석한 다음 최악의 서브넷을 이 사이트에 나열된 국가와 비교했습니다.http://www.tcpiputils.com/browse/ip-주소
궁극적인 목표는 CSF에 의해 차단되는 개별 IP의 수를 줄이는 것입니다. 수천 개의 IP를 차단하면 지연 문제가 발생할 수 있으므로 악의적인 사용자가 많은 국가를 차단하는 표준 규칙을 마련하면 이렇게 많은 수의 개별 IP를 관리해야 하는 필요성을 줄일 수 있습니다.
유효한 서브넷 범위를 다시 계산하려면 다음 도구를 사용하세요.http://www.subnet-calculator.com/cidr.php
112.0.0.0/7기간112.0.0.0도착하다113.255.255.255, 하지만111.0.0.0/7무효 차단이므로,110.0.0.0도착하다111.255.255.255. 잘못된 IP를 차단하지 않도록 서브넷 범위를 확인하는 것이 중요합니다.