VPSサーバー借りた後のiptables設定

### 前提環境
・サーバーにcentOS6がインストールされている。


### サーバーにログイン

```
ssh hoge@your_ip_address
```

### 現時点のiptablesの設定を確認

```
iptalbes -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
```
何も設定されていない状態。

### サーバーへの攻撃対策
コマンドラインに以下を打ち込んでいきます。
#### データを持っていないパケットの接続を破棄

```
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
```

#### SYNflood攻撃と思われる接続を破棄する。

```
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
``` 

##### SYNflood攻撃とは。。。
Dos攻撃の一種で、大量のSYNパケットをターゲットに対して送りつけることでサービス不能状態にする攻撃

#### ステルススキャンと思われる接続を破棄

```
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
```

##### ステルススキャン攻撃とは。。。
ログを残すことなく相手のサーバーのポートの開放状態を確認する行為

#### localhostとpingの通信を許可する。

```
iptables -A INPUT -i lo -j ACCEPT 
iptables -A INPUT -p icmp -j ACCEPT
```

#### サーバーの用途に合わせてポートを許可する。

```
iptables -A INPUT -p tcp -m tcp --dport ポート番号 -j ACCEPT
```

|プロトコル|ポート番号|
|---|---|
|HTTP|80|
|HTTP(SSL)|443|
|SMTP|25|
|SMTP(SSL)|465|
|POP3|110|
|POP3(SSL)|995|
|IMAP|143|
|IMAP(SSL)|993|
|SSH|22|

#### 確立済みの通信を許可

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

#### 許可した通信以外のサーバーが受診するパケットを拒否しつつ、サーバーから送信するパケットは許可する。

```
iptables -P INPUT DROP 
iptables -P OUTPUT ACCEPT
```

#### 今まで設定してきたものを反映

```
service iptables save
```

#### iptablesの設定ファイルを確認

```
cat /etc/sysconfig/iptables
```

```
# Generated by iptables-save v1.4.7 on Mon Jun 13 22:03:24 2016
*filter
:INPUT DROP [1:32]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [16:1640]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
-A INPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
COMMIT
# Completed on Mon Jun 13 22:03:24 2016
```

#### iptalbesの設定を確認

```
iptables -L
```

```
Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
DROP       tcp  --  anywhere             anywhere            tcp flags:FIN,SYN,RST,PSH,ACK,URG/NONE
DROP       tcp  --  anywhere             anywhere            tcp flags:!FIN,SYN,RST,ACK/SYN state NEW
DROP       tcp  --  anywhere             anywhere            tcp flags:FIN,SYN,RST,PSH,ACK,URG/FIN,SYN,RST,PSH,ACK,URG
ACCEPT     all  --  anywhere             anywhere
ACCEPT     icmp --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:http
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:https
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
```

DONE