#lokkit
#iptables -Z
패킷의 용량을 초기화 시킨다 (모든 패킷 0 )
룰셋팅을 했을때 모니터링 할때 사용한다
#iptables -N (chain 을 만든다)
-X (추가된 chain을 삭제 )
-E (chain명을 change 사용자 정의)
#iptables -X RH-Firewall-1-INPUT
(사용자 정의 Chain 삭제)
#iptables -nL (삭제 되었는지 확인)
새로운 chain 생성
#iptables -N TESTCHAIN
#iptables -nL
생성된 Chain 이름 변경
#iptables -E 예전chain명 새로운chain명
#iptables -E TESTCHAIN SSHD
#iptables -nL
새로운 chain을 만드는것은 관리를 쉽게 하기 위해서 만드는 것이다
rule이 많을 경우 관리하기가 어렵기 때문이다
서비스별로 분리를 하면 관리가 쉽다
사용자 저의 chain 은 policy 가 안되며 references가 적용
가정 >
rule을 적용을 했을경우 하나도 매칭이 되지 않을 경우
최종적으로 rule 이 하나가 시작된다
최종 rule (기본정책:policy)
1. 윈xp에서 serv로 접속 ssh
2. serv에서 셋팅 (사용자 정의 SSHD)
#iptables -t filter -A SSHD -s 192.168.37.1 -j DROP
기본적으로 명령어를 보면 접속이 되지 않겠다고 생각하겠지만
사용자 정의는 그 자체만으로는 적용이 되지 않는다
기본 chain하고 링크가 걸어져야만 적용이 된다
#iptables -t filter -I INPUT -j SSHD (링크를건다)
이제 링크가 걸려서 xp에서 serv는 접속이 되지 않는다
#iptables -vL
#iptables -X SSHD (링크가 걸려서 삭제가 되지 않는다)(
#iptables -t filter -D INPUT 1
#iptables -X SSHD (삭제확인 : 되지 않는다 chain안에 룰)
#iptables -F SSHD (SSHD에 들어있는 모든 rule을 삭제할때 사용)
#iptables -X SSHD ( SSHD 사용자 정의 chain 이 삭제 된다)
#iptables -L
iptables -P (기본 디폴트값 정책을 바꾼다 ACCEPT를 다른것으로)
기본 정책으로 보통 다 아래와 같이 설정해 둔다
이렇게 설정해 둘 경우 필요한 서비스만 ACCEPT 하여 보완성 안전하게
구성할 수 있다
#iptables -P INPUT DROP (모든 들어오는 패킷 DROP)
#iptables -P FORWARD DROP (개인 방화벽이므로 포워드 DROP)
#iptables -P OUTPUT ACCEPT (설정 or 기본값 나가는거...)
위와같이 설정할 경우 몇가지 문제점이 있다.,(다른 컴과 통신 두절)
#ping 192.168.37.20 (핑 가지 않는다)
#yum -y install telnet-server (다운로드 되지 않는다)
위와 같이 하는것은 핑이 다시 되돌아 올때 INPUT으로 들어오는 패킷을
DROP하기 때문이다
위의 것이 1세대 방화벽 방식이다.
이 모든것을 해결하기 위해서 상태 추적 테이블을 이용한다
======================상태 추적 테이블====================
현재 연결상태의 상태정보를 이용하여 패킷의 drop/allow 여부를
결정한다면 많은 검사를 생략하여 방화벽의 속도를 획기적으로
향상이 가능하다.
명령어
# -m stat -state{NEW,ESTABLISHED,RELATED,INVLALID}
-NEW : 새로운 연결을 시작하거나 이전에 사용한 상태추적
테이블에 정보가 없을때 (사용안한다)
-ESTABLISHED : 정상적으로 연결이 형성된 경우
(ACK 패킷이 정상적으로 처리된 경우)
-RELATED : FTP 서비스와 같이 제어포트와 데이터포트가 별도로
존재할때 데이터를 전송하기 위해서는 제어포트를 통해
데이터 포트의 연결을 시도한다
이때 사용되는 연결 상태를 의미한다
-INVALID : 연결상태를 알 수 없거나 잘못된 접속 요청을 할때
정상적으로 접속을 할려면 -ESTABLISHED 나 RELATED 또는 INVLALID
<SERV 에서 정상적으로 이제 방화벽을 구동 (위 문제점을 해결) >
#iptables -t filter -I INPUT -m state --state
ESTABLISHED,RELATED -j ACCEPT
#ping 192.168.37.20 (이제 핑이 제대로 간다)
#cat /proc/net/ip_conntrack
상태추적테이블은 메모리에 만들어 진다.
이것은 항상 유지가 되는 것이 아니라 시간이 경과 후 사라진다.
Rule Matching
#ssh root@localhost
자기 자신이 ssh서버에 접속이 되지 않는다
-i lo -j ACCEPT : 루프백에 들어오는 패킷 허용
-o eth0 -j DROP : eth0에 들오는 패킷 DROP
#iptables -t filter -A INPUT -i lo -j ACCEPT
위 명령어는 loopbak 의 패킷을 허용한다는 것이다.
#ssh root@localhost (접속이 이제는 된다)
-negation (부정문)
부정표시 ! 표시 (아이피 앞 또는 port번호 앞)
-TCP MATCHES
-p tcp, --protocal tcp
--sport , --source-port
--dport , --destinatioon-port
port
UDP
TFTP : 69
NTP : 123
SYSLOG : 514
DHCP : 67.68
<SERV>
#iptable -F
#vi /var/www/html/index.html
<html>
<body bgcolor=green>
<h1>Host Firewall</h1>
</body>
</html>
#vi /etc/xinetd.d/telnet
disable = no 수정
#service httpd start
#service vsftpd start
#service xinetd restart
#netstat -ntlp 명령으로 open port 확인
퀴즈> serv 컴에는 많은 서비스가 동작중이다 이러한 서비스중 xp에게는
web서비스만 접속을 허용하고, work컴에게는 ssh.telnet 서비스만
허용 할 수 있도록 serv 컴의 방화벽을 셋팅하세요
(단 위에서 언급되지 않는 서비스의 접속은 모두 차단)
-t filter (입력안해도 된다 미 입력시 기본으로 된다)
#iptable -P INPUT DROP
#iptables -I INPUT -m state --state ESTABLISHED,RELATED -j
ACCEPT
#iptables -A INPUT -s 192.168.37.1 -p tcp --dport 80 -j ACCEPT
#iptables -A INPUT -s 192.168.37.20 -p tcp --dport 22 -j ACCEPT
#iptables -A INPUT -s 192.168.37.20 -p tcp --dport 23 -j ACCEPT
입력후 제대로 동작이 되는지 확인...