- 대부분의 firewall 채택방식
- application + packet filtering 방식 혼합
- 사용자 편의성과 기업환경에 따른 유연성 있게 방화벽을 구성할 수 있지만 관리가 복잡하다.
설치 확인
[root@fedora ~]# cd /boot && ls -l
-rw-r--r-- 1 root root 64551 11월 12 2007 config-2.6.18-53.el5
[root@fedora boot]# vi config-2.6.18-53.el5 // config -2.~~~ 커널종류에따라 다르게 표시될것이다.
/NETFILTER
확인
CONFIG_NETFILTER=y ( m은 모듈 형태, y는 커널형태)
CONFIG_IP_NF_CONNTRACK=m (steteful과 같은것으로 상태 추적)
# service iptables status
Firewall is stopped.
# lsmod // 현재 모듈과 사이즈등을 보여준다.
// 정지 상태였기 때문에 iptables가 보여지지 않을것이다.
Netfileter는 리눅스 커널에 포함된 방화벽 프로그램이며 iptables는 방화벽 관리 프로그램이다.
netfilter 프로그램 (iptables)
3개의 기본 테이블로 구성된다. ( filter , nat, mangle)
각 테이블은 chain(패킷 이동통로)로 구성되며, 각 chain에 rule을 설정하게 된다.
mangle : 패킷 속성 변경
NAT : 사설 ip => 공인 ip
Filter : 패킷의 허용/차단, 패킷의 필터링(기본_)
룰테이블
Filter
INPUT - source 와 destination으로 따질때 destination이 나일때 S-> D로
OUTPUT - INPUT의 반대상황
FORWARD - 지나치는 ㅡㅡㅋ
NAT
POSTROUTING - 사설 - > 공인ip
PREROUTING - 외부에서 내부로 사설ip로 접속시
OUTPUT
mangle
ALL
# iptables -L -t filter
# iptables -L -t nat
# iptables -L -t mangle
-------------------------------------------------------------------------------------------------
[root@fedora boot]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:25:E1:23
inet addr:192.168.10.10 Bcast:192.168.10.255 Mask:255.255.255.0
에서 192.168.10.20의 텔넷 접속 차단할 시
layer 3에서
-s 192.168.10.20
# iptables -A INPUT -s 192.168.10.20 -j DORP
layer 4에서
-p tcp --dport 80 / -p udp --sport 123
# iptables -A INPUT -s 192.168.10.20 -p tcp --dport 23 -j REJECT
기본 테이블이 filter 라 생략 하면 -t filter가 되어있는것
-p 프로토콜 --ssport 출발지, --dport 목적지
-j 는 jump target처리할
DROP 패킷 버림
REJEXCT 접속 거부하면서 메시지 리턴
ACCEPT 통과
saving /restoring
백업
# rpm -ql iptables | less
# iptables-save > firewall.rule : 설정내용을 파일로 저장
복구
# iptables-restore < firewall.rule : 파일에서 설정정보로 업!
# cd /etc/sysconfig/
# cat iptables // 없을 수가 있는데 이때는 딴시스템? 에서 얻어오자 ex. centos에서 # scp iptables root@192.168.10.10
//이 파일은 iptables 서비스가 시작할때 읽어 오게 되는데 이것이 없으면 서비스 시작이 안된다.
# service iptables restart / stop / reload / start
iptables에 관련된 설정파일을 보자
iptables -F
service iptables restart 를 해보면 이전에 설정 작업 외에 iptables에 저장된 파일로 재수정 되는것을 볼 수 있다.
이를 피하기 위해서는 아래의 작업이 필요하다.
# vi /etc/sysconfig/iptables-config
그림에서 표시한 두 줄의 "no" -> "yes" 로 바꾸면 된다. 그럼 재시작이나 재부팅 해도 여전히 살아있다.
룰 생성 / 삭제 / 교체
----------------------------------------------------------------------------------------------
# iptables -I INPUT -s 192.168.10.30 -j DROP / /기본적으로 최상위 추가됨
# iptables -A INPUT -s 192.168.10.30 -p tcp --dport 23 -j ACCEPT
# iptables -L // 두개의 룰이 보인다.
# iptables -D INPUT 2 // 두번째 룰을 지운다
# iptables -F // 플러쉬 전체 지움
# iptables -A INPUT -s 192.168.10.30 -p tcp --dport 23 -j ACCEPT
# iptables -R INPUT 1 -s 192.168.10.30 -p tcp --dport 23 -j DROP // 교체
----------------------------------------------------------------------------------------------
사용자 체인 생성
----------------------------------------------------------------------------------------------
# iptables -Z INPUT
# iptables -N INTRANET // 사용자 정의 체인 생성
# iptables -E INTRANET EXTRANET // 체인명 변경
# iptables -I INPUT 2 -j EXTRANET // 사용자 체인을 기본 INPUT 체인에 연결
이때 주의할 점은 체인 삭제시에 체인 속에 룰이 포함되어 있다면 룰부터 제거 후 거꾸로 삭제해 나가야 한다.
# iptables -D INPUT # ( rule ofextranet)
# iptables -D EXTRANET # ( EXTRANET의 모든 룰 삭제)
# iptables -X EXTRANET // 체인 삭제
----------------------------------------------------------------------------------------------
접속 상태에 따른 패킷 필터링
----------------------------------------------------------------------------------------------
-m state -- state {NEW, ESTABLISHED, RELATED, INVALID]}
NEW : 새롭게 맺어진 경우
ESTABLISHED : 연결시도 후 server에서 응답하여 이미 연결 된상태
RELATED : 새롭게 연결을 시작하려 하나 이미 연결 추적 테이블에 접속과 관련 있는 항목이 있는 경우
즉 FTP같이 제어포트와 데이터 포트가 별도로 존재할때 , 접속해제와 데이터 포트가 다르다.
INVALID : 연결 상태 알 수 없거나 잘못된 헤더인 경우
----------------------------------------------------------------------------------------------
# iptables -A INPUT -s ! 192.168.10.20 -j DORP ' ! ' 를 제외한 모든것은 드랍
ICMP 설정
----------------------------------------------------------------------------------------------
# iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
# iptables -A OUTPUT -p icmp --icmp-type echo-reply -j DROP
icmp echo request , reply 응답 드랍
----------------------------------------------------------------------------------------------
multiple choice && MAC addre filtering
----------------------------------------------------------------------------------------------
iptables -A INPUT -s 192.168.1.1 -p tcp --dport 24 -j ACCEPT
iptables -A INPUT -s 192.168.1.1 -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -s 192.168.1.1 -p tcp --dport 26 -j ACCEPT
=>
# iptables -A INPUT -s x.x.x.x -p tcp -m multiport --dport 24,25,26 -j ACCEPT 로 할 수 있다.
-m mac --mac-source 00:00:00:00:00:00 ( mac address)로 추가 할 수 있다.
----------------------------------------------------------------------------------------------
LOG messages 남기기
----------------------------------------------------------------------------------------------
Firewall LOG는 /etc/syslog.conf 이용해서 위치를 재지정한다.
기본 값으로 /var/log/messgae 에 저장되게 되어 있다. 지정된 정보를
kern.* /var/log/firewall 로 수정후
log-prefix
--log-prefix "unknown port attemped..."
# service syslog restart
# ls /var/log
# cat /var/log/firewall
# iptables -I INPUT -p tcp -m multiport --dport 21,22,23,80 -j LOG
# iptables -I INPUT 2 -s 192.168.10.10 --dport 80 -j ACCEPT
# service httpd restart
# watch tail -3 /var/log/firewall
[ xp ]
웹으로 접속 시도 해볼것
[fedora]
# iptables -R INPUT 1 -p tcp -m multiport --dport 21.23.80 -j LOG --log-prefix "unknown host ATTACK me"
[xp]
다시 접속 시도 해볼것
후에 log file 보면 메시지가 출력 된것을 볼 수 있다.
- application + packet filtering 방식 혼합
- 사용자 편의성과 기업환경에 따른 유연성 있게 방화벽을 구성할 수 있지만 관리가 복잡하다.
설치 확인
[root@fedora ~]# cd /boot && ls -l
-rw-r--r-- 1 root root 64551 11월 12 2007 config-2.6.18-53.el5
[root@fedora boot]# vi config-2.6.18-53.el5 // config -2.~~~ 커널종류에따라 다르게 표시될것이다.
/NETFILTER
확인
CONFIG_NETFILTER=y ( m은 모듈 형태, y는 커널형태)
CONFIG_IP_NF_CONNTRACK=m (steteful과 같은것으로 상태 추적)
# service iptables status
Firewall is stopped.
# lsmod // 현재 모듈과 사이즈등을 보여준다.
// 정지 상태였기 때문에 iptables가 보여지지 않을것이다.
Netfileter는 리눅스 커널에 포함된 방화벽 프로그램이며 iptables는 방화벽 관리 프로그램이다.
netfilter 프로그램 (iptables)
3개의 기본 테이블로 구성된다. ( filter , nat, mangle)
각 테이블은 chain(패킷 이동통로)로 구성되며, 각 chain에 rule을 설정하게 된다.
mangle : 패킷 속성 변경
NAT : 사설 ip => 공인 ip
Filter : 패킷의 허용/차단, 패킷의 필터링(기본_)
룰테이블
Filter
INPUT - source 와 destination으로 따질때 destination이 나일때 S-> D로
OUTPUT - INPUT의 반대상황
FORWARD - 지나치는 ㅡㅡㅋ
NAT
POSTROUTING - 사설 - > 공인ip
PREROUTING - 외부에서 내부로 사설ip로 접속시
OUTPUT
mangle
ALL
# iptables -L -t filter
# iptables -L -t nat
# iptables -L -t mangle
-------------------------------------------------------------------------------------------------
[root@fedora boot]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:25:E1:23
inet addr:192.168.10.10 Bcast:192.168.10.255 Mask:255.255.255.0
에서 192.168.10.20의 텔넷 접속 차단할 시
layer 3에서
-s 192.168.10.20
# iptables -A INPUT -s 192.168.10.20 -j DORP
layer 4에서
-p tcp --dport 80 / -p udp --sport 123
# iptables -A INPUT -s 192.168.10.20 -p tcp --dport 23 -j REJECT
기본 테이블이 filter 라 생략 하면 -t filter가 되어있는것
-p 프로토콜 --ssport 출발지, --dport 목적지
-j 는 jump target처리할
DROP 패킷 버림
REJEXCT 접속 거부하면서 메시지 리턴
ACCEPT 통과
saving /restoring
백업
# rpm -ql iptables | less
# iptables-save > firewall.rule : 설정내용을 파일로 저장
복구
# iptables-restore < firewall.rule : 파일에서 설정정보로 업!
# cd /etc/sysconfig/
# cat iptables // 없을 수가 있는데 이때는 딴시스템? 에서 얻어오자 ex. centos에서 # scp iptables root@192.168.10.10
//이 파일은 iptables 서비스가 시작할때 읽어 오게 되는데 이것이 없으면 서비스 시작이 안된다.
# service iptables restart / stop / reload / start
iptables에 관련된 설정파일을 보자
iptables -F
service iptables restart 를 해보면 이전에 설정 작업 외에 iptables에 저장된 파일로 재수정 되는것을 볼 수 있다.
이를 피하기 위해서는 아래의 작업이 필요하다.
# vi /etc/sysconfig/iptables-config
룰 생성 / 삭제 / 교체
----------------------------------------------------------------------------------------------
# iptables -I INPUT -s 192.168.10.30 -j DROP / /기본적으로 최상위 추가됨
# iptables -A INPUT -s 192.168.10.30 -p tcp --dport 23 -j ACCEPT
# iptables -L // 두개의 룰이 보인다.
# iptables -D INPUT 2 // 두번째 룰을 지운다
# iptables -F // 플러쉬 전체 지움
# iptables -A INPUT -s 192.168.10.30 -p tcp --dport 23 -j ACCEPT
# iptables -R INPUT 1 -s 192.168.10.30 -p tcp --dport 23 -j DROP // 교체
----------------------------------------------------------------------------------------------
사용자 체인 생성
----------------------------------------------------------------------------------------------
# iptables -Z INPUT
# iptables -N INTRANET // 사용자 정의 체인 생성
# iptables -E INTRANET EXTRANET // 체인명 변경
# iptables -I INPUT 2 -j EXTRANET // 사용자 체인을 기본 INPUT 체인에 연결
이때 주의할 점은 체인 삭제시에 체인 속에 룰이 포함되어 있다면 룰부터 제거 후 거꾸로 삭제해 나가야 한다.
# iptables -D INPUT # ( rule ofextranet)
# iptables -D EXTRANET # ( EXTRANET의 모든 룰 삭제)
# iptables -X EXTRANET // 체인 삭제
----------------------------------------------------------------------------------------------
접속 상태에 따른 패킷 필터링
----------------------------------------------------------------------------------------------
-m state -- state {NEW, ESTABLISHED, RELATED, INVALID]}
NEW : 새롭게 맺어진 경우
ESTABLISHED : 연결시도 후 server에서 응답하여 이미 연결 된상태
RELATED : 새롭게 연결을 시작하려 하나 이미 연결 추적 테이블에 접속과 관련 있는 항목이 있는 경우
즉 FTP같이 제어포트와 데이터 포트가 별도로 존재할때 , 접속해제와 데이터 포트가 다르다.
INVALID : 연결 상태 알 수 없거나 잘못된 헤더인 경우
----------------------------------------------------------------------------------------------
# iptables -A INPUT -s ! 192.168.10.20 -j DORP ' ! ' 를 제외한 모든것은 드랍
ICMP 설정
----------------------------------------------------------------------------------------------
# iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
# iptables -A OUTPUT -p icmp --icmp-type echo-reply -j DROP
icmp echo request , reply 응답 드랍
----------------------------------------------------------------------------------------------
multiple choice && MAC addre filtering
----------------------------------------------------------------------------------------------
iptables -A INPUT -s 192.168.1.1 -p tcp --dport 24 -j ACCEPT
iptables -A INPUT -s 192.168.1.1 -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -s 192.168.1.1 -p tcp --dport 26 -j ACCEPT
=>
# iptables -A INPUT -s x.x.x.x -p tcp -m multiport --dport 24,25,26 -j ACCEPT 로 할 수 있다.
-m mac --mac-source 00:00:00:00:00:00 ( mac address)로 추가 할 수 있다.
----------------------------------------------------------------------------------------------
LOG messages 남기기
----------------------------------------------------------------------------------------------
Firewall LOG는 /etc/syslog.conf 이용해서 위치를 재지정한다.
기본 값으로 /var/log/messgae 에 저장되게 되어 있다. 지정된 정보를
kern.* /var/log/firewall 로 수정후
log-prefix
--log-prefix "unknown port attemped..."
# service syslog restart
# ls /var/log
# cat /var/log/firewall
# iptables -I INPUT -p tcp -m multiport --dport 21,22,23,80 -j LOG
# iptables -I INPUT 2 -s 192.168.10.10 --dport 80 -j ACCEPT
# service httpd restart
# watch tail -3 /var/log/firewall
[ xp ]
웹으로 접속 시도 해볼것
[fedora]
# iptables -R INPUT 1 -p tcp -m multiport --dport 21.23.80 -j LOG --log-prefix "unknown host ATTACK me"
[xp]
다시 접속 시도 해볼것
후에 log file 보면 메시지가 출력 된것을 볼 수 있다.