정리중…
vi 로 /etc/sysconfig/iptables 를 수정해도 된다. 하지만 좋은 방법인지는 모르겠다.
iptables 현재 상태 확인
iptables -S
-S
는 specification 을 뜻한다.iptables -S
를 하면 어떤 식으로 iptables 이 설정됐는지 보인다. $ iptables -S -P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -A INPUT -s 127.0.0.1/32 -p tcp -m tcp --dport 22 -j DROP -A INPUT -s 127.0.0.1/32 -p tcp -m tcp --dport 21 -j DROP -A INPUT -i eth1 -j ACCEPT -A INPUT -i tun0 -j ACCEPT -A INPUT -s 192.168.21.1/32 -j ACCEPT -A INPUT -s 127.0.0.1/32 -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -s 127.0.0.1/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A INPUT -s 203.133.167.16/24 -j ACCEPT
iptables -L -n --line-numbers
아래처럼 간략하게 볼 수 있다. $ iptables -L -n --line-numbers Chain INPUT (policy ACCEPT) num target prot opt source destination 1 DROP tcp -- 127.0.0.1 0.0.0.0/0 tcp dpt:22 2 DROP tcp -- 127.0.0.1 0.0.0.0/0 tcp dpt:21 3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 4 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 5 ACCEPT all -- 203.133.167.16/24 0.0.0.0/0 27 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 Chain FORWARD (policy ACCEPT) num target prot opt source destination Chain OUTPUT (policy ACCEPT) num target prot opt source destination
-P 옵션
iptables -P INPUT ACCEPT
INPUT
, FORWARD
, OUTPUT
등 의 built-in chain 만이 가능하다. 자세한 것은 ref.1 을 보자. -A 옵션
append 이다. 현재 있는 rule 들 뒤에 추가(append) 하는 것이다.-A INPUT
하면 INPUT chain 에 append 하는 것이다. # INPUT chain 에 다음 rule 을 append 해라 - interface eth1 을 ACCEPT 로 jump 해라.
iptables -A INPUT -i eth1 -j ACCEPT
-j 옵션
jum 를 뜻한다. 정해놓은 rule 에 대해 target(ACCEPT
, DROP
) 을 정해준다. “target 으로 jump 해라.” 정도로 기억하면 된다. iptables -A INPUT -s 192.168.21.1/32 -j ACCEPT
-D 옵션
특정 rule 을 지울 때 사용한다.# INPUT chain 에 있는 녀석을 지워라 - 10 번째 있는 rule
iptables -D INPUT 10
-I 옵션
rule 들이 정해진 순서대로 적용된다. 그래서 먼저 적용돼야 하는 것들은 위쪽에 넣어야 한다.# INPUT 1 위치에 다음 rule을 insert 한다. - protocol 이 tcp 이고 port 가 80 인 녀석을 ACCEPT 로 jump 한다. iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT
DB 연결관련 iptable 설정
db 연결에 있어서 iptables 를 사용할 때 만약 아래와 같은 경우라면, 그냥 MySQL 의 inbound 만 열어주면 된다. (?)Apache ---> MySQL
- 모든 OUTPUT 은 열고,
- INPUT 에서 DB쪽은 server 의 ipaddress 를 추가
- INPUT 에서 server 쪽은 DB 의 ipaddress 를 추가
참고 예제
아래는 ref. 4 에서 가져온 내용이다. 참고하자.#!/bin/bash # setup basic chains and allow all or we might get locked out while the rules are running... iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT # clear rules iptables -F # allow HTTP inbound and replies iptables -A INPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT # allow HTTPS inbound and replies iptables -A INPUT -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT # limit ssh connects to 10 every 10 seconds # change the port 22 if ssh is listening on a different port (which it should be) # in the instance's AWS Security Group, you should limit SSH access to just your IP # however, this will severely impede a password crack attempt should the SG rule be misconfigured iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 10 --hitcount 10 -j DROP # allow SSH inbound and replies # change the port 22 if ssh is listening on a different port (which it should be) iptables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT # root can initiate HTTP outbound (for yum) iptables -A OUTPUT -p tcp --dport 80 -m owner --uid-owner root -m state --state NEW,ESTABLISHED -j ACCEPT # anyone can receive replies (ok since connections can't be initiated) iptables -A INPUT -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT # root can do DNS searches (if your Subnet is 10.0.0.0/24 AWS DNS seems to be on 10.0.0.2) # if your subnet is different, change 10.0.0.2 to your value (eg a 172.31.1.0/24 Subnet would be 172.31.1.2) # see http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-dns.html # DNS = start subnet range "plus two" iptables -A OUTPUT -p udp --dport 53 -m owner --uid-owner root -d 10.0.0.2/32 -j ACCEPT iptables -A INPUT -p udp --sport 53 -s 10.0.0.2/32 -j ACCEPT # apache user can talk to rds server on 10.0.0.200:3306 iptables -A OUTPUT -p tcp --dport 3306 -m owner --uid-owner apache -d 10.0.0.200 -j ACCEPT iptables -A INPUT -p tcp --sport 3306 -s 10.0.0.200 -j ACCEPT # now drop everything else iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT DROP # save config /sbin/service iptables save
See Aslo
- linux - Using iptables to redirect traffic to a dynamic DNS name instead of an IP address? - Super User : iptables 에서 DNS 설정이 안되는 이유
댓글 없음:
댓글 쓰기