1. 程式人生 > >防火牆配置詳解

防火牆配置詳解

目錄

 

一、首先了解一下查詢防火牆的各種狀態的命令:

二、iptables命令

實驗一、實現讓自己可以ping別人,而別人卻無法ping自己。

實驗二、網路防火牆

實驗三、實現日誌記錄功能


一、首先了解一下查詢防火牆的各種狀態的命令:
 

1、檢視防火牆狀態:

[[email protected] ~]# systemctl status firewalld.service

2、開啟防火牆

[[email protected] ~]# systemctl start firewalld.service

3、關閉防火牆:

[[email protected] ~]# systemctl stop firewalld.service

4、禁止firewall開機自啟動:

[[email protected] ~]# systemctl disable firewalld.service
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

5、在開機時自動啟用:

[[email protected] ~]# systemctl enable firewalld.service
Created symlink from /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service to /usr/lib/systemd/system/firewalld.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/firewalld.service to /usr/lib/systemd/system/firewalld.service.

6、檢視服務是否開機自啟動:

[[email protected] ~]# systemctl is-enabled firewalld.service 
enabled

7、檢視已經啟用的服務列表:

[[email protected] ~]# systemctl list-unit-files | grep fire
firewalld.service                             enabled 

二、iptables命令

1、列出防火牆規則:iptables -L

2、列出防火牆規則,不進行域名解析:iptables -Ln

3、列出防火牆規則的詳細資訊:iptables -Lnv

4、列出防火牆規則對應是第幾條:iptables -nL --line-numbers

5、刪除INPUT表的第二條規則:iptables -D INPUT 2

6、清空防火牆:iptables -F。清空所有策略,但不會影響鏈上的預設策略

7、替換INPUT表第100條策略:iptables -D INPUT -s 192.168.153.1 -j REJECT

8、設定鏈策略:-P,DROP  ,也可以設定為ACCEPT,不能為REJECT。不建議改這個設定!

9、將當前防火牆策略儲存至iptables檔案:iptables-save > iptables

10、將儲存的防火牆檔案iptables新增至策略:iptables-restore < iptables

三、案例

實驗一、實現讓自己可以ping別人,而別人卻無法ping自己。

主機一:

IP172.18.254.131

(在給主機一新增策略前,先試試主機二能不能ping通主機一,)

做實驗前我們最好清空一下防火牆,以免其相互影響(iptables -F)。

新增防火牆策略:

[[email protected] ~]# iptables -A INPUT -p icmp -j REJECT
[[email protected] ~]# iptables -A OUTPUT -p icmp -j REJECT
[[email protected] ~]# iptables -I OUTPUT 1 -p icmp --icmp-type 8 -j ACCEPT
[[email protected] ~]# iptables -I INPUT 1 -p icmp --icmp-type 0 -j ACCEPT

這裡我們用到了icmp模組。icmp說直白一點,就是我們呼叫ping請求用到的模組。icmp-type 8  請求,icmp-type 0  迴應。

簡單解釋一下這幾行程式碼:

(1)拒絕INPUT的ping請求

(2)拒絕OUTPUT的ping請求

(3)插入策略為第一條,允許本機發送ping的請求報文。

(4)插入策略為第一條,允許接收回應報文。

也就是說,我傳送的請求報文,別的主機給我發回應報文,我接收;

別人給我發的請求報文,我直接拒絕接收,拒絕迴應。

主機二:

IP:172.18.252.162

[[email protected] ~]# ping 172.18.254.131
PING 172.18.254.131 (172.18.254.131) 56(84) bytes of data.

他會卡到這裡不動。這是因為我們把報文發給主機一,主機一沒有接受,沒有迴應報文,這樣我們的主機二會一直卡著,直到請求超時才自動結束。

用主機二ping主機一,自然是沒有一點兒問題。

實驗二、網路防火牆

實驗目的:實現內網可以ping外網,外網不可以ping內網。

實驗環境:三臺機器:一臺作為防火牆(firewall),一臺作為我們的內網機器(in),一臺作為我們的外網機器(out)。防火牆機器兩個網絡卡,一個連線內網,一個連線外網;內網機器一個網絡卡,外網機器一個網絡卡。最好自己把網絡卡設定成同一個網段,注意掩碼一定要相匹配,不然會影響實驗。

firewall:172.18.252.162/16  192.168.32.222/24
in  192.168.32.216/24   out   172.18.254.66/16

實驗前,請先清理一下防火牆,以確保本實驗不受其他條件的影響。

一、在firewall機器上開啟IP轉發功能

這裡有三種方法提供給大家:

1、臨時開啟IP轉發,重啟後失效。

sysctl -w net.ipv4.ip_forward=1

2、直接寫/proc檔案系統 

echo 1 > /proc/sys/net/ipv4/ip_forward

3、編寫配置檔案

