최근에 iptables 확인할 일이 있었다. 설치된 프로그램이 정상적으로 동작하지 않는다는 이유였다.
이것저것 확인을 하였지만 결국엔 iptables 설정이 변경되어서 발생한 것으로 확인되었다.
필요한 부분만 간단히 정리 하였다.
iptables
iptables는 시스템 관리자가 리눅스 커널 방화벽(다른 넷필터 모듈로 구현됨)이 제공하는 테이블들과 그것을 저장하는 체인, 규칙들을 구성할 수 있게 해주는 사용자 공간 응용 프로그램이다.
체인
- INPUT : 들어오는 패킷
- OUTPUT : 나가는 패킷
- FORWARD : 경유하는 패킷
옵션
-A (--append) : 새로운 규칙을 추가한다.
-D (--delete) : 규칙을 삭제한다.
-C (--check) : 패킷을 테스트한다.
-R (--replace) : 새로운 규칙으로 교체한다.
-I (--insert) : 새로운 규칙을 삽입한다.
-L (--list) : 규칙을 출력한다.
-F (--flush) : chain으로부터 규칙을 모두 삭제한다.
-Z (--zero) : 모든 chain의 패킷과 바이트 카운터 값을 0으로 만든다.
-N (--new) : 새로운 chain을 만든다.
-X (--delete-chain) : chain을 삭제한다.
-P (--policy) : 기본정책을 변경한다.
조건
--source (-s) : 출발지 IP주소나 네트워크와의 매칭
--destination (-d) : 목적지 ip주소나 네트워크와의 매칭
--protocol (-p) : 특정 프로토콜과의 매칭
--in-interface (i) : 입력 인터페이스
--out-interface (-o) : 출력 인터페이스
--state : 연결 상태와의 매칭
--string : 애플리케이션 계층 데이터 바이트 순서와의 매칭
--comment : 커널 메모리 내의 규칙과 연계되는 최대 256바이트 주석
--syn (-y) : SYN 패킷을 허용하지 않는다.
--fragment (-f) : 두 번째 이후의 조각에 대해서 규칙을 명시한다.
--table (-t) : 처리될 테이블
--jump (-j) : 규칙에 맞는 패킷을 어떻게 처리할 것인가를 명시한다.
--match (-m) : 특정 모듈과의 매치
규칙 확인
# iptables -nL
예제
1) 규칙 추가
# iptables -A INPUT -p tcp -s 192.168.1.1 --dport 3306 -j ACCEPT
2) 규칙 삭제
# iptables -D INPUT -p tcp -s 192.168.1.1 --dport 3306 -j ACCEPT
3) 특정 ip, port 접속 허용
# iptables -A INPUT -s 192.168.100.1 -p tcp --dport 443 -j ACCEPT
# iptables -A INPUT -s 127.0.0.1
규칙 적용하기
shell script를 작성하고 규칙들을 작성하고 마지막에 restart하면 편리하게 적용 가능하다.
# service iptables restart
부팅시마다 적용
chkconfig iptables on 또는 off
참고 출처 : http://webdir.tistory.com/170 [WEBDIR]