Tạo tường lửa của riêng bạn với iptables bằng cách sử dụng tập lệnh đơn giản này

Tôi đã dành thời gian suy nghĩ về hai điều về iptables này: hầu hết những người tìm kiếm các hướng dẫn này là người mới bắt đầu và thứ hai, nhiều người đã tìm kiếm một thứ gì đó khá đơn giản và đã được trau chuốt.

Ví dụ này dành cho máy chủ web, nhưng bạn có thể dễ dàng thêm nhiều quy tắc hơn và điều chỉnh nó theo nhu cầu của mình.

Khi bạn thấy "x" thay đổi cho ip của bạn


#!/bin/bash

# Chúng tôi làm sạch bảng iptables -F iptables -X # Chúng tôi dọn dẹp bảng NAT iptables -t nat -F iptables -t nat -X # mangle cho những thứ như PPPoE, PPP và ATM iptables -t mangle -F iptables -t mangle -X # Chính sách Tôi nghĩ đây là cách tốt nhất cho người mới bắt đầu và # vẫn không tệ, tôi sẽ giải thích đầu ra (output) tất cả vì chúng là kết nối gửi đi #, đầu vào chúng tôi loại bỏ mọi thứ và không có máy chủ nào nên chuyển tiếp. iptables -P INPUT DROP iptables -P OUTPUT CHẤP NHẬN iptables -P FORWARD DROP #Intranet LAN intranet = eth0 #Extranet wan extranet = eth1 # Keep state. Mọi thứ đã được kết nối (thiết lập) được để lại như sau: iptables -A INPUT -m state --state ESTABLISHED, RELATED -j ACCEPT # Loop device. iptables -A INPUT -i lo -j CHẤP NHẬN # http, https, chúng tôi không chỉ định giao diện vì # chúng tôi muốn nó là tất cả các iptables -A INPUT -p tcp --dport 80 -j CHẤP NHẬN iptables -A INPUT -p tcp - dport 443 -j CHẤP NHẬN # ssh chỉ trong nội bộ và từ dải iptables này của ip -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 7659 -j CHẤP NHẬN # giám sát, chẳng hạn nếu chúng có zabbix hoặc một số khác dịch vụ snmp iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ mạng nội bộ --dport 10050 -j CHẤP NHẬN # icmp, ping tốt tùy thuộc vào bạn iptables -A INPUT -p icmp -s 192.168.xx / 24 - i $ intranet -j CHẤP NHẬN #mysql với postgres là cổng 5432 iptables -A INPUT -p tcp -s 192.168.xx --sport 3306 -i $ intranet -j CHẤP NHẬN #sendmail bueeeh nếu bạn muốn gửi một số thư #iptables -A OUTPUT -p tcp --dport 25 -j CHẤP NHẬN # Anti-SPOOFING 09/07/2014 # SERVER_IP = "190.xxx" # server IP - ip wan thực của máy chủ LAN_RANGE = "192.168.xx / 21" # dải mạng LAN mạng của bạn hoặc vlan # Ip của bạn mà không bao giờ được vào extranet,là sử dụng một chút logic # nếu chúng ta có giao diện WAN hoàn toàn, nó sẽ không bao giờ nhập lưu lượng kiểu # LAN qua giao diện đó SPOOF_IPS = "0.0.0.0/8 127.0.0.0/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0 / 16 "# Hành động mặc định - được thực hiện khi bất kỳ quy tắc nào khớp với ACTION =" DROP "# Gói có cùng ip của máy chủ của tôi thông qua wan iptables -A INPUT -i $ extranet -s $ SERVER_IP -j $ ACTION # iptables -A OUTPUT -o $ extranet -s $ SERVER_IP -j $ ACTION # Các gói với Phạm vi LAN cho wan, tôi đặt nó như thế này trong trường hợp bạn có # bất kỳ mạng cụ thể nào, nhưng điều này là thừa với quy tắc # sau bên trong vòng lặp " cho "iptables -A INPUT -i $ extranet -s $ LAN_RANGE -j $ ACTION iptables -A OUTPUT -o $ extranet -s $ LAN_RANGE -j $ ACTION ## Tất cả các mạng SPOOF không được wan cho phép ip trong $ SPOOF_IPS làm iptables -A INPUT -i $ extranet -s $ ip -j $ ACTION iptables -A OUTPUT -o $ extranet -s $ ip -j $ ACTION đã xong

Như mọi khi tôi chờ đợi ý kiến ​​của bạn, hãy theo dõi trên blog này, Cảm ơn bạn


12 bình luận, để lại của bạn

