웹사이트 검색

모든 리눅스 관리자가 알아야 할 25가지 유용한 IPtable 방화벽 규칙


네트워크 트래픽 관리는 시스템 관리자가 처리해야 하는 가장 어려운 작업 중 하나입니다. 그는 시스템을 공격에 취약하게 두지 않으면서 들어오고 나가는 연결 모두에 대한 시스템 및 사용자 요구 사항을 충족하는 방식으로 방화벽을 구성해야 합니다.

이것이 iptables가 유용한 곳입니다. Iptables는 시스템 관리자가 구성 가능한 테이블 규칙 세트를 통해 들어오고 나가는 트래픽을 관리할 수 있게 해주는 Linux 명령줄 방화벽입니다.

Iptables는 기본 제공 또는 사용자 정의 규칙 세트가 포함된 체인이 있는 테이블 세트를 사용합니다. 덕분에 시스템 관리자는 시스템의 네트워크 트래픽을 적절하게 필터링할 수 있습니다.

iptables 매뉴얼에는 현재 3가지 유형의 테이블이 있습니다.

    1. FILTER - 이는 다음에 대한 내장 체인이 포함된 기본 테이블입니다.

      1. INPUT   – 로컬 소켓용 패키지
      2. FORWARD – 시스템을 통해 라우팅되는 패킷
      3. OUTPUT – 로컬에서 생성된 패킷
    2. NAT – 패킷이 새 연결을 생성하려고 할 때 참조되는 테이블입니다. 다음과 같은 기능이 내장되어 있습니다:

      1. PREROUTING – 패킷을 수신하자마자 변경하는 데 사용됩니다.
      2. OUTPUT – 로컬에서 생성된 패킷을 변경하는 데 사용됩니다.
      3. 포스트아웃 – 패킷이 나가려고 할 때 패킷을 변경하는 데 사용됩니다.
    3. MANGLE – 이 테이블은 패킷 변경에 사용됩니다. 커널 버전 2.4까지 이 테이블에는 두 개의 체인만 있었지만 이제는 5개입니다.

      1. PREROUTING – 들어오는 연결을 변경합니다.
      2. OUTPUT – 로컬에서 생성된 패킷을 변경합니다.
      3. INPUT – 수신 패킷용
      4. 포스트아웃 – 패킷이 나가려고 할 때 패킷을 변경합니다.
      5. FORWARD – 상자를 통해 라우팅되는 패킷의 경우

이 기사에서는 iptables를 통해 Linux 박스 방화벽을 관리하는 데 도움이 되는 몇 가지 유용한 명령을 볼 수 있습니다. 이 글의 목적에 따라 더 간단한 명령부터 시작해 끝까지 더 복잡한 명령으로 넘어가겠습니다.

1. IPtables 방화벽 시작/중지/다시 시작

먼저 다양한 Linux 배포판에서 iptables 서비스를 관리하는 방법을 알아야 합니다. 이것은 매우 쉽습니다:

SystemD 기반 Linux 배포판

------------ On Cent/RHEL 7 and Fedora 22+ ------------
systemctl start iptables
systemctl stop iptables
systemctl restart iptables

SysVinit 기반 Linux 배포판

------------ On Cent/RHEL 6/5 and Fedora ------------
/etc/init.d/iptables start 
/etc/init.d/iptables stop
/etc/init.d/iptables restart

2. 모든 IPtables 방화벽 규칙을 확인하세요.

기존 규칙을 확인하려면 다음 명령을 사용하십시오.

iptables -L -n -v

그러면 아래와 유사한 출력이 반환됩니다.

Chain INPUT (policy ACCEPT 1129K packets, 415M bytes)
 pkts bytes target prot opt in out source destination 
 0 0 ACCEPT tcp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
 0 0 ACCEPT udp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
 0 0 ACCEPT tcp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:67
 0 0 ACCEPT udp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:67
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target prot opt in out source destination 
 0 0 ACCEPT all -- * lxcbr0 0.0.0.0/0 0.0.0.0/0 
 0 0 ACCEPT all -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 354K packets, 185M bytes)
 pkts bytes target prot opt in out source destination

