새로 라이브 CentOS 웹 서버에 필요한 방화벽 구성은 무엇입니까?


1

Linode.com에서 LAMP 스택과 함께 Apache 웹 서버로 사용하는 CentOS 서버를 새로 얻었습니다.

방화벽이 기본적으로 활성화되어 있지만 활성 규칙이없는 것 같습니다.

이 경우 어떻게해야합니까?

모든 트래픽을 차단 한 다음 웹 서버에 대해 포트 80 및 443 만 선택적으로 허용해야합니까?

"방화벽 템플릿"또는 필수 방화벽 규칙 가이드가 있습니까?

답변:


2

필요한 모든 포트를 차단하고 선택적으로 허용해야합니다. 운 좋게도 실수로 자신을 잠그면 Lish 콘솔을 통해 Linode에 액세스하여 잘못된 방화벽 규칙을 플러시 할 수 있습니다.

다음은 정기적으로 사용하는 방화벽 구성 중 일부입니다.

SSH, HTTP, HTTPS 허용

iptables -A INPUT -p tcp -m multiport --destination-ports 22,80,443 -j ACCEPT
iptables -A INPUT -s 127.0.0.1/24 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP

FTP를 허용해야하는 경우 포트 21을 포함하십시오 (수동 연결의 경우 21000-21100을 사용하는 추가 포트 범위를 정의해야 할 수 있음).

iptables -A INPUT -p tcp -m multiport --destination-ports 21,22,80,443,21000:21100 -j ACCEPT
iptables -A INPUT -s 127.0.0.1/24 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP

어떤 이유로 든 포트 25를 열지 않으면 sendmail, exim 등을 사용하여 메일을 보낼 수 없다는 것을 알았습니다 (일반적으로 로컬 서버에서 보낸 이메일 만 수락하도록 메일 구성이 설정 됨).

iptables -A INPUT -p tcp -m multiport --destination-ports 21,22,25,80,443,21000:21100 -j ACCEPT
iptables -A INPUT -s 127.0.0.1/24 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP

자신을 잠그지 않고 다시 시작하도록 규칙을 비우려면 다음 명령 세트를 사용하십시오.

iptables -P FORWARD ACCEPT
iptables -P INPUT ACCEPT
iptables -F

현재 방화벽 규칙 및 통계를 보려면 다음 명령을 사용하십시오.

iptables -L -nv

또한 규칙을 저장하고 재부팅시 IPTables가 시작되는지 확인하십시오.


1

모든 트래픽을 차단하면 하트 비트 (적어도 당신에게)에서 상자가 죽게됩니다.

사용중인 서비스에 필요한 포트 (및 BIND와 같이 아직 필요하지 않은 서비스)를 조사하십시오.

서버의 공통 필수 포트는 다음과 같습니다.

22 TCP (SSH, but you should change this)
21 TCP (FTP, but this is insecure. Use SFTP on the SSH port.)
80, 443 TCP (HTTP/S)
53 UDP (DNS)
# use iptables -A INPUT -p (udp|tcp) --dport=$PORT -j ACCEPT

SYN 플러딩 (TCP의 핸드 셰이크는 SYN-SYN-ACK후자의 SYN이 조합 임) 과 같이 방화벽을 사용하여 일반적인 공격 경로를 차단해야 합니다. 시도하지 않은 연결은 차단 SYN-ACK하지만 기존 연결은 허용합니다.

/sbin/iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

또한 핑 (ICMP)을 차단하지 마십시오. ICMP를 통해 ping을받을 수 없습니다. TCP를 사용하는 것이 훨씬 효과적이며 포트 80 및 443이 열려 있습니다.

# Allow ICMP
/sbin/iptables -A INPUT -i eth0 -p icmp -j ACCEPT

필요한 모든 서비스가 확보되면 나머지 트래픽을 모두 차단하십시오. 당신은 또한 당신의 박스에 대한 모든 액세스 권한을 가지고 있고 그 박스에서 무엇이 실행되고 있는지 알고 있다면 localhost에 대한 완전한 액세스 권한을 고려해야합니다.

/sbin/iptables -A INPUT -i lo -j ACCEPT

IPv6을 사용하는 경우 위와 동일한 작업을 수행하는 것을 잊지 마십시오 ip6tables. 거의 모든 사람들이 어떤 이유로 든 이것을 잊어 버립니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.