Để lại bình luận của bạn

địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu bằng *

*

*

  1. Chịu trách nhiệm về dữ liệu: Miguel Ángel Gatón
  2. Mục đích của dữ liệu: Kiểm soát SPAM, quản lý bình luận.
  3. Hợp pháp: Sự đồng ý của bạn
  4. Truyền thông dữ liệu: Dữ liệu sẽ không được thông báo cho các bên thứ ba trừ khi có nghĩa vụ pháp lý.
  5. Lưu trữ dữ liệu: Cơ sở dữ liệu do Occentus Networks (EU) lưu trữ
  6. Quyền: Bất cứ lúc nào bạn có thể giới hạn, khôi phục và xóa thông tin của mình.

  1.   HO2Gi dijo

    Nó giúp tôi tiếp tục học thêm một chút cảm ơn đã sao chép.

    1.    brodydalle dijo

      bạn được chào đón, rất vui được giúp đỡ

  2.   Xavier dijo

    Tôi thực sự xin lỗi, nhưng tôi có hai câu hỏi (và một câu hỏi như một món quà 😉):

    Bạn sẽ đến với cấu hình này để Apache chạy và đóng phần còn lại ngoại trừ SSH?

    # Chúng tôi làm sạch bàn
    iptables-F
    iptables-X

    Chúng tôi làm sạch NAT

    iptables -t nat -F
    iptables -t nat -X

    iptables -A INPUT -p tcp –dport 80 -j CHẤP NHẬN

    ssh chỉ nội bộ và từ dải ip này

    iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet –dport 7659 -j CHẤP NHẬN

    Câu hỏi thứ hai: 7659 có phải là cổng được sử dụng trong SSH trong ví dụ này không?

    Và thứ ba và cuối cùng: cấu hình này nên được lưu trong tệp nào?

    Cảm ơn bạn rất nhiều về hướng dẫn, thật tiếc khi bạn là một người mới và không thể tận dụng nó tốt.

    1.    brodydalle dijo

      đây là quy tắc bạn cần cho http từ apache
      iptables -A INPUT -p tcp –dport 80 -j CHẤP NHẬN

      nhưng bạn cũng cần khai báo các chính sách mặc định thả (nó nằm trong tập lệnh)
      iptables -P ĐẦU VÀO THẢ
      iptables -P OUTPUT CHẤP NHẬN
      iptables -P TIẾN LÊN THẢ

      và điều này bởi vì nếu bạn ở xa, nó sẽ ném bạn đi.
      iptables -A INPUT -m state –state ĐƯỢC THIẾT LẬP, LIÊN QUAN -j CHẤP NHẬN

      nếu 7659 là cổng của ssh đó trong ví dụ, theo mặc định, nó là 22, mặc dù tôi khuyên bạn nên thay đổi thành cổng "không nổi tiếng"
      Tôi không biết, như bạn muốn ... firewall.sh và bạn đặt nó trong rc.local (sh firewall.sh) để nó chạy tự động, tùy thuộc vào hệ điều hành bạn có, có những tệp mà bạn có thể đặt các quy tắc trực tiếp.

  3.   jge dijo

    Này, kịch bản của bạn rất hay, đang phân tích nó…. Bạn có biết làm cách nào tôi có thể từ chối tất cả các yêu cầu từ người dùng của tôi đến một trang web cụ thể không?…. nhưng trang web này có rất nhiều máy chủ….

    1.    brodydalle dijo

      Tôi đề xuất các tùy chọn khác:
      1) Bạn có thể tạo vùng giả trong dns của mình ...
      2) Bạn có thể đặt một proxy với acl
      cấm vận tội lỗi
      Đối với iptables, bạn có thể thích điều này ... nó không phải lúc nào cũng là lựa chọn tốt nhất (có nhiều cách hơn)
      iptables -A INPUT -s blog.desdelinux.ne -j THẢ
      iptables -A OUTPUT -d blog.desdelinux.net -j THẢ

      Hãy cho tôi biết nếu nó hoạt động

  4.   Xavier dijo

    Cảm ơn câu trả lời, mọi thứ đã sáng tỏ. Tôi đang hỏi về cổng vì tôi rất ngạc nhiên khi sử dụng 7659, vì các cổng riêng bắt đầu từ 49152 và nó có thể ảnh hưởng đến một số dịch vụ hoặc điều gì đó.
    Một lần nữa, cảm ơn vì mọi thứ, điều đó thật tuyệt!

    Chúc mừng.

  5.   sic dijo

    BrodyDalle, làm cách nào để tôi có thể liên lạc với bạn? Kịch bản của bạn rất thú vị.

  6.   Carlos dijo

    Dòng cuối cùng trước "iptables -A OUTPUT -o $ extranet -s $ ip -j $ ACTION" có để ngăn máy của bạn giả mạo không? Hoặc có thể là một số gói bị nhiễm độc xâm nhập và có thể rời đi với nguồn bị nhiễm độc đó và đó là lý do tại sao quy tắc cũng được bao gồm với OUTPUT?
    Cảm ơn bạn rất nhiều vì đã làm rõ !!!

  7.   fran dijo

    đây là tập lệnh iptables của riêng tôi, nó rất hoàn chỉnh:

    # franes.iptables.airy
    # doc.iptables.airoso: iptables cho kế thừa và cho nft
    #
    # cổng tường lửa
    ##############################
    #! / bin / bash
    #
    # xóa màn hình
    ################################# bắt đầu của /etc/f-iptables/default.cfg |||||
    trong sáng
    # để lại một dòng trống
    bỏ lỡ
    xuất có = »» không = »tắt tiếng vang»
    # biến bạn có thể thay đổi để cho phép truy cập
    ####################### biến để sửa đổi với $ yes hoặc $ no
    xuất hayexcepciones = »$ no»
    # có ngoại lệ: $ yes để cho phép các máy chủ đặc biệt và $ no để tắt
    xuất hayping = »$ no»
    # hayping: $ có để cho phép ping của bên thứ ba và $ không để từ chối
    xuất haylogserver = »$ no»
    # haylogeosserver: $ yes để có thể đăng nhập tcp $ no để không thể đăng nhập tcp
    ######
    ####################### biến để sửa đổi bằng cách thêm "," hoặc với phạm vi ":"
    xuất ngoại lệ = »baldras.wesnoth.org»
    # ngoại lệ cho phép một hoặc nhiều máy chủ từ tường lửa hoặc không có giá trị
    export logserver = discard, ipp, dict, ssh
    # cổng máy chủ tcp được ghi lại khi có gói tin
    export redserver = 0/0
    # redserver: mạng cho các cổng máy chủ thích hợp mạng cục bộ hoặc một số ips
    xuất khách hàng màu đỏ = 0/0
    # clientnet: mạng dành cho các cổng ứng dụng khách thích hợp cho tất cả các mạng
    export servidortcp = discard, ipp, dict, 6771
    # servidortcp: các cổng máy chủ tcp được chỉ định
    export serverudp = discard
    #udpserver: các cổng máy chủ udp được chỉ định
    export clientudp = domain, bootpc, bootps, ntp, 20000: 45000
    #udp client: các cổng udp client được chỉ định
    export clienttcp = domain, http, https, ipp, git, dict, 14999: 15002
    # tcp client: các cổng tcp client được chỉ định
    ############################### end of /etc/f-iptables/default.cfg |||||
    ################################# cuối biến cần sửa đổi
    tường lửa xuất = biến $ 1 = $ 2
    if ["$ variable" = "$ NULL"]; thì nguồn /etc/f-iptables/default.cfg;
    nguồn khác / etc / f-iptables / $ 2; fi
    ################################# hoặc sẽ ghi đè các biến bằng tệp .cfg
    ###################################################### ##############################################
    tường lửa xuất khẩu = $ 1 biến xuất khẩu = $ 2
    ############################################### biến hệ thống tự động
    if ["$ firewall" = "bị ngắt kết nối"]; sau đó dội lại FIREWALL DISCONNECTED;
    export activateerver = »$ no» activateclient = »$ no» wet = »$ no»;
    elif ["$ firewall" = "client"]; sau đó echo FIREWALL CLIENT;
    export activateerver = »$ no» activateclient = »» ướt = »$ no»;
    elif ["$ firewall" = "máy chủ"]; sau đó echo máy chủ FIREWALL;
    xuất khẩu kích hoạt = »» activateclient = »$ no» ướt = »$ no»;
    elif ["$ firewall" = "máy khách và máy chủ"]; sau đó echo FIREWALL CLIENT AND SERVER;
    xuất máy chủ kích hoạt = »»; xuất khẩu activateclient = »»; xuất ướt = »$ no»;
    elif ["$ firewall" = "permissive"]; sau đó echo PERMISSIVE FIREWALL;
    export activateerver = »$ no» activateclient = »$ no» wet = »»;
    khác
    $ check sudo echo iptables-inherit:
    $ kiểm tra sudo iptables-inherit -v -L INPUT
    $ check sudo iptables-inherit -v -L OUTPUT
    $ check sudo echo iptables-nft:
    $ kiểm tra sudo iptables-nft -v -L INPUT
    $ kiểm tra sudo iptables-nft -v -L OUTPUT
    echo _____parameters____ $ 0 $ 1 $ 2
    echo "ép kiểu không có tham số là liệt kê iptables."
    echo "Tham số đầu tiên (enable iptables): bị ngắt kết nối hoặc máy khách hoặc máy chủ hoặc máy khách và máy chủ hoặc cho phép."
    echo "Tham số thứ hai: (tùy chọn): tệp default.cfg chọn /etc/f-iptables/default.cfg"
    echo "Cài đặt biến:" $ (ls / etc / f-iptables /)
    thoát 0; fi
    ##################
    bỏ lỡ
    echo Ném $ 0 bị ngắt kết nối hoặc máy khách hoặc máy chủ hoặc máy khách và máy chủ hoặc dễ dãi hoặc biến hoặc không sử dụng tham số để liệt kê iptables.
    echo Tệp $ 0 chứa một số biến có thể chỉnh sửa bên trong.
    ################################## đã kích hoạt các biến trên
    ##################################
    echo thiết lập các biến iptables
    các biến kích hoạt echo
    bỏ lỡ
    ############################## quy tắc iptables
    echo Thiết lập iptables-inherit
    sudo / usr / sbin / iptables-inherit -t filter -F
    sudo / usr / sbin / iptables-inherit -t nat -F
    sudo / usr / sbin / iptables-inherit -t mangle -F
    sudo / usr / sbin / ip6tables-inherit -t filter -F
    sudo / usr / sbin / ip6tables-inherit -t nat -F
    sudo / usr / sbin / ip6tables-inherit -t mangle -F
    sudo / usr / sbin / ip6tables-inherit -A INPUT -j DROP
    sudo / usr / sbin / ip6tables-inherit -A OUTPUT -j DROP
    sudo / usr / sbin / ip6tables-inherit -A FORWARD -j DROP
    sudo / usr / sbin / iptables-inherit -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j CHẤP NHẬN> / dev / null
    $ haylogserver sudo / usr / sbin / iptables-inherit -A INPUT -p tcp -m multiport –dports $ logserver -j LOG> / dev / null
    $ có ngoại lệ sudo / usr / sbin / iptables-inherit -A INPUT -s $ exceptions -j CHẤP NHẬN> / dev / null
    $ kích hoạt máy chủ sudo / usr / sbin / iptables-inherit -A INPUT -p udp -m multiport –dports $ serverudp -s $ redserver -d $ redserver -j CHẤP NHẬN> / dev / null
    $ kích hoạt máy chủ sudo / usr / sbin / iptables-inherit -A INPUT -p tcp -m multiport –dports $ serverrtcp -s $ redserver -d $ redserver -j CHẤP NHẬN> / dev / null
    $ activateclient sudo / usr / sbin / iptables-inherit -A INPUT -p udp -m multiport –sports $ clientudp -m state –state đã thành lập -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-inherit -A INPUT -p tcp -m multiport –sports $ clienttcp -m state –state đã thành lập -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ hayping sudo / usr / sbin / iptables-inherit -A INPUT -p icmp –icmp-type echo-reply -j CHẤP NHẬN> / dev / null
    sudo / usr / sbin / iptables-inherit -A INPUT -j DROP> / dev / null
    sudo / usr / sbin / iptables-inherit -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j CHẤP NHẬN> / dev / null
    $ hayeexceptions sudo / usr / sbin / iptables-inherit -A OUTPUT -d $ exceptions -j CHẤP NHẬN> / dev / null
    $ kích hoạt máy chủ sudo / usr / sbin / iptables-inherit -A OUTPUT -p udp -m multiport –sports $ serverudp -s $ redserver -d $ redserver -j CHẤP NHẬN> / dev / null
    $ kích hoạt máy chủ sudo / usr / sbin / iptables-inherit -A OUTPUT -p tcp -m multiport –sports $ serverrtcp -s $ redserver -d $ redserver -j CHẤP NHẬN> / dev / null
    $ enable client sudo / usr / sbin / iptables-inherit -A OUTPUT -p udp -m multiport –dports $ clientudp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-inherit -A OUTPUT -p tcp -m multiport –dports $ clienttcp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ hayping sudo / usr / sbin / iptables-inherit -A OUTPUT -p icmp –icmp-type echo-request -j CHẤP NHẬN> / dev / null
    sudo / usr / sbin / iptables-inherit -A OUTPUT -j DROP
    sudo / usr / sbin / iptables-inherit -A FORWARD -j DROP
    echo iptables-inherit được bật
    bỏ lỡ
    echo Cài đặt iptables-nft
    sudo / usr / sbin / iptables-nft -t filter -F
    sudo / usr / sbin / iptables-nft -t nat -F
    sudo / usr / sbin / iptables-nft -t mangle -F
    sudo / usr / sbin / ip6tables-nft -t filter -F
    sudo / usr / sbin / ip6tables-nft -t nat -F
    sudo / usr / sbin / ip6tables-nft -t mangle -F
    sudo / usr / sbin / ip6tables-nft -A INPUT -j DROP
    sudo / usr / sbin / ip6tables-nft -A OUTPUT -j DROP
    sudo / usr / sbin / ip6tables-nft -A FORWARD -j DROP
    sudo / usr / sbin / iptables-nft -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j CHẤP NHẬN> / dev / null
    $ haylogserver sudo / usr / sbin / iptables-nft -A INPUT -p tcp -m multiport –dports $ logserver -j LOG> / dev / null
    $ hayeexceptions sudo / usr / sbin / iptables-nft -A INPUT -s $ exceptions -j CHẤP NHẬN> / dev / null
    $ kích hoạt máy chủ sudo / usr / sbin / iptables-nft -A INPUT -p udp -m multiport –dports $ serverudp -s $ redserver -d $ redserver -j CHẤP NHẬN> / dev / null
    $ kích hoạt máy chủ sudo / usr / sbin / iptables-nft -A INPUT -p tcp -m multiport –dports $ serverrtcp -s $ redserver -d $ redserver -j CHẤP NHẬN> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A INPUT -p udp -m multiport –sports $ clientudp -m state –state đã thành lập -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A INPUT -p tcp -m multiport –sports $ clienttcp -m state –state đã thành lập -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ hayping sudo / usr / sbin / iptables-nft -A INPUT -p icmp –icmp-type echo-reply -j CHẤP NHẬN> / dev / null
    sudo / usr / sbin / iptables-nft -A INPUT -j DROP> / dev / null
    sudo / usr / sbin / iptables-nft -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j CHẤP NHẬN> / dev / null
    $ có ngoại lệ sudo / usr / sbin / iptables-nft -A OUTPUT -d $ exceptions -j CHẤP NHẬN> / dev / null
    $ kích hoạt máy chủ sudo / usr / sbin / iptables-nft -A OUTPUT -p udp -m multiport –sports $ serverudp -s $ redserver -d $ redserver -j CHẤP NHẬN> / dev / null
    $ kích hoạt máy chủ sudo / usr / sbin / iptables-nft -A OUTPUT -p tcp -m multiport –sports $ serverrtcp -s $ redserver -d $ redserver -j CHẤP NHẬN> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A OUTPUT -p udp -m multiport –dports $ clientudp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A OUTPUT -p tcp -m multiport –dports $ clienttcp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ hayping sudo / usr / sbin / iptables-nft -A OUTPUT -p icmp –icmp-type echo-request -j CHẤP NHẬN> / dev / null
    sudo / usr / sbin / iptables-nft -A OUTPUT -j DROP
    sudo / usr / sbin / iptables-nft -A FORWARD -j DROP
    echo iptables-nft được bật
    bỏ lỡ
    $ wet sudo / usr / sbin / iptables-inherit -F> / dev / null
    $ wet sudo / usr / sbin / iptables-inherit -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j CHẤP NHẬN> / dev / null
    $ wet sudo / usr / sbin / iptables-inherit -A INPUT -m state –state đã thành lập -j ACCEPT> / dev / null
    $ wet sudo / usr / sbin / iptables-inherit -A INPUT -j DROP> / dev / null
    $ wet sudo / usr / sbin / iptables-inherit -A OUTPUT -j CHẤP NHẬN> / dev / null
    $ wet sudo / usr / sbin / iptables-inherit -A FORWARD -j DROP> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -F> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j CHẤP NHẬN> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A INPUT -m state –state đã thành lập -j ACCEPT> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A INPUT -j DROP> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A OUTPUT -j CHẤP NHẬN> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A FORWARD -j DROP> / dev / null
    #############################
    echo bạn đã ném $ 0 $ 1 $ 2
    # thoát khỏi tập lệnh
    thoát 0

  8.   louis duran dijo

    Tôi sẽ đặt quy tắc như thế nào nếu bức tường lửa này sử dụng nó cho cổng của tôi và có một con mực trong mạng LAN ???