[[email protected] ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1

二、在in機器上新增路由

[[email protected] ~]# route add default gw 192.168.32.0/24

三、在out機器新增路由

[[email protected] ~]# route add default gw 172.18.0.0/16

四、在防火牆機器新增策略

這裡又有三種方法:

1、

[[email protected] ~]# iptables -A FORWARD -j REJECT
[[email protected] ~]# iptables -I FORWARD -s 192.168.32.216/24 -d 172.18.254.66/16 -p icmp --icmp-type 8 -j ACCEPT
[[email protected] ~]# iptables -I FORWARD -s 172.18.254.66/16 -d 192.168.32.222/24 -p icmp --icmp-type 0 -j ACCEPT​

2、

[[email protected] ~]# iptables -A FORWARD -j REJECT
[[email protected] ~]# iptables -I FORWARD -s 192.168.32.216/24 -d 172.18.254.66/16 -p icmp --icmp-type 8 -j ACCEPT
[[email protected] ~]#  iptables -I FORWARD -m state --state ESTABLISHED -j ACCEPT​

3、

[[email protected] ~]# iptables -A FORWARD -j REJECT
[[email protected] ~]#  iptables -I FORWARD -s 192.168.32.216/24 -d 172.18.0.0/16 -p icmp -m state --state NEW -j ACCEPT
[[email protected] ~]#  iptables -I FORWARD -m state --state ESTABLISHED -j ACCEPT​

五,測試

在內網主機ping外網主機,在外網主機ping內網主機。

實驗三、實現日誌記錄功能

命令引數很簡單:-j LOG

實驗要求:兩臺主機

一、主機一

[[email protected] ~]# iptables -F
[[email protected] ~]# setenforce 0
setenforce: SELinux is disabled
[[email protected] ~]# iptables -I INPUT -p tcp --dport 80 -j LOG --log-prefix "NEW CONNECTION:"
[roo[email protected] ~]# systemctl start httpd
[[email protected] ~]# tailf /var/log/messages

 清空防火牆,關閉selinux,為80埠新增一條策略:啟用LOG功能,字首是NEW CONNECTION。啟動httpd服務,動態檢視日誌檔案

 主機二、

訪問主機一的80埠

[[email protected] ~]# curl 172.18.252.162

這時候我們再去看主機一

[[email protected] ~]# tailf /var/log/messages
Oct 26 22:40:01 localhost systemd: Started Session 18 of user root.
Oct 26 22:40:01 localhost systemd: Starting Session 18 of user root.
Oct 26 22:50:01 localhost systemd: Started Session 19 of user root.
Oct 26 22:50:01 localhost systemd: Starting Session 19 of user root.
Oct 26 22:56:30 localhost kernel: NEW CONNECTION:IN=ens34 OUT= MAC=00:0c:29:4e:8d:a5:00:0c:29:54:fb:bc:08:00 SRC=192.168.32.216 DST=172.18.252.162 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=40342 DF PROTO=TCP SPT=51866 DPT=80 WINDOW=29200 RES=0x00 SYN URGP=0 
Oct 26 22:56:30 localhost kernel: NEW CONNECTION:IN=ens34 OUT= MAC=00:0c:29:4e:8d:a5:00:0c:29:54:fb:bc:08:00 SRC=192.168.32.216 DST=172.18.252.162 LEN=52 TOS=0x00 PREC=0x00 TTL=64 ID=40343 DF PROTO=TCP SPT=51866 DPT=80 WINDOW=229 RES=0x00 ACK URGP=0 

 看到了吧,日誌已經記錄在案,並且已經加上了字首。

實驗環境:兩臺機器,一臺作為防火牆(兩個網絡卡),一臺做內網機器(一個網絡卡)。

firewall:172.18.252.162/16  192.168.32.222/24
in  192.168.32.216/24

一、在防火牆機器上操作

[[email protected] ~]# iptables -F
[[email protected] ~]# iptables -t nat -F
[[email protected] ~]#  iptables -t nat -A POSTROUTING -s 192.168.32.0/24 -j SNAT --to-source 172.18.252.162

二、在內網機器測試

[[email protected] ~]# ping 119.75.217.109
PING 119.75.217.109 (119.75.217.109) 56(84) bytes of data.
64 bytes from 119.75.217.109: icmp_seq=1 ttl=53 time=22.1 ms

這裡我們給了一個百度的IP地址:119.75.217.109

三、附加操作

我們ping通了百度,但是是以誰的身份呢?為了加深理解,我們再新增一臺試驗機,這一次我們的網絡卡設定為172.18.254.66/24

拿我們的內網機器ping一下我們新增的試驗機:

[[email protected] ~]# ping 172.18.254.66
PING 172.18.254.66 (172.18.254.66) 56(84) bytes of data.
64 bytes from 172.18.254.66: icmp_seq=1 ttl=63 time=0.383 ms
64 bytes from 172.18.254.66: icmp_seq=2 ttl=63 time=0.359 ms

就這麼讓他ping著。這時候,我們再去我們新增的這臺試驗機上操作:

[[email protected] ~]# tcpdump -i ens33 -nn icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
15:18:06.498058 IP 172.18.252.162 > 172.18.254.66: ICMP echo request, id 6142, seq 1, length 64
15:18:06.498140 IP 172.18.254.66 > 172.18.252.162: ICMP echo reply, id 6142, seq 1, length 64

看到了吧,他顯示的地址正是我們防火牆機器的IP,而不是我們內部網路的IP地址!

 

知識共享,允許轉載!不足之處希望您能完善完善!