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

이것이 iptables
가 유용한 곳입니다. Iptables는 시스템 관리자가 구성 가능한 테이블 규칙 집합을 통해 들어오고 나가는 트래픽을 관리 할 수있는 Linux 명령 줄 방화벽입니다.
Iptables는 기본 제공 또는 사용자 정의 규칙 집합을 포함하는 체인이있는 테이블 집합을 사용합니다. 덕분에 시스템 관리자는 시스템의 네트워크 트래픽을 적절히 필터링 할 수 있습니다.
iptables 매뉴얼에 따라 현재 3 가지 유형의 테이블이 있습니다.
FILTER
– this is the default table, which contains the built in chains for:- INPUT – packages destined for local sockets
- FORWARD – packets routed through the system
- OUTPUT – packets generated locally
- PREROUTING – used for altering a packet as soon as it’s received
- OUTPUT – used for altering locally generated packets
- POSTROUTING – used for altering packets as they are about to go out
- PREROUTING – for altering incoming connections
- OUTPUT – for altering locally generated packets
- INPUT – for incoming packets
- POSTROUTING – for altering packets as they are about to go out
- FORWARD – for packets routed through the box
이 기사에서는 iptables를 통해 Linux 박스 방화벽을 관리하는 데 도움이되는 몇 가지 유용한 명령을 볼 수 있습니다. 이 도움말의 목적을 위해 더 간단한 명령으로 시작하여 끝까지 더 복잡한 단계로 이동하겠습니다.
1. Iptables 방화벽 시작 / 중지 / 다시 시작
먼저 다양한 Linux 배포에서 iptables 서비스를 관리하는 방법을 알아야합니다. "이것은 매우 쉽습니다.
------------ On Cent/RHEL 7 and Fedora 22+ ------------ # systemctl start iptables # systemctl stop iptables # systemctl restart iptables
------------ 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 트래픽을 차단하려면 위의 iptables 규칙에서udp
로tcp
를 변경하면됩니다.6. Multiport를 사용하여 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
위의 명령은
25
포트에서2525
포트로 네트워크 인터페이스eth0
에서 들어오는 모든 트래픽을 전달합니다. 필요한 포트로 변경할 수 있습니다.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
물론 차단하려는 실제 MAC 주소로
00 : 00 : 00 : 00 : 00 : 00
을 변경해야합니다.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
위의 예에서 검색하려는 실제 테이블로
예를 들면 다음과 같습니다.
# 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
차단하려는 실제 IP 주소 (또는 네트워크)로 \"xxx.xxx.xxx.xxx\"를 변경합니다.
25. IPTable을 통해 보내는 메일 비활성화
시스템에서 이메일을 보내지 않아야하는 경우 SMTP 포트에서 나가는 포트를 차단할 수 있습니다. 예를 들어 다음을 사용할 수 있습니다.
# iptables -A OUTPUT -p tcp --dports 25,465,587 -j REJECT
결론
Iptables는 쉽게 혜택을받을 수있는 강력한 방화벽입니다. 모든 시스템 관리자는 최소한 iptables의 기초를 배우는 것이 중요합니다. iptables 및 옵션에 대한 더 자세한 정보를 찾으려면 설명서를 읽어 보는 것이 좋습니다.
# man iptables
이 목록에 더 많은 명령을 추가해야한다고 생각되면 아래 댓글 섹션에 제출하여 우리와 공유하십시오.