요약
서버 관리에 대해 자세히 알아보고 싶습니다. 나는 내 친구가 많은 것을 설정했지만 몇 년 동안 내 자신의 웹 서버를 운영해 왔으며 이제는 이러한 작업에 대해 더 자세히 배우고 싶습니다.
저는 주로 보안, 네트워크 보안, 방화벽에 관심이 있으며 이에 대해 자세히 알아볼 수 있는 좋은 리소스/책을 찾고 싶습니다.
그럼에도 불구하고 내 의도는 다음과 같습니다.
- 특정 포트를 제외한 모든 수신 연결을 차단합니다.
- 보안 관련 작업을 이해하려면 연구해야 합니다.
들어오는 연결을 허용하는 짧은 포트 목록이 있습니다.
$ iptables -A INPUT -p icmp -j ACCEPT # allows anyone to ping?
$ iptables -A INPUT -p tcp --dport 22 -j ACCEPT # allow public ssh
$ iptables -A INPUT -p tcp --dport 80 -j ACCEPT # allow public apache
$ iptables -A INPUT -p tcp --dport 443 -j ACCEPT # allow public apache (ssl)
$ iptables -A INPUT -p tcp --dport 9001 -j ACCEPT # allow a public service
$ iptables -A INPUT -j DROP # default drop
이론적으로 위의 규칙 목록은 22, 80, 443 및 9001을 제외한 모든 것을 차단할 수 있을 만큼 안전해 보입니다. 그러나 이러한 규칙이 활성화되어 있는 동안에는 내 서버에 SSH를 통해 접속할 수 없습니다. 그런 다음 규칙( iptables -F
)을 새로 고치고 다시 SSH를 사용할 수 있습니다.
답변1
나머지 규칙보다 먼저 삭제 규칙을 배치하면 SSH가 제대로 작동합니다.
iptables는 규칙을 위에서 아래로 평가하므로 순서가 중요합니다. 마찬가지로, 먼저 포트 22를 허용하는 규칙을 만든 후 모든 것을 포트 22로 삭제하는 다음 규칙을 만드는 경우 후자의 규칙이 적용됩니다.
다음은 작동 중인 프로덕션 서버에 대한 구성 예입니다.
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -j LOG --log-prefix "IPTABLES IN:"
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -j LOG --log-prefix "IPTABLES OUT:"
COMMIT
먼저 기본적으로 수신 및 전달 연결을 삭제하고 기본적으로 수신 연결을 허용하도록 설정합니다. 그런 다음 상태와 관련된 연결을 수락하고 설정합니다. 그런 다음 ICMP가 전역적으로 승인되고 루프백 트래픽이 승인됩니다. 대상 포트 22와 80을 수락한 후에는 로깅 등에 대한 규칙이 있습니다. Centos를 사용하여 규칙을 파일에 저장하므로 iptables를 다시 로드하면 해당 파일의 규칙이 직접 플러시됩니다. 물론 기본 파일을 설정하려면 재부팅 시 규칙이 로드될 때 규칙이 올바르게 작동하는지 확인해야 합니다.
규칙 세트는 "iptables-restore < path_to_rules"를 사용하여 파일에서 다시 로드할 수 있습니다.