Firewall - iptables_로그 설정 (1)
로그 설정하기
iptables란 리눅스에서 방화벽을 설정하는 도구이다.
iptables는 넷필터 프로젝트에서 개발했으며 광범위한 프로토콜 상태 추적, 패킷 애플리케이션 계층검사, 속도 제한, 필터링 정책을 명시하기 위한 강력한 매커니즘을 제공한다.
LOG 타겟을 사용하면 패킷에 대한 내용이 로그파일에 기록된다.
먼저, ssh 서비스를 허용해주고 로그를 기록하도록 설정하자.
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -P OUTPUT ACCEPT
iptables -A INPUT -p tcp --dport 22 -j LOG
putty를 이용해 접속한 후, tail 명령어를 이용해 로그를 확인해보니 ssh에 대한 로그가 보이지 않는다.
tail -f /var/log/messages
그 이유는, ACCEPT 타겟을 LOG 보다 먼저 설정했기 때문이다.
LOG 타겟은 ACCEPT, DROP과 같은 타겟보다 상단에 위치하여야만 로그를 기록할 수 있다.
이제 LOG 타겟이 먼저 오도록 다시 방화벽 설정을 해주자.
iptables -F
iptables -A INPUT -p tcp --dport 22 -j LOG
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
다시 putty를 이용해 접속하여 로그를 확인하니 계속해서 로그가 올라오는 것을 확인할 수 있다.
옵션을 이용하면 로그에 이름을 설정할 수 있다.
로그가 많을 때 이름을 통해 쉽게 구별하여 검색할 수 있기 때문에 많이 사용된다.
-j LOG --log-prefix [로그이름]
이제 본격적으로 다음 요구사항을 만족하는 정책을 실습해보자.
1. 모든 PC에서 방화벽(eth0 IP)으로 ping이 되어야한다.
2. 방화벽으로 ICMP 패킷이 들어오면 로그가 기록되며, 로그 이름은 “input_icmp”로 설정한다.
3. 방화벽으로 ICMP 패킷이 나가면 로그가 기록되며, 로그 이름은 “output_icmp”로 설정한다.
4. 호스트 PC에서만 방화벽으로 ssh 접속을 허용한다.
5. 방화벽에서 ssh 접속이 허용된 경우 로그가 기록되며, 로그 이름은 “ssh_accept”로 설정한다.
6. 방화벽에서 ssh 접속이 차단된 경우 로그가 기록되며, 로그 이름은 “ssh_drop”로 설정한다.
sh fw_default.sh
iptables -A INPUT -i eth0 -p icmp -j LOG --log-prefix "input_icmp"
iptables -A INPUT -i eth0 -p icmp -j ACCEPT
iptables -A OUTPUT -o eth0 -p icmp -j LOG --log-prefix "output_icmp"
iptables -A OUTPUT -o eth0 -p icmp -j ACCEPT
iptables -A INPUT -s 192.168.35.X --p tcp --dport 22 -j LOG --log-prefix "ssh_accept"
iptables -A INPUT -s 192.168.35.X --p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -d 192.168.35.X --p tcp --sport 22 -j LOG --log-prefix "ssh_accept"
iptables -A OUTPUT -d 192.168.35.X --p tcp --sport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix "ssh_drop"
iptables -A INPUT -p tcp --dport 22 -j DROP
이제 호스트PC에서 방화벽으로 ping을 보내고, 로그가 잘 찍히는지 확인해보자.
ssh 관련 로그도 확인해보자.
마지막으로 IP 주소를 변경한 후 접속해보고, “ssh_drop”이름으로 로그가 잘 기록되었는지 확인해보자.