7.3. 일반 iptables 필터링

침입자들이 LAN에 침입하지 못하도록 하는 것이 네트워크 보안에서 가장 중요하지는 않아도 매우 중요한 부분입니다. 엄격한 방화벽 규칙을 사용하여 악의를 가진 원격 사용자가 LAN에 침입하는 것을 방지해야 합니다. 그러나 기본 정책이 들어오고 나가고, 전송되는 패킷을 모두 막도록 설정되어 있다면 방화벽/게이트웨이 및 내부 LAN 사용자는 서로 통신을 주고 받거나 외부와 통신을 주고 받을 수 없게 됩니다. 다라서 사용자들이 네트워크 관련 작업을 수행하고 네트워킹 프로그램을 사용할 수 있도록, 시스템 관리자는 통신에 사용되는 특정 포트를 열어두셔야 합니다.

예를 들어 방화벽에서 포트 80로의 액세스를 허용하시려면 다음 규칙을 추가하십시오:

iptables -A INPUT -p tcp -m tcp --sport 80 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT 

이렇게 하시면 포트 80을 통하여 통신하는 웹사이트에서 일반 웹 브라우징이 가능해 집니다. 보안 웹사이트 (예, https://www.example.com/)로의 액세스를 허용하시려면 포트 443도 열어야 합니다.

iptables -A INPUT -p tcp -m tcp --sport 443 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT 

중요중요
 

iptables 규칙을 만드실 때는 순서가 매우 중요합니다. 예를 들어 만일 chain에서 로컬 192.168.100.0/24 서브넷에서 들어오는 모든 패킷을 drop하도록 지정하신 후 (drop 하도록 지정된 서브넷에 포함되는) 192.168.100.13에서 들어오는 패킷을 모드 허용하는 chain (-A)을 그 후에 추가하시면 뒤에 추가된 추가 규칙이 무시됩니다. 먼저 192.168.100.13를 허용하는 규칙을 설정하신 후 서브넷을 drop하는 규칙을 설정하셔야 합니다.

기존 chain 규칙에 새로운 규칙을 넣으시려면 -I 옵션 다음에 규칙을 삽입할 chain 이름과 규칙이 위치할 번호 (1,2,3,...,n)를 입력하십시오. 예를 들면:

iptables -I INPUT 1 -i lo -p all -j ACCEPT

이 규칙은 INPUT chain의 첫번째 규칙으로 삽입되어 로컬 룹백 장치 트래픽을 허용할 것입니다.

가끔씩 외부에서 LAN에 원격 접속을 해야할 경우도 있습니다. LAN 서비스로 암호화된 원격 접속을 위해 SSH와 같은 보안 서비스를 사용하실 수 있습니다. PPP 기반 자원 (예, 모뎀 뱅크 또는 대량 ISP 계정)을 사용하시는 관리자는 다이얼업 액세스를 사용하여 방화벽을 안전하게 통과하실 수 있습니다. 그 이유는 모뎀 연결은 일반적으로 직접적인 연결이므로 방화벽/게이트웨이를 통과할 수 있습니다. 그러나 초고속 접속을 사용하시는 원격 사용자의 경우 특별한 설정이 가능합니다. iptables가 원격 SSH 클라이언트에서 들어오는 접속을 허용하도록 설정하실 수 있습니다. 예를 들어 원격 SSH 액세스를 허용하시려면 다음과 같은 규칙을 사용하실 수 있습니다:

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p udp --sport 22 -j ACCEPT

다른 서비스에도 규칙을 지정하셔야할 경우가 있습니다. Red Hat Enterprise Linux 참조 가이드에서 iptables 및 함께 사용 가능한 다양한 옵션에 대한 광범위한 정보를 찾으실 수 있습니다.

이러한 규칙은 방화벽 상에서 일반 보안 서비스에 액세스할 수 있게 허용하지만, 방화벽으로 보호된 시스템은 이러한 서비스에 액세스할 수 없습니다. LAN에서 이러한 서비스에 액세스할 수 있도록 허용하시려면 iptables 필터링 규칙에 NAT을 사용하시면 됩니다.