Firewall - iptables_정책 설정 (1)
Firewall - iptables_정책 설정 (1)
정책 설정하기
iptables란 리눅스에서 방화벽을 설정하는 도구이다.
iptables는 넷필터 프로젝트에서 개발했으며 광범위한 프로토콜 상태 추적, 패킷 애플리케이션 계층검사, 속도 제한, 필터링 정책을 명시하기 위한 강력한 매커니즘을 제공한다.
실습의 편리함을 위해 기본적으로 DROP 설정을 한 정책을 스크립트로 작성해두자.
vi fw_default.sh
#! /bin/sh
systemctl stop firewalld.service
lokkit --enabled
iptables -F
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
sh fw_default.sh
- iptables 정책 설정 예시
iptables [옵션] [체인] [인터페이스] [출발지/목적지] [프로토콜] [포트] [상태 매치] [타겟(액션)]
- 호스트PC에서 방화벽으로 ping이 보내지도록 설정
iptables -A INPUT -p icmp -j ACCEPT
호스트 PC에서 ping을 보냈지만 가지 않는다. 그 이유는, PC에서 icmp echo request를 전송하여 방화벽까지 도달했지만, 방화벽이 이에 대한 응답으로 icmp echo reply를 전송해야 하는데 이를 위한 정책이 설정되지 않았기 때문이다.
그러므로 다음과 같이 설정을 추가한다.
iptables -A OUTPUT -p icmp -j ACCEPT
- 호스트PC에서 방화벽으로 ssh를 통해 원격 접속이 가능하도록 설정
iptables -A INPUT -p tcp -j ACCEPT
iptables -A OUTPUT -p tcp -j ACCEPT
이제 PC에서 putty를 이용해 접속해보자. 아이디는 root, 비밀번호를 입력하면 로그인도 되는 것을 확인할 수 있다.
- 새로운 정책 추가
iptables -A [체인] [매치] [타겟] // -A 옵션은 정책 하단에 추가
iptables -I [체인] [매치] [타겟] // -I 옵션은 정책 상단에 추가
iptables -I [체인] [라인번호] [매치] [타겟] // 정책의 순서를 지정하면 해당 위치에 정책이 추가된다.
-A 옵션과 -I 옵션의 차이를 알아보기 위해 이전에 PC에서 방화벽으로 허용했던 ping이 다시 보내지지 않도록 할 것이다.
iptables -A INPUT -p icmp -j DROP
iptables -A OUTPUT -p icmp -j DROP
하지만 여전히 ping이 전송되는 것을 확인할 수 있는데, 이는 정책 순서에 오류가 있기 때문이다. 정책 상단에 icmp에 대해 ACCEPT된 정책이 있으므로 하단에 DROP정책을 추가하는 것은 의미가 없다.
이제 -I 옵션을 이용해 정책을 추가하면 ping이 전송되지 않는다.
iptables -I INPUT -p icmp -j DROP
iptables -I OUTPUT -p icmp -j DROP
- 설정된 정책 삭제
iptables -F // 현재 설정되어 있는 모든 정책 삭제
iptables -D [체인] [라인번호] // 지정한 위치에 해당하는 정책 삭제