見出し画像

LinuC LV2資格学習97日目

本:LinuC レベル2

公式資料

残るは202、合格に向けてがんばります。

ip6tablesコマンド

IPv6のiptablesコマンドは、そのまんまip6tablesになります。

入力するIPアドレスの値がIPv6になるだけで設定方法についてiptablesを同じになります。

sudo ip6tables -L

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all      anywhere             anywhere             ctstate RELATED,ESTABLISHED
ACCEPT     all      anywhere             anywhere            
INPUT_direct  all      anywhere             anywhere            
INPUT_ZONES_SOURCE  all      anywhere             anywhere            
INPUT_ZONES  all      anywhere             anywhere            
DROP       all      anywhere             anywhere             ctstate INVALID
REJECT     all      anywhere             anywhere             reject-with icmp6-adm-prohibited

#以下省略

設定や設定値の保存方法についても同じです。

ip6tables設定方法

service ip6tables save

もしくは以下のようのにファイルに直接書き出します。

ip6tables-save > /etc/sysconfig/ip6tables

Ubuntuの場合は、保存先のファイルが/etc/iptables/rules.v6」になります。

ルーターの構成

Linuxホストは、ルーターとしても利用できます。その場合Linuxに適切なルーティングテーブルを設定して、パケット転送が処理されるように設定する必要があります。

すでに201で学んでいますがルーティングテーブルの確認コマンドは、routeコマンド、ip routeコマンド、netstat -rコマンドになります。

ルーティングテーブルのエントリには、動的経路と静的経路があります。

静的経路は、routeコマンドを使って明示的に設定された経路になります。

動的経路は、ルーター同士が情報を交換して自律的に構成された経路になります。

動的経路を構成するプロトコルとしてRIP(Routing Information Protocol)やRIPv2、BGP(BOrder Gateway Protocol)、OSPF(Open Shortest Path First)などがあります。

LinuxのルーティングソフトウェアとしQuaggaやFRRoutingなどがあります。ただ静的ルーティングのみであればiptablesのみでルーターとして設定できます。

パケット転送

Linuxをルーターとして利用する場合は、異なるネットワーク間同士でのパケットのやりとりができる用にならなくてはなりません。

よってLinuxにパケットの転送を許可する必要があります。この設定についもすでに201で簡単に触れていますがあたらめて確認しましょう。

IPv4で転送を行いたい場合は、[/proc/sys/net/ipv4/ip_forward]にipv6であれば[/proc/sys/net/ipv6/ip_forward]に1を書き込みます。しかしこの設定の場合は、システム再起動後に消えるので永続的に設定したい場合は、「/etc/sysctl.conf」ファイルに適切な値を記載するか、RedHat系であれば「/etc/sysconfg/network」ファイルに[FORWARD_IPv4=yes],[FORWARD_IPv6=yes]と記述してください。

IPマスカーレード

ネットワークインターフェースが2つあるLinuxホストをゲートウェイとして作動させる場合、WAN側のグローバルIPとLAN側のホストが利用するIPアドレスを変換しなくてはなりません。この機能はIPマスカーレードと言います。

iptablesコマンドを使ってIPマスカレード設定のコマンド例です。

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

WINのIPアドレスが固定の場合は、MASQUEREADEではなくSNATが推奨とのことです。

WANIPが10.46.7.20でLANが192.168.1.0/24の場合のコマンド例です。

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT 10.46.7.20 

firewalld

RedHat系のOSで採用されているファイヤーウォールの仕組みとしてfirewalldがあります。

firewalldはゾーンという概念で、パケットフィルタリングのルールをゾーンごとにもちネットワークの信頼を抽象化して管理出来ます。

デフォルトで9つのゾーンが定義されています(RedHat7系)。

ゾーン:説明
public:インターネット上への公開(デフォルト)
dmz:dmz用
work:社内LANにあるクライアントPC
home:家庭内のLANにあるクライアントPC
internal:内部ネットワーク用
external:外部ネットワーク用
block::受信パケットの拒否
drop:受信パケットの破棄
trusted:通信許可

firewalldは、systemdコマンドにより管理されています。

susyemctl start firewalld

firewalldでは、ゾーンに対してパケットフィルタリングのルールを設定しそこにネットワークインターフェースを所属させる形になります。

設定に使用するコマンドは、firewall-cmdコマンドになります。

firewall-cmd オプション [--zone=ゾーン名

コマンドオプション

オプション名:説明
--state:firewalldの状態表示
--reload:設定の再読み込み
--permanent:永続設定
--get-zone:定義されているゾーン一覧の表示
--get-service::定義されているサービスの一覧
--list-all:指定したゾーンで有効な項目の一覧
--list-services:指定したゾーンで有効なサービス一覧
--add-service=サービス名:指定したサービスを許可する
--add-port=ポート番号/tcp.udp:指定したポート番号を許可する
--remove-service=サービス名:指定したサービスを拒否する
--remove-port=ポート番号/tcp.udp:指定したポート番号を拒否する
--zone=ゾーン:ゾーンを指定

ゾーンの一覧を表示してみます。

sudo firewall-cmd --get-zones

block dmz drop external home internal public trusted work

次に有効なサービスの一覧を確認します。firewall-cmdコマンドで--zoneオプションを付けずにコマンドを実行するとゾーンの指定はデフォルトのゾーン「public」となります。

sudo firewall-cmd --list-services

dhcpv6-client

DHCPv6のクライアントだけが有効なようです(私の環境ではpublicゾーンのSSHを無効にしていますが初期設定だろSSHは許可状態です)。

次にWebサーバーのアクセスポートを許可してみます。サービス名はhttpになります。

sudo firewall-cmd --add-service=http

success

サービスを確認します。

sudo firewall-cmd --list-services

dhcpv6-client http

httpが追加されました。ではこれを無効にします。

sudo firewall-cmd --remove-service=http

success

サービスを確認すると消えています。

 sudo firewall-cmd --list-services
 
dhcpv6-client

なおサービスで使うサービス名は、事前に定義しておく必要があります。現在定義済みのサービスの一覧は、次のコマンドで確認可能です。

sudo firewall-cmd --get-services

RH-Satellite-6 RH-Satellite-6-capsule amanda-client amanda-k5-client amqp amqps apcupsd audit bacula bacula-client bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client distcc dns docker-registry docker-swarm dropbox-lansync elasticsearch etcd-client etcd-server finger freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master git gre high-availability http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target isns jenkins kadmin kerberos kibana klogin kpasswd kprop kshell ldap ldaps libvirt libvirt-tls lightning-network llmnr managesieve matrix mdns minidlna mongodb mosh mountd mqtt mqtt-tls ms-wbt mssql murmur mysql nfs nfs3 nmea-0183 nrpe ntp nut openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole plex pmcd pmproxy 
以下省略

firewall-cmdコマンドで設定したものは、システム再起動もしくは--reloadなどをすると失われます。

永続的に設定する場合は、--permanentオプションを付けます。

sudo firewall-cmd --add-service=http --permanent

success

--permanentオプションを使って設定した場合は、即時反映ではないので前述の--reloadを使い設定を再読み込みします。

sudo firewall-cmd --reload

success

sudo firewall-cmd --list-service

# 再読み込みしても設定が残っています。
dhcpv6-client http

以上が今日の学習内容になります。

iptablesがやはり難所なきがする;

あすは、Ubuntu系のファイヤーウォール設定について勉強します。

それでは、また明日ありがとうございました。

この記事が気に入ったらサポートをしてみませんか?