LinuC LV2資格学習97日目
残るは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系のファイヤーウォール設定について勉強します。
それでは、また明日ありがとうございました。
この記事が気に入ったらサポートをしてみませんか?