특정 테이블에 대한 규칙을 확인하려면 -t 옵션과 확인하려는 테이블을 차례로 사용하면 됩니다. 예를 들어 NAT 테이블의 규칙을 확인하려면 다음을 사용할 수 있습니다.

iptables -t nat -L -v -n

3. IPtables 방화벽에서 특정 IP 주소 차단

IP 주소에서 비정상적이거나 악의적인 활동을 발견한 경우 다음 규칙을 사용하여 해당 IP 주소를 차단할 수 있습니다.

iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP

실제 IP 주소로 "xxx.xxx.xxx.xxx"를 변경해야 하는 경우 실수로 자신의 IP 주소를 차단할 수 있으므로 이 명령을 실행할 때 매우 주의하십시오. -A 옵션은 선택한 체인의 끝에 규칙을 추가합니다.

해당 IP 주소의 TCP 트래픽만 차단하려는 경우 프로토콜을 지정하는 -p 옵션을 사용할 수 있습니다. 그렇게 하면 명령이 다음과 같이 표시됩니다.

iptables -A INPUT -p tcp -s xxx.xxx.xxx.xxx -j DROP

4. IPtables 방화벽에서 IP 주소 차단 해제

특정 IP 주소의 요청을 더 이상 차단하지 않기로 결정한 경우 다음 명령을 사용하여 차단 규칙을 삭제할 수 있습니다.

iptables -D INPUT -s xxx.xxx.xxx.xxx -j DROP

-D 옵션은 선택한 체인에서 하나 이상의 규칙을 삭제합니다. 더 긴 옵션을 사용하려면 --delete를 사용할 수 있습니다.

5. IPtables 방화벽에서 특정 포트 차단

때로는 특정 포트에서 들어오거나 나가는 연결을 차단하고 싶을 수도 있습니다. 이는 좋은 보안 조치이므로 방화벽을 설정할 때 이 문제를 실제로 고려해야 합니다.

특정 포트에서 나가는 연결을 차단하려면 다음을 사용하세요.

iptables -A OUTPUT -p tcp --dport xxx -j DROP

들어오는 연결을 허용하려면 다음을 사용하십시오.

iptables -A INPUT -p tcp --dport xxx -j ACCEPT

두 예 모두에서 "xxx"를 허용하려는 실제 포트로 변경하세요. TCP 대신 UDP 트래픽을 차단하려면 간단히 "tcp""udp"로 변경하세요. iptables 규칙 위.

6. 멀티포트를 사용하여 IPtables에서 다중 포트 허용

다중 포트를 사용하여 한 번에 여러 포트를 허용할 수 있습니다. 아래에서는 수신 및 발신 연결 모두에 대한 규칙을 찾을 수 있습니다.

iptables -A INPUT  -p tcp -m multiport --dports 22,80,443 -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --sports 22,80,443 -j ACCEPT

7. IPtables의 특정 포트에서 특정 네트워크 범위 허용

특정 포트의 특정 연결을 특정 네트워크로 제한하려고 할 수 있습니다. 22 포트에서 192.168.100.0/24 네트워크로 나가는 연결을 허용한다고 가정해 보겠습니다.

다음 명령을 사용하여 수행할 수 있습니다.

iptables -A OUTPUT -p tcp -d 192.168.100.0/24 --dport 22 -j ACCEPT

8. IPtables 방화벽에서 Facebook 차단

일부 고용주는 직원의 Facebook 액세스를 차단하고 싶어합니다. 다음은 Facebook으로의 트래픽을 차단하는 방법의 예입니다.

참고: 귀하가 시스템 관리자이고 이러한 규칙을 적용해야 하는 경우 동료가 귀하와 대화를 중단할 수 있다는 점을 명심하세요. :)

먼저 Facebook에서 사용하는 IP 주소를 찾으세요.

host facebook.com 
facebook.com has address 66.220.156.68
whois 66.220.156.68 | grep CIDR
CIDR: 66.220.144.0/20

그런 다음 다음을 사용하여 해당 Facebook 네트워크를 차단할 수 있습니다.

iptables -A OUTPUT -p tcp -d 66.220.144.0/20 -j DROP

Facebook에서 사용하는 IP 주소 범위는 국가에 따라 다를 수 있습니다.

9. IPtables에서 포트 전달 설정

