본문 바로가기

내가 하는일/시스템(서버)

리눅스 iptables 설정법

 

◇ 옵션 :

-A 체인에 새로운 규칙 추가
-D 체인의 어떤 지점의 규칙 삭제
-F 체인으로부터 모든 규칙 삭제
-L 어떤 체인의 규칙 보기

-I 체인의 어떤 지점에 규칙을 삽입

-i ( input interface, // i eth0 는 eth0로 들어오는 모든 패킷 )

-o ( output interface )

-R 체인의 어떤 지점의 규칙을 교환

-s 출발지 주소 ( 패킷 출처 IP 지정/도메인 또는 192.168.10.0/24 처럼 지정할수 있다 )
-d 목적지 주소 ( 패킷 도착지 IP 지정 )
--sport 출발지 포트 번호 제어
--dport 목적지 포트 번호 제어
-p 프로토콜 제어 ( p옵션의 인자는 TCP,UDP,ICMP 가 될수 있다 )
-j 규칙 설정

※ 참고

INPUT 은 패킷이 들어오는 체인에

DROP 은 패킷을 버리라는 뜻


iptables.sh라는 셀스크립트를 하나 생성하자.
--------------------------------------------------
#!/bin/sh

## iptables를 초기화
iptables -F

## 랜카드 사용을 모두 허용
iptables -A INPUT -p ALL -i eth0 -j ACCEPT
iptables -A OUTPUT -p ALL -o eth0 -j ACCEPT
iptables -A INPUT -p ALL -i eth1 -j ACCEPT
iptables -A OUTPUT -p ALL -o eth1 -j ACCEPT

예) iptables -A INPUT -p ALL -s 192.168.0.10 -j ACCEPT

(192.168.0.10번의 모든 네트웍을 허용)

iptables -A INPUT -p tcp --dport  21 -s 192.168.0.11 -j ACCEPT

(192.168.0.11 번의 21번포트만 허용)

iptables -A INPUT -p TCP --dport 21 -j DROP

(그외의 모든 21번 포트는 막음)

 

## TELNET 포트 막음
iptables -A INPUT -p TCP --dport 23 -s ip앞 세자리.0/24 -j ACCEPT
iptables -A INPUT -p TCP --dport 23 -s 192.168.0.0/24 -j ACCEPT
iptables -A INPUT -p TCP --dport 23 -j DROP

## FTP 포트 막음
iptables -A INPUT -p TCP --dport 21 -s ip앞 세자리.0/24 -j ACCEPT
iptables -A INPUT -p TCP --dport 21 -s 192.168.0.0/24 -j ACCEPT
iptables -A INPUT -p TCP --dport 21 -j DROP

## SSH 포트 막음
iptables -A INPUT -p TCP --dport 22 -s ip앞 세자리.0/24 -j ACCEPT
iptables -A INPUT -p TCP --dport 22 -s 192.168.0.0/24 -j ACCEPT
iptables -A INPUT -p TCP --dport 22 -j DROP
--------------------------------------------------------

 

 

service iptables save 

(iptables 를 저장)

iptables -L

(저장되어있는 방화벽 룰을 보여줌)

=================================================================

 추가적 내용.....


Iptables 하면서 팁은 위에서부터 아래로 적용 됨

 

방화벽 설정 파일 경로 

 #vi /etc/sysconfig/iptables

 

 

 

설정 파일 파악 

 -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited

-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT

 

아래 설명은 22번 포트를 제외한 모든 포트를 막는다

-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited


즉 3306 포트가 설정이 되어 있어도 위와 붉은색 글씨의 소스가 들어 있으면 3306포트가 

방화벽 상태가 됨.


재시작~!

 # /etc/init.d/iptables restart 명령을 사용하여 재시작 해준다.

 

 

##################  아래는 참고 ##############

 

# iptables 명령어(옵션) 간단한 설명

~]#vi /etc/sysconfig/iptables

~]#iptables -L :리스트보기

~]#iptables -P INPUT DROP : -P 기본정책, INPUT의 기본정책을 DROP으로 하겠다.

<v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f><o:lock aspectratio="t" v:ext="edit"></o:lock>

 

현재 FORWARD 기본정책은 ACCEPT

 

~]#iptables -A : -A 는 추가할떄

~]#iptables -I INPUT 3 : -I 는 원하는 라인에 추가, 3번쨰 라인에 추가한다는말임.

~]#iptables -A INPUT -p tcp : -p 는 프로토콜 정하기

~]#iptables -A INPUT -p tcp -s : -s 는 src ip

~]#iptables -A INPUT -p tcp -s 192.168.81.63 --dport 80: --dport 는 dst port

~]#iptables -A INPUT -p tcp -d 192.168.81.62: -d 는 dst ip

~]#iptabels -A INPUT -p tcp --sport 80: --sport 는 src port

~]#iptables -A INPUT -p tcp -dport 80 -j ACCEPT : -j 는 대응 방법(ACCEPT, DROP, REJECT 등),

*REJECT는 DOS 공격시 부하가 걸리므로 권장하지 않음

~]#iptables -A INPUT –m : -m은 man 페이지를 참조 하길..옵션이 너무 많아요..

 

#서비스 시작/정지/재시작/저장

*iptables 는 save 명령어를 쳐주지 않으면 시스템 재부팅 후 정책이 초기화 됩니다.

~]#service iptables start

~]#service iptables stop

~]#service iptables restart

