防火牆配置詳解
目錄
實驗一、實現讓自己可以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地址!
知識共享,允許轉載!不足之處希望您能完善完善!