때로는 한 서비스의 트래픽을 다른 포트로 전달하고 싶을 수도 있습니다. 다음 명령을 사용하여 이를 달성할 수 있습니다.

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 2525

위 명령은 네트워크 인터페이스 eth0에서 들어오는 모든 트래픽을 포트 25에서 포트 2525로 전달합니다. 필요한 포트로 포트를 변경할 수 있습니다.

10. IPtables를 사용하여 Apache 포트의 네트워크 플러드 차단

때때로 IP 주소가 웹 사이트의 웹 포트에 대해 너무 많은 연결을 요청할 수 있습니다. 이로 인해 많은 문제가 발생할 수 있으며 이러한 문제를 방지하려면 다음 규칙을 사용할 수 있습니다.

iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT

위 명령은 들어오는 연결을 분당 100으로 제한하고 제한 버스트를 200으로 설정합니다. 특정 요구 사항에 맞게 한도 및 한도 버스트를 편집할 수 있습니다.

11. IPtables에서 들어오는 Ping 요청 차단

일부 시스템 관리자는 보안 문제로 인해 들어오는 ping 요청을 차단하고 싶어합니다. 위협이 그다지 크지는 않지만 이러한 요청을 차단하는 방법을 아는 것이 좋습니다.

iptables -A INPUT -p icmp -i eth0 -j DROP

12. 루프백 액세스 허용

루프백 액세스(127.0.0.1에서 액세스)는 중요하며 항상 활성 상태로 두어야 합니다.

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

13. IPtables에 삭제된 네트워크 패킷 로그 유지

네트워크 인터페이스 eth0에서 삭제된 패킷을 기록하려면 다음 명령을 사용할 수 있습니다.

iptables -A INPUT -i eth0 -j LOG --log-prefix "IPtables dropped packets:"

"--log-prefix" 뒤의 값을 원하는 대로 변경할 수 있습니다. 메시지는 /var/log/messages에 기록되며 다음을 사용하여 검색할 수 있습니다.

grep "IPtables dropped packets:" /var/log/messages

14. IPtables의 특정 MAC 주소에 대한 액세스 차단

다음을 사용하여 특정 MAC 주소에서 시스템에 대한 액세스를 차단할 수 있습니다.

iptables -A INPUT -m mac --mac-source 00:00:00:00:00:00 -j DROP

물론 "00:00:00:00:00:00"를 차단하려는 실제 MAC 주소로 변경해야 합니다.

15. IP 주소당 동시 연결 수 제한

특정 포트의 단일 IP 주소에서 너무 많은 동시 연결을 설정하지 않으려면 아래 명령을 사용할 수 있습니다.

iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT

위 명령은 클라이언트당 3개 이상의 연결을 허용하지 않습니다. 물론 다른 서비스에 맞게 포트 번호를 변경할 수 있습니다. 또한 --connlimit-above도 요구 사항에 맞게 변경되어야 합니다.

16. IPtables 규칙 내에서 검색

iptables 규칙을 정의한 후에는 수시로 검색해야 하며 이를 변경해야 할 수도 있습니다. 규칙 내에서 검색하는 쉬운 방법은 다음을 사용하는 것입니다.

iptables -L $table -v -n | grep $string

위의 예에서는 $table을 검색하려는 실제 테이블로 변경하고 $string을 찾고 있는 실제 문자열로 변경해야 합니다.

예는 다음과 같습니다.

iptables -L INPUT -v -n | grep 192.168.0.100

17. 새로운 IPTables 체인 정의

iptables를 사용하면 자신만의 체인을 정의하고 여기에 사용자 정의 규칙을 저장할 수 있습니다. 체인을 정의하려면 다음을 사용하십시오.

iptables -N custom-filter

이제 새 필터가 있는지 확인할 수 있습니다.

iptables -L
샘플 출력
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain custom-filter (0 references)
target prot opt source destination

18. IPtables 방화벽 체인 또는 규칙 플러시

방화벽 체인을 플러시하려면 다음을 사용할 수 있습니다.

iptables -F

다음을 사용하여 특정 테이블에서 체인을 플러시할 수 있습니다.

iptables -t nat -F