~]#service iptables save

 

예제 참조는

http://team.boanin.com/

 

0. 기본정책을 ACCEPT로 설정

iptables -P INPUT ACCEPT

iptables -P OUTPUT ACCEPT

iptables -P FORWARD ACCEPT

 

1. 현재 자신의 방화벽 규칙을 볼 수 있는 명령

iptables -L

iptables --list

 

2. 21.23.25.80 포트를 차단하는 정책(각각 하나씩 규칙을 만들것)

iptables -A INPUT -p tcp --dport 21 -j DROP

iptables -A INPUT -p tcp --dport 23 -j DROP

iptables -A INPUT -p tcp --dport 25 -j DROP

iptables -A INPUT -p tcp --dport 80 -j DROP

 

iptables -A INPUT -p tcp -m multiport --destination-port 21,23,25,80 -j DROP

 

3.첫번쨰 정책을 삭제

iptabels -D INPUT 1

 

4. 세번째 정책의 출발지 IP를 192.168.1.0/24로 수정

iptables -R INPUT 3 -p tcp -s 192.168.1.0/24 --dport 80 -j DROP

 

5. 출발지 IP가 A클래스 사설 IP 일 경우 차단하는 정책

iptables -A INPUT -s 10.0.0.0./8 -j DROP

 

6. 출발지 IP 192.168.10.1 부터 192.168.10.100, 그리고 192.168.150.0/24이고 목적지IP 는 192.168.10.170이고 목적지 포트는 3306일 경우 차단하는 정책

 

iptables -A INPUT -p tcp -s 192.168.150.0/24 -d 192.168.10.170 --dport 3306 -j DROP

iptables -A INPUT -p tcp -m iprange --src-range 192.168.10.1-192.168.10.100 -d 192.168.10.170 --dport 3306 -j DROP

 

7. tcp 패킷이 초당 10개가 올경우 차단하는 정책(limit match 이용)

iptables -A INPUT -p tcp -m limit --limit 10/s -j DROP

 

8. 하나의 세션에서 10개의 패킷이 매치된 후 tcp 패킷이 분당 100개가 올 경우 차단하는 정책

iptables -A INPUT -p tcp -m limit --limit 100/m --limit-burst 10 -j DROP

 

9. 옆사람의 윈도우와 리눅스에서 SSH 접속을 차단하도록 설정, 윈도우에서 연결은DROP, 리눅스는 REJECT

iptables -A INPUT -p tcp -s 172.17.24.140 --dport 22 -j DROP

iptables -A INPUT -p tcp -s 172.17.24.170 --dport 22 -j REJECT --reject-with tcp-reset

 

10. ICMP 라는 체인을 생성

 -icmp 패킷이 들어올 경우 ICM 체인으로 전달

 -icmp 체인에 ping에 대한 응답하지 않는 정책 추가

 

iptables -N ICMP

iptables -A INPUT -p icmp -j ICMP

iptables -A ICMP -p icmp --icmp-type 8 -j DROP

 

11. 기본정책을 DROP으로 설정

iptables -P INPUT DROP

iptables -P OUTPUT DROP

iptables -P FORWARD DROP

 본인의 윈도우에서 ssh연결이 되도록 설정하고 이미 연결된 상태나 연광성이 있는 연결은 별도의 정책 대신 state 매치를 이용하여 계쏙 사용할수 있도록 설정

iptables -I INPUT -m state --state ESTABLISHED, RELATED -j ACCEPT

iptables -A INPUT -p tcp -s 172.17.24.130 --dport 22 -j ACCEPT

 

12. TCP FLAG 중 전체를 보고 그 중 SYN 과 FIN이 있을 경우 차단하는 정책

iptables -A INPUT -p tcp --tcp-flags ALL SYN,FIN -j DROP

 

13. TCP FLAG 중 전체를 보고 그 중 PSH 과 FIN이 있을 경우 차단하는 정책

iptables -A INPUT -p tcp --tcp-flags ALL FIN,FIN -j DROP





#########################################################


#특정  IP의 차단을 해제하려면

iptables -D INPUT -s 172.18.45.200 -j DROP   을 실행하시면 됩니다

or

iptables파일에 아래추가

-A INPUT -s 172.18.45.200 -j DROP



iptables -A INPUT -s 172.18.45.200 -j ACCEPT



# 허용할 IP

iptables -A -i eth0 -s 172.18.0.0/16 -j ACCEPT


# 나머지 모든 것을 막음.

iptables -A INPUT -j REJECT




-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp -s 172.18.0.0/24 -j ACCEPT



-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -s 172.18.0.0/24 -j ACCEPT



적용

service iptables save


iptables -D INPUT -s 172.18.0.0/24 -j DROP




# 허용할 IP

iptables -A -i eth0 -s 192.168.0.1 -j ACCEPT

iptables -A -i eth0 -s 192.168.0.2 -j ACCEPT

...

iptables -A -i eth0 -s 192.168.0.10 -j ACCEPT


# 나머지 모든 것을 막음.

iptables -A INPUT -j REJECT





172.18로 시작하는 사설 네트웍 전체를 허용하려면


일일이 IP 주소를 적어줄 필요없이 다음과 같이 간단하게 할 수도 있습니다.


# 허용할 IP

iptables -A -i eth0 -s 172.18.0.0/16 -j ACCEPT


# 나머지 모든 것을 막음.

iptables -A INPUT -j REJECT