iptablesはパケットフィルタリング型のファイアウォールで、サーバー接続時の通信ルールを設定できます。
簡単に説明すると「使用する入り口は開けて」「使用しない入り口は閉じる」ということです。
それでは簡易的な設定を紹介します。
iptablesの確認
iptables -Lで現在のルールを確認します。以下の表示は何も設定されていない状態です。
[hoge@wwwXXXXXX ~]$ sudo 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
ルールの設定
サーバー攻撃対策のルール
sudo iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP sudo iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP sudo iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
上から順に以下の設定をしています。
- データを持たないパケットの接続を破棄する
- SYNflood攻撃と思われる接続を破棄する
- ステルススキャンと思われる接続を破棄する
各種プロトコルごとにポート番号の設定
sudo iptables -A INPUT -p tcp -m tcp --dport (ポート番号) -j ACCEPT
主なポート番号(使わないポートは開けないようにしましょう)
プロトコル | ポート番号 |
---|---|
HTTP | 80 |
HTTPS(SSL) | 443 |
SMTP | 25 |
SMTP(SSL) | 465 |
POP3 | 110 |
POPS(SSL) | 995 |
IMAP | 143 |
IMAP(SSL) | 993 |
SSH | 22 |
FTP | 20,21 |
通信の許可
sudo iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
通信の拒否
許可した通信以外のサーバーに受信するパケットを拒否、サーバーから送信するパケットを許可します。
sudo iptables -P INPUT DROP sudo iptables -P OUTPUT ACCEPT
設定の保存
sudo service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
設定ファイルの確認
sudo cat /etc/sysconfig/iptablesとsudo iptables -Lで、設定内容が反映されている確認します。
sudo cat /etc/sysconfig/iptables [sudo] password for XXX: # Generated by iptables-save v1.4.7 on Fri Sep 2 17:52:56 2016 *filter :INPUT DROP [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [4:464] -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 -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 -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT -A INPUT -p tcp -m tcp --dport 465 -j ACCEPT -A INPUT -p tcp -m tcp --dport 110 -j ACCEPT -A INPUT -p tcp -m tcp --dport 995 -j ACCEPT -A INPUT -p tcp -m tcp --dport 143 -j ACCEPT -A INPUT -p tcp -m tcp --dport 993 -j ACCEPT COMMIT # Completed on Fri Sep 2 17:52:56 2016
$ sudo 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 tcp -- anywhere anywhere tcp dpt:http ACCEPT tcp -- anywhere anywhere tcp dpt:https ACCEPT tcp -- anywhere anywhere tcp dpt:ssh ACCEPT tcp -- anywhere anywhere tcp dpt:smtp ACCEPT tcp -- anywhere anywhere tcp dpt:urd ACCEPT tcp -- anywhere anywhere tcp dpt:pop3 ACCEPT tcp -- anywhere anywhere tcp dpt:pop3s ACCEPT tcp -- anywhere anywhere tcp dpt:imap ACCEPT tcp -- anywhere anywhere tcp dpt:imaps Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
以上で設定完了です。