플러시하려는 체인의 실제 테이블로 "nat"를 변경할 수 있습니다.

19. IPtables 규칙을 파일에 저장

방화벽 규칙을 저장하려면 iptables-save 명령을 사용하면 됩니다. 다음을 사용하여 규칙을 파일에 저장하고 저장할 수 있습니다.

iptables-save > ~/iptables.rules

파일을 어디에 저장할지, 이름을 어떻게 지정할지는 사용자에게 달려 있습니다.

20. 파일에서 IPtables 규칙 복원

iptables 규칙 목록을 복원하려면 iptables-restore를 사용하면 됩니다. 명령은 다음과 같습니다.

iptables-restore < ~/iptables.rules

물론 규칙 파일의 경로는 다를 수 있습니다.

21. PCI 준수를 위한 IPtables 규칙 설정

일부 시스템 관리자는 PCI와 호환되도록 서버를 구성해야 할 수도 있습니다. 다양한 PCI 규정 준수 공급업체마다 많은 요구 사항이 있지만 공통적인 요구 사항은 거의 없습니다.

대부분의 경우 IP 주소가 두 개 이상 필요합니다. 사이트의 IP 주소에 대해 아래 규칙을 적용해야 합니다. 아래 규칙을 사용할 때는 각별히 주의하고, 수행 중인 작업이 확실할 경우에만 사용하십시오.

iptables -I INPUT -d SITE -p tcp -m multiport --dports 21,25,110,143,465,587,993,995 -j DROP

cPanel 또는 이와 유사한 제어판을 사용하는 경우 해당 패널의 포트도 차단해야 할 수 있습니다. 예는 다음과 같습니다.

iptables -I in_sg -d DEDI_IP -p tcp -m multiport --dports  2082,2083,2095,2096,2525,2086,2087 -j DROP

참고: PCI 공급업체의 요구 사항을 충족하는지 확인하려면 보고서를 주의 깊게 확인하고 필수 규칙을 적용하세요. 어떤 경우에는 특정 포트의 UDP 트래픽도 차단해야 할 수도 있습니다.

22. 설정된 연결 및 관련 연결 허용

네트워크 트래픽은 들어오고 나가는 것이 분리되어 있으므로 확립되고 관련된 들어오는 트래픽을 허용하는 것이 좋습니다. 들어오는 연결의 경우 다음을 수행하십시오.

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

나가는 용도:

iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

23. IPtables에 잘못된 패킷 삭제

일부 네트워크 패킷이 유효하지 않은 것으로 표시될 수 있습니다. 어떤 사람들은 해당 패키지를 기록하는 것을 선호하지만 다른 사람들은 패키지를 삭제하는 것을 선호합니다. 유효하지 않은 패킷을 삭제하려면 다음을 사용할 수 있습니다.

iptables -A INPUT -m conntrack --ctstate INVALID -j DROP 

24. 네트워크 인터페이스에서 연결 차단

일부 시스템에는 둘 이상의 네트워크 인터페이스가 있을 수 있습니다. 해당 네트워크 인터페이스에 대한 액세스를 제한하거나 특정 IP 주소로부터의 연결을 차단할 수 있습니다.

예를 들어:

iptables -A INPUT -i eth0 -s xxx.xxx.xxx.xxx -j DROP

“xxx.xxx.xxx.xxx”를 차단하려는 실제 IP 주소(또는 네트워크)로 변경하세요.

25. IPTable을 통해 보내는 메일 비활성화

시스템에서 이메일을 보내지 않아야 하는 경우 SMTP 포트에서 나가는 포트를 차단할 수 있습니다. 예를 들어 다음을 사용할 수 있습니다.

iptables -A OUTPUT -p tcp --dports 25,465,587 -j REJECT

결론

Iptables는 쉽게 이점을 누릴 수 있는 강력한 방화벽입니다. 모든 시스템 관리자는 최소한 iptables의 기본 사항을 배우는 것이 중요합니다. iptables 및 해당 옵션에 대한 더 자세한 정보를 찾으려면 해당 설명서를 읽는 것이 좋습니다.

man iptables

이 목록에 더 많은 명령을 추가해야 한다고 생각하시면 아래 댓글 섹션에 제출하여 공유해 주세요.