2009. 4. 3.

방화벽 스크립트 사용하기

FD 코리아에서는 외부 방화벽 이외에 OS내에 iptables 가 동작하도록 스크립트를 기본적으로 제공해 드리고 있습니다.
방화벽 스크립트의 위치는 /etc/rc.d/ 디렉토리입니다.

[root@server21010910231 root]# cd /etc/rc.d/
[root@server21010910231 rc.d]# ls
init.d rc rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d rc.firewall rc.local rc.sysinit
[root@server21010910231 rc.d]#

/etc/rc.d/ 디렉토리 안에서 보시면 rc.firewall 파일을 확인 하실 수 있습니다. rc.firewall 스크립트는 부팅시 자동으로 동작 하도록 아래와 같은 내용이 /etc/rc.local 파일에 등록 되어 있습니다.

if [ -e /etc/rc.d/rc.firewall ];then
sh /etc/rc.d/rc.firewall
fi

스크립트 상에서는 기본적으로 20, 21, 22, 25, 53, 80, 110, 143, 443, 953, 3306 포트가 열려 있으며, 나머지 포트는 막혀 있습니다. rc.firewall 스크립트상에서 아래 부분이 해당 포트들을 허용하도록 설정 한 부분입니다.

$IPTABLES -A INPUT -p tcp --dport 20:22 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 110 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 143 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 953 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT

열려포트를 막기를 원하신다면, 해당 포트에 대한 라인을 삭제하시거나 주석(#) 처리 하시면 됩니다.
그리고 특정 아이피 주소에서만 포트 접속이 가능하게 설정을 하시려면 해당 라인에 --source 아이피를 입력하시면 됩니다. 아래의 예는 210.109.102.31번의 아이피 에서만 ssh(22번 포트)로 접속 할수 있게 수정 한 것입니다.

$IPTABLES -A INPUT -p tcp --source 210.109.102.31 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

추가로 다른 포트를 허용하려면, 위와 같은 라인에 허용할 포트에 대한 스크립트 한줄만 추가 하면 됩니다. 아래 스크립트는 8080포트 허용을 위한 스크립트 입니다.
$IPTABLES -A INPUT -p tcp --dport 8080 -m state --state NEW,ESTABLISHED -j ACCEPT

스크립트 수정이 완료되셨다면, /etc/rc.d/rc.firewall 명령을 실행 시키시면 iptables 룰셋이 적용되게 됩니다.
적용된 룰셋을 확인 하시려면 아래와 같이 iptables -L 명령으로 확인 하실수 있습니다.

[root@server21010910231 rc.d]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
DROP all -- anywhere anywhere state INVALID
ACCEPT tcp -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere tcp dpts:ftp-data:ssh state NEW,ESTABLISHED
ACCEPT tcp -- anywhere anywhere tcp dpt:smtp state NEW,ESTABLISHED
ACCEPT tcp -- anywhere anywhere tcp dpt:domain state NEW,ESTABLISHED
ACCEPT tcp -- anywhere anywhere tcp dpt:http state NEW,ESTABLISHED
ACCEPT tcp -- anywhere anywhere tcp dpt:pop3 state NEW,ESTABLISHED
ACCEPT tcp -- anywhere anywhere tcp dpt:imap state NEW,ESTABLISHED
ACCEPT tcp -- anywhere anywhere tcp dpt:https state NEW,ESTABLISHED
ACCEPT tcp -- anywhere anywhere tcp dpt:rndc state NEW,ESTABLISHED
ACCEPT tcp -- anywhere anywhere tcp dpt:mysql state NEW,ESTABLISHED
DROP tcp -- anywhere anywhere

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
DROP all -- anywhere anywhere state INVALID
DROP tcp -- anywhere anywhere tcp dpts:6666:ircd
[root@server21010910231 rc.d]#

그리고 아래와 같이 iptables -F 명령을 입력하시면 적용된 룰셋이 삭제 되며, 이경우 서버를 재부팅 하거나, /etc/rc.d/rc.firewall 명령을 재실행 하기 전까지 룰셋이 적용되지 않게 됩니다.

[root@server21010910231 rc.d]# iptables -F
[root@server21010910231 rc.d]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@server21010910231 rc.d]#

댓글 없음: