사용자단에 서버가 들어가서 서버쪽 iptables구성을 하고 있는데
제가 알고있는 부분과 많이 달라 어려움을 겪고 있습니다.
INPUT체인만 작업생각하고 있고
OUTPUT ,FORWARD는 건드리지 않았습니다.
iptables -A INPUT -p tcp -d 192.168.1.10 --dport 11 -j ACCEPT
iptables -A INPUT -p tcp -d 192.168.1.10 --dport 12 -j ACCEPT
iptables -A INPUT -p tcp -d 192.168.1.10 --dport 13 -j ACCEPT
iptables -A INPUT -p tcp -d 192.168.1.10 --dport 14 -j ACCEPT
iptables -A INPUT -p tcp -d 192.168.1.10 --dport 15 -j ACCEPT
iptables -A INPUT -p tcp -d 192.168.1.10 --dport 16 -j ACCEPT
iptables -A INPUT -p tcp -d 192.168.1.10 --dport 17 -j ACCEPT
iptables -A INPUT -p tcp -d 192.168.1.10 --dport 18 -j ACCEPT
iptables -A INPUT -p tcp -d 192.168.0.10 --dport 19 -j ACCEPT
위와같은식으로 허용해줄 목적지와 목적지포트를 지정한 후에
그외에 것들은 모두 차단하기위해 INPUT정책을 DROP으로 바꾸려고 하면 로컬단에서도 서버가 느려지는데
설정을 더 넣어야하는것이 있는지 도무지 모르겠습니다.
개인 가상화에서 실험을 해봐도 기본정책을 DROP이나 REJECT로 수정하니 로컬단에서 느려지네요...
무슨 문제가 있는지 해결책아시는분 고견좀 부탁드립니다.
포트와 IP는 실제 설정과 다른 임의로 아무거나 집어넣었습니다.
그리고 룰과 체인은 각각 몇 개씩 있나요?
INPUT, OUTPUT FORWARD
INPUT으로 들어오는것만 설정하려고 해서 OUTPUT과 FORWARD는 기본값이고
INPUT에 룰이 11개 들어가있습니다.
느려진다는것이 INPUT의 기본정책을 DROP으로 바꾸고나면 명령어 사용시 출력이 느려지고 전체적인 반응이 느려집니다.
ssh접속이 갑자기 끊기기도 합니다.
ssh접속관련 INPUT 설정은 맨 윗줄에 해놓았기 때문에 끊어질 이유가 없을텐데 이유를 모르겠습니다
INPUT정책은 다 ACCEPT설정만 있고 REJECT나 DROP설정은 없고
INPUT 기본정책을 DROP으로 하여 나머지 서비스를 막을 생각인데
INPUT 기본정책을 DROP으로 바꾸면 위에 말씀드린 증상이 나타납니다.
염치없지만 해당룰의 옵션 설명 부탁드려도 될까요??
위 룰을 iptables INPUT 필수 룰로 기억하고 있어야 되겠습니다.ㅎㅎ
감사합니다.
iptables은 상태추적 기능이있어 INPUT으로 들어온 패킷들은 검사없이 나가는걸로 알고 있습니다.
그래서 OUTPUT은 신경쓰지 않은건데 잘못알고 있다면
고견 부탁드립니다
서버입장에서 봤을 때 (iptables rule 상으로) 보통은 src IP (클라이언트 IP)와 dst PORT (서버쪽) 을 설정하는데 설명 주신 부분에서는 dst ip + dst port 으로 주셔서 깜짝놀랐네요.
inbound 트래픽으로 본다면, 여러 회원분들이 말씀하신거처럼 stateful match 을 INPUT 체인의 최상단 정책으로 넣어주시면 됩니다.
(보통 conntrack 모듈은 기본 로딩하기 때문에... 생략하고)
# Allow ESTABLISHED, RELATED state
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# DROP INVALID packet
-A INPUT -m state --state INVALID -j DROP
다만, stateful match 의 경우에는 conntrack table 에 해당 패킷 flow 를 마킹하기 때문에 아주 대량의 트래픽이 흐른다면 (테이블 조정의 범위를 넘어설 정도)
ipset 을 써서 address group 을 따로 관리하시던가, 아니면 NOTRACK 으로 설정하여 connection track 을 포기하셔야 합니다.
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
위 세 줄은 INPUT 체인 맨 위에 써주세요
첫 번째줄: 내가 요청한(나한테서 밖으로 나간) 요청은 통과
두 번째줄: 내가 나한테 보내는 통신은 통과(루프백 장치)
세 번째줄: 상태가 INVALID인 패킷은 드랍