저는 FTP(S)와 여러 사용자가 있는 LAMP 서버를 실행하고 있습니다. 사용자는 PHP 파일과 기타 웹 콘텐츠만 업로드할 수 있습니다. 일부는 Drupal과 WordPress를 실행하지만 일부 자체 제작 기능도 있습니다. PHP에 대한 쉘 액세스 시도를 모두 비활성화했습니다. 하지만 가동 중지 시간, 스크립트 키디 및 기타 불쾌한 일로부터 나 자신, 서버 및 사용자를 완전히 보호하기 위해 비활성화하고 싶습니다.무선 주파수 간섭. 사실, 나는 내가 허용하지 않는 서버의 트래픽(TCP 및 UDP)을 허용하고 싶지 않습니다. 이 작업에서는 패킷을 보내기 전에 모든 패킷을 검색하고 허용 여부를 결정하는 투명한 프록시를 만들고 싶습니다. 로컬 데이터베이스에서 허용된 URL을 쉽게 얻을 수 있기 때문에 의사 결정 작업에 Python을 사용하고 싶습니다. 특정 API/OAuth 출처를 허용하고 싶은 것처럼요.
모든 데이터(대상 IP 및 포트 포함)를 Python 애플리케이션으로 보내도록 iptables를 어떻게 구성합니까? 아니면 더 좋은 방법이 있나요?
내 생각에는 쉘 액세스와 승인되지 않은 네트워크 트래픽을 비활성화할 수 있다면 밤에 잠을 더 잘 잘 수 있을 것입니다. 이렇게 하면 누구도 내 서버를 봇넷의 봇으로 사용할 수 없습니다. 그리고 스팸을 보낼 수도 없습니다. 어떻게 생각하나요?
PHP 5.4 이상을 사용하고 있기 때문에 Suhosin에 의존하고 싶지 않습니다.
답변1
iptables 측면에서:
## default policy for OUTPUT
iptables -P OUTPUT DROP
## allow related/established traffic, e.g. for incoming connections
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
## whitelist some APIs (here 10.0.0.1)
## or package repositories, or your DNS (here 8.8.8.8), ...
iptables -A OUTPUT -p udp --dport 53 -d 8.8.8.8 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -d 8.8.8.8 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 443 -d 10.0.0.1 -j ACCEPT
## other TCP packages go to your script (probably not needed anyway)
iptables -t nat -A OUTPUT -p tcp -j DNAT --to-destination 127.0.0.1:8001
프록시 스크립트를 직접 작성하는 대신 PHP에서 나가는 트래픽을 필터링하기 위해 apparmor를 확인할 수도 있습니다.